From 7dff2888cf9f3eaceaa997e75623f20bce92bd30 Mon Sep 17 00:00:00 2001 From: Justus Dieckmann <45795270+justusdieckmann@users.noreply.github.com> Date: Fri, 18 Sep 2020 16:03:16 +0200 Subject: [PATCH] Add Upgrade-Step that removes processes with deleted courses --- classes/local/manager/process_manager.php | 17 +++++++++++++---- db/upgrade.php | 13 +++++++++++++ version.php | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/classes/local/manager/process_manager.php b/classes/local/manager/process_manager.php index fbc806f..f8b28c9 100644 --- a/classes/local/manager/process_manager.php +++ b/classes/local/manager/process_manager.php @@ -230,10 +230,19 @@ class process_manager { 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); + self::abort_process($process); } } + + /** + * Aborts a running process. + * @param process $process The process to abort. + * @throws \dml_exception + */ + public static function abort_process($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/upgrade.php b/db/upgrade.php index 1ee58e3..6de05fb 100644 --- a/db/upgrade.php +++ b/db/upgrade.php @@ -433,5 +433,18 @@ function xmldb_tool_lifecycle_upgrade($oldversion) { upgrade_plugin_savepoint(true, 2019082300, 'tool', 'lifecycle'); } + if ($oldversion < 2020091800) { + $sql = "SELECT p.* FROM {tool_lifecycle_process} p " . + "LEFT JOIN {course} c ON p.courseid = c.id " . + "WHERE c.id IS NULL"; + $processes = $DB->get_records_sql($sql); + foreach ($processes as $procrecord) { + $process = \tool_lifecycle\local\entity\process::from_record($procrecord); + \tool_lifecycle\local\manager\process_manager::abort_process($process); + } + + upgrade_plugin_savepoint(true, 2020091800, 'tool', 'lifecycle'); + } + return true; } \ No newline at end of file diff --git a/version.php b/version.php index aaf1936..947b0b6 100644 --- a/version.php +++ b/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die; $plugin->maturity = MATURITY_BETA; -$plugin->version = 2020060500; +$plugin->version = 2020091800; $plugin->component = 'tool_lifecycle'; $plugin->requires = 2017111300; // Require Moodle 3.4 (or above). $plugin->release = 'v3.9-r1'; -- GitLab