diff --git a/question/type/calculated/questiontype.php b/question/type/calculated/questiontype.php index a86bb20d4ca..af7cd38433a 100644 --- a/question/type/calculated/questiontype.php +++ b/question/type/calculated/questiontype.php @@ -1839,6 +1839,7 @@ class qtype_calculated extends question_type { parent::move_files($questionid, $oldcontextid, $newcontextid); $this->move_files_in_answers($questionid, $oldcontextid, $newcontextid); + $this->move_files_in_hints($questionid, $oldcontextid, $newcontextid); } protected function delete_files($questionid, $contextid) { @@ -1846,6 +1847,7 @@ class qtype_calculated extends question_type { parent::delete_files($questionid, $contextid); $this->delete_files_in_answers($questionid, $contextid); + $this->delete_files_in_hints($questionid, $contextid); } } diff --git a/question/type/calculatedmulti/questiontype.php b/question/type/calculatedmulti/questiontype.php index 963a95e6cba..220d1bcaf8f 100644 --- a/question/type/calculatedmulti/questiontype.php +++ b/question/type/calculatedmulti/questiontype.php @@ -276,6 +276,7 @@ class qtype_calculatedmulti extends qtype_calculated { parent::move_files($questionid, $oldcontextid, $newcontextid); $this->move_files_in_answers($questionid, $oldcontextid, $newcontextid, true); + $this->move_files_in_hints($questionid, $oldcontextid, $newcontextid); $fs->move_area_files_to_new_context($oldcontextid, $newcontextid, 'qtype_calculatedmulti', 'correctfeedback', $questionid); @@ -290,6 +291,7 @@ class qtype_calculatedmulti extends qtype_calculated { parent::delete_files($questionid, $contextid); $this->delete_files_in_answers($questionid, $contextid, true); + $this->delete_files_in_hints($questionid, $contextid); $fs->delete_area_files($contextid, 'qtype_calculatedmulti', 'correctfeedback', $questionid); diff --git a/question/type/match/questiontype.php b/question/type/match/questiontype.php index 36f08b5f6f2..4a381970a05 100644 --- a/question/type/match/questiontype.php +++ b/question/type/match/questiontype.php @@ -208,6 +208,7 @@ class qtype_match extends question_type { } $this->move_files_in_combined_feedback($questionid, $oldcontextid, $newcontextid); + $this->move_files_in_hints($questionid, $oldcontextid, $newcontextid); } protected function delete_files($questionid, $contextid) { @@ -223,5 +224,6 @@ class qtype_match extends question_type { } $this->delete_files_in_combined_feedback($questionid, $contextid); + $this->delete_files_in_hints($questionid, $contextid); } } diff --git a/question/type/multianswer/questiontype.php b/question/type/multianswer/questiontype.php index c9cb5df8363..3dc969aa496 100644 --- a/question/type/multianswer/questiontype.php +++ b/question/type/multianswer/questiontype.php @@ -223,6 +223,16 @@ class qtype_multianswer extends question_type { } return $fractionsum / $fractionmax; } + + public function move_files($questionid, $oldcontextid, $newcontextid) { + parent::move_files($questionid, $oldcontextid, $newcontextid); + $this->move_files_in_hints($questionid, $oldcontextid, $newcontextid); + } + + protected function delete_files($questionid, $contextid) { + parent::delete_files($questionid, $contextid); + $this->delete_files_in_hints($questionid, $contextid); + } } diff --git a/question/type/multichoice/questiontype.php b/question/type/multichoice/questiontype.php index e155366f157..02fe6f4e56a 100644 --- a/question/type/multichoice/questiontype.php +++ b/question/type/multichoice/questiontype.php @@ -240,11 +240,13 @@ class qtype_multichoice extends question_type { parent::move_files($questionid, $oldcontextid, $newcontextid); $this->move_files_in_answers($questionid, $oldcontextid, $newcontextid, true); $this->move_files_in_combined_feedback($questionid, $oldcontextid, $newcontextid); + $this->move_files_in_hints($questionid, $oldcontextid, $newcontextid); } protected function delete_files($questionid, $contextid) { parent::delete_files($questionid, $contextid); $this->delete_files_in_answers($questionid, $contextid, true); $this->delete_files_in_combined_feedback($questionid, $contextid); + $this->delete_files_in_hints($questionid, $contextid); } } diff --git a/question/type/numerical/questiontype.php b/question/type/numerical/questiontype.php index b275ffa195d..53f29b2c407 100644 --- a/question/type/numerical/questiontype.php +++ b/question/type/numerical/questiontype.php @@ -470,6 +470,7 @@ class qtype_numerical extends question_type { parent::move_files($questionid, $oldcontextid, $newcontextid); $this->move_files_in_answers($questionid, $oldcontextid, $newcontextid); + $this->move_files_in_hints($questionid, $oldcontextid, $newcontextid); } protected function delete_files($questionid, $contextid) { @@ -477,6 +478,7 @@ class qtype_numerical extends question_type { parent::delete_files($questionid, $contextid); $this->delete_files_in_answers($questionid, $contextid); + $this->delete_files_in_hints($questionid, $contextid); } } diff --git a/question/type/questiontypebase.php b/question/type/questiontypebase.php index 88750453d06..0e18786a3af 100644 --- a/question/type/questiontypebase.php +++ b/question/type/questiontypebase.php @@ -1103,6 +1103,27 @@ class question_type { } } + /** + * Move all the files belonging to this question's hints when the question + * is moved from one context to another. + * @param int $questionid the question being moved. + * @param int $oldcontextid the context it is moving from. + * @param int $newcontextid the context it is moving to. + * @param bool $answerstoo whether there is an 'answer' question area, + * as well as an 'answerfeedback' one. Default false. + */ + protected function move_files_in_hints($questionid, $oldcontextid, $newcontextid) { + global $DB; + $fs = get_file_storage(); + + $hintids = $DB->get_records_menu('question_hints', + array('questionid' => $questionid), 'id', 'id,1'); + foreach ($hintids as $hintid => $notused) { + $fs->move_area_files_to_new_context($oldcontextid, + $newcontextid, 'question', 'hint', $hintid); + } + } + /** * Move all the files belonging to this question's answers when the question * is moved from one context to another. @@ -1157,6 +1178,22 @@ class question_type { } } + /** + * Delete all the files belonging to this question's hints. + * @param int $questionid the question being deleted. + * @param int $contextid the context the question is in. + */ + protected function delete_files_in_hints($questionid, $contextid) { + global $DB; + $fs = get_file_storage(); + + $hintids = $DB->get_records_menu('question_hints', + array('questionid' => $questionid), 'id', 'id,1'); + foreach ($hintids as $hintid => $notused) { + $fs->delete_area_files($contextid, 'question', 'hint', $hintid); + } + } + /** * Delete all the files belonging to this question's answers. * @param int $questionid the question being deleted. diff --git a/question/type/shortanswer/questiontype.php b/question/type/shortanswer/questiontype.php index 7c78d389098..31212ce6e78 100644 --- a/question/type/shortanswer/questiontype.php +++ b/question/type/shortanswer/questiontype.php @@ -49,11 +49,13 @@ class qtype_shortanswer extends question_type { public function move_files($questionid, $oldcontextid, $newcontextid) { parent::move_files($questionid, $oldcontextid, $newcontextid); $this->move_files_in_answers($questionid, $oldcontextid, $newcontextid); + $this->move_files_in_hints($questionid, $oldcontextid, $newcontextid); } protected function delete_files($questionid, $contextid) { parent::delete_files($questionid, $contextid); $this->delete_files_in_answers($questionid, $contextid); + $this->delete_files_in_hints($questionid, $contextid); } public function save_question_options($question) {