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...
stronk7 committed Aug 27, 2012
1 parent 935c3d5 commit a306ceb1ecda39cbd7f8da8346c0ae9dcb84dcb1
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 a306ceb

Please sign in to comment.