]> git.mjollnir.org Git - moodle.git/commitdiff
Merge from MOODLE_14_STABLE.
authormartinlanghoff <martinlanghoff>
Wed, 24 Nov 2004 02:25:36 +0000 (02:25 +0000)
committermartinlanghoff <martinlanghoff>
Wed, 24 Nov 2004 02:25:36 +0000 (02:25 +0000)
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  arch-eduforge@catalyst.net.nz--2004/moodle--eduforge--1.3.3--patch-422

admin/cron.php
lib/db/mysql.php
lib/db/mysql.sql
lib/db/postgres7.php
lib/db/postgres7.sql
version.php

index b6e6a81b91d90d346f41bc2bb449e5a42d8edebe..bf078167e733597b5e4bbc4cd54f0d00efd54883 100644 (file)
         }
         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
index 20765236992688539e1b32ef070dd1d3b08bf44b..b570656c7e6492907cfe52a22389241270c8059d 100644 (file)
@@ -976,6 +976,35 @@ function main_upgrade($oldversion=0) {
         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;
 
 }
index e85a028e2802e5d6e86d79ddc80072c27a9c4dd5..b511c12d98d558c4e09043e4eee60d41f7bd5d3d 100644 (file)
@@ -431,7 +431,7 @@ CREATE TABLE `prefix_user_students` (
   `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)
@@ -455,7 +455,7 @@ CREATE TABLE `prefix_user_teachers` (
   `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';
 
index 3cc2ad5145452a0ec0be871a42fb1989597c5a92..e2e454322ba2d04f703ca56851a8ef55506526e8 100644 (file)
@@ -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;
 }
 
index 05da57a471557590cff1ba5bdf950fe527a617d9..824de0bf3f91c05c79e4d22c9d370fbbfed7b48c 100644 (file)
@@ -297,7 +297,7 @@ CREATE TABLE prefix_user_students (
    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);
 
@@ -315,7 +315,7 @@ CREATE TABLE prefix_user_teachers (
    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);
 
index 15e517693c9a0dd38bc40865521a75052e47ed39..47286317b13e05a2eb3e0ac4ad7e711842dd0223 100644 (file)
@@ -6,7 +6,7 @@
 // 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