Skip to content
Snippets Groups Projects
Commit b3d10081 authored by Julian Wendling's avatar Julian Wendling
Browse files

ADD Arrays for semester containing their courses, optimize sorting of...

ADD Arrays for semester containing their courses, optimize sorting of semesters and courses, internal changes to work with new changes
parent 2021e4e7
Branches
No related tags found
No related merge requests found
...@@ -45,89 +45,54 @@ function local_sembasednav_extend_navigation(global_navigation $navigation) ...@@ -45,89 +45,54 @@ function local_sembasednav_extend_navigation(global_navigation $navigation)
$specialNodesList = []; $specialNodesList = [];
$mySemesters = []; $mySemesters = [];
// Sort semester depending on setting // Sorts all courses basend on the shorttext
if ($semesterDescending == 0) { usort($courses, function ($a, $b) {
// Descending $aId = $a->shorttext;
usort($courses, function ($a, $b) use ($semFieldName) { $bId = $b->shorttext;
$aId = get_semester_id((int) $a->key, $semFieldName);
$bId = get_semester_id((int) $b->key, $semFieldName);
return strcasecmp($bId, $aId);
});
} else {
// Ascending
usort($courses, function ($a, $b) use ($semFieldName) {
$aId = get_semester_id((int) $a->key, $semFieldName);
$bId = get_semester_id((int) $b->key, $semFieldName);
return strcasecmp($aId, $bId); return strcasecmp($aId, $bId);
}); });
}
// Assign all modules and semesters // Creates a new array with semesters that contain their courses
foreach ($courses as $c) { foreach ($courses as $c) {
$semesterName = get_semester_name($c->key, $semFieldName); $c->semesterId = get_semester_id((int) $c->key, $semFieldName);
$c->semesterName = get_semester_name((int) $c->key, $semFieldName);
$courseName = empty($CFG->navshowfullcoursenames) ? $c->shorttext : $c->title; $courseName = empty($CFG->navshowfullcoursenames) ? $c->shorttext : $c->title;
if (in_array($semesterName, $specialNodes, true)) { if ($c->semesterId == 1) {
$specialNodesList[$semesterName][] = $courseName; $specialNodesList[$c->semesterId]["name"] = $c->semesterName;
$specialNodesList[$c->semesterId]["courses"][] = $c;
$myCoursesNode->children->remove($c->key);
} else { } else {
if (count($mySemesters) >= $maxSemesterNodes) { $mySemesters[$c->semesterId]["name"] = $c->semesterName;
continue; // TODO: Why not a break? $mySemesters[$c->semesterId]["courses"][] = $c;
$c->showinflatnavigation = false;
} }
$mySemesters[$semesterName][] = $courseName;
} }
// Sort semesters depending on setting
if ($semesterDescending == 1) {
// Descending
ksort($mySemesters);
} else {
// Ascending
krsort($mySemesters);
} }
if ($specialNodesFirst == 0) if ($specialNodesFirst == 0)
add_semester_nodes($specialNodesList, $myCoursesNode); add_semester_nodes($specialNodesList, $myCoursesNode);
// Add all semester nodes // Add all semester nodes
add_semester_nodes($mySemesters, $myCoursesNode); add_semester_nodes(array_slice($mySemesters, 0, $maxSemesterNodes), $myCoursesNode);
if ($openFirstSemester)
open_semester_node(array_keys($mySemesters)[0] , $myCoursesNode);
// Add all special nodes // Add all special nodes
if ($specialNodesFirst == 1) if ($specialNodesFirst == 1)
add_semester_nodes($specialNodesList, $myCoursesNode); add_semester_nodes($specialNodesList, $myCoursesNode);
// Sorts course node alphabetically if ($openFirstSemester) {
usort($courses, function ($a, $b) use ($semFieldName) { $key = create_node_key($mySemesters[array_key_first($mySemesters)]["name"]);
$aId = $a->shorttext; $semesterNode = $myCoursesNode->find($key, global_navigation::NODETYPE_BRANCH);
$bId = $b->shorttext; open_semester_node($semesterNode, $myCoursesNode);
return strcasecmp($aId, $bId);
});
// Creates all course nodes and assigns them to their semester node
foreach ($courses as $c) {
$semesterName = get_semester_name((int) $c->key, $semFieldName);
$semesterKey = create_node_key($semesterName);
$semesterNode = $navigation->find($semesterKey, null);
// Can't find semester of current course
$isSemester = $c->type == 1;
if (!$semesterNode || $isSemester) {
continue;
}
$myCoursesNode->children->remove($c->key);
$c->showinflatnavigation = true;
$c->add_class('p-l-3');
$c->set_parent($semesterNode);
if (!$semesterNode->forceopen)
$c->add_class('localboostnavigationcollapsedchild');
$semesterNode->add_node($c);
// Open semester node of active course
if ($c->isactive) {
open_semester_node($semesterNode->text , $myCoursesNode);
}
} }
} }
...@@ -146,13 +111,31 @@ function add_semester_nodes(array $semesterList, $parentNode) ...@@ -146,13 +111,31 @@ function add_semester_nodes(array $semesterList, $parentNode)
$collapsenodesforjs = []; $collapsenodesforjs = [];
foreach ($semesterList as $key => $value) { foreach ($semesterList as $key => $value) {
$semesterNode = create_semester_node($key); $semesterNode = create_semester_node($value["name"]);
if (!in_array($semesterNode->key, $collapsenodesforjs)) { if (!in_array($semesterNode->key, $collapsenodesforjs)) {
$collapsenodesforjs[] = $semesterNode->key; $collapsenodesforjs[] = $semesterNode->key;
} }
$parentNode->add_node($semesterNode); $parentNode->add_node($semesterNode);
// Assign courses to their semester in the navigation
foreach ($value["courses"] as $c) {
$parentNode->children->remove($c->key);
$c->showinflatnavigation = true;
$c->add_class('p-l-3');
$c->set_parent($semesterNode);
if (!$semesterNode->forceopen)
$c->add_class('localboostnavigationcollapsedchild');
$semesterNode->add_node($c);
// Open semester node of active course
if ($c->isactive) {
open_semester_node($semesterNode, $parentNode);
}
}
} }
// Apply collapse navigation js to every semester // Apply collapse navigation js to every semester
...@@ -167,22 +150,19 @@ function add_semester_nodes(array $semesterList, $parentNode) ...@@ -167,22 +150,19 @@ function add_semester_nodes(array $semesterList, $parentNode)
} }
/** /**
* @param $semesterKey * @param $semesterNode
* @param $myCourseNode * @param $myCourseNode
*/ */
function open_semester_node($semesterKey, $myCourseNode) function open_semester_node($semesterNode, $myCourseNode)
{ {
if (empty($semesterKey)) if (empty($semesterNode))
return; return;
$key = create_node_key($semesterKey);
$semesterNode = $myCourseNode->find($key, global_navigation::NODETYPE_BRANCH);
$semesterNode->forceopen = true; $semesterNode->forceopen = true;
$semesterNode->remove_class('localboostnavigationcollapsedparent'); $semesterNode->remove_class('localboostnavigationcollapsedparent');
foreach ($semesterNode->get_children_key_list() as $c) { foreach ($semesterNode->get_children_key_list() as $key) {
$node = $myCourseNode->find($c, null); $node = $myCourseNode->find($key, null);
$node->remove_class('localboostnavigationcollapsedchild'); $node->remove_class('localboostnavigationcollapsedchild');
} }
} }
......
...@@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); ...@@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die();
$plugin->component = 'local_sembasednav'; $plugin->component = 'local_sembasednav';
$plugin->release = '0.1.0'; $plugin->release = '0.1.0';
$plugin->version = 2020060301; $plugin->version = 2020060302;
$plugin->requires = 2019052000; $plugin->requires = 2019052000;
$plugin->maturity = MATURITY_ALPHA; $plugin->maturity = MATURITY_ALPHA;
$plugin->dependencies = [ $plugin->dependencies = [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment