From 8782b691a582c2d26fad5531f938e1def30682e7 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Thu, 13 Jul 2017 12:30:35 +0800 Subject: [PATCH] MDL-57649 mod_lesson: Delete answer files correctly. The files associated with answers and responses were not being deleted due to the fact that the wrong itemid was being used. --- mod/lesson/db/upgrade.php | 19 +++++++++++++++++++ mod/lesson/locallib.php | 11 +++++++++-- mod/lesson/version.php | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/mod/lesson/db/upgrade.php b/mod/lesson/db/upgrade.php index d12bb8ed32c..f4afd8c496e 100644 --- a/mod/lesson/db/upgrade.php +++ b/mod/lesson/db/upgrade.php @@ -390,5 +390,24 @@ function xmldb_lesson_upgrade($oldversion) { // Automatically generated Moodle v3.2.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2016120501) { + + // Delete orphaned lesson answer and response files. + $sql = "SELECT DISTINCT f.* + FROM {files} f + LEFT JOIN {lesson_answers} la ON f.itemid = la.id + WHERE component = :component + AND la.id IS NULL"; + + $orphanedfiles = $DB->get_recordset_sql($sql, array('component' => 'mod_lesson')); + $fs = get_file_storage(); + foreach ($orphanedfiles as $file) { + $fs->delete_area_files($file->contextid, $file->component, $file->filearea, $file->itemid); + } + $orphanedfiles->close(); + + upgrade_mod_savepoint(true, 2016120501, 'lesson'); + } + return true; } diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php index 28ce430b848..b70669ff845 100644 --- a/mod/lesson/locallib.php +++ b/mod/lesson/locallib.php @@ -2388,6 +2388,15 @@ abstract class lesson_page extends lesson_base { $DB->delete_records("lesson_attempts", array("pageid" => $this->properties->id)); $DB->delete_records("lesson_branch", array("pageid" => $this->properties->id)); + + // Delete files related to answers and responses. + if ($answers = $DB->get_records("lesson_answers", array("pageid" => $this->properties->id))) { + foreach ($answers as $answer) { + $fs->delete_area_files($context->id, 'mod_lesson', 'page_answers', $answer->id); + $fs->delete_area_files($context->id, 'mod_lesson', 'page_responses', $answer->id); + } + } + // ...now delete the answers... $DB->delete_records("lesson_answers", array("pageid" => $this->properties->id)); // ..and the page itself @@ -2407,8 +2416,6 @@ abstract class lesson_page extends lesson_base { // Delete files associated with this page. $fs->delete_area_files($context->id, 'mod_lesson', 'page_contents', $this->properties->id); - $fs->delete_area_files($context->id, 'mod_lesson', 'page_answers', $this->properties->id); - $fs->delete_area_files($context->id, 'mod_lesson', 'page_responses', $this->properties->id); // repair the hole in the linkage if (!$this->properties->prevpageid && !$this->properties->nextpageid) { diff --git a/mod/lesson/version.php b/mod/lesson/version.php index 3f0759f1c37..4b0e1585426 100644 --- a/mod/lesson/version.php +++ b/mod/lesson/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_lesson'; // Full name of the plugin (used for diagnostics) $plugin->cron = 0;