From: Sam Hemelryk Date: Wed, 23 Dec 2009 01:22:48 +0000 (+0000) Subject: navigation MDL-20649 Revised the way in which navigation works for users X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=7a7e209df09fa2d5d8e5179d1629138bdd459a88;p=moodle.git navigation MDL-20649 Revised the way in which navigation works for users When logged in there is a my moodle dashboard branch, when viewing a site profile there is a users branch, and when viewing a course profile there the user is shown under the participants branch --- diff --git a/blocks/global_navigation_tree/block_global_navigation_tree.php b/blocks/global_navigation_tree/block_global_navigation_tree.php index b71955c751..d8e18b9541 100644 --- a/blocks/global_navigation_tree/block_global_navigation_tree.php +++ b/blocks/global_navigation_tree/block_global_navigation_tree.php @@ -323,8 +323,9 @@ class block_global_navigation_tree extends block_tree { // If we have `more than nothing` in the history display it :D if ($historycount > 0) { // Add a branch to hold the users history - $myhistorybranch = $PAGE->navigation->add(get_string('showmyhistorytitle', $this->blockname), null, navigation_node::TYPE_CATEGORY, null, 'myhistory'); - $PAGE->navigation->get($myhistorybranch)->children = array_reverse($history); + $mymoodle = $PAGE->navigation->get('mymoodle', navigation_node::TYPE_CUSTOM); + $myhistorybranch = $mymoodle->add(get_string('showmyhistorytitle', $this->blockname), null, navigation_node::TYPE_CUSTOM, null, 'myhistory'); + $mymoodle->get($myhistorybranch)->children = array_reverse($history); } // Cache the history (or update the cached history as it is) @@ -363,9 +364,10 @@ class block_global_navigation_tree extends block_tree { } // Add a branch labelled something like My Courses - $mycoursesbranch = $PAGE->navigation->add(get_string('mycourses'), null,navigation_node::TYPE_CATEGORY, null, 'mycourses'); - $PAGE->navigation->add_courses($courses, $mycoursesbranch); - $PAGE->navigation->get($mycoursesbranch)->type = navigation_node::TYPE_SETTING; + $mymoodle = $PAGE->navigation->get('mymoodle', navigation_node::TYPE_CUSTOM); + $mycoursesbranch = $mymoodle->add(get_string('mycourses'), null,navigation_node::TYPE_CATEGORY, null, 'mycourses'); + $PAGE->navigation->add_courses($courses, 'mycourses'); + $mymoodle->get($mycoursesbranch)->type = navigation_node::TYPE_CUSTOM; return true; } diff --git a/course/user.php b/course/user.php index 9d673ffda2..bbe52ec095 100644 --- a/course/user.php +++ b/course/user.php @@ -32,10 +32,7 @@ $mode = optional_param('mode', "todaylogs", PARAM_ALPHA); $page = optional_param('page', 0, PARAM_INT); $perpage = optional_param('perpage', 100, PARAM_INT); -$url = new moodle_url($CFG->wwwroot.'/course/user.php', array('id'=>$id,'user'=>$user)); -if ($mode !== 'todaylogs') { - $url->param('mode', $mode); -} +$url = new moodle_url($CFG->wwwroot.'/course/user.php', array('id'=>$id,'user'=>$user, 'mode'=>$mode)); if ($page !== 0) { $url->param('page', $page); } @@ -138,10 +135,8 @@ $link = null; if ($course->id != SITEID && has_capability('moodle/course:viewparticipants', $coursecontext)) { $link = new moodle_url($CFG->wwwroot.'/user/index.php', array('id'=>$course->id)); } -$PAGE->navbar->add($strparticipants, $link); -$PAGE->navbar->add($fullname, new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$user->id, 'course'=>$course->id))); -$PAGE->navbar->add($stractivityreport); -$PAGE->navbar->add($strmode); + +$PAGE->navigation->extend_for_user($user); $PAGE->set_title("$course->shortname: $stractivityreport ($mode)"); $PAGE->set_heading($course->fullname); echo $OUTPUT->header(); diff --git a/lang/en_utf8/moodle.php b/lang/en_utf8/moodle.php index 61c4a7b99d..638ff34da3 100644 --- a/lang/en_utf8/moodle.php +++ b/lang/en_utf8/moodle.php @@ -1064,6 +1064,8 @@ $string['msnid'] = 'MSN ID'; $string['mustchangepassword'] = 'The new password must be different than the current one'; $string['mustconfirm'] = 'You need to confirm your login'; $string['mycourses'] = 'My courses'; +$string['myprofile'] = 'My profile'; +$string['mymoodledashboard'] = 'My Moodle dashboard'; $string['name'] = 'Name'; $string['namelams'] = 'LAMS'; $string['namescorm'] = 'SCORM'; @@ -1682,8 +1684,9 @@ $string['used'] = 'Used'; $string['usedinnplaces'] = 'Used in $a places'; $string['usemessageform'] = 'or use the form below to send a message to the selected students'; $string['user'] = 'User'; +$string['users'] = 'Users'; $string['usercurrentsettings'] = 'My profile settings'; -$string['userviewingsettings'] = 'Profile for $a'; +$string['userviewingsettings'] = 'Profile settings for $a'; $string['userconfirmed'] = 'Confirmed $a'; $string['userdata'] = 'User Data'; $string['userdeleted'] = 'This user account has been deleted'; diff --git a/lib/navigationlib.php b/lib/navigationlib.php index 71bb93934d..85f68d477c 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -505,7 +505,7 @@ class navigation_node { } if ($this->nodetype === self::NODETYPE_BRANCH && count($this->children)>0) { foreach ($this->children as $child) { - if ($child->isactive) { + if ($child->isactive && !$child->contains_active_node()) { return $child; } else { $outcome = $child->find_active_node($type); @@ -768,13 +768,14 @@ class navigation_node { * @return bool */ public function remove_child($key, $type=null) { + if ($key instanceof navigation_node) { + $key = $key->key; + } $child = $this->get($key, $type); - if ($child) { unset($this->children[$child->key]); return true; } - return false; } @@ -864,6 +865,10 @@ class global_navigation extends navigation_node { public $showemptybranches = true; /** @var bool */ protected $isloggedin = false; + /** @var array Array of user objects to extend the navigation with */ + protected $extendforuser = array(); + /** @var bool Gets set to true if all categories have been loaded */ + protected $allcategoriesloaded = false; /** * Sets up the object with basic settings and preparse it for use @@ -913,7 +918,7 @@ class global_navigation extends navigation_node { * @return bool Returns true */ public function initialise($jsargs = null) { - global $PAGE, $SITE, $CFG; + global $PAGE, $SITE, $CFG, $USER; if ($this->initialised || during_initial_install()) { return true; } @@ -949,9 +954,23 @@ class global_navigation extends navigation_node { $depth = $this->load_for_activity(); break; case CONTEXT_USER: - $depth = $this->load_for_user(); + // If the PAGE course is not the site then add the content of the + // course + if ($PAGE->course->id !== SITEID) { + $depth = $this->load_for_course(); + } break; } + + // Load each extending user into the navigation. + foreach ($this->extendforuser as $user) { + if ($user->id !== $USER->id) { + $this->load_for_user($user); + } + } + // Load the current user into the the navigation + $this->load_for_user(); + $this->collapse_at_depth($this->depthforward+$depth); $this->respect_forced_open(); $expandable = array(); @@ -964,25 +983,176 @@ class global_navigation extends navigation_node { * This function loads the global navigation structure for a user. * * This gets called by {@link initialise()} when the context is CONTEXT_USER - */ - protected function load_for_user() { - global $DB, $SITE, $PAGE, $CFG; - if (!empty($PAGE->course->id)) { - $courseid = $PAGE->course->id; - } else { - $courseid = optional_param('course', false, PARAM_INT); - } - if ($courseid!==false && $courseid!=$SITE->id) { - $course = $DB->get_record('course', array('id'=>$courseid)); - } - if (isset($course) && $course) { + * @param object|int|null $user + */ + protected function load_for_user($user=null) { + global $DB, $PAGE, $CFG, $USER; + + $iscurrentuser = false; + if ($user === null) { + // We can't require login here but if the user isn't logged in we don't + // want to show anything + if (!isloggedin()) { + return false; + } + $user = $USER; + $iscurrentuser = true; + } else if (!is_object($user)) { + // If the user is not an object then get them from the database + $user = $DB->get_record('user', array('id'=>(int)$user), '*', MUST_EXIST); + } + $baseargs = array('id'=>$user->id); + $contexts = new stdClass; + $contexts->user = get_context_instance(CONTEXT_USER, $user->id); + + // Get the course set against the page, by default this will be the site + $course = $PAGE->course; + if ($course->id !== SITEID) { + // Load all categories if required. if (!empty($CFG->navshowallcourses)) { $this->load_categories(); } - $this->load_for_course(); + // Attempt to find the course node within the navigation structure. + $coursetab = $this->find_child($course->id, self::TYPE_COURSE); + if (!$coursetab) { + // Load for the course.... this should never happen but is here to + // ensure if it ever does things don't break. + $this->load_for_course(); + $coursetab = $this->find_child($course->id, self::TYPE_COURSE); + } + // Get the context for the course + $contexts->course = get_context_instance(CONTEXT_COURSE, $course->id); + $baseargs['course'] = $course->id; + $issitecourse = false; } else { + // Load all categories and get the context for the system $this->load_categories(); + $contexts->course = get_context_instance(CONTEXT_SYSTEM); + $issitecourse = true; + } + + // Create a node to add user information under. + if ($iscurrentuser) { + // If it's the current user the information will go under the my moodle dashboard node + $usernode = $this->add(get_string('mymoodledashboard'), null, navigation_node::TYPE_CUSTOM, get_string('mymoodledashboard'), 'mymoodle'); + $usernode = $this->get($usernode); + } else { + if (!$issitecourse) { + // Not the current user so add it to the participants node for the current course + $usersnode = $coursetab->find_child('participants', self::TYPE_SETTING); + } else { + // This is the site so add a users node to the root branch + $usersnode = $this->find_child('users', self::TYPE_CUSTOM); + if (!$usersnode) { + $usersnode = $this->add(get_string('users'), new moodle_url($CFG->wwwroot.'/user/index.php', array('id'=>SITEID)), self::TYPE_CUSTOM, null, 'users'); + $usersnode = $this->get($usersnode); + } + } + // Add a branch for the current user + $usernode = $usersnode->add(fullname($user, true)); + $usernode = $usersnode->get($usernode); + } + + // If the user is the current user or has permission to view the details of the requested + // user than add a view profile link. + if ($iscurrentuser || has_capability('moodle/user:viewdetails', $contexts->course) || has_capability('moodle/user:viewdetails', $contexts->user)) { + $usernode->add(get_string('viewprofile'), new moodle_url($CFG->wwwroot.'/user/view.php',$baseargs)); + } + + // Add nodes for forum posts and discussions if the user can view either or both + $canviewposts = has_capability('moodle/user:readuserposts', $contexts->user); + $canviewdiscussions = has_capability('mod/forum:viewdiscussion', $contexts->course); + if ($canviewposts || $canviewdiscussions) { + $forumtab = $usernode->add(get_string('forumposts', 'forum')); + $forumtab = $usernode->get($forumtab); + if ($canviewposts) { + $forumtab->add(get_string('posts', 'forum'), new moodle_url($CFG->wwwroot.'/mod/forum/user.php', $baseargs)); + } + if ($canviewdiscussions) { + $forumtab->add(get_string('discussions', 'forum'), new moodle_url($CFG->wwwroot.'/mod/forum/user.php', array_merge($baseargs, array('mode'=>'discussions')))); + } + } + + // Add a node to view the users notes if permitted + if (!empty($CFG->enablenotes) && has_any_capability(array('moodle/notes:manage', 'moodle/notes:view'), $contexts->course)) { + $usernode->add(get_string('notes', 'notes'), new moodle_url($CFG->wwwroot.'/notes/index.php',array('user'=>$user->id, 'course'=>$contexts->course->instanceid))); + } + + // Add a reports tab and then add reports the the user has permission to see. + $reporttab = $usernode->add(get_string('activityreports')); + $reporttab = $usernode->get($reporttab); + $anyreport = has_capability('moodle/user:viewuseractivitiesreport', $contexts->user); + $viewreports = ($anyreport || ($course->showreports && $iscurrentuser)); + $reportargs = array('user'=>$user->id); + if (!empty($course->id)) { + $reportargs['id'] = $course->id; + } else { + $reportargs['id'] = SITEID; + } + if ($viewreports || has_capability('coursereport/outline:view', $contexts->course)) { + $reporttab->add(get_string('outlinereport'), new moodle_url($CFG->wwwroot.'/course/user.php', array_merge($reportargs, array('mode'=>'outline')))); + $reporttab->add(get_string('completereport'), new moodle_url($CFG->wwwroot.'/course/user.php', array_merge($reportargs, array('mode'=>'complete')))); + } + + if ($viewreports || has_capability('coursereport/log:viewtoday', $contexts->course)) { + $reporttab->add(get_string('todaylogs'), new moodle_url($CFG->wwwroot.'/course/user.php', array_merge($reportargs, array('mode'=>'todaylogs')))); + } + + if ($viewreports || has_capability('coursereport/log:view', $contexts->course)) { + $reporttab->add(get_string('alllogs'), new moodle_url($CFG->wwwroot.'/course/user.php', array_merge($reportargs, array('mode'=>'alllogs')))); + } + + if (!empty($CFG->enablestats)) { + if ($viewreports || has_capability('coursereport/stats:view', $contexts->course)) { + $reporttab->add(get_string('stats'), new moodle_url($CFG->wwwroot.'/course/user.php', array_merge($reportargs, array('mode'=>'stats')))); + } + } + + $gradeaccess = false; + if (has_capability('moodle/grade:viewall', $contexts->course)) { + //ok - can view all course grades + $gradeaccess = true; + } else if ($course->showgrades) { + if ($iscurrentuser && has_capability('moodle/grade:view', $contexts->course)) { + //ok - can view own grades + $gradeaccess = true; + } else if (has_capability('moodle/grade:viewall', $contexts->user)) { + // ok - can view grades of this user - parent most probably + $gradeaccess = true; + } else if ($anyreport) { + // ok - can view grades of this user - parent most probably + $gradeaccess = true; + } } + if ($gradeaccess) { + $reporttab->add(get_string('grade'), new moodle_url($CFG->wwwroot.'/course/user.php', array_merge($reportargs, array('mode'=>'grade')))); + } + + // Check the number of nodes in the report node... if there are none remove + // the node + if (count($reporttab->children)===0) { + $usernode->remove_child($reporttab); + } + + // If the user is the current user add the repositories for the current user + if ($iscurrentuser) { + require_once($CFG->dirroot . '/repository/lib.php'); + $editabletypes = repository::get_editable_types($contexts->user); + if (!empty($editabletypes)) { + $usernode->add(get_string('repositories', 'repository'), new moodle_url($CFG->wwwroot .'/repository/manage_instances.php', array('contextid', $contexts->user->id))); + } + } + return true; + } + + /** + * Adds the provided user to an array and when the navigation is generated + * it is extended for this user. + * + * @param object $user + */ + public function extend_for_user($user) { + $this->extendforuser[] = $user; } /** @@ -1085,6 +1255,10 @@ class global_navigation extends navigation_node { } $viewhiddenactivities = $this->cache->canviewhiddenactivities; + $labelformatoptions = new object(); + $labelformatoptions->noclean = true; + $labelformatoptions->para = false; + foreach ($modinfo->cms as $module) { if ($module->sectionnum!='0' || (!$viewhiddenactivities && !$module->visible)) { continue; @@ -1101,6 +1275,11 @@ class global_navigation extends navigation_node { $type = navigation_node::TYPE_RESOURCE; if ($module->modname!='label') { $url = new moodle_url('/mod/'.$module->modname.'/view.php', array('id'=>$module->id)); + } else { + if (preg_match('#^\s*<(p|div)>(?.*?)\s*$#i', $module->extra, $matches)) { + $module->extra = $matches['extra']; + } + $module->name = format_text($module->extra, FORMAT_HTML, $labelformatoptions); } if ($module->icon!=='') { $icon = $OUTPUT->pix_url(preg_replace('#\.(png|gif)$#i','',$module->icon)); @@ -1147,6 +1326,11 @@ class global_navigation extends navigation_node { $this->cache->canviewhiddenactivities = has_capability('moodle/course:viewhiddenactivities', $this->context); } $viewhiddenactivities = $this->cache->viewhiddenactivities; + + $labelformatoptions = new object(); + $labelformatoptions->noclean = true; + $labelformatoptions->para = false; + foreach ($modinfo->cms as $module) { if ($module->sectionnum=='0' || (!$viewhiddenactivities && !$module->visible) || ($singlesectionid!=false && $module->sectionnum!==$singlesectionid)) { continue; @@ -1163,6 +1347,11 @@ class global_navigation extends navigation_node { $type = navigation_node::TYPE_RESOURCE; if ($module->modname!='label') { $url = new moodle_url($CFG->wwwroot.'/mod/'.$module->modname.'/view.php', array('id'=>$module->id)); + } else { + if (preg_match('#^\s*<(p|div)>(?.*?)\s*$#i', $module->extra, $matches)) { + $module->extra = $matches['extra']; + } + $module->name = format_text($module->extra, FORMAT_HTML, $labelformatoptions); } if ($module->icon!=='') { $icon = $OUTPUT->pix_url(preg_replace('#\.(png|gif)$#i','',$module->icon)); @@ -1328,8 +1517,13 @@ class global_navigation extends navigation_node { global $CFG; $url = new moodle_url($CFG->wwwroot.'/course/category.php', array('id'=>$category->id, 'categoryedit'=>'on', 'sesskey'=>sesskey())); $keys = explode('/',trim($category->path,'/ ')); - $currentcategory = array_pop($keys); - $categorykey = $this->add_to_path($keys, $category->id, $category->name, $category->name, self::TYPE_CATEGORY, $url); + // Check this category hadsn't already been added + if (!$this->get_by_path($keys)) { + $currentcategory = array_pop($keys); + $categorykey = $this->add_to_path($keys, $category->id, $category->name, $category->name, self::TYPE_CATEGORY, $url); + } else { + $categorykey = $currentcategory.':'.self::TYPE_CATEGORY; + } return $categorykey; } @@ -1364,12 +1558,17 @@ class global_navigation extends navigation_node { $category = $this->find_child($categoryid); } if ($category!==false) { - $coursekey = $category->add($course->fullname, $url, self::TYPE_COURSE, $course->shortname, $course->id, $OUTPUT->pix_url('i/course')); - if (!$course->visible) { - $category->get($course->id)->hidden = true; - } - if ($expandcourse!==true) { - $category->get($course->id)->nodetype = self::NODETYPE_LEAF; + // Check that this course hasn't already been added. + // This function only adds a skeleton and we don't want to overwrite + // a fully built course object + if (!$category->get($course->id, self::TYPE_COURSE)) { + $coursekey = $category->add($course->fullname, $url, self::TYPE_COURSE, $course->shortname, $course->id, $OUTPUT->pix_url('i/course')); + if (!$course->visible) { + $category->get($course->id)->hidden = true; + } + if ($expandcourse!==true) { + $category->get($course->id)->nodetype = self::NODETYPE_LEAF; + } } } } @@ -1414,12 +1613,9 @@ class global_navigation extends navigation_node { //Participants if (has_capability('moodle/course:viewparticipants', $this->context)) { - $participantskey = $currentcourse->add(get_string('participants')); + $participantskey = $currentcourse->add(get_string('participants'), new moodle_url($CFG->wwwroot.'/user/index.php?id='.$course->id), self::TYPE_SETTING, get_string('participants'), 'participants'); $participants = $currentcourse->get($participantskey); if ($participants) { - $participants->mainnavonly = true; - $url = new moodle_url($CFG->wwwroot.'/user/index.php?id='.$course->id); - $participants->add(get_string('participantslist'), $url, self::TYPE_SETTING, null, null, $OUTPUT->pix_url('i/users')); require_once($CFG->dirroot.'/blog/lib.php'); @@ -1632,6 +1828,10 @@ class global_navigation extends navigation_node { protected function load_categories($categoryid=0) { global $PAGE, $CFG, $DB, $USER; + if ($categoryid === 0 && $this->allcategoriesloaded) { + return 0; + } + $systemcontext = get_context_instance(CONTEXT_SYSTEM); // Cache capability moodle/site:config we use this in the next bit of code @@ -1719,9 +1919,9 @@ class global_navigation extends navigation_node { } $categories = $DB->get_records('course_categories', array('parent' => $categoryid), 'sortorder ASC'); $this->add_categories($keys, $categories); - #$courses = $DB->get_records('course', array('category' => $categoryid), 'sortorder ASC', 'id,fullname,shortname,visible,category'); $this->add_courses($courses, $categoryid); } + $this->allcategoriesloaded = true; return 0; } @@ -2119,6 +2319,8 @@ class navbar extends navigation_node { protected $ignoreactive = false; /** @var bool */ protected $duringinstall = false; + /** @var bool */ + protected $hasitems = false; /** * The almighty constructor @@ -2145,19 +2347,18 @@ class navbar extends navigation_node { public function has_items() { if ($this->duringinstall) { return false; + } else if ($this->hasitems !== false) { + return true; } $this->page->navigation->initialise(); - if (!$this->page->navigation->contains_active_node() && !$this->page->settingsnav->contains_active_node()) { - if (!$this->page->navigation->reiterate_active_nodes(URL_MATCH_BASE)) { - $this->page->settingsnav->reiterate_active_nodes(URL_MATCH_BASE); - } - } + $activenodefound = ($this->page->navigation->contains_active_node() || + $this->page->settingsnav->contains_active_node() || + $this->page->navigation->reiterate_active_nodes(URL_MATCH_BASE) || + $this->page->settingsnav->reiterate_active_nodes(URL_MATCH_BASE)); - $outcome = (count($this->page->navbar->children)>0 || (!$this->ignoreactive && ( - $this->page->navigation->contains_active_node() || - $this->page->settingsnav->contains_active_node()) - )); + $outcome = (count($this->page->navbar->children)>0 || (!$this->ignoreactive && $activenodefound)); + $this->hasitems = $outcome; return $outcome; } @@ -2186,7 +2387,9 @@ class navbar extends navigation_node { } // Make sure that navigation is initialised - $this->page->navigation->initialise(); + if (!$this->has_items()) { + return ''; + } if ($this->content !== null) { return $this->content; @@ -3028,20 +3231,19 @@ class settings_navigation extends navigation_node { protected function generate_user_settings($courseid, $userid, $gstitle='usercurrentsettings') { global $DB, $CFG, $USER; - $course = $DB->get_record("course", array("id"=>$courseid)); - if (!$course) { + if (!$course = $DB->get_record("course", array("id"=>$courseid))) { return false; } $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); // Course context $systemcontext = get_context_instance(CONTEXT_SYSTEM); $currentuser = ($USER->id == $userid); + if ($currentuser) { $user = $USER; $usercontext = get_context_instance(CONTEXT_USER, $user->id); // User context } else { - $user = $DB->get_record('user', array('id'=>$userid)); - if (!$user) { + if (!$user = $DB->get_record('user', array('id'=>$userid))) { return false; } // Check that the user can view the profile @@ -3069,9 +3271,6 @@ class settings_navigation extends navigation_node { $usersetting = $this->get($usersettingskey); $usersetting->id = 'usersettings'; - // URL to the users profile - $profileurl = new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$user->id, 'course'=>$course->id)); - // Check if the user has been deleted if ($user->deleted) { if (!has_capability('moodle/user:update', $coursecontext)) { @@ -3079,27 +3278,19 @@ class settings_navigation extends navigation_node { $usersetting->add(get_string('userdeleted'), null, self::TYPE_SETTING); } else { // We can edit the user so show the user deleted message and link it to the profile + $profileurl = new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$user->id, 'course'=>$course->id)); $usersetting->add(get_string('userdeleted'), $profileurl, self::TYPE_SETTING); } return true; } - // Add a link to view the user profile - if ($currentuser) { - $usersetting->add(get_string('viewprofile'), $profileurl, self::TYPE_SETTING); - } else { - $usersetting->add(get_string('viewprofile','',$fullname), $profileurl, self::TYPE_SETTING); - } - // Add the profile edit link if (isloggedin() && !isguestuser($user) && !is_mnet_remote_user($user)) { - $url = false; - if (($currentuser && has_capability('moodle/user:update', $systemcontext)) || (has_capability('moodle/user:update', $systemcontext) && !is_primary_admin($user->id))) { + if (($currentuser || !is_primary_admin($user->id)) && has_capability('moodle/user:update', $systemcontext)) { $url = new moodle_url($CFG->wwwroot.'/user/editadvanced.php', array('id'=>$user->id, 'course'=>$course->id)); + $usersetting->add(get_string('editmyprofile'), $url, self::TYPE_SETTING); } else if ((has_capability('moodle/user:editprofile', $usercontext) && !is_primary_admin($user->id)) || ($currentuser && has_capability('moodle/user:editownprofile', $systemcontext))) { $url = new moodle_url($CFG->wwwroot.'/user/edit.php', array('id'=>$user->id, 'course'=>$course->id)); - } - if ($url!==false) { $usersetting->add(get_string('editmyprofile'), $url, self::TYPE_SETTING); } } @@ -3155,14 +3346,12 @@ class settings_navigation extends navigation_node { } // Portfolio - if (empty($userindexpage) && $currentuser && !empty($CFG->enableportfolios) && has_capability('moodle/portfolio:export', $systemcontext)) { + if ($currentuser && !empty($CFG->enableportfolios) && has_capability('moodle/portfolio:export', $systemcontext)) { require_once($CFG->libdir . '/portfoliolib.php'); if (portfolio_instances(true, false)) { $portfoliokey = $usersetting->add(get_string('portfolios', 'portfolio'), null, self::TYPE_SETTING); - $url = new moodle_url($CFG->wwwroot .'/user/portfolio.php'); - $usersetting->get($portfoliokey)->add(get_string('configure', 'portfolio'), $url, self::TYPE_SETTING); - $url = new moodle_url($CFG->wwwroot .'/user/portfoliologs.php'); - $usersetting->get($portfoliokey)->add(get_string('logs', 'portfolio'), $url, self::TYPE_SETTING); + $usersetting->get($portfoliokey)->add(get_string('configure', 'portfolio'), new moodle_url($CFG->wwwroot .'/user/portfolio.php'), self::TYPE_SETTING); + $usersetting->get($portfoliokey)->add(get_string('logs', 'portfolio'), new moodle_url($CFG->wwwroot .'/user/portfoliologs.php'), self::TYPE_SETTING); } } @@ -3177,7 +3366,7 @@ class settings_navigation extends navigation_node { } // Messaging - if (empty($userindexpage) && has_capability('moodle/user:editownmessageprofile', $systemcontext)) { + if (has_capability('moodle/user:editownmessageprofile', $systemcontext)) { $url = new moodle_url($CFG->wwwroot.'/message/edit.php', array('id'=>$user->id, 'course'=>$course->id)); $usersetting->add(get_string('editmymessage', 'message'), $url, self::TYPE_SETTING); } diff --git a/mod/forum/user.php b/mod/forum/user.php index 1abe683fa4..42d32f24a8 100644 --- a/mod/forum/user.php +++ b/mod/forum/user.php @@ -89,11 +89,8 @@ $link = null; if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $course->id)) || has_capability('moodle/site:viewparticipants', $syscontext)) { $link = new moodle_url($CFG->wwwroot.'/user/index.php',array('id'=>$course->id)); } -$PAGE->navbar->add($strparticipants, $link); -$PAGE->navbar->add($fullname, new moodle_url($CFG->wwwroot.'/user/view.php',array('id'=>$user->id,'course'=>$course->id))); -$PAGE->navbar->add($strforumposts); -$PAGE->navbar->add($strmode); +$PAGE->navigation->extend_for_user($user); $PAGE->set_title("$course->shortname: $fullname: $strmode"); $PAGE->set_heading($course->fullname); echo $OUTPUT->header(); diff --git a/notes/index.php b/notes/index.php index 75d6cb8245..3c167c958a 100644 --- a/notes/index.php +++ b/notes/index.php @@ -25,7 +25,7 @@ if ($userid !== 0) { if ($filtertype !== '') { $url->param('filtertype', $filtertype); } -if ($filterselect !== '') { +if ($filterselect !== 0) { $url->param('filterselect', $filterselect); } $PAGE->set_url($url); @@ -86,11 +86,12 @@ $link = null; if (has_capability('moodle/course:viewparticipants', $coursecontext) || has_capability('moodle/site:viewparticipants', $systemcontext)) { $link = new moodle_url($CFG->wwwroot.'/user/index.php',array('id'=>$course->id)); } -$PAGE->navbar->add(get_string('participants'), $link); if ($userid) { - $PAGE->navbar->add(fullname($user), new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$user->id,'course'=>$course->id))); + $PAGE->navigation->extend_for_user($user); +} else { + $PAGE->navbar->add(get_string('participants'), $link); + $PAGE->navbar->add($strnotes); } -$PAGE->navbar->add($strnotes); $PAGE->set_title($course->shortname . ': ' . $strnotes); $PAGE->set_heading($course->fullname); diff --git a/user/view.php b/user/view.php index dcb5b3a75f..5f2ddddc73 100644 --- a/user/view.php +++ b/user/view.php @@ -38,7 +38,7 @@ if (empty($id)) { // See your own profile by default } $url = new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$id)); -if ($course !== 0) { +if ($course != SITEID) { $url->param('course', $course); } if ($enable !== 0) { @@ -63,13 +63,6 @@ if ($SITE->shortname === '' and has_capability('moodle/site:config', $systemcont redirect($CFG->wwwroot .'/'. $CFG->admin .'/index.php'); } -/// Set up page URL for blocks etc -if ($course->id == SITEID) { - $PAGE->set_url('user/view.php', array('id' => $user->id)); -} else { - $PAGE->set_url('user/view.php', array('id' => $user->id, 'course' => $course->id)); -} - /// Make sure the current user is allowed to see this user if (empty($USER->id)) { @@ -111,13 +104,8 @@ $link = null; if (has_capability('moodle/course:viewparticipants', $coursecontext) || has_capability('moodle/site:viewparticipants', $systemcontext)) { $link = new moodle_url($CFG->wwwroot."/user/index.php", array('id'=>$course->id)); } -if ($course->id===SITEID) { - $PAGE->navbar->ignore_active(); -} -$PAGE->navbar->add($strparticipants, $link); /// If the user being shown is not ourselves, then make sure we are allowed to see them! - if (!$currentuser) { $PAGE->set_title("$strpersonalprofile: "); @@ -170,7 +158,7 @@ if (!$currentuser) { /// We've established they can see the user's name at least, so what about the rest? -$PAGE->navbar->add($struser); +$PAGE->navigation->extend_for_user($user); $PAGE->set_title("$course->fullname: $strpersonalprofile: $fullname"); $PAGE->set_heading($course->fullname); echo $OUTPUT->header();