MDL-36243 question->questiontext and question->generalfeedback should always be strings

This commit is contained in:
Jean-Michel Vedrine 2012-10-28 20:01:25 +01:00
parent 4bd6f71bad
commit 7980a381cc
7 changed files with 32 additions and 91 deletions

View file

@ -366,14 +366,6 @@ class qformat_default {
$newpage->contents = $question->questiontext; $newpage->contents = $question->questiontext;
$newpage->contentsformat = isset($question->questionformat) ? $question->questionformat : FORMAT_HTML; $newpage->contentsformat = isset($question->questionformat) ? $question->questionformat : FORMAT_HTML;
// Sometimes, questiontext is not a simple text, but one array
// containing both text and format, so we need to support here
// that case with the following dirty patch. MDL-35147
if (is_array($question->questiontext)) {
$newpage->contents = isset($question->questiontext['text']) ? $question->questiontext['text'] : '';
$newpage->contentsformat = isset($question->questiontext['format']) ? $question->questiontext['format'] : FORMAT_HTML;
}
// set up page links // set up page links
if ($pageid) { if ($pageid) {
// the new page follows on from this page // the new page follows on from this page

View file

@ -390,20 +390,11 @@ class qformat_default {
'maxfiles' => -1, 'maxfiles' => -1,
'maxbytes' => 0, 'maxbytes' => 0,
); );
if (is_array($question->questiontext)) {
// Importing images from draftfile.
$questiontext = $question->questiontext;
$question->questiontext = $questiontext['text'];
}
if (is_array($question->generalfeedback)) {
$generalfeedback = $question->generalfeedback;
$question->generalfeedback = $generalfeedback['text'];
}
$question->id = $DB->insert_record('question', $question); $question->id = $DB->insert_record('question', $question);
if (!empty($questiontext['itemid'])) { if (isset($question->questiontextitemid)) {
$question->questiontext = file_save_draft_area_files($questiontext['itemid'], $question->questiontext = file_save_draft_area_files($question->questiontextitemid,
$this->importcontext->id, 'question', 'questiontext', $question->id, $this->importcontext->id, 'question', 'questiontext', $question->id,
$fileoptions, $question->questiontext); $fileoptions, $question->questiontext);
} else if (isset($question->questiontextfiles)) { } else if (isset($question->questiontextfiles)) {
@ -412,8 +403,8 @@ class qformat_default {
$this->importcontext, 'question', 'questiontext', $question->id, $file); $this->importcontext, 'question', 'questiontext', $question->id, $file);
} }
} }
if (!empty($generalfeedback['itemid'])) { if (isset($question->generalfeedbackitemid)) {
$question->generalfeedback = file_save_draft_area_files($generalfeedback['itemid'], $question->generalfeedback = file_save_draft_area_files($question->generalfeedbackitemid,
$this->importcontext->id, 'question', 'generalfeedback', $question->id, $this->importcontext->id, 'question', 'generalfeedback', $question->id,
$fileoptions, $question->generalfeedback); $fileoptions, $question->generalfeedback);
} else if (isset($question->generalfeedbackfiles)) { } else if (isset($question->generalfeedbackfiles)) {

View file

@ -148,16 +148,4 @@ class qformat_blackboard_six_base extends qformat_based_on_xml {
public function cleaned_text_field($text) { public function cleaned_text_field($text) {
return $this->text_field($this->cleaninput($text)); return $this->text_field($this->cleaninput($text));
} }
/**
* Convert the question text to plain text.
* We need to overwrite this function because questiontext is an array.
*/
protected function format_question_text($question) {
global $DB;
$formatoptions = new stdClass();
$formatoptions->noclean = true;
return html_to_text(format_text($question->questiontext['text'],
$question->questiontext['format'], $formatoptions), 0, false);
}
} }

View file

@ -88,12 +88,16 @@ class qformat_blackboard_six_pool extends qformat_blackboard_six_base {
array('#', 'BODY', 0, '#', 'TEXT', 0, '#'), array('#', 'BODY', 0, '#', 'TEXT', 0, '#'),
'', true, get_string('importnotext', 'qformat_blackboard_six')); '', true, get_string('importnotext', 'qformat_blackboard_six'));
$question->questiontext = $this->cleaned_text_field($text); $questiontext = $this->cleaned_text_field($text);
$question->questiontextformat = FORMAT_HTML; // Needed because add_blank_combined_feedback uses it. $question->questiontext = $questiontext['text'];
$question->questiontextformat = $questiontext['format']; // Needed because add_blank_combined_feedback uses it.
if (isset($questiontext['itemid'])) {
$question->questiontextitemid = $questiontext['itemid'];
}
// Put name in question object. We must ensure it is not empty and it is less than 250 chars. // Put name in question object. We must ensure it is not empty and it is less than 250 chars.
$id = $this->getpath($questiondata, array('@', 'id'), '', true); $id = $this->getpath($questiondata, array('@', 'id'), '', true);
$question->name = $this->create_default_question_name($question->questiontext['text'], $question->name = $this->create_default_question_name($question->questiontext,
get_string('defaultname', 'qformat_blackboard_six' , $id)); get_string('defaultname', 'qformat_blackboard_six' , $id));
$question->generalfeedback = ''; $question->generalfeedback = '';
@ -453,7 +457,7 @@ class qformat_blackboard_six_pool extends qformat_blackboard_six_base {
$subanswercount++; $subanswercount++;
} }
if ($subquestioncount < 2 || $subanswercount < 3) { if ($subquestioncount < 2 || $subanswercount < 3) {
$this->error(get_string('notenoughtsubans', 'qformat_blackboard_six', $question->questiontext['text'])); $this->error(get_string('notenoughtsubans', 'qformat_blackboard_six', $question->questiontext));
} else { } else {
$questions[] = $question; $questions[] = $question;
} }

View file

@ -506,11 +506,13 @@ class qformat_blackboard_six_qti extends qformat_blackboard_six_base {
public function process_common($quest) { public function process_common($quest) {
$question = $this->defaultquestion(); $question = $this->defaultquestion();
$text = $quest->QUESTION_BLOCK->text; $text = $quest->QUESTION_BLOCK->text;
$questiontext = $this->cleaned_text_field($text);
$question->questiontext = $this->cleaned_text_field($text); $question->questiontext = $questiontext['text'];
$question->questiontextformat = FORMAT_HTML; // Needed because add_blank_combined_feedback uses it. $question->questiontextformat = $questiontext['format']; // Needed because add_blank_combined_feedback uses it.
if (isset($questiontext['itemid'])) {
$question->name = $this->create_default_question_name($question->questiontext['text'], $question->questiontextitemid = $questiontext['itemid'];
}
$question->name = $this->create_default_question_name($question->questiontext,
get_string('defaultname', 'qformat_blackboard_six' , $quest->id)); get_string('defaultname', 'qformat_blackboard_six' , $quest->id));
$question->generalfeedback = ''; $question->generalfeedback = '';
$question->generalfeedbackformat = FORMAT_HTML; $question->generalfeedbackformat = FORMAT_HTML;
@ -863,7 +865,7 @@ class qformat_blackboard_six_qti extends qformat_blackboard_six_base {
$subanswercount++; $subanswercount++;
} }
if ($subquestioncount < 2 || $subanswercount < 3) { if ($subquestioncount < 2 || $subanswercount < 3) {
$this->error(get_string('notenoughtsubans', 'qformat_blackboard_six', $question->questiontext['text'])); $this->error(get_string('notenoughtsubans', 'qformat_blackboard_six', $question->questiontext));
} else { } else {
$questions[] = $question; $questions[] = $question;
} }

View file

@ -58,10 +58,7 @@ class qformat_blackboard_six_pool_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'match'; $expectedq->qtype = 'match';
$expectedq->name = 'Classify the animals.'; $expectedq->name = 'Classify the animals.';
$expectedq->questiontext = array( $expectedq->questiontext = '<i>Classify the animals.</i>';
'text' => '<i>Classify the animals.</i>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->correctfeedback = array('text' => '', $expectedq->correctfeedback = array('text' => '',
'format' => FORMAT_HTML); 'format' => FORMAT_HTML);
@ -98,10 +95,7 @@ class qformat_blackboard_six_pool_test extends question_testcase {
$expectedq->qtype = 'multichoice'; $expectedq->qtype = 'multichoice';
$expectedq->single = 1; $expectedq->single = 1;
$expectedq->name = 'What\'s between orange and green in the spectrum?'; $expectedq->name = 'What\'s between orange and green in the spectrum?';
$expectedq->questiontext = array( $expectedq->questiontext = '<span style="font-size:12pt">What\'s between orange and green in the spectrum?</span>';
'text' =>'<span style="font-size:12pt">What\'s between orange and green in the spectrum?</span>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->correctfeedback = array('text' => 'You gave the right answer.', $expectedq->correctfeedback = array('text' => 'You gave the right answer.',
'format' => FORMAT_HTML); 'format' => FORMAT_HTML);
@ -161,10 +155,7 @@ class qformat_blackboard_six_pool_test extends question_testcase {
$expectedq->qtype = 'multichoice'; $expectedq->qtype = 'multichoice';
$expectedq->single = 0; $expectedq->single = 0;
$expectedq->name = 'What\'s between orange and green in the spectrum?'; $expectedq->name = 'What\'s between orange and green in the spectrum?';
$expectedq->questiontext = array( $expectedq->questiontext = '<span style="font-size:12pt">What\'s between orange and green in the spectrum?</span>';
'text' => '<span style="font-size:12pt">What\'s between orange and green in the spectrum?</span>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->correctfeedback = array( $expectedq->correctfeedback = array(
'text' => 'You gave the right answer.', 'text' => 'You gave the right answer.',
@ -237,10 +228,7 @@ class qformat_blackboard_six_pool_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'truefalse'; $expectedq->qtype = 'truefalse';
$expectedq->name = '42 is the Absolute Answer to everything.'; $expectedq->name = '42 is the Absolute Answer to everything.';
$expectedq->questiontext = array( $expectedq->questiontext = '<span style="font-size:12pt">42 is the Absolute Answer to everything.</span>';
'text' => '<span style="font-size:12pt">42 is the Absolute Answer to everything.</span>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->generalfeedback = ''; $expectedq->generalfeedback = '';
$expectedq->generalfeedbackformat = FORMAT_HTML; $expectedq->generalfeedbackformat = FORMAT_HTML;
@ -270,10 +258,7 @@ class qformat_blackboard_six_pool_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'shortanswer'; $expectedq->qtype = 'shortanswer';
$expectedq->name = 'Name an amphibian: __________.'; $expectedq->name = 'Name an amphibian: __________.';
$expectedq->questiontext = array( $expectedq->questiontext = '<span style="font-size:12pt">Name an amphibian: __________.</span>';
'text' => '<span style="font-size:12pt">Name an amphibian: __________.</span>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->generalfeedback = ''; $expectedq->generalfeedback = '';
$expectedq->generalfeedbackformat = FORMAT_HTML; $expectedq->generalfeedbackformat = FORMAT_HTML;
@ -308,10 +293,7 @@ class qformat_blackboard_six_pool_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'essay'; $expectedq->qtype = 'essay';
$expectedq->name = 'How are you?'; $expectedq->name = 'How are you?';
$expectedq->questiontext = array( $expectedq->questiontext = 'How are you?';
'text' => 'How are you?',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->generalfeedback = ''; $expectedq->generalfeedback = '';
$expectedq->generalfeedbackformat = FORMAT_HTML; $expectedq->generalfeedbackformat = FORMAT_HTML;

View file

@ -55,10 +55,7 @@ class qformat_blackboard_six_qti_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'match'; $expectedq->qtype = 'match';
$expectedq->name = 'Classify the animals.'; $expectedq->name = 'Classify the animals.';
$expectedq->questiontext = array( $expectedq->questiontext = 'Classify the animals.';
'text' => 'Classify the animals.',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->correctfeedback = array('text' => '', $expectedq->correctfeedback = array('text' => '',
'format' => FORMAT_HTML, 'files' => array()); 'format' => FORMAT_HTML, 'files' => array());
@ -94,10 +91,7 @@ class qformat_blackboard_six_qti_test extends question_testcase {
$expectedq->qtype = 'multichoice'; $expectedq->qtype = 'multichoice';
$expectedq->single = 1; $expectedq->single = 1;
$expectedq->name = 'What\'s between orange and green in the spectrum?'; $expectedq->name = 'What\'s between orange and green in the spectrum?';
$expectedq->questiontext = array( $expectedq->questiontext = '<span style="font-size:12pt">What\'s between orange and green in the spectrum?</span>';
'text' => '<span style="font-size:12pt">What\'s between orange and green in the spectrum?</span>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->correctfeedback = array('text' => '', $expectedq->correctfeedback = array('text' => '',
'format' => FORMAT_HTML, 'files' => array()); 'format' => FORMAT_HTML, 'files' => array());
@ -157,10 +151,7 @@ class qformat_blackboard_six_qti_test extends question_testcase {
$expectedq->qtype = 'multichoice'; $expectedq->qtype = 'multichoice';
$expectedq->single = 0; $expectedq->single = 0;
$expectedq->name = 'What\'s between orange and green in the spectrum?'; $expectedq->name = 'What\'s between orange and green in the spectrum?';
$expectedq->questiontext = array( $expectedq->questiontext = '<i>What\'s between orange and green in the spectrum?</i>';
'text' => '<i>What\'s between orange and green in the spectrum?</i>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->correctfeedback = array( $expectedq->correctfeedback = array(
'text' => '', 'text' => '',
@ -236,10 +227,7 @@ class qformat_blackboard_six_qti_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'truefalse'; $expectedq->qtype = 'truefalse';
$expectedq->name = '42 is the Absolute Answer to everything.'; $expectedq->name = '42 is the Absolute Answer to everything.';
$expectedq->questiontext = array( $expectedq->questiontext = '<span style="font-size:12pt">42 is the Absolute Answer to everything.</span>';
'text' => '<span style="font-size:12pt">42 is the Absolute Answer to everything.</span>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->generalfeedback = ''; $expectedq->generalfeedback = '';
$expectedq->generalfeedbackformat = FORMAT_HTML; $expectedq->generalfeedbackformat = FORMAT_HTML;
@ -270,10 +258,7 @@ class qformat_blackboard_six_qti_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'shortanswer'; $expectedq->qtype = 'shortanswer';
$expectedq->name = 'Name an amphibian: __________.'; $expectedq->name = 'Name an amphibian: __________.';
$expectedq->questiontext = array( $expectedq->questiontext = '<span style="font-size:12pt">Name an amphibian: __________.</span>';
'text' => '<span style="font-size:12pt">Name an amphibian: __________.</span>',
'format' => FORMAT_HTML,
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->generalfeedback = ''; $expectedq->generalfeedback = '';
$expectedq->generalfeedbackformat = FORMAT_HTML; $expectedq->generalfeedbackformat = FORMAT_HTML;
@ -308,10 +293,7 @@ class qformat_blackboard_six_qti_test extends question_testcase {
$expectedq = new stdClass(); $expectedq = new stdClass();
$expectedq->qtype = 'essay'; $expectedq->qtype = 'essay';
$expectedq->name = 'How are you?'; $expectedq->name = 'How are you?';
$expectedq->questiontext = array( $expectedq->questiontext = 'How are you?';
'text' => 'How are you?',
'format' => FORMAT_HTML
);
$expectedq->questiontextformat = FORMAT_HTML; $expectedq->questiontextformat = FORMAT_HTML;
$expectedq->generalfeedback = ''; $expectedq->generalfeedback = '';
$expectedq->generalfeedbackformat = FORMAT_HTML; $expectedq->generalfeedbackformat = FORMAT_HTML;