}
flush();
-
- /// Delete duplicate enrolments (don't know what causes these yet - expired sessions?)
-
- 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();
-
-
/// Delete old logs to save space (this might need a timer to slow it down...)
if (!empty($CFG->loglifetime)) { // value in days
execute_sql("ALTER TABLE `{$CFG->prefix}user_teachers` ADD INDEX enrol (enrol);");
}
+ 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();
+
+ modify_database('','ALTER TABLE prefix_user_students DROP INDEX courseuserid;');
+ modify_database('','ALTER TABLE prefix_user_students ADD UNIQUE INDEX courseuserid(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();
+ modify_database('','ALTER TABLE prefix_user_teachers DROP INDEX courseuserid;');
+ modify_database('','ALTER TABLE prefix_user_teachers ADD UNIQUE INDEX courseuserid(course,userid);');
+ }
+
return $result;
}
`enrol` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
- KEY `courseuserid` (course,userid),
+ UNIQUE KEY `courseuserid` (course,userid),
KEY `userid` (userid),
KEY `enrol` (enrol),
KEY `timeaccess` (timeaccess)
`timeaccess` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
- KEY `courseuserid` (course,userid),
+ KEY UNIQUE `courseuserid` (course,userid),
KEY `userid` (userid)
) TYPE=MyISAM COMMENT='One record per teacher per course';
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;
}
enrol varchar (20) NOT NULL default ''
);
-CREATE INDEX prefix_user_students_courseuserid_idx ON prefix_user_students (course,userid);
+CREATE UNIQUE INDEX prefix_user_students_courseuserid_uk ON prefix_user_students (course,userid);
CREATE INDEX prefix_user_students_userid_idx ON prefix_user_students (userid);
CREATE INDEX prefix_user_students_enrol_idx ON prefix_user_students (enrol);
enrol varchar (20) NOT NULL default ''
);
-CREATE INDEX prefix_user_teachers_courseuserid_idx ON prefix_user_teachers (course,userid);
+CREATE UNIQUE INDEX prefix_user_teachers_courseuserid_uk ON prefix_user_teachers (course,userid);
CREATE INDEX prefix_user_teachers_userid_idx ON prefix_user_teachers (userid);
CREATE INDEX prefix_user_teachers_enrol_idx ON prefix_user_teachers (enrol);
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
- $version = 2004112300; // YYYYMMDD = date of first major branch release 1.4
+ $version = 2004112400; // YYYYMMDD = date of first major branch release 1.4
// XY = increments within a single day
$release = '1.5 UNSTABLE DEVELOPMENT'; // Human-friendly version name