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);
|
$oldctxid, $this->task->get_userid(), 'question_answer', null, $newctxid, true);
|
||||||
restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'hint',
|
restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'hint',
|
||||||
$oldctxid, $this->task->get_userid(), 'question_hint', null, $newctxid, true);
|
$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
|
// Add qtype dependent files
|
||||||
$components = backup_qtype_plugin::get_components_and_fileareas($question->qtype);
|
$components = backup_qtype_plugin::get_components_and_fileareas($question->qtype);
|
||||||
foreach ($components as $component => $fileareas) {
|
foreach ($components as $component => $fileareas) {
|
||||||
|
@ -206,6 +206,8 @@ class qtype_match extends question_type {
|
|||||||
$fs->move_area_files_to_new_context($oldcontextid,
|
$fs->move_area_files_to_new_context($oldcontextid,
|
||||||
$newcontextid, 'qtype_match', 'subquestion', $subquestionid);
|
$newcontextid, 'qtype_match', 'subquestion', $subquestionid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->move_files_in_combined_feedback($questionid, $oldcontextid, $newcontextid);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function delete_files($questionid, $contextid) {
|
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_match', 'subquestion', $subquestionid);
|
||||||
}
|
}
|
||||||
|
|
||||||
$fs->delete_area_files($contextid, 'qtype_multichoice',
|
$this->delete_files_in_combined_feedback($questionid, $contextid);
|
||||||
'correctfeedback', $questionid);
|
|
||||||
$fs->delete_area_files($contextid, 'qtype_multichoice',
|
|
||||||
'partiallycorrectfeedback', $questionid);
|
|
||||||
$fs->delete_area_files($contextid, 'qtype_multichoice',
|
|
||||||
'incorrectfeedback', $questionid);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,17 +69,4 @@ class backup_qtype_multichoice_plugin extends backup_qtype_plugin {
|
|||||||
|
|
||||||
return $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) {
|
public function move_files($questionid, $oldcontextid, $newcontextid) {
|
||||||
$fs = get_file_storage();
|
|
||||||
|
|
||||||
parent::move_files($questionid, $oldcontextid, $newcontextid);
|
parent::move_files($questionid, $oldcontextid, $newcontextid);
|
||||||
$this->move_files_in_answers($questionid, $oldcontextid, $newcontextid, true);
|
$this->move_files_in_answers($questionid, $oldcontextid, $newcontextid, true);
|
||||||
|
$this->move_files_in_combined_feedback($questionid, $oldcontextid, $newcontextid);
|
||||||
$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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function delete_files($questionid, $contextid) {
|
protected function delete_files($questionid, $contextid) {
|
||||||
$fs = get_file_storage();
|
|
||||||
|
|
||||||
parent::delete_files($questionid, $contextid);
|
parent::delete_files($questionid, $contextid);
|
||||||
$this->delete_files_in_answers($questionid, $contextid, true);
|
$this->delete_files_in_answers($questionid, $contextid, true);
|
||||||
|
$this->delete_files_in_combined_feedback($questionid, $contextid);
|
||||||
$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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.
|
* Delete all the files belonging to this question.
|
||||||
* @param int $questionid the question being deleted.
|
* @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) {
|
public function import_file($context, $component, $filearea, $itemid, $file) {
|
||||||
$fs = get_file_storage();
|
$fs = get_file_storage();
|
||||||
$record = new stdClass();
|
$record = new stdClass();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user