mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 08:26:37 +02:00
MDL-27368 Clean up invalid course completion records
keep oldest timestamps from all records
This commit is contained in:
parent
4631e39533
commit
d2e3a1b4f9
2 changed files with 38 additions and 1 deletions
|
@ -648,5 +648,42 @@ function xmldb_main_upgrade($oldversion) {
|
|||
upgrade_main_savepoint(true, 2012052100.00);
|
||||
}
|
||||
|
||||
if ($oldversion < 2012052500.01) { // 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.01);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue