From b9bcad24db83e2166c69b3f5d9b7a9c1c8f4263a Mon Sep 17 00:00:00 2001 From: Aparup Banerjee Date: Fri, 15 Apr 2011 18:04:45 +0800 Subject: [PATCH] MDL-25805 Roles propagated ugly hack for parent seeing child activities into navigation lib to display nav node. --- course/user.php | 1 + lib/navigationlib.php | 39 +++++++++++++++++++++++++++++++++++---- mod/forum/user.php | 1 + user/view.php | 1 + 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/course/user.php b/course/user.php index b5ab6cd9916..81bcc8453ad 100644 --- a/course/user.php +++ b/course/user.php @@ -152,6 +152,7 @@ if ($course->id != SITEID && has_capability('moodle/course:viewparticipants', $c } $PAGE->navigation->extend_for_user($user); +$PAGE->navigation->set_userid_for_parent_nav_hack($user->id); // see MDL-25805 for reasons and for full commit reference for reversal when fixed. $PAGE->set_title("$course->shortname: $stractivityreport ($mode)"); $PAGE->set_heading($course->fullname); echo $OUTPUT->header(); 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); diff --git a/mod/forum/user.php b/mod/forum/user.php index 65760566bca..0efe8baa17d 100644 --- a/mod/forum/user.php +++ b/mod/forum/user.php @@ -86,6 +86,7 @@ if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEX } $PAGE->navigation->extend_for_user($user); +$PAGE->navigation->set_userid_for_parent_nav_hack($id); // see MDL-25805 for reasons and for full commit reference for reversal when fixed. $PAGE->set_title("$course->shortname: $fullname: $strmode"); $PAGE->set_heading($course->fullname); echo $OUTPUT->header(); diff --git a/user/view.php b/user/view.php index c77ba7c11e6..ea56d616ff8 100644 --- a/user/view.php +++ b/user/view.php @@ -80,6 +80,7 @@ if (!$currentuser // please note this is just a guess! require_login(); $isparent = true; + $PAGE->navigation->set_userid_for_parent_nav_hack($id); } else { // normal course require_login($course); -- 2.43.0