MDL-37172 Hardcoded strings in some question imports formats
authorJean-Michel Vedrine <vedrine@vedrine.org>
Sat, 22 Dec 2012 16:02:58 +0000 (17:02 +0100)
committerJean-Michel Vedrine <vedrine@vedrine.org>
Fri, 25 Jan 2013 21:31:06 +0000 (22:31 +0100)
AMOS BEGIN
MOV [unknownorunhandledtype,qformat_blackboard_six],[unknownorunhandledtype,question]
AMOS END

lang/en/question.php
question/format/blackboard_six/formatqti.php
question/format/blackboard_six/lang/en/qformat_blackboard_six.php
question/format/examview/format.php
question/format/learnwise/format.php
question/format/missingword/format.php
question/format/missingword/lang/en/qformat_missingword.php
question/format/missingword/tests/fixtures/question.missingword1.txt [new file with mode: 0644]
question/format/missingword/tests/fixtures/question.missingword2.txt [new file with mode: 0644]
question/format/missingword/tests/fixtures/question.missingword3.txt [new file with mode: 0644]
question/format/xhtml/format.php

index 3dea4dd..d7d58fe 100644 (file)
@@ -421,6 +421,7 @@ $string['technicalinfoquestionsummary'] = 'Question summary: {$a}';
 $string['technicalinforightsummary'] = 'Right answer summary: {$a}';
 $string['technicalinfostate'] = 'Question state: {$a}';
 $string['unknownbehaviour'] = 'Unknown behaviour: {$a}.';
+$string['unknownorunhandledtype'] = 'Unknown or unhandled question type: {$a}';
 $string['unknownquestion'] = 'Unknown question: {$a}.';
 $string['unknownquestioncatregory'] = 'Unknown question category: {$a}.';
 $string['unknownquestiontype'] = 'Unknown question type: {$a}.';
index 6b9edda..744456c 100644 (file)
@@ -87,7 +87,7 @@ class qformat_blackboard_six_qti extends qformat_blackboard_six_base {
                     $this->process_essay($question, $questions);
                     break;
                 default:
-                    $this->error(get_string('unknownorunhandledtype', 'qformat_blackboard_six', $question->qtype));
+                    $this->error(get_string('unknownorunhandledtype', 'question', $question->qtype));
                     break;
             }
         }
index c7c4746..c7c925e 100644 (file)
@@ -31,4 +31,3 @@ $string['notenoughtsubans'] = 'Unable to import matching question \'{$a}\' becau
 $string['pluginname'] = 'Blackboard V6+';
 $string['pluginname_help'] = 'Blackboard V6+ format enables questions saved in all Blackboard export formats to be imported via a dat or zip file. For zip files, images import is supported.';
 $string['unhandledpresblock'] = 'Unhandled presentation block';
-$string['unknownorunhandledtype'] = 'Unknown or unhandled question type: {$a}';
index 2155401..95f4e1c 100644 (file)
@@ -184,6 +184,7 @@ class qformat_examview extends qformat_based_on_xml {
     }
 
     public function readquestion($qrec) {
+        global $OUTPUT;
 
         $type = trim($qrec['@']['type']);
         $question = $this->defaultquestion();
@@ -224,7 +225,7 @@ class qformat_examview extends qformat_based_on_xml {
                 break;
                 break;
             default:
-                print("<p>Question type ".$type." import not supported for ".$question->questiontext."<p>");
+                echo $OUTPUT->notification(get_string('unknownorunhandledtype', 'question', $type));
                 $question = null;
         }
 
index 873da65..8c36fc1 100644 (file)
@@ -67,6 +67,8 @@ class qformat_learnwise extends qformat_default {
     }
 
     protected function readquestion($lines) {
+        global $OUTPUT;
+
         $text = implode(' ', $lines);
         $text = str_replace(array('\t','\n','\r'), array('','',''), $text);
 
@@ -131,7 +133,7 @@ class qformat_learnwise extends qformat_default {
             }
 
         } else {
-            echo "<p>I don't understand this question type (type = <strong>$type</strong>).</p>\n";
+            echo $OUTPUT->notification(get_string('unknownorunhandledtype', 'question', $type));
         }
 
         $question = $this->defaultquestion();
index c79998d..e92fc54 100644 (file)
@@ -52,11 +52,11 @@ defined('MOODLE_INTERNAL') || die();
  */
 class qformat_missingword extends qformat_default {
 
-    function provide_import() {
+    public function provide_import() {
       return true;
     }
 
-    function readquestion($lines) {
+    public function readquestion($lines) {
     /// Given an array of lines known to define a question in
     /// this format, this function converts it into a question
     /// object suitable for processing and insertion into Moodle.
@@ -70,28 +70,23 @@ class qformat_missingword extends qformat_default {
 
         $answerstart = strpos($text, "{");
         if ($answerstart === false) {
-            if ($this->displayerrors) {
-                echo "<p>$text<p>Could not find a {";
-            }
+            $this->error(get_string('beginanswernotfound', 'qformat_missingword'), $text);
             return false;
         }
 
         $answerfinish = strpos($text, "}");
         if ($answerfinish === false) {
-            if ($this->displayerrors) {
-                echo "<p>$text<p>Could not find a }";
-            }
+            $this->error(get_string('endanswernotfound', 'qformat_missingword'), $text);
             return false;
         }
 
         $answerlength = $answerfinish - $answerstart;
         $answertext = substr($text, $answerstart + 1, $answerlength - 1);
 
-        /// Save the new question text
+        // Save the new question text.
         $question->questiontext = substr_replace($text, "_____", $answerstart, $answerlength+1);
         $question->name = $this->create_default_question_name($question->questiontext, get_string('questionname', 'question'));
 
-
         /// Parse the answers
         $answertext = str_replace("=", "~=", $answertext);
         $answers = explode("~", $answertext);
@@ -105,10 +100,8 @@ class qformat_missingword extends qformat_default {
         $countanswers = count($answers);
 
         switch ($countanswers) {
-            case 0:  // invalid question
-                if ($this->displayerrors) {
-                    echo "<p>No answers found in $answertext";
-                }
+            case 0:  // Invalid question.
+                $this->error(get_string('noanswerfound', 'qformat_missingword'), $answertext);
                 return false;
 
             case 1:
@@ -120,12 +113,14 @@ class qformat_missingword extends qformat_default {
                 }
                 $question->answer[]   = $answer;
                 $question->fraction[] = 1;
-                $question->feedback[] = "";
+                $question->feedback[] = array('text' => '', 'format' => FORMAT_HTML);
 
                 return $question;
 
             default:
                 $question->qtype = 'multichoice';
+                $question = $this->add_blank_combined_feedback($question);
+                $question->single = 1; // Only one answer allowed.
 
                 foreach ($answers as $key => $answer) {
                     $answer = trim($answer);
@@ -166,8 +161,8 @@ class qformat_missingword extends qformat_default {
 #                       $question->fraction[$key] = 0;
                         $question->fraction[$key] = $answeight;
                     }
-                    $question->answer[$key]   = $answer;
-                    $question->feedback[$key] = $comment;
+                    $question->answer[$key]   = array('text' => $answer, 'format' => FORMAT_HTML);
+                    $question->feedback[$key] = array('text' => $comment, 'format' => FORMAT_HTML);
                 }
 
                 return $question;
index 0e190a3..e1fd498 100644 (file)
@@ -26,3 +26,6 @@
 $string['pluginname'] = 'Missing word format';
 $string['pluginname_help'] = 'Missing word format enables questions to be imported via text file.';
 $string['pluginname_link'] = 'Missing word format';
+$string['beginanswernotfound'] = 'Could not find a required "{" character in imported file content.';
+$string['endanswernotfound'] = 'Could not find a required "}" character in imported file content.';
+$string['noanswerfound'] = 'No answers found in question';
diff --git a/question/format/missingword/tests/fixtures/question.missingword1.txt b/question/format/missingword/tests/fixtures/question.missingword1.txt
new file mode 100644 (file)
index 0000000..0580c40
--- /dev/null
@@ -0,0 +1,3 @@
+As soon as we begin to explore our body parts as infants
+we become students of {=anatomy and physiology ~reflexology
+~science ~experiment}, and in a sense we remain students for life.
diff --git a/question/format/missingword/tests/fixtures/question.missingword2.txt b/question/format/missingword/tests/fixtures/question.missingword2.txt
new file mode 100644 (file)
index 0000000..77b58de
--- /dev/null
@@ -0,0 +1,2 @@
+You can use the missing word format to import questions
+into both Moodle's Question bank and {=Lesson} activity.
diff --git a/question/format/missingword/tests/fixtures/question.missingword3.txt b/question/format/missingword/tests/fixtures/question.missingword3.txt
new file mode 100644 (file)
index 0000000..e202f82
--- /dev/null
@@ -0,0 +1,2 @@
+This is {=the best answer#comment on the best answer ~75%a good
+answer#comment on the good answer ~a wrong one#comment on the bad answer}
index a8c9a97..256db70 100644 (file)
@@ -93,7 +93,7 @@ class qformat_xhtml extends qformat_default {
             }
             $expout .= "</ul>\n";
             break;
-        case SHORTANSWER:
+        case 'shortanswer':
             $expout .= html_writer::start_tag('ul', array('class' => 'shortanswer'));
             $expout .= html_writer::start_tag('li');
             $expout .= html_writer::label(get_string('answer'), 'quest_'.$id, false, array('class' => 'accesshide'));
@@ -101,7 +101,7 @@ class qformat_xhtml extends qformat_default {
             $expout .= html_writer::end_tag('li');
             $expout .= html_writer::end_tag('ul');
             break;
-        case NUMERICAL:
+        case 'numerical':
             $expout .= html_writer::start_tag('ul', array('class' => 'numerical'));
             $expout .= html_writer::start_tag('li');
             $expout .= html_writer::label(get_string('answer'), 'quest_'.$id, false, array('class' => 'accesshide'));
@@ -109,7 +109,7 @@ class qformat_xhtml extends qformat_default {
             $expout .= html_writer::end_tag('li');
             $expout .= html_writer::end_tag('ul');
             break;
-        case MATCH:
+        case 'match':
             $expout .= html_writer::start_tag('ul', array('class' => 'match'));
 
             // build answer list
@@ -140,11 +140,9 @@ class qformat_xhtml extends qformat_default {
             break;
         case 'description':
             break;
-        case 'multichoice':
-            $expout .= "<!-- CLOZE type is not supported  -->\n";
-            break;
+        case 'multianswer':
         default:
-            echo $OUTPUT->notification("No handler for qtype $question->qtype for GIFT export" );
+            $expout .= "<!-- export of $question->qtype type is not supported  -->\n";
         }
         // close off div
         $expout .= "</div>\n\n\n";