diff --git a/lib.php b/lib.php index 0dd94d3a6a50bba73e0d42e1278c023cdc599658..f34f2791d6e34bb07597c2058b27b318ff2f4e06 100644 --- a/lib.php +++ b/lib.php @@ -42,7 +42,7 @@ function local_sembasednav_extend_navigation(global_navigation $navigation) $courses = []; } - // Hides courses that are shown by default + // Removes courses that are shown by default foreach ($myCoursesChildNodes as $cn) { $myCoursesNode->find($cn, null)->showinflatnavigation = false; } @@ -95,7 +95,7 @@ function local_sembasednav_extend_navigation(global_navigation $navigation) add_semester_nodes($mySemesters, $myCoursesNode); if ($openFirstSemester) - open_first_semester_node($mySemesters, $myCoursesNode); + open_semester_node(array_keys($mySemesters)[0] , $myCoursesNode); // Add all special nodes if ($specialNodesFirst == 1) @@ -115,6 +115,7 @@ function local_sembasednav_extend_navigation(global_navigation $navigation) $semesterKey = create_node_key($semesterName); $semesterNode = $navigation->find($semesterKey, null); + // Can't find semester of current course if (!$semesterNode) { continue; } @@ -123,16 +124,20 @@ function local_sembasednav_extend_navigation(global_navigation $navigation) $courseKey = create_node_key($courseName); $courseNode = navigation_node::create($courseName, new moodle_url('/course/view.php', array('id' => $c->id)), global_navigation::TYPE_COURSE, $courseName, $courseKey, new pix_icon('i/course', 'grades')); + $courseNode->showinflatnavigation = true; $courseNode->add_class('p-l-3'); - $courseNode->add_class('localboostnavigationcollapsiblechild'); + if (!$semesterNode->forceopen) $courseNode->add_class('localboostnavigationcollapsedchild'); $semesterNode->add_node($courseNode); - } - + // Open semester node of active course + if ($courseNode->isactive) { + open_semester_node($semesterNode->text , $myCoursesNode); + } + } } /** @@ -159,7 +164,7 @@ function add_semester_nodes(array $semesterList, $parentNode) $parentNode->add_node($semesterNode); } - // Apply collapse navigation js to every semeseter + // Apply collapse navigation js to every semester if (!empty($collapsenodesforjs)) { $PAGE->requires->js_call_amd('local_boostnavigation/collapsenavdrawernodes', 'init', [$collapsenodesforjs, []]); @@ -171,27 +176,28 @@ function add_semester_nodes(array $semesterList, $parentNode) } /** - * @param array $semesterList + * @param $semesterKey * @param $myCourseNode */ -function open_first_semester_node(array $semesterList, $myCourseNode) +function open_semester_node($semesterKey, $myCourseNode) { - $semesterKeys = array_keys($semesterList); - - if (empty($semesterKeys[0])) + if (empty($semesterKey)) return; - $firstSemesterKey = create_node_key($semesterKeys[0]); - - $semesterNode = $myCourseNode->find($firstSemesterKey, global_navigation::TYPE_CUSTOM); + $key = create_node_key($semesterKey); + $semesterNode = $myCourseNode->find($key, global_navigation::NODETYPE_BRANCH); $semesterNode->forceopen = true; - $semesterNode->remove_class('localboostnavigationcollapsedparent'); + + foreach ($semesterNode->get_children_key_list() as $c) { + $node = $myCourseNode->find($c, null); + $node->remove_class('localboostnavigationcollapsedchild'); + } } /** - * Creates a semester node with needed cs classes for collapse navigation js + * Creates a semester node with needed css classes for collapse navigation js * @param string $semesterName * @return navigation_node * @throws coding_exception @@ -205,12 +211,11 @@ function create_semester_node(string $semesterName) $semesterKey = create_node_key($semesterName); - $semesterNode = navigation_node::create($semesterName, new moodle_url('/course/view.php', null), global_navigation::TYPE_CUSTOM, null, $semesterKey, null); + $semesterNode = navigation_node::create($semesterName, new moodle_url('/course/view.php', null), global_navigation::NODETYPE_BRANCH, null, $semesterKey, null); $semesterNode->showinflatnavigation = true; $semesterNode->add_class('localboostnavigationcollapsibleparent'); $semesterNode->add_class('localboostnavigationcollapsedparent'); - $semesterNode->add_class('localboostnavigationcollapsiblechild'); if ($userprefmycoursesnode == 1) { $semesterNode->add_class('localboostnavigationcollapsedchild');