From 734fb0f01547e590ebe270bd47334f71d4c9267d 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 ca0e48b89d1..ddfa6dbcfbf 100644 --- a/mod/lesson/db/upgrade.php +++ b/mod/lesson/db/upgrade.php @@ -387,5 +387,24 @@ function xmldb_lesson_upgrade($oldversion) { // Moodle v3.1.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2016052301) { + + // 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, 2016052301, 'lesson'); + } + return true; } diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php index e25fd634f09..d3679f13d4c 100644 --- a/mod/lesson/locallib.php +++ b/mod/lesson/locallib.php @@ -2291,6 +2291,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 @@ -2310,8 +2319,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 699335960c2..5a5d99b947f 100644 --- a/mod/lesson/version.php +++ b/mod/lesson/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016052300; // The current module version (Date: YYYYMMDDXX) +$plugin->version = 2016052301; // The current module version (Date: YYYYMMDDXX) $plugin->requires = 2016051900; // Requires this Moodle version $plugin->component = 'mod_lesson'; // Full name of the plugin (used for diagnostics) $plugin->cron = 0;