navigation MDL-25142 Fixed up differences in navigation between guest and normal user.

As part of this patch I also introduced a new method in accesslib can_access_course that can be used
to check a users access to a course.
I also fixed a minor issue with guest access flag caching in require_login
This commit is contained in:
Sam Hemelryk
2010-11-11 03:37:56 +00:00
parent 693fc4a29f
commit ed1d72ea70
5 changed files with 100 additions and 6 deletions
+6 -5
View File
@@ -990,7 +990,8 @@ class global_navigation extends navigation_node {
// 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 ((!is_enrolled($coursecontext) && !has_capability('moodle/course:view', $coursecontext) && !is_role_switched($course->id))) {
if (!can_access_course($coursecontext)) {
$coursenode->make_active();
$canviewcourseprofile = false;
break;
@@ -1014,7 +1015,7 @@ class global_navigation extends navigation_node {
// 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 ($course->id !== SITEID && !is_enrolled($coursecontext) && !has_capability('moodle/course:view', $coursecontext)) {
if (can_access_course($coursecontext)) {
if ($coursenode) {
$coursenode->make_active();
}
@@ -1069,7 +1070,7 @@ class global_navigation extends navigation_node {
// 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 (!is_enrolled($coursecontext) && !has_capability('moodle/course:view', $coursecontext)) {
if (can_access_course($coursecontext)) {
$coursenode->make_active();
$canviewcourseprofile = false;
break;
@@ -1763,7 +1764,7 @@ class global_navigation extends navigation_node {
$usercoursenode->add(get_string('notes', 'notes'), $url, self::TYPE_SETTING);
}
if (has_capability('moodle/course:view', get_context_instance(CONTEXT_COURSE, $usercourse->id))) {
if (can_access_course(get_context_instance(CONTEXT_COURSE, $usercourse->id), $user->id)) {
$usercoursenode->add(get_string('entercourse'), new moodle_url('/course/view.php', array('id'=>$usercourse->id)), self::TYPE_SETTING, null, null, new pix_icon('i/course', ''));
}
@@ -3288,7 +3289,7 @@ class settings_navigation extends navigation_node {
return false;
}
} else {
if ((!has_capability('moodle/user:viewdetails', $coursecontext) && !has_capability('moodle/user:viewdetails', $usercontext)) || !is_enrolled($coursecontext, $user->id)) {
if ((!has_capability('moodle/user:viewdetails', $coursecontext) && !has_capability('moodle/user:viewdetails', $usercontext)) || !can_access_course($coursecontext, $user->id)) {
return false;
}
if (groups_get_course_groupmode($course) == SEPARATEGROUPS && !has_capability('moodle/site:accessallgroups', $coursecontext)) {