Skip to content
Snippets Groups Projects
Unverified Commit 4ba6ca1d authored by Laur0r's avatar Laur0r Committed by GitHub
Browse files

Merge pull request #117 from learnweb/fix/abort-deleted-processes

Abort and delete processes whose courses got deleted
parents 50abf17a 4ab596c6
Branches
Tags
No related merge requests found
......@@ -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,28 @@ 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) {
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);
}
}
<?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',
)
);
......@@ -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
......@@ -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) {
}
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment