diff --git a/admin/tool/cohortroles/classes/api.php b/admin/tool/cohortroles/classes/api.php index 89f54aea73d..335272c99f0 100644 --- a/admin/tool/cohortroles/classes/api.php +++ b/admin/tool/cohortroles/classes/api.php @@ -179,6 +179,7 @@ class api { AND ra.roleid = :roleid AND ra.userid = :userid WHERE cm.cohortid ' . $cohortsql . ' + AND u.deleted = 0 AND ra.id IS NULL'; $toadd = $DB->get_records_sql($sql, $params); diff --git a/admin/tool/cohortroles/classes/observers.php b/admin/tool/cohortroles/classes/observers.php new file mode 100644 index 00000000000..4e2d6907ad0 --- /dev/null +++ b/admin/tool/cohortroles/classes/observers.php @@ -0,0 +1,43 @@ +. + +declare(strict_types=1); + +namespace tool_cohortroles; + +use core\event\user_deleted; + +/** + * Plugin event observer callbacks + * + * @package tool_cohortroles + * @copyright 2023 Paul Holden + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class observers { + + /** + * User deleted event, remove cohort role assignments specific to them + * + * @param user_deleted $event + */ + public static function user_deleted(user_deleted $event): void { + $cohortroleassignments = cohort_role_assignment::get_records(['userid' => $event->objectid]); + foreach ($cohortroleassignments as $cohortroleassignment) { + $cohortroleassignment->delete(); + } + } +} diff --git a/admin/tool/cohortroles/db/events.php b/admin/tool/cohortroles/db/events.php new file mode 100644 index 00000000000..53d982aa150 --- /dev/null +++ b/admin/tool/cohortroles/db/events.php @@ -0,0 +1,32 @@ +. + +/** + * Plugin event observers + * + * @package tool_cohortroles + * @copyright 2023 Paul Holden + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$observers = [ + [ + 'eventname' => '\core\event\user_deleted', + 'callback' => '\tool_cohortroles\observers::user_deleted', + ], +]; diff --git a/admin/tool/cohortroles/db/upgrade.php b/admin/tool/cohortroles/db/upgrade.php index b08f4ca8d06..7c2e0b188d4 100644 --- a/admin/tool/cohortroles/db/upgrade.php +++ b/admin/tool/cohortroles/db/upgrade.php @@ -50,5 +50,13 @@ function xmldb_tool_cohortroles_upgrade($oldversion) { // Automatically generated Moodle v4.1.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2022112801) { + // Delete any tool_cohortroles mappings for users who no longer exist. + $DB->delete_records_select('tool_cohortroles', 'userid NOT IN (SELECT id FROM {user} WHERE deleted = 0)'); + + // Cohortroles savepoint reached. + upgrade_plugin_savepoint(true, 2022112801, 'tool', 'cohortroles'); + } + return true; } diff --git a/admin/tool/cohortroles/version.php b/admin/tool/cohortroles/version.php index fcc1c5bf77b..68d041d8832 100644 --- a/admin/tool/cohortroles/version.php +++ b/admin/tool/cohortroles/version.php @@ -24,8 +24,7 @@ defined('MOODLE_INTERNAL') || die(); - -$plugin->version = 2022112800; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2022112801; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2022111800; // Requires this Moodle version. $plugin->component = 'tool_cohortroles'; // Full name of the plugin (used for diagnostics).