From 906fb8f883560ea095bc1bc1e15fc9b86074db75 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Thu, 20 May 2010 07:59:13 +0000 Subject: [PATCH] MDL-17445 course deletion cleanup and adding new event that is triggered after removing course content --- lib/db/events.php | 5 +++- lib/moodlelib.php | 60 +++++++++++++---------------------------------- 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/lib/db/events.php b/lib/db/events.php index e5f7998d4fe..39079774974 100644 --- a/lib/db/events.php +++ b/lib/db/events.php @@ -33,6 +33,8 @@ $handlers = array ( /* * portfolio queued event - for non interactive file transfers + * NOTE: this is a hack, please do not add any more things like this here + * (it is just abusing cron to do very time consuming things which is wrong) */ 'portfolio_send' => array ( 'handlerfile' => '/lib/portfolio.php', @@ -63,6 +65,7 @@ course_category_deleted - object course_categories table record course_created - object course table record course_updated - object course table record +course_content_removed - object course table record course_deleted - object course table record ==== group related events ==== @@ -83,7 +86,7 @@ groups_groupings_groups_removed - int course id - removed all groups from all gr groups_groups_deleted - int course id - deleted all course groups groups_groupings_deleted - int course id - deleted all course groupings -==== role related evetns ==== +==== role related events ==== role_assigned - object role_assignments table record role_unassigned - object role_assignments table record diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 16980c85b79..5443aacad05 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -4018,7 +4018,6 @@ function set_login_session_preferences() { */ function delete_course($courseorid, $showfeedback = true) { global $CFG, $DB, $OUTPUT; - $result = true; if (is_object($courseorid)) { $courseid = $courseorid->id; @@ -4035,36 +4034,17 @@ function delete_course($courseorid, $showfeedback = true) { return false; } - if (!remove_course_contents($courseid, $showfeedback)) { - if ($showfeedback) { - echo $OUTPUT->notification("An error occurred while deleting some of the course contents."); - } - $result = false; - } + remove_course_contents($courseid, $showfeedback); $DB->delete_records("course", array("id"=>$courseid)); -/// Delete all roles and overiddes in the course context - if (!delete_context(CONTEXT_COURSE, $courseid)) { - if ($showfeedback) { - echo $OUTPUT->notification("An error occurred while deleting the main course context."); - } - $result = false; - } + // Delete all roles and overiddes in the course context + delete_context(CONTEXT_COURSE, $courseid); - if (!fulldelete($CFG->dataroot.'/'.$courseid)) { - if ($showfeedback) { - echo $OUTPUT->notification("An error occurred while deleting the course files."); - } - $result = false; - } + //trigger events + events_trigger('course_deleted', $course); - if ($result) { - //trigger events - events_trigger('course_deleted', $course); - } - - return $result; + return true; } /** @@ -4084,12 +4064,8 @@ function remove_course_contents($courseid, $showfeedback=true) { require_once($CFG->libdir.'/questionlib.php'); require_once($CFG->libdir.'/gradelib.php'); - $result = true; - - if (! $course = $DB->get_record('course', array('id'=>$courseid))) { - print_error('invalidcourseid'); - } - $context = get_context_instance(CONTEXT_COURSE, $courseid); + $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST); + $context = get_context_instance(CONTEXT_COURSE, $courseid, MUST_EXIST); $strdeleted = get_string('deleted'); @@ -4132,7 +4108,6 @@ function remove_course_contents($courseid, $showfeedback=true) { } else { echo $OUTPUT->notification('Could not delete '. $modname .' instance '. $instance->id .' ('. format_string($instance->name) .')'); - $result = false; } if ($cm) { // delete cm and its context in correct order @@ -4143,7 +4118,6 @@ function remove_course_contents($courseid, $showfeedback=true) { } } else { echo $OUTPUT->notification('Function '.$moddelete.'() doesn\'t exist!'); - $result = false; } if (function_exists($moddeletecourse)) { @@ -4154,8 +4128,6 @@ function remove_course_contents($courseid, $showfeedback=true) { echo $OUTPUT->notification($strdeleted .' '. $count .' x '. $modname); } } - } else { - print_error('nomodules', 'debug'); } /// Delete course blocks @@ -4180,13 +4152,7 @@ function remove_course_contents($courseid, $showfeedback=true) { 'backup_log' => 'courseid' ); foreach ($tablestoclear as $table => $col) { - if ($DB->delete_records($table, array($col=>$course->id))) { - if ($showfeedback) { - echo $OUTPUT->notification($strdeleted . ' ' . $table); - } - } else { - $result = false; - } + $DB->delete_records($table, array($col=>$course->id)); } @@ -4220,7 +4186,13 @@ function remove_course_contents($courseid, $showfeedback=true) { require_once($CFG->dirroot.'/tag/coursetagslib.php'); coursetag_delete_course_tags($course->id, $showfeedback); - return $result; + // Delete legacy files + fulldelete($CFG->dataroot.'/'.$courseid); + + //trigger events + events_trigger('course_content_removed', $course); + + return true; } /**