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

REMOVE DB requests and enrol_get_my_courses method usage

parent b6016774
No related branches found
No related tags found
No related merge requests found
......@@ -22,10 +22,11 @@
function local_sembasednav_extend_navigation(global_navigation $navigation)
{
global $PAGE, $CFG;
global $PAGE, $CFG, $DB;
$semFieldName = $DB->get_record('customfield_field', array('type' => 'semester'), '*', MUST_EXIST);
$myCoursesNode = $navigation->find('mycourses', global_navigation::TYPE_ROOTNODE);
$myCoursesChildNodes = $myCoursesNode->get_children_key_list();
$maxSemesterNodes = get_config('sembasednav', 'setting_nodescount');
$openFirstSemester = get_config('sembasednav', 'setting_openfirstnode');
......@@ -35,17 +36,8 @@ function local_sembasednav_extend_navigation(global_navigation $navigation)
// Register JS to close all child nodes from root node (mycourse)
$PAGE->requires->js_call_amd('local_sembasednav/sembasednav', 'closeAllChildNodes', [$myCoursesNode->key]);
try {
$courses = enrol_get_my_courses();
} catch (Exception $e) {
echo $e->getMessage();
$courses = [];
}
// Removes courses that are shown by default
foreach ($myCoursesChildNodes as $cn) {
$myCoursesNode->find($cn, null)->showinflatnavigation = false;
}
// type() needed to get an array for usort - navigation_node_collection by itself is not sortable
$courses = $myCoursesNode->children->type(20);
// Nodes that are excluded from max semester count - will always be shown
$noSemesterAssignedName = get_config('sembasednav', 'setting_nosemestername');
......@@ -56,17 +48,17 @@ function local_sembasednav_extend_navigation(global_navigation $navigation)
// Sort semester depending on setting
if ($semesterDescending == 0) {
// Descending
usort($courses, function ($a, $b) {
$aId = get_semester_id($a->id);
$bId = get_semester_id($b->id);
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($bId, $aId);
});
} else {
// Ascending
usort($courses, function ($a, $b) {
$aId = get_semester_id($a->id);
$bId = get_semester_id($b->id);
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);
});
......@@ -74,15 +66,15 @@ function local_sembasednav_extend_navigation(global_navigation $navigation)
// Assign all modules and semesters
foreach ($courses as $c) {
$semesterName = get_semester_name($c->id);
$semesterName = get_semester_name($c->key, $semFieldName);
$courseName = empty($CFG->navshowfullcoursenames) ? $c->shortname : $c->fullname;
$courseName = empty($CFG->navshowfullcoursenames) ? $c->shorttext : $c->title;
if (in_array($semesterName, $specialNodes, true)) {
$specialNodesList[$semesterName][] = $courseName;
} else {
if (count($mySemesters) >= $maxSemesterNodes) {
continue;
continue; // TODO: Why not a break?
}
$mySemesters[$semesterName][] = $courseName;
}
......@@ -102,39 +94,38 @@ function local_sembasednav_extend_navigation(global_navigation $navigation)
add_semester_nodes($specialNodesList, $myCoursesNode);
// Sorts course node alphabetically
usort($courses, function ($a, $b) {
$aId = $a->shortname;
$bId = $b->shortname;
usort($courses, function ($a, $b) use ($semFieldName) {
$aId = $a->shorttext;
$bId = $b->shorttext;
return strcasecmp($aId, $bId);
});
// Creates all course nodes and assigns them to their semester node
foreach ($courses as $c) {
$semesterName = get_semester_name($c->id);
$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
if (!$semesterNode) {
$isSemester = $c->type == 1;
if (!$semesterNode || $isSemester) {
continue;
}
$courseName = empty($CFG->navshowfullcoursenames) ? $c->shortname : $c->fullname;
$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');
$myCoursesNode->children->remove($c->key);
$c->showinflatnavigation = true;
$c->add_class('p-l-3');
$c->set_parent($semesterNode);
if (!$semesterNode->forceopen)
$courseNode->add_class('localboostnavigationcollapsedchild');
$c->add_class('localboostnavigationcollapsedchild');
$semesterNode->add_node($courseNode);
$semesterNode->add_node($c);
// Open semester node of active course
if ($courseNode->isactive) {
if ($c->isactive) {
open_semester_node($semesterNode->text , $myCoursesNode);
}
}
......@@ -240,26 +231,18 @@ function create_node_key(string $semesterName)
* @param int $id
* @return string
*/
function get_semester_name(int $id)
function get_semester_name(int $id, $semFieldName)
{
global $DB;
$noSemesterAssigned = get_config('sembasednav', 'setting_nosemestername');
$semesterName = '';
try {
$semFieldName = $DB->get_record('customfield_field', array('type' => 'semester'), '*', MUST_EXIST);
} catch (Exception $e) {
return $noSemesterAssigned;
}
try {
$allCustomFields = get_course_metadata($id);
$semesterField = $allCustomFields[$semFieldName->shortname];
$semesterValue = preg_replace('/[^0-9]/', '', $semesterField); // extract semester int from string
$semesterName = \customfield_semester\data_controller::get_name_for_semester((int)$semesterValue);
} catch (Exception $e) {
echo $e->getMessage();
}
return empty($semesterName) || $semesterName === '' ? $noSemesterAssigned : $semesterName;
......@@ -269,23 +252,16 @@ function get_semester_name(int $id)
* @param int $id
* @return string
*/
function get_semester_id(int $id)
function get_semester_id(int $id, $semFieldName)
{
global $DB;
$semesterValue = '';
try {
$semFieldName = $DB->get_record('customfield_field', array('type' => 'semester'), '*', MUST_EXIST);
} catch (Exception $e) {
return 0;
}
try {
$allCustomFields = get_course_metadata($id);
$semesterField = $allCustomFields[$semFieldName->shortname];
$semesterValue = preg_replace('/[^0-9]/', '', $semesterField); // extract semester int from string
} catch (Exception $e) {
echo $e->getMessage();
}
return empty($semesterValue) || $semesterValue === '' ? 0 : $semesterValue;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment