diff --git a/course/classes/task/course_delete_modules.php b/course/classes/task/course_delete_modules.php new file mode 100644 index 00000000000..3770537451a --- /dev/null +++ b/course/classes/task/course_delete_modules.php @@ -0,0 +1,62 @@ +. + +/** + * Adhoc task handling course module deletion. + * + * @package core_course + * @copyright 2016 Jake Dallimore + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core_course\task; + +defined('MOODLE_INTERNAL') || die(); +/** + * Class handling course module deletion. + * + * This task supports an array of course module object as custom_data, and calls course_delete_module() in synchronous deletion + * mode for each of them. + * This will: + * 1. call any 'mod_xxx_pre_course_module_deleted' functions (e.g. Recycle bin) + * 2. delete the module + * 3. fire the deletion event + * + * @package core_course + * @copyright 2016 Jake Dallimore + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_delete_modules extends \core\task\adhoc_task { + + /** + * Run the deletion task. + * + * @throws \coding_exception if the module could not be removed. + */ + public function execute() { + global $CFG; + require_once($CFG->dirroot. '/course/lib.php'); + + $cms = $this->get_custom_data()->cms; + foreach ($cms as $cm) { + try { + course_delete_module($cm->id); + } catch (\Exception $e) { + throw new \coding_exception("The course module {$cm->id} could not be deleted. $e->getTraceAsString()"); + } + } + } +}