]> git.mjollnir.org Git - moodle.git/commitdiff
Added a new preview/test feature for quiz questions, sent in by
authormoodler <moodler>
Mon, 16 Aug 2004 15:16:26 +0000 (15:16 +0000)
committermoodler <moodler>
Mon, 16 Aug 2004 15:16:26 +0000 (15:16 +0000)
  Pavel <paolo@psychpan.waw.pl>

Thanks to Przemyslaw, too!

lang/en/quiz.php
mod/quiz/lib.php
mod/quiz/preview.php [new file with mode: 0644]

index bf02cfbe2537897099ecfad9ba63a563360cd556..5566ea07ab5a373e6f149932e8026c48aedc8de3 100644 (file)
@@ -41,9 +41,11 @@ $string['category'] = 'Category';
 $string['categoryinfo'] = 'Category info';
 $string['categorymove'] = 'The category \'$a->name\' contains $a->count questions.  Please choose another category to move them to.';
 $string['categorymoveto'] = 'Move them to this category';
+$string['checkanswer'] = 'Check';
 $string['choice'] = 'Choice';
 $string['choices'] = 'Available choices';
 $string['choosedatasetproperties'] = 'Choose dataset properties';
+$string['close'] = 'Close preview';
 $string['confirmstartattempt'] = 'The Quiz has a time limit. Are you sure that you wish to start?';
 $string['correctanswer'] = 'Correct answer';
 $string['correctanswerformula'] = 'Correct Answer Formula';
@@ -175,6 +177,8 @@ $string['overdue'] = 'Overdue';
 $string['paragraphquestion'] = 'Paragraph Question not supported at line $a. The question will be ignored';
 $string['passworderror'] = 'The password entered was incorrect';
 $string['percentcorrect'] = 'Percent Correct';
+$string['preview'] = 'Preview';
+$string['previewquestion'] = 'Preview question';
 $string['publish'] = 'Publish';
 $string['publishedit'] = 'You must have permission in the publishing course to add or edit questions in this category';
 $string['qti'] = 'IMS QTI format';
index 8a276c4a10f50b898609c67b4c80bd6771a635fb..ec43af7fe9a0bbd67c03a01d05e4d2b0bb7aedd8 100644 (file)
@@ -1209,6 +1209,7 @@ function quiz_print_question_list($questionlist, $grades) {
     $strmovedown = get_string("movedown");
     $strsavegrades = get_string("savegrades", "quiz");
     $strtype = get_string("type", "quiz");
+    $strpreview = get_string("preview", "quiz");
 
     $count = 0;
     $sumgrade = 0;
@@ -1251,6 +1252,9 @@ function quiz_print_question_list($questionlist, $grades) {
         echo "<td>";
             echo "<a title=\"$strdelete\" href=\"edit.php?delete=$qnum\"><img
                  src=\"../../pix/t/delete.gif\" border=\"0\"></a>&nbsp;";
+            echo "<a title=\"$strpreview\" href=\"#\" onClick=\"openpopup('/mod/quiz/preview.php?id=$qnum','$strpreview','scrollbars=yes,resizable=yes,width=700,height=480', false)\"><img
+                  src=\"../../pix/i/search.gif\" border=\"0\"></a>&nbsp;";
+
             if ($canedit) {
                 echo "<a title=\"$stredit\" href=\"question.php?id=$qnum\"><img
                      src=\"../../pix/t/edit.gif\" border=\"0\"></a>\n";
@@ -1292,6 +1296,7 @@ function quiz_print_cat_question_list($categoryid, $quizselected=true) {
     $straddselectedtoquiz = get_string("addselectedtoquiz", "quiz");
     $strtype = get_string("type", "quiz");
     $strcreatemultiple = get_string("createmultiple", "quiz");
+    $strpreview = get_string("preview","quiz");
 
     if (!$categoryid) {
         echo "<p align=\"center\"><b>";
@@ -1395,6 +1400,8 @@ function quiz_print_cat_question_list($categoryid, $quizselected=true) {
             echo "<td>\n";
                 echo "<a title=\"$strdelete\" href=\"question.php?id=$question->id&delete=$question->id\">\n<img
                      src=\"../../pix/t/delete.gif\" border=0></a>&nbsp;";
+                echo "<a title=\"$strpreview\" href=\"#\" onClick=\"openpopup('/mod/quiz/preview.php?id=$question->id','$strpreview','scrollbars=yes,resizable=yes,width=700,height=480', false)\"><img
+                      src=\"../../pix/i/search.gif\" border=\"0\"></a>&nbsp;";
                 echo "<a title=\"$stredit\" href=\"question.php?id=$question->id\"><img
                      src=\"../../pix/t/edit.gif\" border=0></a>";
             echo "</td>\n";// deleted </tr> jm
diff --git a/mod/quiz/preview.php b/mod/quiz/preview.php
new file mode 100644 (file)
index 0000000..63cb916
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+    require_once("../../config.php");
+    require_once("lib.php");
+    require_once("../../files/mimetypes.php");
+
+    optional_variable($id);        // question id
+
+    optional_variable($qtype);
+    optional_variable($category);
+
+    if ($id) {
+        if (! $question = get_record("quiz_questions", "id", $id)) {
+            error("This question doesn't exist");
+        }
+        if (!empty($category)) {
+            $question->category = $category;
+        }
+        if (! $category = get_record("quiz_categories", "id", $question->category)) {
+            error("This question doesn't belong to a valid category!");
+        }
+        if (! $course = get_record("course", "id", $category->course)) {
+            error("This question category doesn't belong to a valid course!");
+        }
+
+        $qtype = $question->qtype;
+
+
+    } else if ($category) {
+        if (! $category = get_record("quiz_categories", "id", $category)) {
+            error("This wasn't a valid category!");
+        }
+        if (! $course = get_record("course", "id", $category->course)) {
+            error("This category doesn't belong to a valid course!");
+        }
+
+        $question->category = $category->id;
+        $question->qtype    = $qtype;
+
+    } else {
+        error("Must specify question id or category");
+    }
+
+    if (empty($qtype)) {
+        error("No question type was specified!");
+    } else if (!isset($QUIZ_QTYPES[$qtype])) {
+        error("Could not find question type: '$qtype'");
+    }
+
+    require_login($course->id);
+
+
+    if (!isteacheredit($course->id)) {
+        error("You can't modify these questions!");
+    }
+
+
+    $strquizzes = get_string('modulenameplural', 'quiz');
+    $streditingquiz = get_string(isset($SESSION->modform->instance) ? "editingquiz" : "editquestions", "quiz");
+    $streditingquestion = get_string("editingquestion", "quiz");
+
+    print_header();
+    print_heading(get_string("previewquestion","quiz"));
+
+    echo "<p align='center'><input type=\"button\" onClick=\"window.close()\" value=\"" . get_string("close", "quiz") . "\"></p>";
+
+    if (empty($question->id)) {
+        $question->id = "";
+    }
+    if (empty($question->name)) {
+        $question->name = "";
+    }
+    if (empty($question->questiontext)) {
+        $question->questiontext = "";
+    }
+    if (empty($question->image)) {
+        $question->image = "";
+    }
+
+    if ($results && isset($results->details[$question->id])) {
+        $details = $results->details[$question->id];
+    } else {
+        $details = false;
+    }
+
+    if($rawanswers = data_submitted()) {
+      $rawanswers = (array)$rawanswers;
+
+      $answers = array();
+      $feedbacks = array();
+      $qids = array();
+
+      foreach ($rawanswers as $key => $value) { // Parse input for question->response
+        $postedId = quiz_extract_posted_id($key);
+        if ($id == $postedId) {
+          $question->response[$key] = trim($value);
+          $questionType = $QUIZ_QTYPES[$question->qtype]->name();
+          $rezult = get_exp_answers($id); //answers from the database
+
+          if($rezult) {
+            foreach ($rezult as $qid => $answer) {
+              if($qid == $value || $answer->answer == $value) {
+                $feedbacks[$qid] = "&nbsp;-&nbsp;<span class=\"feedbacktext\">".format_text($answer->feedback, true, false)."</span>";
+                if($answer->fraction > 0)
+                  $answers[$qid] = "<span class=\"highlight\">" . $answer->answer . "</span>";
+                else
+                  $answers[$qid] = $answer->answer;
+              } else {
+                if(!isset($answers[$qid])) {
+                  if($answer->fraction > 0)
+                    $answers[$qid] = "<span class=\"highlight\">" . $answer->answer . "</span>";
+                  else
+                    $answers[$qid] = $answer->answer;
+                  $feedbacks[$qid] = '';
+                }
+              }
+              $qids[] = $qid;
+            }
+          }//end if rezult
+        }//end if pId==id
+      }//end for each rowanswers
+
+      print_simple_box_start("center", "90%");
+      $QUIZ_QTYPES[$question->qtype]->print_question
+            (1, 0, $question, true, $resultdetails);
+
+      $qids = array_unique($qids); //erease duplicates
+      for($i = 0; $i < count($qids); $i++) {
+        global $THEME;
+        echo "<p align=\"left\">" . $answers[$qids[$i]] . format_text($feedbacks[$qids[$i]], true, false)."</p>";
+      }
+      print_simple_box_end();
+
+    } else {//show question list
+      echo "<form method=\"post\" action=\"preview.php\" $onsubmit>\n";
+      echo "<input type=\"hidden\" name=\"id\" value=\"$id\" />\n";
+
+      print_simple_box_start("center", "90%");
+      $nextquestionnumber = $QUIZ_QTYPES[$question->qtype]->print_question
+              ($nextquestionnumber, $quiz, $question, $readonly, $resultdetails);
+      print_simple_box_end();
+
+      echo "<br />";
+      echo "<center>";
+      echo "<input name=\"submit\" type=\"submit\" value=\"".get_string("checkanswer", "quiz")."\"/>\n";
+      echo "</center>";
+      echo "</form>";
+    }
+
+?>