Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
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...
commit 87224397516360e18b62cec355fd8de12791fe12 1 parent 7413ce9
@stronk7 stronk7 authored
Showing with 16 additions and 0 deletions.
  1. +16 −0 backup/moodle2/restore_qtype_plugin.class.php
View
16 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) {
Please sign in to comment.
Something went wrong with that request. Please try again.