Merge from MOODLE_14_STABLE.
Student and teacher enrolments now unique + version bump Made student and teacher enrolments unique, enforced at the database level. This patch also removes a cleanup job in moodle's cron that removed duplicate enrolments. Merge of patchset [email protected]/moodle--eduforge--1.3.3--patch-422
This commit is contained in:
@@ -722,6 +722,43 @@ function main_upgrade($oldversion=0) {
|
||||
execute_sql("UPDATE {$CFG->prefix}log_display SET field='firstname||\' \'||lastname' WHERE module='course' AND action='user report' AND mtable='user'");
|
||||
}
|
||||
|
||||
if ($oldversion < 2004112400) {
|
||||
|
||||
/// Delete duplicate enrolments
|
||||
/// and then tell the database course,userid is a unique combination
|
||||
if ($users = get_records_select("user_students", "userid > 0 GROUP BY course, userid ".
|
||||
"HAVING count(*) > 1", "", "max(id) as id, userid, course ,count(*)")) {
|
||||
foreach ($users as $user) {
|
||||
delete_records_select("user_students", "userid = '$user->userid' ".
|
||||
"AND course = '$user->course' AND id <> '$user->id'");
|
||||
}
|
||||
}
|
||||
flush();
|
||||
|
||||
// drop some indexes quietly -- they may or may not exist depending on what version
|
||||
// the user upgrades from
|
||||
execute_sql("DROP INDEX {$CFG->prefix}user_students_courseuserid_idx ", false);
|
||||
execute_sql("DROP INDEX {$CFG->prefix}user_students_courseuserid_uk ", false);
|
||||
modify_database('','CREATE UNIQUE INDEX prefix_user_students_courseuserid_uk ON prefix_user_students (course,userid);');
|
||||
|
||||
/// Delete duplicate teacher enrolments
|
||||
/// and then tell the database course,userid is a unique combination
|
||||
if ($users = get_records_select("user_teachers", "userid > 0 GROUP BY course, userid ".
|
||||
"HAVING count(*) > 1", "", "max(id) as id, userid, course ,count(*)")) {
|
||||
foreach ($users as $user) {
|
||||
delete_records_select("user_teachers", "userid = '$user->userid' ".
|
||||
"AND course = '$user->course' AND id <> '$user->id'");
|
||||
}
|
||||
}
|
||||
flush();
|
||||
|
||||
// drop some indexes quietly -- they may or may not exist depending on what version
|
||||
// the user upgrades from
|
||||
execute_sql("DROP INDEX {$CFG->prefix}user_teachers_courseuserid_idx ", false);
|
||||
execute_sql("DROP INDEX {$CFG->prefix}user_teachers_courseuserid_uk ", false);
|
||||
modify_database('','CREATE UNIQUE INDEX prefix_user_teachers_courseuserid_uk ON prefix_user_teachers (course,userid);');
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user