Select Git revision
-
Tobias Baden authored
- Added a function to automatically open the current semester - Removed old "newestSemester" code - Updated version number and release
Tobias Baden authored- Added a function to automatically open the current semester - Removed old "newestSemester" code - Updated version number and release
lib.php 6.89 KiB
<?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]);
}
}