From 30abb3433bfffa5db6d4b8cb125d94d8e20699c3 Mon Sep 17 00:00:00 2001 From: Justus Dieckmann <justusdieckmann@wwu.de> Date: Mon, 27 Jul 2020 02:00:35 +0200 Subject: [PATCH] Abort and delete processes whose courses got deleted --- classes/local/manager/process_manager.php | 16 ++++++++++++ db/events.php | 32 +++++++++++++++++++++++ step/lib.php | 9 +++++++ 3 files changed, 57 insertions(+) create mode 100644 db/events.php diff --git a/classes/local/manager/process_manager.php b/classes/local/manager/process_manager.php index 48268d6..fbc806f 100644 --- a/classes/local/manager/process_manager.php +++ b/classes/local/manager/process_manager.php @@ -23,6 +23,7 @@ */ namespace tool_lifecycle\local\manager; +use core\event\course_deleted; use tool_lifecycle\local\entity\process; use tool_lifecycle\event\process_proceeded; use tool_lifecycle\event\process_rollback; @@ -220,4 +221,19 @@ class process_manager { return null; } } + + /** + * Callback for the course deletion observer. + * @param course_deleted $event The course deletion event. + * @throws \dml_exception + */ + public static function course_deletion_observed($event) { + $process = self::get_process_by_course_id($event->get_data()['courseid']); + if ($process) { + $step = step_manager::get_step_instance_by_workflow_index($process->workflowid, $process->stepindex); + $steplib = lib_manager::get_step_lib($step->subpluginname); + $steplib->abort_course($process); + self::remove_process($process); + } + } } diff --git a/db/events.php b/db/events.php new file mode 100644 index 0000000..fa9c644 --- /dev/null +++ b/db/events.php @@ -0,0 +1,32 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. + +/** + * Event observer. + * + * @package tool_lifecycle + * @copyright 2020 Justus Dieckmann WWU + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$observers = array( + array( + 'eventname' => 'core\event\course_deleted', + 'callback' => 'tool_lifecycle\local\manager\process_manager::course_deletion_observed', + ) +); diff --git a/step/lib.php b/step/lib.php index 03018d9..f544e9e 100644 --- a/step/lib.php +++ b/step/lib.php @@ -24,6 +24,7 @@ */ namespace tool_lifecycle\step; +use tool_lifecycle\local\entity\process; use tool_lifecycle\local\manager\step_manager; use tool_lifecycle\local\response\step_response; @@ -123,6 +124,14 @@ abstract class libbase { public function extend_add_instance_form_definition_after_data($mform, $settings) { } + /** + * This method can be overridden. It is called when a course and the + * corresponding process get deleted. + * @param process $process the process that was aborted. + */ + public function abort_course($process) { + } + } /** -- GitLab