From 187a7f7ac5760c9158114f66695ed0236c36b1d2 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Thu, 1 Dec 2022 12:12:59 +0000 Subject: [PATCH] MDL-76536 enrol: prevent invalid role assignments in course creation. Upgrade step to fixup existing bad data. --- lib/db/upgrade.php | 11 +++++++++++ lib/enrollib.php | 6 +++++- version.php | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index f07db5c2196..1034c75d39f 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -3034,5 +3034,16 @@ privatefiles,moodle|/user/files.php'; // Automatically generated Moodle v4.1.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2022112800.03) { + + // Remove any orphaned role assignment records (pointing to non-existing roles). + $DB->delete_records_select('role_assignments', 'NOT EXISTS ( + SELECT r.id FROM {role} r WHERE r.id = {role_assignments}.roleid + )'); + + // Main savepoint reached. + upgrade_main_savepoint(true, 2022112800.03); + } + return true; } diff --git a/lib/enrollib.php b/lib/enrollib.php index 8f1cb302cac..012f694c349 100644 --- a/lib/enrollib.php +++ b/lib/enrollib.php @@ -1211,8 +1211,12 @@ function enrol_try_internal_enrol($courseid, $userid, $roleid = null, $timestart if (!$instances = $DB->get_records('enrol', array('enrol'=>'manual', 'courseid'=>$courseid, 'status'=>ENROL_INSTANCE_ENABLED), 'sortorder,id ASC')) { return false; } - $instance = reset($instances); + if ($roleid && !$DB->record_exists('role', ['id' => $roleid])) { + return false; + } + + $instance = reset($instances); $enrol->enrol_user($instance, $userid, $roleid, $timestart, $timeend); return true; diff --git a/version.php b/version.php index b670c6da52f..abe3dfbaa22 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2022112800.02; // 20221128 = branching date YYYYMMDD - do not modify! +$version = 2022112800.03; // 20221128 = branching date YYYYMMDD - do not modify! // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.1+ (Build: 20221209)'; // Human-friendly version name