<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Local plugin "Hsh modified Boost course overview on campus" * Original: local_boostnavigation * * @package local_hsh_boostnavigation * @copyright 2017 Alexander Bias, Ulm University <alexander.bias@uni-ulm.de>, Edited by Tobias Baden, Hochschule Hannover * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ 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; $todaysSemesterNodeKey = getFirstDayOfSem(strtotime("now")); $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)) { usort($courses, function($a, $b){ return strcasecmp($a->shortname, $b->shortname); }); 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) && isset($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); } // 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 if(isset($semesterList[0])) { 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; 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', [$todaysSemesterNodeKey]); } }