Merge branch 'master_MDL-27368' of git://github.com/danmarsden/moodle

Conflicts:
	version.php
    lib/db/upgrade.php
This commit is contained in:
Dan Poltawski
2012-05-28 14:32:16 +08:00
2 changed files with 38 additions and 1 deletions
+37
View File
@@ -648,5 +648,42 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2012052100.00);
}
if ($oldversion < 2012052500.03) { // fix invalid course_completion_records MDL-27368
//first get all instances of duplicate records
$sql = 'SELECT userid, course FROM {course_completions} WHERE (deleted IS NULL OR deleted <> 1) GROUP BY userid, course HAVING (count(id) > 1)';
$duplicates = $DB->get_recordset_sql($sql, array());
foreach ($duplicates as $duplicate) {
$pointer = 0;
//now get all the records for this user/course
$sql = 'userid = ? AND course = ? AND (deleted IS NULL OR deleted <> 1)';
$completions = $DB->get_records_select('course_completions', $sql,
array($duplicate->userid, $duplicate->course), 'timecompleted DESC, timestarted DESC');
$needsupdate = false;
$origcompletion = null;
foreach ($completions as $completion) {
$pointer++;
if ($pointer === 1) { //keep 1st record but delete all others.
$origcompletion = $completion;
} else {
//we need to keep the "oldest" of all these fields as the valid completion record.
$fieldstocheck = array('timecompleted', 'timestarted', 'timeenrolled');
foreach ($fieldstocheck as $f) {
if ($origcompletion->$f > $completion->$f) {
$origcompletion->$f = $completion->$f;
$needsupdate = true;
}
}
$DB->delete_records('course_completions', array('id'=>$completion->id));
}
}
if ($needsupdate) {
$DB->update_record('course_completions', $origcompletion);
}
}
// Main savepoint reached
upgrade_main_savepoint(true, 2012052500.03);
}
return true;
}
+1 -1
View File
@@ -30,7 +30,7 @@
defined('MOODLE_INTERNAL') || die();
$version = 2012052500.02; // YYYYMMDD = weekly release date of this DEV branch
$version = 2012052500.03; // YYYYMMDD = weekly release date of this DEV branch
// RR = release increments - 00 in DEV branches
// .XX = incremental changes