MDL-55074 navigation: Menu and nav changes

"Grades" belongs in the navigation block, not the settings block.
Course / Activity menus should not include a link to the full settings page list, if it is the same as the menu.
Competencies belongs in the navigation block not the settings block.
This commit is contained in:
Damyon Wiese 2016-10-14 11:58:14 +08:00
parent 70fda55e85
commit d430a7c336
4 changed files with 26 additions and 72 deletions

View file

@ -24,40 +24,6 @@
defined('MOODLE_INTERNAL') || die(); defined('MOODLE_INTERNAL') || die();
/**
* This function extends the course navigation
*
* @param navigation_node $navigation The navigation node to extend
* @param stdClass $course The course to object for the tool
* @param context $coursecontext The context of the course
*/
function tool_lp_extend_navigation_course($navigation, $course, $coursecontext) {
if (!get_config('core_competency', 'enabled')) {
return;
}
// Check access to the course and competencies page.
$capabilities = array('moodle/competency:coursecompetencyview', 'moodle/competency:coursecompetencymanage');
$context = context_course::instance($course->id);
if (!has_any_capability($capabilities, $context) || !can_access_course($course)) {
return;
}
// Just a link to course competency.
$title = get_string('competencies', 'core_competency');
$path = new moodle_url("/admin/tool/lp/coursecompetencies.php", array('courseid' => $course->id));
$settingsnode = navigation_node::create($title,
$path,
navigation_node::TYPE_SETTING,
null,
null,
new pix_icon('i/competencies', ''));
if (isset($settingsnode)) {
$navigation->add_node($settingsnode);
}
}
/** /**
* This function extends the user navigation. * This function extends the user navigation.
* *

View file

@ -3469,7 +3469,7 @@ function course_get_tagged_course_modules($tag, $exclusivemode = false, $fromcon
* This function also handles the frontpage course. * This function also handles the frontpage course.
* *
* @param stdClass $context context object (it can be a course context or the system context for frontpage settings) * @param stdClass $context context object (it can be a course context or the system context for frontpage settings)
* @param stdClass $course the course where the settings are being rendered (only used when $context is set to frontpage) * @param stdClass $course the course where the settings are being rendered
* @return stdClass the navigation options in a course and their availability status * @return stdClass the navigation options in a course and their availability status
* @since Moodle 3.2 * @since Moodle 3.2
*/ */
@ -3512,6 +3512,7 @@ function course_get_user_navigation_options($context, $course = null) {
has_capability('moodle/badges:viewbadges', $context); has_capability('moodle/badges:viewbadges', $context);
// Add view grade report is permitted. // Add view grade report is permitted.
$grades = false; $grades = false;
if (has_capability('moodle/grade:viewall', $context)) { if (has_capability('moodle/grade:viewall', $context)) {
$grades = true; $grades = true;
} else if (!empty($course->showgrades)) { } else if (!empty($course->showgrades)) {
@ -3568,25 +3569,6 @@ function course_get_user_administration_options($course, $context) {
$options->publish = has_capability('moodle/course:publish', $context); $options->publish = has_capability('moodle/course:publish', $context);
$options->reset = has_capability('moodle/course:reset', $context); $options->reset = has_capability('moodle/course:reset', $context);
$options->roles = has_capability('moodle/role:switchroles', $context); $options->roles = has_capability('moodle/role:switchroles', $context);
// Add view grade report is permitted.
$grades = false;
if (has_capability('moodle/grade:viewall', $context)) {
$grades = true;
} else if (!empty($course->showgrades)) {
$reports = core_component::get_plugin_list('gradereport');
if (is_array($reports) && count($reports) > 0) { // Get all installed reports.
arsort($reports); // User is last, we want to test it first.
foreach ($reports as $plugin => $plugindir) {
if (has_capability('gradereport/'.$plugin.':view', $context)) {
// Stop when the first visible plugin is found.
$grades = true;
break;
}
}
}
}
$options->grades = $grades;
} else { } else {
// Set default options to false. // Set default options to false.
$listofoptions = array('tags', 'gradebook', 'outcomes', 'badges', 'import', 'publish', 'reset', 'roles', 'grades'); $listofoptions = array('tags', 'gradebook', 'outcomes', 'badges', 'import', 'publish', 'reset', 'roles', 'grades');

View file

@ -2387,7 +2387,7 @@ class global_navigation extends navigation_node {
$usercoursenode = $userscoursesnode->add($usercourseshortname, new moodle_url('/user/view.php', $usercoursenode = $userscoursesnode->add($usercourseshortname, new moodle_url('/user/view.php',
array('id' => $user->id, 'course' => $usercourse->id)), self::TYPE_CONTAINER); array('id' => $user->id, 'course' => $usercourse->id)), self::TYPE_CONTAINER);
$gradeavailable = has_capability('moodle/grade:viewall', $usercoursecontext); $gradeavailable = has_capability('moodle/grade:view', $usercoursecontext);
if (!$gradeavailable && !empty($usercourse->showgrades) && is_array($reports) && !empty($reports)) { if (!$gradeavailable && !empty($usercourse->showgrades) && is_array($reports) && !empty($reports)) {
foreach ($reports as $plugin => $plugindir) { foreach ($reports as $plugin => $plugindir) {
if (has_capability('gradereport/'.$plugin.':view', $usercoursecontext)) { if (has_capability('gradereport/'.$plugin.':view', $usercoursecontext)) {
@ -2647,7 +2647,7 @@ class global_navigation extends navigation_node {
return true; return true;
} }
$navoptions = course_get_user_navigation_options($this->page->context); $navoptions = course_get_user_navigation_options($this->page->context, $course);
//Participants //Participants
if ($navoptions->participants) { if ($navoptions->participants) {
@ -4158,11 +4158,6 @@ class settings_navigation extends navigation_node {
} }
} }
if ($adminoptions->grades) {
$url = new moodle_url('/grade/report/index.php', array('id'=>$course->id));
$gradenode = $coursenode->add(get_string('grades'), $url, self::TYPE_SETTING, null, 'grades', new pix_icon('i/grades', ''));
}
// Check if we can view the gradebook's setup page. // Check if we can view the gradebook's setup page.
if ($adminoptions->gradebook) { if ($adminoptions->gradebook) {
$url = new moodle_url('/grade/edit/tree/index.php', array('id' => $course->id)); $url = new moodle_url('/grade/edit/tree/index.php', array('id' => $course->id));

View file

@ -554,25 +554,31 @@ class core_renderer extends \core_renderer {
$settingsnode = $this->page->settingsnav->find('frontpage', navigation_node::TYPE_SETTING); $settingsnode = $this->page->settingsnav->find('frontpage', navigation_node::TYPE_SETTING);
if ($settingsnode) { if ($settingsnode) {
// Build an action menu based on the visible nodes from this navigation tree. // Build an action menu based on the visible nodes from this navigation tree.
$this->build_action_menu_from_navigation($menu, $settingsnode, false, true); $skipped = $this->build_action_menu_from_navigation($menu, $settingsnode, false, true);
// We only add a list to the full settings menu if we didn't include every node in the short menu.
if ($skipped) {
$text = get_string('frontpagesettings'); $text = get_string('frontpagesettings');
$url = new moodle_url('/course/admin.php', array('courseid' => $this->page->course->id)); $url = new moodle_url('/course/admin.php', array('courseid' => $this->page->course->id));
$link = new action_link($url, $text, null, null, new pix_icon('t/edit', $text)); $link = new action_link($url, $text, null, null, new pix_icon('t/edit', $text));
$menu->add_secondary_action($link); $menu->add_secondary_action($link);
} }
}
} else if ($node->type == navigation_node::TYPE_COURSE) { } else if ($node->type == navigation_node::TYPE_COURSE) {
$settingsnode = $this->page->settingsnav->find('courseadmin', navigation_node::TYPE_COURSE); $settingsnode = $this->page->settingsnav->find('courseadmin', navigation_node::TYPE_COURSE);
if ($settingsnode) { if ($settingsnode) {
// Build an action menu based on the visible nodes from this navigation tree. // Build an action menu based on the visible nodes from this navigation tree.
$this->build_action_menu_from_navigation($menu, $settingsnode, false, true); $skipped = $this->build_action_menu_from_navigation($menu, $settingsnode, false, true);
// We only add a list to the full settings menu if we didn't include every node in the short menu.
if ($skipped) {
$text = get_string('courseadministration'); $text = get_string('courseadministration');
$url = new moodle_url('/course/admin.php', array('courseid' => $this->page->course->id)); $url = new moodle_url('/course/admin.php', array('courseid' => $this->page->course->id));
$link = new action_link($url, $text, null, null, new pix_icon('t/edit', $text)); $link = new action_link($url, $text, null, null, new pix_icon('t/edit', $text));
$menu->add_secondary_action($link); $menu->add_secondary_action($link);
} }
} }
}
} else if ($context->contextlevel == CONTEXT_USER) { } else if ($context->contextlevel == CONTEXT_USER) {
$items = $this->page->navbar->get_items(); $items = $this->page->navbar->get_items();
$node = end($items); $node = end($items);
@ -629,15 +635,18 @@ class core_renderer extends \core_renderer {
* @param navigation_node $node * @param navigation_node $node
* @param boolean $indent * @param boolean $indent
* @param boolean $onlytopleafnodes * @param boolean $onlytopleafnodes
* @return boolean nodesskipped - True if nodes were skipped in building the menu
*/ */
private function build_action_menu_from_navigation(action_menu $menu, private function build_action_menu_from_navigation(action_menu $menu,
navigation_node $node, navigation_node $node,
$indent = false, $indent = false,
$onlytopleafnodes = false) { $onlytopleafnodes = false) {
$skipped = false;
// Build an action menu based on the visible nodes from this navigation tree. // Build an action menu based on the visible nodes from this navigation tree.
foreach ($node->children as $menuitem) { foreach ($node->children as $menuitem) {
if ($menuitem->display) { if ($menuitem->display) {
if ($onlytopleafnodes && $menuitem->children->count()) { if ($onlytopleafnodes && $menuitem->children->count()) {
$skipped = true;
continue; continue;
} }
if ($menuitem->action) { if ($menuitem->action) {
@ -652,14 +661,16 @@ class core_renderer extends \core_renderer {
} }
} else { } else {
if ($onlytopleafnodes) { if ($onlytopleafnodes) {
$skipped = true;
continue; continue;
} }
$link = $menuitem->text; $link = $menuitem->text;
} }
$menu->add_secondary_action($link); $menu->add_secondary_action($link);
$this->build_action_menu_from_navigation($menu, $menuitem, true); $skipped = $skipped || $this->build_action_menu_from_navigation($menu, $menuitem, true);
} }
} }
return $skipped;
} }
} }