Select Git revision
-
Tobias Baden authored
Only open the Current Semester and the Semester from the selected Course automatically
Tobias Baden authoredOnly open the Current Semester and the Semester from the selected Course automatically
lib.php 5.75 KiB
<?php
include_once($CFG->dirroot . '/course/semester_date.php');
include_once($CFG->dirroot . '/local/hsh_boostnavigation/locallib.php');
function local_hsh_boostnavigation_extend_navigation(global_navigation $navigation) {
global $CFG, $PAGE;
$collapsenodesforjs[] = '';
$semesterList[] = '';
$semesterKeys[] = '';
// Settings übernahme
$maxSemesters = get_config('local_hsh_boostnavigation', 'settings_nodescount');
$showUnabhaengigeKurse = get_config('local_hsh_boostnavigation', 'settings_showunabhaengignode');
$semesterOrder = get_config('local_hsh_boostnavigation', 'settings_semesterorder');
$unabhaengigPosition = get_config('local_hsh_boostnavigation', 'settings_unabhaengigposition');
$openNewestSemester = get_config('local_hsh_boostnavigation', 'settings_opennewestsemester');
$customnav = $navigation->find('mycourses', global_navigation::TYPE_ROOTNODE);
$allchildrennodes = $customnav->get_children_key_list();
// Alle Unterkurse von "Meine Kurse" durchgehen und diese nicht mehr Anzeigen
foreach ($allchildrennodes as $cn) {
// Hide courses -> remove them
$customnav->find($cn, null)->showinflatnavigation = false;
}
// "Meine Kurse" zur Liste der einzuklappenden Nodes hinzufügen
$collapsenodesforjs[] = $customnav->key;
// Alle Kurse abfragen, in die die Person eingeschrieben ist
$courses = enrol_get_my_courses('*', '');
if (!empty($courses)) {
foreach ($courses as $course) {
$semester = getSemesterNodeHsH($customnav, $course, $semesterList,$semesterKeys);
$semester->showinflatnavigation = true;
if (!in_array($semester->key, $collapsenodesforjs)) {
$collapsenodesforjs[] = $semester->key;
}
$coursecontext = context_course::instance($course->id);
$shortname = format_string($course->shortname, true, array('context' => $coursecontext));
$fullname = format_string($course->fullname, true, array('context' => $coursecontext));
$coursename = empty($CFG->navshowfullcoursenames) ? $shortname : $fullname;
$string = $coursename;
$newCourse = navigation_node::create($string, new moodle_url('/course/view.php', array('id' => $course->id)), global_navigation::TYPE_COURSE, null, $string, new pix_icon('i/course', 'grades'));
$newCourse->add_class('m-l-3');
$newCourse->showinflatnavigation = true;
$semester->add_node($newCourse);
}
}
if(!empty($semesterList)) {
array_shift($semesterList);
array_shift($semesterKeys);
// Semesterlise sortieren, so dass "no-semester" unten ist
arsort($semesterList);
$unabhaengig = array_pop($semesterList);
// Semesterliste sortieren (Neuestes Semeste oben)
if($semesterOrder == 0) { // Wenn die Order auf 1 ist -> Neueste Unten
rsort($semesterList);
$newestNode = $semesterList[0];
}
// Position der Semesterunabhängigen Kurse - Oberhalb der Semester
if(!$unabhaengigPosition) {
if($showUnabhaengigeKurse && $unabhaengig) {
$customnav->add_node($unabhaengig);
}
}
// Gewünsche Anzhal anzuzeigender Semester aus dem Array lesen und innerhalb der Navigation darstellen
if($semesterOrder == 0) {
// Neueste Oben
$newestNode = $semesterList[0]->key;
for ($i = 0; $i < $maxSemesters; $i++) {
if($i < sizeof($semesterList) && $semesterList[$i]) {
$customnav->add_node($semesterList[$i]);
} else {
break;
}
}
} else {
// Neueste Unten
$count = sizeof($semesterList) - $maxSemesters;
$newestNode = $semesterList[sizeof($semesterList)-1]->key;
if ($count < 0) {
$count = 0;
}
for($j = $count; $j < sizeof($semesterList); $j++) {
if($j < sizeof($semesterList) && $semesterList[$j]) {
$customnav->add_node($semesterList[$j]);
} else {
break;
}
}
}
// Position der Semesterunabhängigen Kurse - Unterhalb der Semester
if($unabhaengigPosition) {
if($showUnabhaengigeKurse && $unabhaengig) {
$customnav->add_node($unabhaengig);
}
}
}
if (!empty($collapsenodesforjs)) {
// Add JavaScript for collapsing nodes to the page.
// JavaScript-Code genommen und angepasst von local/boostnavigation/amd/src
$PAGE->requires->js_call_amd('local_hsh_boostnavigation/collapse', 'init', [$collapsenodesforjs]);
foreach ($collapsenodesforjs as $node) {
user_preference_allow_ajax_update('local_hsh_boostnavigation-collapse_'.$node.'_node', PARAM_BOOL);
}
}
/*
Not needed if only reopen the newest semester
// Durch alle Semester durchlaufen und die user preference checken
if(!empty($semesterList)) {
array_push($semesterList, $unabhaengig);
foreach ($semesterList as $semLst) {
${"userpref_".$semLst->key} = get_user_preferences('local_hsh_boostnavigation-collapse_'.$semLst->key .'_node', 0);
if (${"userpref_".$semLst->key} == 1) {
$PAGE->requires->js_call_amd('local_hsh_boostnavigation/collapse', 'openSemester', [$semLst->key]);
} else {
// Semester war vorher geschlossen
}
}
}
*/
// if settings gewählt "aktuelles Semester aufklappen"
if($openNewestSemester) {
$PAGE->requires->js_call_amd('local_hsh_boostnavigation/collapse', 'openSemester', [$newestNode]);
}
}