X-Git-Url: http://git.moodle.org/gw?p=moodle.git;a=blobdiff_plain;f=lib%2Fnavigationlib.php;h=dbf035f2f2c4ac2358b71ceccec094c877731353;hp=4434d7c3825550d3d516d8eb87e3b136c85082a3;hb=b9bcad24db83e2166c69b3f5d9b7a9c1c8f4263a;hpb=4452ed6f17bfb3691d74584b1fb8ba9007d9bb8c;ds=sidebyside diff --git a/lib/navigationlib.php b/lib/navigationlib.php index 4434d7c3825..dbf035f2f2c 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -829,6 +829,8 @@ class global_navigation extends navigation_node { protected $addedcourses = array(); /** @var int */ protected $expansionlimit = 0; + /** @var int */ + protected $uglyunsupportedparenthack_userid = 0; /** * Constructs a new global navigation @@ -875,6 +877,19 @@ class global_navigation extends navigation_node { } } + /** + * Mutator to set userid to allow parent to see child's profile + * page navigation. See MDL-25805 for initial issue. Linked to it + * is an issue explaining why this is a REALLY UGLY HACK thats not + * for you to use! + * + * @param int $userid userid of profile page that parent wants to navigate around. + */ + public function set_userid_for_parent_nav_hack($userid) { + $this->uglyunsupportedparenthack_userid = $userid; + } + + /** * Initialises the navigation object. * @@ -986,12 +1001,28 @@ 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); - // Not enrolled, can't view, and hasn't switched roles + // Not enrolled, can't view, and hasn't switched roles if (!can_access_course($coursecontext)) { - $coursenode->make_active(); - $canviewcourseprofile = false; - break; + // 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->uglyunsupportedparenthack_userid) { + $currentuser = ($this->uglyunsupportedparenthack_userid == $USER->id); + if (!$currentuser) { + $usercontext = get_context_instance(CONTEXT_USER, $this->uglyunsupportedparenthack_userid, MUST_EXIST); + if ($DB->record_exists('role_assignments', array('userid'=>$USER->id, 'contextid'=>$usercontext->id)) + and has_capability('moodle/user:viewdetails', $usercontext)) { + $isparent = true; + } + } + } + + if (!$isparent) { + $coursenode->make_active(); + $canviewcourseprofile = false; + break; + } } // Add the essentials such as reports etc... $this->add_course_essentials($coursenode, $course);