From 3848d57eef40ea4c8a18d8f8a4d554eeae9f5f27 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Thu, 16 Mar 2017 21:44:48 +0100 Subject: [PATCH] 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. --- mod/feedback/classes/completion.php | 2 +- mod/feedback/db/upgrade.php | 26 ++++++++++++++++++++++++++ mod/feedback/version.php | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/mod/feedback/classes/completion.php b/mod/feedback/classes/completion.php index 75096dcf9ea..3477629d047 100644 --- a/mod/feedback/classes/completion.php +++ b/mod/feedback/classes/completion.php @@ -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; } diff --git a/mod/feedback/db/upgrade.php b/mod/feedback/db/upgrade.php index 1e248fe8c8a..26f497c20c3 100644 --- a/mod/feedback/db/upgrade.php +++ b/mod/feedback/db/upgrade.php @@ -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; } diff --git a/mod/feedback/version.php b/mod/feedback/version.php index fd5f31dfd8f..a103ab8bbaf 100644 --- a/mod/feedback/version.php +++ b/mod/feedback/version.php @@ -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;