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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user