Skip to content
Snippets Groups Projects
Select Git revision
  • 79e62e66c7dc6db8a3d43f25d0c7cac5da99cbfe
  • master default protected
2 results

lib.php

Blame
  • 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]);
        }
    }