Permalink
Browse files

MDL-30018 restore: better answer matching. Credit goes to Tyler Banni…

…ster, thanks!

On backup, contents are cleaned to be safe utf8. That was leading to
some matching problems on restore against not cleaned DB contents (for
already existing questions). This commit adds one fallback method to
perform the match against cleaned DB contents.
  • Loading branch information...
1 parent 7413ce9 commit 87224397516360e18b62cec355fd8de12791fe12 @stronk7 stronk7 committed Aug 27, 2012
Showing with 16 additions and 0 deletions.
  1. +16 −0 backup/moodle2/restore_qtype_plugin.class.php
@@ -154,6 +154,22 @@ public function process_question_answer($data) {
AND ' . $DB->sql_compare_text('answer', 255) . ' = ' . $DB->sql_compare_text('?', 255);
$params = array($newquestionid, $data->answertext);
$newitemid = $DB->get_field_sql($sql, $params);
+
+ // Not able to find the answer, let's try cleaning the answertext
+ // of all the question answers in DB as slower fallback. MDL-30018.
+ if (!$newitemid) {
+ $params = array('question' => $newquestionid);
+ $answers = $DB->get_records('question_answers', $params, '', 'id, answer');
+ foreach ($answers as $answer) {
+ // Clean in the same way than {@link xml_writer::xml_safe_utf8()}.
+ $clean = preg_replace('/[\x-\x8\xb-\xc\xe-\x1f\x7f]/is','', $answer->answer); // Clean CTRL chars.
+ $clean = preg_replace("/\r\n|\r/", "\n", $clean); // Normalize line ending.
+ if ($clean === $data->answertext) {
+ $newitemid = $data->id;
+ }
+ }
+ }
+
// If we haven't found the newitemid, something has gone really wrong, question in DB
// is missing answers, exception
if (!$newitemid) {

0 comments on commit 8722439

Please sign in to comment.