diff --git a/admin/tool/monitor/classes/output/managerules/renderable.php b/admin/tool/monitor/classes/output/managerules/renderable.php index d37b73455ce..d0338f02db5 100644 --- a/admin/tool/monitor/classes/output/managerules/renderable.php +++ b/admin/tool/monitor/classes/output/managerules/renderable.php @@ -164,29 +164,32 @@ class renderable extends \table_sql implements \renderable { */ public function col_manage(\tool_monitor\rule $rule) { global $OUTPUT, $CFG; + $manage = ''; - // We don't need to check for capability at course level since, user is never shown this page, - // if he doesn't have the capability. + + // Do not allow the user to edit the rule unless they have the system capability, or we are viewing the rules + // for a course, and not the site. Note - we don't need to check for the capability at a course level since + // the user is never shown this page otherwise. if ($this->hassystemcap || ($rule->courseid != 0)) { - // There might be site rules which the user can not manage. $editurl = new \moodle_url($CFG->wwwroot. '/admin/tool/monitor/edit.php', array('ruleid' => $rule->id, 'courseid' => $rule->courseid, 'sesskey' => sesskey())); - $copyurl = new \moodle_url($CFG->wwwroot. '/admin/tool/monitor/managerules.php', - array('ruleid' => $rule->id, 'action' => 'copy', 'courseid' => $this->courseid, 'sesskey' => sesskey())); - $deleteurl = new \moodle_url($CFG->wwwroot. '/admin/tool/monitor/managerules.php', array('ruleid' => $rule->id, - 'action' => 'delete', 'courseid' => $rule->courseid, 'sesskey' => sesskey())); - $icon = $OUTPUT->render(new \pix_icon('t/edit', get_string('editrule', 'tool_monitor'))); $manage .= \html_writer::link($editurl, $icon, array('class' => 'action-icon')); + } - $icon = $OUTPUT->render(new \pix_icon('t/copy', get_string('duplicaterule', 'tool_monitor'))); - $manage .= \html_writer::link($copyurl, $icon, array('class' => 'action-icon')); + // The user should always be able to copy the rule if they are able to view the page. + $copyurl = new \moodle_url($CFG->wwwroot. '/admin/tool/monitor/managerules.php', + array('ruleid' => $rule->id, 'action' => 'copy', 'courseid' => $this->courseid, 'sesskey' => sesskey())); + $icon = $OUTPUT->render(new \pix_icon('t/copy', get_string('duplicaterule', 'tool_monitor'))); + $manage .= \html_writer::link($copyurl, $icon, array('class' => 'action-icon')); + if ($this->hassystemcap || ($rule->courseid != 0)) { + $deleteurl = new \moodle_url($CFG->wwwroot. '/admin/tool/monitor/managerules.php', array('ruleid' => $rule->id, + 'action' => 'delete', 'courseid' => $rule->courseid, 'sesskey' => sesskey())); $icon = $OUTPUT->render(new \pix_icon('t/delete', get_string('deleterule', 'tool_monitor'))); $manage .= \html_writer::link($deleteurl, $icon, array('class' => 'action-icon')); - } else { - $manage = get_string('nopermission', 'tool_monitor'); } + return $manage; } diff --git a/admin/tool/monitor/lang/en/tool_monitor.php b/admin/tool/monitor/lang/en/tool_monitor.php index 25b2198115a..77cd215edd2 100644 --- a/admin/tool/monitor/lang/en/tool_monitor.php +++ b/admin/tool/monitor/lang/en/tool_monitor.php @@ -62,7 +62,6 @@ $string['manage'] = 'Manage'; $string['managesubscriptions'] = 'Event monitoring'; $string['managerules'] = 'Event monitoring rules'; $string['messageprovider:notification'] = 'Notifications of rule subscriptions'; -$string['nopermission'] = 'No permission'; $string['messagetemplate'] = 'Notification message'; $string['messagetemplate_help'] = 'A notification message is sent to subscribers once the notification threshold has been reached. It can include any or all of the following placeholders:

diff --git a/admin/tool/monitor/managerules.php b/admin/tool/monitor/managerules.php index acfaef20239..e914cef738a 100644 --- a/admin/tool/monitor/managerules.php +++ b/admin/tool/monitor/managerules.php @@ -78,13 +78,14 @@ if (!empty($action) && $ruleid) { echo $OUTPUT->header(); $rule = \tool_monitor\rule_manager::get_rule($rule); - if ($rule->can_manage_rule()) { - switch ($action) { - case 'copy' : - $rule->duplicate_rule($courseid); - echo $OUTPUT->notification(get_string('rulecopysuccess', 'tool_monitor'), 'notifysuccess'); - break; - case 'delete' : + switch ($action) { + case 'copy': + // No need to check for capability here as it is done at the start of the page. + $rule->duplicate_rule($courseid); + echo $OUTPUT->notification(get_string('rulecopysuccess', 'tool_monitor'), 'notifysuccess'); + break; + case 'delete': + if ($rule->can_manage_rule()) { $confirmurl = new moodle_url($CFG->wwwroot. '/admin/tool/monitor/managerules.php', array('ruleid' => $ruleid, 'courseid' => $courseid, 'action' => 'delete', 'confirm' => true, 'sesskey' => sesskey())); @@ -103,12 +104,12 @@ if (!empty($action) && $ruleid) { echo $OUTPUT->footer(); exit(); } - break; - default: - } - } else { - // User doesn't have permissions. Should never happen for real users. - throw new moodle_exception('rulenopermissions', 'tool_monitor', $manageurl, $action); + } else { + // User doesn't have permissions. Should never happen for real users. + throw new moodle_exception('rulenopermissions', 'tool_monitor', $manageurl, $action); + } + break; + default: } } else { echo $OUTPUT->header(); diff --git a/admin/tool/monitor/tests/behat/rule.feature b/admin/tool/monitor/tests/behat/rule.feature index 6f803e641af..5125284984a 100644 --- a/admin/tool/monitor/tests/behat/rule.feature +++ b/admin/tool/monitor/tests/behat/rule.feature @@ -97,7 +97,7 @@ Feature: tool_monitor_rule Given I log in as "teacher1" And I follow "Course 1" And I navigate to "Event monitoring rules" node in "Course administration > Reports" - When I click on "Duplicate rule" "link" + When I click on "Duplicate rule" "link" in the "New rule course level" "table_row" Then I should see "Rule successfully duplicated" And "#toolmonitorrules_r1" "css_element" should appear before "#toolmonitorrules_r2" "css_element" And I should see "New rule" @@ -153,9 +153,10 @@ Feature: tool_monitor_rule And I should see "5 time(s) in 5 minute(s)" Scenario: Duplicate a rule on site level - Given I log in as "admin" - And I navigate to "Event monitoring rules" node in "Site administration > Reports" - When I click on "Duplicate rule" "link" + Given I log in as "teacher1" + And I follow "Course 1" + And I navigate to "Event monitoring rules" node in "Course administration > Reports" + When I click on "Duplicate rule" "link" in the "New rule site level" "table_row" Then I should see "Rule successfully duplicated" And "#toolmonitorrules_r2" "css_element" should appear after "#toolmonitorrules_r1" "css_element" And I should see "I want a rule to monitor posts created on a forum"