MDL-30378 navigation: Front page activities are now added to the navigation on every page
This commit is contained in:
+131
-126
@@ -1060,7 +1060,7 @@ class global_navigation extends navigation_node {
|
||||
$mycourses = enrol_get_my_courses(NULL, 'visible DESC,sortorder ASC', $limit);
|
||||
$showallcourses = (count($mycourses) == 0 || !empty($CFG->navshowallcourses));
|
||||
$showcategories = ($showallcourses && $this->show_categories());
|
||||
$issite = ($this->page->course->id != SITEID);
|
||||
$issite = ($this->page->course->id == SITEID);
|
||||
$ismycourse = (array_key_exists($this->page->course->id, $mycourses));
|
||||
|
||||
// Check if any courses were returned.
|
||||
@@ -1080,148 +1080,84 @@ class global_navigation extends navigation_node {
|
||||
// JavaScript enabled.
|
||||
$frontpagecourse = $this->load_course($SITE);
|
||||
$this->add_front_page_course_essentials($frontpagecourse, $SITE);
|
||||
$this->load_course_sections($SITE, $frontpagecourse);
|
||||
|
||||
$canviewcourseprofile = true;
|
||||
|
||||
// Next load context specific content into the navigation
|
||||
switch ($this->page->context->contextlevel) {
|
||||
case CONTEXT_SYSTEM :
|
||||
// This has already been loaded we just need to map the variable
|
||||
$coursenode = $frontpagecourse;
|
||||
$this->load_all_categories(null, $showcategories);
|
||||
break;
|
||||
case CONTEXT_COURSECAT :
|
||||
// This has already been loaded we just need to map the variable
|
||||
$coursenode = $frontpagecourse;
|
||||
$this->load_all_categories($this->page->context->instanceid, $showcategories);
|
||||
break;
|
||||
case CONTEXT_BLOCK :
|
||||
case CONTEXT_COURSE :
|
||||
// Load the course associated with the page into the navigation
|
||||
$course = $this->page->course;
|
||||
if ($showcategories && !$issite && !$ismycourse) {
|
||||
$this->load_all_categories($course->category, $showcategories);
|
||||
}
|
||||
$coursenode = $this->load_course($course);
|
||||
|
||||
// If the course wasn't added then don't try going any further.
|
||||
if (!$coursenode) {
|
||||
$canviewcourseprofile = false;
|
||||
// No need to run the generation code for if its the front page.
|
||||
// That has already been done for every page above.
|
||||
if (!$issite) {
|
||||
// Next load context specific content into the navigation
|
||||
switch ($this->page->context->contextlevel) {
|
||||
case CONTEXT_SYSTEM :
|
||||
// This has already been loaded we just need to map the variable
|
||||
$coursenode = $frontpagecourse;
|
||||
$this->load_all_categories(null, $showcategories);
|
||||
break;
|
||||
}
|
||||
|
||||
// If the user is not enrolled then we only want to show the
|
||||
// course node and not populate it.
|
||||
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
|
||||
// Not enrolled, can't view, and hasn't switched roles
|
||||
if (!can_access_course($coursecontext)) {
|
||||
// TODO: very ugly hack - do not force "parents" to enrol into course their child is enrolled in,
|
||||
// this hack has been propagated from user/view.php to display the navigation node. (MDL-25805)
|
||||
$isparent = false;
|
||||
if ($this->useridtouseforparentchecks) {
|
||||
if ($this->useridtouseforparentchecks != $USER->id) {
|
||||
$usercontext = get_context_instance(CONTEXT_USER, $this->useridtouseforparentchecks, MUST_EXIST);
|
||||
if ($DB->record_exists('role_assignments', array('userid' => $USER->id, 'contextid' => $usercontext->id))
|
||||
and has_capability('moodle/user:viewdetails', $usercontext)) {
|
||||
$isparent = true;
|
||||
}
|
||||
}
|
||||
case CONTEXT_COURSECAT :
|
||||
// This has already been loaded we just need to map the variable
|
||||
$coursenode = $frontpagecourse;
|
||||
$this->load_all_categories($this->page->context->instanceid, $showcategories);
|
||||
break;
|
||||
case CONTEXT_BLOCK :
|
||||
case CONTEXT_COURSE :
|
||||
// Load the course associated with the page into the navigation
|
||||
$course = $this->page->course;
|
||||
if ($showcategories && !$ismycourse) {
|
||||
$this->load_all_categories($course->category, $showcategories);
|
||||
}
|
||||
$coursenode = $this->load_course($course);
|
||||
|
||||
if (!$isparent) {
|
||||
$coursenode->make_active();
|
||||
// If the course wasn't added then don't try going any further.
|
||||
if (!$coursenode) {
|
||||
$canviewcourseprofile = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Add the essentials such as reports etc...
|
||||
$this->add_course_essentials($coursenode, $course);
|
||||
if ($this->format_display_course_content($course->format)) {
|
||||
// Load the course sections
|
||||
$sections = $this->load_course_sections($course, $coursenode);
|
||||
}
|
||||
if (!$coursenode->contains_active_node() && !$coursenode->search_for_active_node()) {
|
||||
$coursenode->make_active();
|
||||
}
|
||||
break;
|
||||
case CONTEXT_MODULE :
|
||||
$course = $this->page->course;
|
||||
$cm = $this->page->cm;
|
||||
|
||||
if ($showcategories && !$issite && !$ismycourse) {
|
||||
$this->load_all_categories($course->category, $showcategories);
|
||||
}
|
||||
// If the user is not enrolled then we only want to show the
|
||||
// course node and not populate it.
|
||||
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
|
||||
// Load the course associated with the page into the navigation
|
||||
$coursenode = $this->load_course($course);
|
||||
|
||||
// If the course wasn't added then don't try going any further.
|
||||
if (!$coursenode) {
|
||||
$canviewcourseprofile = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// If the user is not enrolled then we only want to show the
|
||||
// course node and not populate it.
|
||||
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
if (!can_access_course($coursecontext)) {
|
||||
$coursenode->make_active();
|
||||
$canviewcourseprofile = false;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->add_course_essentials($coursenode, $course);
|
||||
// Load the course sections into the page
|
||||
$sections = $this->load_course_sections($course, $coursenode);
|
||||
if ($course->id != SITEID) {
|
||||
// Find the section for the $CM associated with the page and collect
|
||||
// its section number.
|
||||
if (isset($cm->sectionnum)) {
|
||||
$cm->sectionnumber = $cm->sectionnum;
|
||||
} else {
|
||||
foreach ($sections as $section) {
|
||||
if ($section->id == $cm->section) {
|
||||
$cm->sectionnumber = $section->section;
|
||||
break;
|
||||
// Not enrolled, can't view, and hasn't switched roles
|
||||
if (!can_access_course($coursecontext)) {
|
||||
// TODO: very ugly hack - do not force "parents" to enrol into course their child is enrolled in,
|
||||
// this hack has been propagated from user/view.php to display the navigation node. (MDL-25805)
|
||||
$isparent = false;
|
||||
if ($this->useridtouseforparentchecks) {
|
||||
if ($this->useridtouseforparentchecks != $USER->id) {
|
||||
$usercontext = get_context_instance(CONTEXT_USER, $this->useridtouseforparentchecks, MUST_EXIST);
|
||||
if ($DB->record_exists('role_assignments', array('userid' => $USER->id, 'contextid' => $usercontext->id))
|
||||
and has_capability('moodle/user:viewdetails', $usercontext)) {
|
||||
$isparent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Load all of the section activities for the section the cm belongs to.
|
||||
if (isset($cm->sectionnumber) and !empty($sections[$cm->sectionnumber])) {
|
||||
list($sectionarray, $activityarray) = $this->generate_sections_and_activities($course);
|
||||
$activities = $this->load_section_activities($sections[$cm->sectionnumber]->sectionnode, $cm->sectionnumber, $activityarray);
|
||||
} else {
|
||||
$activities = array();
|
||||
if ($activity = $this->load_stealth_activity($coursenode, get_fast_modinfo($course))) {
|
||||
// "stealth" activity from unavailable section
|
||||
$activities[$cm->id] = $activity;
|
||||
if (!$isparent) {
|
||||
$coursenode->make_active();
|
||||
$canviewcourseprofile = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$activities = array();
|
||||
$activities[$cm->id] = $coursenode->get($cm->id, navigation_node::TYPE_ACTIVITY);
|
||||
}
|
||||
if (!empty($activities[$cm->id])) {
|
||||
// Finally load the cm specific navigaton information
|
||||
$this->load_activity($cm, $course, $activities[$cm->id]);
|
||||
// Check if we have an active ndoe
|
||||
if (!$activities[$cm->id]->contains_active_node() && !$activities[$cm->id]->search_for_active_node()) {
|
||||
// And make the activity node active.
|
||||
$activities[$cm->id]->make_active();
|
||||
// Add the essentials such as reports etc...
|
||||
$this->add_course_essentials($coursenode, $course);
|
||||
if ($this->format_display_course_content($course->format)) {
|
||||
// Load the course sections
|
||||
$sections = $this->load_course_sections($course, $coursenode);
|
||||
}
|
||||
} else {
|
||||
//TODO: something is wrong, what to do? (Skodak)
|
||||
}
|
||||
break;
|
||||
case CONTEXT_USER :
|
||||
$course = $this->page->course;
|
||||
if ($course->id != SITEID) {
|
||||
if ($showcategories && !$issite && !$ismycourse) {
|
||||
if (!$coursenode->contains_active_node() && !$coursenode->search_for_active_node()) {
|
||||
$coursenode->make_active();
|
||||
}
|
||||
break;
|
||||
case CONTEXT_MODULE :
|
||||
$course = $this->page->course;
|
||||
$cm = $this->page->cm;
|
||||
|
||||
if ($showcategories && !$ismycourse) {
|
||||
$this->load_all_categories($course->category, $showcategories);
|
||||
}
|
||||
// Load the course associated with the user into the navigation
|
||||
|
||||
// Load the course associated with the page into the navigation
|
||||
$coursenode = $this->load_course($course);
|
||||
|
||||
// If the course wasn't added then don't try going any further.
|
||||
@@ -1238,10 +1174,79 @@ class global_navigation extends navigation_node {
|
||||
$canviewcourseprofile = false;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->add_course_essentials($coursenode, $course);
|
||||
// Load the course sections into the page
|
||||
$sections = $this->load_course_sections($course, $coursenode);
|
||||
}
|
||||
break;
|
||||
if ($course->id != SITEID) {
|
||||
// Find the section for the $CM associated with the page and collect
|
||||
// its section number.
|
||||
if (isset($cm->sectionnum)) {
|
||||
$cm->sectionnumber = $cm->sectionnum;
|
||||
} else {
|
||||
foreach ($sections as $section) {
|
||||
if ($section->id == $cm->section) {
|
||||
$cm->sectionnumber = $section->section;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Load all of the section activities for the section the cm belongs to.
|
||||
if (isset($cm->sectionnumber) and !empty($sections[$cm->sectionnumber])) {
|
||||
list($sectionarray, $activityarray) = $this->generate_sections_and_activities($course);
|
||||
$activities = $this->load_section_activities($sections[$cm->sectionnumber]->sectionnode, $cm->sectionnumber, $activityarray);
|
||||
} else {
|
||||
$activities = array();
|
||||
if ($activity = $this->load_stealth_activity($coursenode, get_fast_modinfo($course))) {
|
||||
// "stealth" activity from unavailable section
|
||||
$activities[$cm->id] = $activity;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$activities = array();
|
||||
$activities[$cm->id] = $coursenode->get($cm->id, navigation_node::TYPE_ACTIVITY);
|
||||
}
|
||||
if (!empty($activities[$cm->id])) {
|
||||
// Finally load the cm specific navigaton information
|
||||
$this->load_activity($cm, $course, $activities[$cm->id]);
|
||||
// Check if we have an active ndoe
|
||||
if (!$activities[$cm->id]->contains_active_node() && !$activities[$cm->id]->search_for_active_node()) {
|
||||
// And make the activity node active.
|
||||
$activities[$cm->id]->make_active();
|
||||
}
|
||||
} else {
|
||||
//TODO: something is wrong, what to do? (Skodak)
|
||||
}
|
||||
break;
|
||||
case CONTEXT_USER :
|
||||
$course = $this->page->course;
|
||||
if ($course->id != SITEID) {
|
||||
if ($showcategories && !$ismycourse) {
|
||||
$this->load_all_categories($course->category, $showcategories);
|
||||
}
|
||||
// Load the course associated with the user into the navigation
|
||||
$coursenode = $this->load_course($course);
|
||||
|
||||
// If the course wasn't added then don't try going any further.
|
||||
if (!$coursenode) {
|
||||
$canviewcourseprofile = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// If the user is not enrolled then we only want to show the
|
||||
// course node and not populate it.
|
||||
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
if (!can_access_course($coursecontext)) {
|
||||
$coursenode->make_active();
|
||||
$canviewcourseprofile = false;
|
||||
break;
|
||||
}
|
||||
$this->add_course_essentials($coursenode, $course);
|
||||
$sections = $this->load_course_sections($course, $coursenode);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$limit = 20;
|
||||
|
||||
Reference in New Issue
Block a user