MDL-51500 navigation: Compute links with destination context

We should calculate the links based on the destination context,
not the current course. Could show links that are not accessible.
This commit is contained in:
Eric Merrill
2015-10-07 10:00:59 -04:00
parent d230899db8
commit ea9431eb7b
+13 -8
View File
@@ -2599,33 +2599,38 @@ class global_navigation extends navigation_node {
return true;
}
$sitecontext = context_system::instance();
// Hidden node that we use to determine if the front page navigation is loaded.
// This required as there are not other guaranteed nodes that may be loaded.
$coursenode->add('frontpageloaded', null, self::TYPE_CUSTOM, null, 'frontpageloaded')->display = false;
//Participants
if (has_capability('moodle/site:viewparticipants', context_system::instance())) {
// Participants.
// If this is the site course, they need to have moodle/site:viewparticipants at the site level.
// If no, then they need to have moodle/course:viewparticipants at the course level.
if ((($course->id == SITEID) && has_capability('moodle/site:viewparticipants', $sitecontext)) ||
has_capability('moodle/course:viewparticipants', context_course::instance($course->id))) {
$coursenode->add(get_string('participants'), new moodle_url('/user/index.php?id='.$course->id), self::TYPE_CUSTOM, get_string('participants'), 'participants');
}
// Blogs
// Blogs.
if (!empty($CFG->enableblogs)
and ($CFG->bloglevel == BLOG_GLOBAL_LEVEL or ($CFG->bloglevel == BLOG_SITE_LEVEL and (isloggedin() and !isguestuser())))
and has_capability('moodle/blog:view', context_system::instance())) {
and has_capability('moodle/blog:view', $sitecontext)) {
$blogsurls = new moodle_url('/blog/index.php');
$coursenode->add(get_string('blogssite', 'blog'), $blogsurls->out(), self::TYPE_SYSTEM, null, 'siteblog');
}
$filterselect = 0;
//Badges
if (!empty($CFG->enablebadges) && has_capability('moodle/badges:viewbadges', $this->page->context)) {
// Badges.
if (!empty($CFG->enablebadges) && has_capability('moodle/badges:viewbadges', $sitecontext)) {
$url = new moodle_url($CFG->wwwroot . '/badges/view.php', array('type' => 1));
$coursenode->add(get_string('sitebadges', 'badges'), $url, navigation_node::TYPE_CUSTOM);
}
// Notes
if (!empty($CFG->enablenotes) && (has_capability('moodle/notes:manage', $this->page->context) || has_capability('moodle/notes:view', $this->page->context))) {
// Notes.
if (!empty($CFG->enablenotes) && has_any_capability(array('moodle/notes:manage', 'moodle/notes:view'), $sitecontext)) {
$coursenode->add(get_string('notes', 'notes'), new moodle_url('/notes/index.php',
array('filtertype' => 'course', 'filterselect' => $filterselect)), self::TYPE_SETTING, null, 'notes');
}