MDL-58227 mod_feedback: Delete duplicated completions records

This commit also fixes the way the previous completion record was
fetched to avoid the creation of new duplicates.
This commit is contained in:
Juan Leyva
2017-03-21 09:55:37 +01:00
parent 80ff09db28
commit 3848d57eef
3 changed files with 28 additions and 2 deletions
+1 -1
View File
@@ -517,7 +517,7 @@ class mod_feedback_completion extends mod_feedback_structure {
*/
protected function find_last_completed() {
global $USER, $DB;
if (isloggedin() || isguestuser()) {
if (!isloggedin() || isguestuser()) {
// Not possible to retrieve completed feedback for guests.
return false;
}
+26
View File
@@ -149,5 +149,31 @@ function xmldb_feedback_upgrade($oldversion) {
// Automatically generated Moodle v3.2.0 release upgrade line.
// Put any upgrade step following this.
if ($oldversion < 2016120501) {
// Delete duplicated records in feedback_completed. We just keep the last record of completion.
// Related values in feedback_value won't be deleted (they won't be used and can be kept there as a backup).
$sql = "SELECT MAX(id) as maxid, userid, feedback, courseid
FROM {feedback_completed}
WHERE userid <> 0
GROUP BY userid, feedback, courseid
HAVING COUNT(id) > 1";
if ($duplicatedrows = $DB->get_recordset_sql($sql)) {
foreach ($duplicatedrows as $row) {
$DB->delete_records_select('feedback_completed', 'userid = ? AND feedback = ? AND courseid = ? AND id <> ?', array(
$row->userid,
$row->feedback,
$row->courseid,
$row->maxid,
));
}
}
$duplicatedrows->close();
// Feedback savepoint reached.
upgrade_mod_savepoint(true, 2016120501, 'feedback');
}
return true;
}
+1 -1
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2016120500; // The current module version (Date: YYYYMMDDXX)
$plugin->version = 2016120501; // The current module version (Date: YYYYMMDDXX)
$plugin->requires = 2016112900; // Requires this Moodle version
$plugin->component = 'mod_feedback'; // Full name of the plugin (used for diagnostics)
$plugin->cron = 0;