mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
MDL-28618 question combined feedback: inconsistency in file areas.
The (partially|in)?correct feedback fields acutally store their files in a file area with component 'question'. Some code, however, was written as if they were stored in the qtype_whatever area.
This commit is contained in:
parent
3fdc622697
commit
a23bda41e4
@ -2637,6 +2637,12 @@ class restore_create_question_files extends restore_execution_step {
|
||||
$oldctxid, $this->task->get_userid(), 'question_answer', null, $newctxid, true);
|
||||
restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'hint',
|
||||
$oldctxid, $this->task->get_userid(), 'question_hint', null, $newctxid, true);
|
||||
restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'correctfeedback',
|
||||
$oldctxid, $this->task->get_userid(), 'question_created', $question->itemid, $newctxid, true);
|
||||
restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'partiallycorrectfeedback',
|
||||
$oldctxid, $this->task->get_userid(), 'question_created', $question->itemid, $newctxid, true);
|
||||
restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'incorrectfeedback',
|
||||
$oldctxid, $this->task->get_userid(), 'question_created', $question->itemid, $newctxid, true);
|
||||
// Add qtype dependent files
|
||||
$components = backup_qtype_plugin::get_components_and_fileareas($question->qtype);
|
||||
foreach ($components as $component => $fileareas) {
|
||||
|
@ -206,6 +206,8 @@ class qtype_match extends question_type {
|
||||
$fs->move_area_files_to_new_context($oldcontextid,
|
||||
$newcontextid, 'qtype_match', 'subquestion', $subquestionid);
|
||||
}
|
||||
|
||||
$this->move_files_in_combined_feedback($questionid, $oldcontextid, $newcontextid);
|
||||
}
|
||||
|
||||
protected function delete_files($questionid, $contextid) {
|
||||
@ -220,11 +222,6 @@ class qtype_match extends question_type {
|
||||
$fs->delete_area_files($contextid, 'qtype_match', 'subquestion', $subquestionid);
|
||||
}
|
||||
|
||||
$fs->delete_area_files($contextid, 'qtype_multichoice',
|
||||
'correctfeedback', $questionid);
|
||||
$fs->delete_area_files($contextid, 'qtype_multichoice',
|
||||
'partiallycorrectfeedback', $questionid);
|
||||
$fs->delete_area_files($contextid, 'qtype_multichoice',
|
||||
'incorrectfeedback', $questionid);
|
||||
$this->delete_files_in_combined_feedback($questionid, $contextid);
|
||||
}
|
||||
}
|
||||
|
@ -69,17 +69,4 @@ class backup_qtype_multichoice_plugin extends backup_qtype_plugin {
|
||||
|
||||
return $plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns one array with filearea => mappingname elements for the qtype
|
||||
*
|
||||
* Used by {@link get_components_and_fileareas} to know about all the qtype
|
||||
* files to be processed both in backup and restore.
|
||||
*/
|
||||
public static function get_qtype_fileareas() {
|
||||
return array(
|
||||
'correctfeedback' => 'question_created',
|
||||
'partiallycorrectfeedback' => 'question_created',
|
||||
'incorrectfeedback' => 'question_created');
|
||||
}
|
||||
}
|
||||
|
@ -231,30 +231,14 @@ class qtype_multichoice extends question_type {
|
||||
}
|
||||
|
||||
public function move_files($questionid, $oldcontextid, $newcontextid) {
|
||||
$fs = get_file_storage();
|
||||
|
||||
parent::move_files($questionid, $oldcontextid, $newcontextid);
|
||||
$this->move_files_in_answers($questionid, $oldcontextid, $newcontextid, true);
|
||||
|
||||
$fs->move_area_files_to_new_context($oldcontextid,
|
||||
$newcontextid, 'qtype_multichoice', 'correctfeedback', $questionid);
|
||||
$fs->move_area_files_to_new_context($oldcontextid,
|
||||
$newcontextid, 'qtype_multichoice', 'partiallycorrectfeedback', $questionid);
|
||||
$fs->move_area_files_to_new_context($oldcontextid,
|
||||
$newcontextid, 'qtype_multichoice', 'incorrectfeedback', $questionid);
|
||||
$this->move_files_in_combined_feedback($questionid, $oldcontextid, $newcontextid);
|
||||
}
|
||||
|
||||
protected function delete_files($questionid, $contextid) {
|
||||
$fs = get_file_storage();
|
||||
|
||||
parent::delete_files($questionid, $contextid);
|
||||
$this->delete_files_in_answers($questionid, $contextid, true);
|
||||
|
||||
$fs->delete_area_files($contextid,
|
||||
'qtype_multichoice', 'correctfeedback', $questionid);
|
||||
$fs->delete_area_files($contextid,
|
||||
'qtype_multichoice', 'partiallycorrectfeedback', $questionid);
|
||||
$fs->delete_area_files($contextid,
|
||||
'qtype_multichoice', 'incorrectfeedback', $questionid);
|
||||
$this->delete_files_in_combined_feedback($questionid, $contextid);
|
||||
}
|
||||
}
|
||||
|
@ -1107,6 +1107,28 @@ class question_type {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Move all the files belonging to this question's answers 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_combined_feedback($questionid, $oldcontextid,
|
||||
$newcontextid) {
|
||||
global $DB;
|
||||
$fs = get_file_storage();
|
||||
|
||||
$fs->move_area_files_to_new_context($oldcontextid,
|
||||
$newcontextid, 'question', 'correctfeedback', $questionid);
|
||||
$fs->move_area_files_to_new_context($oldcontextid,
|
||||
$newcontextid, 'question', 'partiallycorrectfeedback', $questionid);
|
||||
$fs->move_area_files_to_new_context($oldcontextid,
|
||||
$newcontextid, 'question', 'incorrectfeedback', $questionid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all the files belonging to this question.
|
||||
* @param int $questionid the question being deleted.
|
||||
@ -1139,6 +1161,25 @@ class question_type {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all the files belonging to this question's answers.
|
||||
* @param int $questionid the question being deleted.
|
||||
* @param int $contextid the context the question is in.
|
||||
* @param bool $answerstoo whether there is an 'answer' question area,
|
||||
* as well as an 'answerfeedback' one. Default false.
|
||||
*/
|
||||
protected function delete_files_in_combined_feedback($questionid, $contextid) {
|
||||
global $DB;
|
||||
$fs = get_file_storage();
|
||||
|
||||
$fs->delete_area_files($contextid,
|
||||
'question', 'correctfeedback', $questionid);
|
||||
$fs->delete_area_files($contextid,
|
||||
'question', 'partiallycorrectfeedback', $questionid);
|
||||
$fs->delete_area_files($contextid,
|
||||
'question', 'incorrectfeedback', $questionid);
|
||||
}
|
||||
|
||||
public function import_file($context, $component, $filearea, $itemid, $file) {
|
||||
$fs = get_file_storage();
|
||||
$record = new stdClass();
|
||||
|
Loading…
x
Reference in New Issue
Block a user