From a72c2cd68187497804a3e87a7223eec614114fc9 Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Wed, 4 Sep 2013 11:03:35 +1200 Subject: [PATCH] MDL-40471 badges: Fixes around badge capabilities and navigation --- admin/settings/badges.php | 2 ++ badges/action.php | 6 +++++- badges/criteria.php | 3 ++- badges/edit.php | 6 +++++- badges/newbadge.php | 6 +++++- lib/badgeslib.php | 45 ++++++++++++++++----------------------- 6 files changed, 37 insertions(+), 31 deletions(-) diff --git a/admin/settings/badges.php b/admin/settings/badges.php index 10994fcb086..276582c3ccc 100644 --- a/admin/settings/badges.php +++ b/admin/settings/badges.php @@ -32,6 +32,7 @@ if (($hassiteconfig || has_any_capability(array( 'moodle/badges:createbadge', 'moodle/badges:manageglobalsettings', 'moodle/badges:awardbadge', + 'moodle/badges:configurecriteria', 'moodle/badges:configuremessages', 'moodle/badges:configuredetails', 'moodle/badges:deletebadge'), $systemcontext))) { @@ -74,6 +75,7 @@ if (($hassiteconfig || has_any_capability(array( 'moodle/badges:viewawarded', 'moodle/badges:createbadge', 'moodle/badges:awardbadge', + 'moodle/badges:configurecriteria', 'moodle/badges:configuremessages', 'moodle/badges:configuredetails', 'moodle/badges:deletebadge' diff --git a/badges/action.php b/badges/action.php index ae38fa7f445..f6f9524fa9a 100644 --- a/badges/action.php +++ b/badges/action.php @@ -95,7 +95,11 @@ if ($copy) { require_capability('moodle/badges:createbadge', $context); $cloneid = $badge->make_clone(); - redirect(new moodle_url('/badges/edit.php', array('id' => $cloneid, 'action' => 'details'))); + // If a user can edit badge details, they will be redirected to the edit page. + if (has_capability('moodle/badges:configuredetails', $context)) { + redirect(new moodle_url('/badges/edit.php', array('id' => $cloneid, 'action' => 'details'))); + } + redirect(new moodle_url('/badges/overview.php', array('id' => $cloneid))); } if ($activate) { diff --git a/badges/criteria.php b/badges/criteria.php index 9bfd389539d..7a1e0e4f1ef 100644 --- a/badges/criteria.php +++ b/badges/criteria.php @@ -40,6 +40,8 @@ $badge = new badge($badgeid); $context = $badge->get_context(); $navurl = new moodle_url('/badges/index.php', array('type' => $badge->type)); +require_capability('moodle/badges:configurecriteria', $context); + if ($badge->type == BADGE_TYPE_COURSE) { if (empty($CFG->badges_allowcoursebadges)) { print_error('coursebadgesdisabled', 'badges'); @@ -66,7 +68,6 @@ $emsg = optional_param('emsg', '', PARAM_TEXT); if ((($update == BADGE_CRITERIA_AGGREGATION_ALL) || ($update == BADGE_CRITERIA_AGGREGATION_ANY))) { require_sesskey(); - require_capability('moodle/badges:configurecriteria', $context); $obj = new stdClass(); $obj->id = $badge->criteria[BADGE_CRITERIA_TYPE_OVERALL]->id; $obj->method = $update; diff --git a/badges/edit.php b/badges/edit.php index 1c915622031..b0a478359e9 100644 --- a/badges/edit.php +++ b/badges/edit.php @@ -41,7 +41,11 @@ $badge = new badge($badgeid); $context = $badge->get_context(); $navurl = new moodle_url('/badges/index.php', array('type' => $badge->type)); -require_capability('moodle/badges:configuredetails', $context); +if ($action == 'message') { + require_capability('moodle/badges:configuremessages', $context); +} else { + require_capability('moodle/badges:configuredetails', $context); +} if ($badge->type == BADGE_TYPE_COURSE) { if (empty($CFG->badges_allowcoursebadges)) { diff --git a/badges/newbadge.php b/badges/newbadge.php index 91c316c158d..756ef911d5a 100644 --- a/badges/newbadge.php +++ b/badges/newbadge.php @@ -98,7 +98,11 @@ if ($form->is_cancelled()) { $newbadge = new badge($newid); badges_process_badge_image($newbadge, $form->save_temp_file('image')); - redirect(new moodle_url('/badges/criteria.php', array('id' => $newid))); + // If a user can configure badge criteria, they will be redirected to the criteria page. + if (has_capability('moodle/badges:configurecriteria', $PAGE->context)) { + redirect(new moodle_url('/badges/criteria.php', array('id' => $newid))); + } + redirect(new moodle_url('/badges/overview.php', array('id' => $newid))); } echo $OUTPUT->header(); diff --git a/lib/badgeslib.php b/lib/badgeslib.php index 49014568113..c275ea53c1f 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -895,38 +895,29 @@ function badges_add_course_navigation(navigation_node $coursenode, stdClass $cou $coursecontext = context_course::instance($course->id); $isfrontpage = (!$coursecontext || $course->id == $SITE->id); + $canmanage = has_any_capability(array('moodle/badges:viewawarded', + 'moodle/badges:createbadge', + 'moodle/badges:awardbadge', + 'moodle/badges:configurecriteria', + 'moodle/badges:configuremessages', + 'moodle/badges:configuredetails', + 'moodle/badges:deletebadge'), $coursecontext); - if (!empty($CFG->enablebadges) && !empty($CFG->badges_allowcoursebadges) && !$isfrontpage) { - if (has_capability('moodle/badges:configuredetails', $coursecontext)) { - $coursenode->add(get_string('coursebadges', 'badges'), null, - navigation_node::TYPE_CONTAINER, null, 'coursebadges', - new pix_icon('i/badge', get_string('coursebadges', 'badges'))); + if (!empty($CFG->enablebadges) && !empty($CFG->badges_allowcoursebadges) && !$isfrontpage && $canmanage) { + $coursenode->add(get_string('coursebadges', 'badges'), null, + navigation_node::TYPE_CONTAINER, null, 'coursebadges', + new pix_icon('i/badge', get_string('coursebadges', 'badges'))); - if (has_capability('moodle/badges:viewawarded', $coursecontext)) { - $url = new moodle_url('/badges/index.php', - array('type' => BADGE_TYPE_COURSE, 'id' => $course->id)); + $url = new moodle_url('/badges/index.php', array('type' => BADGE_TYPE_COURSE, 'id' => $course->id)); - $coursenode->get('coursebadges')->add(get_string('managebadges', 'badges'), $url, - navigation_node::TYPE_SETTING, null, 'coursebadges'); - } + $coursenode->get('coursebadges')->add(get_string('managebadges', 'badges'), $url, + navigation_node::TYPE_SETTING, null, 'coursebadges'); - if (has_capability('moodle/badges:createbadge', $coursecontext)) { - $url = new moodle_url('/badges/newbadge.php', - array('type' => BADGE_TYPE_COURSE, 'id' => $course->id)); + if (has_capability('moodle/badges:createbadge', $coursecontext)) { + $url = new moodle_url('/badges/newbadge.php', array('type' => BADGE_TYPE_COURSE, 'id' => $course->id)); - $coursenode->get('coursebadges')->add(get_string('newbadge', 'badges'), $url, - navigation_node::TYPE_SETTING, null, 'newbadge'); - } - } else if (has_capability('moodle/badges:awardbadge', $coursecontext)) { - $coursenode->add(get_string('coursebadges', 'badges'), null, - navigation_node::TYPE_CONTAINER, null, 'coursebadges', - new pix_icon('i/badge', get_string('coursebadges', 'badges'))); - - $url = new moodle_url('/badges/index.php', - array('type' => BADGE_TYPE_COURSE, 'id' => $course->id)); - - $coursenode->get('coursebadges')->add(get_string('managebadges', 'badges'), $url, - navigation_node::TYPE_SETTING, null, 'coursebadges'); + $coursenode->get('coursebadges')->add(get_string('newbadge', 'badges'), $url, + navigation_node::TYPE_SETTING, null, 'newbadge'); } } }