<?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);
	        $newCourse->add_class('m-l-2');
            $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 settings gewählt "aktuelles Semester aufklappen"
    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);
        }
    }

    if($openNewestSemester) {
        $PAGE->requires->js_call_amd('local_hsh_boostnavigation/collapse', 'openSemester', [$newestNode]);
    }
}