MDL-48107 tool_monitor: prevent site rule removal when deleting a course

This commit is contained in:
Mark Nelson 2014-11-07 22:50:53 -08:00
parent cbc4ecc7f9
commit 884652378a
2 changed files with 16 additions and 11 deletions

View File

@ -53,13 +53,9 @@ class eventobservers {
* @param \core\event\course_deleted $event The course deleted event.
*/
public static function course_deleted(\core\event\course_deleted $event) {
$rules = rule_manager::get_rules_by_courseid($event->courseid);
$context = null;
if ($event->contextlevel == CONTEXT_COURSE) {
$context = $event->get_context();
}
$rules = rule_manager::get_rules_by_courseid($event->courseid, 0, 0, false);
foreach ($rules as $rule) {
rule_manager::delete_rule($rule->id, $context);
rule_manager::delete_rule($rule->id, $event->get_context());
}
}

View File

@ -216,14 +216,23 @@ class rule_manager {
* @param int $courseid course id of the rule.
* @param int $limitfrom Limit from which to fetch rules.
* @param int $limitto Limit to which rules need to be fetched.
* @param bool $includesite Determines whether we return site wide rules or not.
*
* @return array List of rules for the given course id, also includes system wide rules.
* @return array List of rules for the given course id, if specified will also include site rules.
*/
public static function get_rules_by_courseid($courseid, $limitfrom = 0, $limitto = 0) {
public static function get_rules_by_courseid($courseid, $limitfrom = 0, $limitto = 0, $includesite = true) {
global $DB;
$select = "courseid = ? OR courseid = ?";
$orderby = "courseid DESC, name ASC";
return self::get_instances($DB->get_records_select('tool_monitor_rules', $select, array(0, $courseid), $orderby,
$select = 'courseid = ?';
$params = array();
$params[] = $courseid;
if ($includesite) {
$select .= ' OR courseid = ?';
$params[] = 0;
}
$orderby = 'courseid DESC, name ASC';
return self::get_instances($DB->get_records_select('tool_monitor_rules', $select, $params, $orderby,
'*', $limitfrom, $limitto));
}