Permalink
Browse files

Backport from 1.7. Was completely broken (class constructed wrongly),…

… so nothing much to lose!
  • Loading branch information...
1 parent 902590a commit fc144c4992e1eb285dac2528f81fb2ed7d797430 thepurpleblob committed Apr 16, 2007
Showing with 134 additions and 74 deletions.
  1. +134 −74 question/format/blackboard/format.php
@@ -10,6 +10,7 @@
// Based on default.php, included by ../import.php
require_once ("$CFG->libdir/xmlize.php");
+// require_once ("$CFG->libdir/tcpdf/html_entity_decode_php4.php");
class qformat_blackboard extends qformat_default {
@@ -62,15 +63,14 @@ function readquestions ($lines) {
$questions = array();
- process_tf($xml, $questions);
- process_mc($xml, $questions);
- process_ma($xml, $questions);
- process_fib($xml, $questions);
- process_matching($xml, $questions);
+ $this->process_tf($xml, $questions);
+ $this->process_mc($xml, $questions);
+ $this->process_ma($xml, $questions);
+ $this->process_fib($xml, $questions);
+ $this->process_matching($xml, $questions);
return $questions;
}
-}
//----------------------------------------
// Process True / False Questions
@@ -89,15 +89,22 @@ function process_tf($xml, &$questions) {
$question = $this->defaultquestion();
$question->qtype = TRUEFALSE;
- $question->single = 1; // Only one answer is allowed
+ $question->single = 1; // Only one answer is allowed
+
+ $thisquestion = $tfquestions[$i];
+
+ // determine if the question is already escaped html
+ $ishtml = $thisquestion["#"]["BODY"][0]["#"]["FLAGS"][0]["#"]["ISHTML"][0]["@"]["value"];
- $thisquestion = $tfquestions[$i];
// put questiontext in question object
- $question->questiontext = addslashes(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ if ($ishtml) {
+ $question->questiontext = html_entity_decode_php4(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ }
+ $question->questiontext = addslashes($question->questiontext);
// put name in question object
- $question->name = $question->questiontext;
+ $question->name = substr($question->questiontext, 0, 254);
- $choices = $thisquestion["#"]["ANSWER"];
+ $choices = $thisquestion["#"]["ANSWER"];
$correct_answer = $thisquestion["#"]["GRADABLE"][0]["#"]["CORRECTANSWER"][0]["@"]["answer_id"];
@@ -106,13 +113,14 @@ function process_tf($xml, &$questions) {
if (strcmp($id, $correct_answer) == 0) { // true is correct
$question->answer = 1;
- $question->feedbacktrue = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
- $question->feedbackfalse = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
+ $question->feedbacktrue = addslashes(trim(@$thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
+ $question->feedbackfalse = addslashes(trim(@$thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
} else { // false is correct
$question->answer = 0;
- $question->feedbacktrue = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
- $question->feedbackfalse = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
+ $question->feedbacktrue = addslashes(trim(@$thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
+ $question->feedbackfalse = addslashes(trim(@$thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
}
+ $question->correctanswer = $question->answer;
$questions[] = $question;
}
}
@@ -134,30 +142,47 @@ function process_mc($xml, &$questions) {
$question = $this->defaultquestion();
$question->qtype = MULTICHOICE;
- $question->single = 1; // Only one answer is allowed
+ $question->single = 1; // Only one answer is allowed
+
+ $thisquestion = $mcquestions[$i];
+
+ // determine if the question is already escaped html
+ $ishtml = $thisquestion["#"]["BODY"][0]["#"]["FLAGS"][0]["#"]["ISHTML"][0]["@"]["value"];
- $thisquestion = $mcquestions[$i];
// put questiontext in question object
- $question->questiontext = addslashes(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
- // put name of question in question object
- $question->name = $question->questiontext;
+ if ($ishtml) {
+ $question->questiontext = html_entity_decode(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ }
+ $question->questiontext = addslashes($question->questiontext);
- $choices = $thisquestion["#"]["ANSWER"];
- for ($j = 0; $j < sizeof ($choices); $j++) {
+ // put name of question in question object, careful of length
+ $question->name = substr($question->questiontext, 0, 254);
- $choice = trim($choices[$j]["#"]["TEXT"][0]["#"]);
+ $choices = $thisquestion["#"]["ANSWER"];
+ for ($j = 0; $j < sizeof ($choices); $j++) {
+
+ $choice = trim($choices[$j]["#"]["TEXT"][0]["#"]);
// put this choice in the question object.
- $question->answer[$j] = addslashes($choice);
+ if ($ishtml) {
+ $question->answer[$j] = html_entity_decode($choice);
+ }
+ $question->answer[$j] = addslashes($question->answer[$j]);
- $id = $choices[$j]["@"]["id"];
- $correct_answer_id = $thisquestion["#"]["GRADABLE"][0]["#"]["CORRECTANSWER"][0]["@"]["answer_id"];
+ $id = $choices[$j]["@"]["id"];
+ $correct_answer_id = $thisquestion["#"]["GRADABLE"][0]["#"]["CORRECTANSWER"][0]["@"]["answer_id"];
// if choice is the answer, give 100%, otherwise give 0%
- if (strcmp ($id, $correct_answer_id) == 0) {
- $question->fraction[$j] = 1;
- $question->feedback[$j] = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
+ if (strcmp ($id, $correct_answer_id) == 0) {
+ $question->fraction[$j] = 1;
+ if ($ishtml) {
+ $question->feedback[$j] = html_entity_decode(trim(@$thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
+ }
+ $question->feedback[$j] = addslashes($question->feedback[$j]);
} else {
- $question->fraction[$j] = 0;
- $question->feedback[$j] = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
+ $question->fraction[$j] = 0;
+ if ($ishtml) {
+ $question->feedback[$j] = html_entity_decode(trim(@$thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
+ }
+ $question->feedback[$j] = addslashes($question->feedback[$j]);
}
}
$questions[] = $question;
@@ -182,21 +207,28 @@ function process_ma($xml, &$questions) {
$question->qtype = MULTICHOICE;
$question->defaultgrade = 1;
- $question->single = 0; // More than one answers allowed
- $question->image = ""; // No images with this format
+ $question->single = 0; // More than one answers allowed
+ $question->image = ""; // No images with this format
+
+ $thisquestion = $maquestions[$i];
+
+ // determine if the question is already escaped html
+ $ishtml = $thisquestion["#"]["BODY"][0]["#"]["FLAGS"][0]["#"]["ISHTML"][0]["@"]["value"];
- $thisquestion = $maquestions[$i];
// put questiontext in question object
- $question->questiontext = addslashes(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ if ($ishtml) {
+ $question->questiontext = html_entity_decode(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ }
+ $question->questiontext = addslashes($question->questiontext);
// put name of question in question object
- $question->name = $question->questiontext;
+ $question->name = substr($question->questiontext, 0, 254);
- $choices = $thisquestion["#"]["ANSWER"];
+ $choices = $thisquestion["#"]["ANSWER"];
$correctanswers = $thisquestion["#"]["GRADABLE"][0]["#"]["CORRECTANSWER"];
- for ($j = 0; $j < sizeof ($choices); $j++) {
+ for ($j = 0; $j < sizeof ($choices); $j++) {
- $choice = trim($choices[$j]["#"]["TEXT"][0]["#"]);
+ $choice = trim($choices[$j]["#"]["TEXT"][0]["#"]);
// put this choice in the question object.
$question->answer[$j] = addslashes($choice);
@@ -235,29 +267,48 @@ function process_fib($xml, &$questions) {
else {
return;
}
+
for ($i = 0; $i < sizeof ($fibquestions); $i++) {
-
$question = $this->defaultquestion();
$question->qtype = SHORTANSWER;
- $question->usecase = 0; // Ignore case
+ $question->usecase = 0; // Ignore case
+
+ $thisquestion = $fibquestions[$i];
+
+ // determine if the question is already escaped html
+ $ishtml = $thisquestion["#"]["BODY"][0]["#"]["FLAGS"][0]["#"]["ISHTML"][0]["@"]["value"];
- $thisquestion = $fibquestions[$i];
// put questiontext in question object
- $question->questiontext = addslashes(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ if ($ishtml) {
+ $question->questiontext = html_entity_decode(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ }
+ $question->questiontext = addslashes($question->questiontext);
// put name of question in question object
- $question->name = $question->questiontext;
+ $question->name = substr($question->questiontext, 0, 254);
- $answer = trim($thisquestion["#"]["ANSWER"][0]["#"]["TEXT"][0]["#"]);
+ $answer = trim($thisquestion["#"]["ANSWER"][0]["#"]["TEXT"][0]["#"]);
$question->answer[] = addslashes($answer);
$question->fraction[] = 1;
- $question->feedback[0] = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
- $question->feedback[1] = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
+ $question->feedback = array();
+
+ if (is_array( $thisquestion['#']['GRADABLE'][0]['#'] )) {
+ $question->feedback[0] = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_CORRECT"][0]["#"]));
+ }
+ else {
+ $question->feedback[0] = '';
+ }
+ if (is_array( $thisquestion["#"]["GRADABLE"][0]["#"] )) {
+ $question->feedback[1] = addslashes(trim($thisquestion["#"]["GRADABLE"][0]["#"]["FEEDBACK_WHEN_INCORRECT"][0]["#"]));
+ }
+ else {
+ $question->feedback[1] = '';
+ }
$questions[] = $question;
- }
+ }
}
//----------------------------------------
@@ -278,54 +329,63 @@ function process_matching($xml, &$questions) {
$question->qtype = MATCH;
- $thisquestion = $matchquestions[$i];
+ $thisquestion = $matchquestions[$i];
+
+ // determine if the question is already escaped html
+ $ishtml = $thisquestion["#"]["BODY"][0]["#"]["FLAGS"][0]["#"]["ISHTML"][0]["@"]["value"];
+
// put questiontext in question object
- $question->questiontext = addslashes(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ if ($ishtml) {
+ $question->questiontext = html_entity_decode(trim($thisquestion["#"]["BODY"][0]["#"]["TEXT"][0]["#"]));
+ }
+ $question->questiontext = addslashes($question->questiontext);
// put name of question in question object
- $question->name = $question->questiontext;
+ $question->name = substr($question->questiontext, 0, 254);
- $choices = $thisquestion["#"]["CHOICE"];
- for ($j = 0; $j < sizeof ($choices); $j++) {
+ $choices = $thisquestion["#"]["CHOICE"];
+ for ($j = 0; $j < sizeof ($choices); $j++) {
$subquestion = NULL;
- $choice = $choices[$j]["#"]["TEXT"][0]["#"];
- $choice_id = $choices[$j]["@"]["id"];
+ $choice = $choices[$j]["#"]["TEXT"][0]["#"];
+ $choice_id = $choices[$j]["@"]["id"];
$question->subanswers[] = addslashes(trim($choice));
- $correctanswers = $thisquestion["#"]["GRADABLE"][0]["#"]["CORRECTANSWER"];
- for ($k = 0; $k < sizeof ($correctanswers); $k++) {
+ $correctanswers = $thisquestion["#"]["GRADABLE"][0]["#"]["CORRECTANSWER"];
+ for ($k = 0; $k < sizeof ($correctanswers); $k++) {
- if (strcmp($choice_id, $correctanswers[$k]["@"]["choice_id"]) == 0) {
+ if (strcmp($choice_id, $correctanswers[$k]["@"]["choice_id"]) == 0) {
- $answer_id = $correctanswers[$k]["@"]["answer_id"];
+ $answer_id = $correctanswers[$k]["@"]["answer_id"];
- $answers = $thisquestion["#"]["ANSWER"];
- for ($m = 0; $m < sizeof ($answers); $m++) {
+ $answers = $thisquestion["#"]["ANSWER"];
+ for ($m = 0; $m < sizeof ($answers); $m++) {
- $answer = $answers[$m];
- $current_ans_id = $answer["@"]["id"];
- if (strcmp ($current_ans_id, $answer_id) == 0) {
+ $answer = $answers[$m];
+ $current_ans_id = $answer["@"]["id"];
+ if (strcmp ($current_ans_id, $answer_id) == 0) {
- $answer = $answer["#"]["TEXT"][0]["#"];
+ $answer = $answer["#"]["TEXT"][0]["#"];
$question->subquestions[] = addslashes(trim($answer));
- break;
+ break;
- }
+ }
- }
+ }
- break;
+ break;
- }
+ }
- }
+ }
- }
+ }
- $questions[] = $question;
+ $questions[] = $question;
- }
+ }
+}
+
}
?>

0 comments on commit fc144c4

Please sign in to comment.