You are here

format.php in Quiz 6.5

File

includes/moodle/question/format/xhtml/format.php
View source
<?php

// Based on default.php, included by ../import.php

/**
 * @package questionbank
 * @subpackage importexport
 */
class qformat_xhtml extends qformat_default {
  function provide_export() {
    return true;
  }
  function repchar($text) {

    // escapes 'reserved' characters # = ~ { ) and removes new lines
    $reserved = array(
      '#',
      '=',
      '~',
      '{',
      '}',
      "\n",
      "\r",
    );
    $escaped = array(
      '\\#',
      '\\=',
      '\\~',
      '\\{',
      '\\}',
      ' ',
      '',
    );
    return str_replace($reserved, $escaped, $text);
  }
  function writequestion($question) {

    // turns question into string
    // question reflects database fields for general question and specific to type
    // if a category switch, just ignore
    if ($question->qtype == 'category') {
      return '';
    }

    // initial string;
    $expout = "";
    $id = $question->id;

    // add comment and div tags
    $expout .= "<!-- question: {$id}  name: {$question->name} -->\n";
    $expout .= "<div class=\"question\">\n";

    // add header
    $expout .= "<h3>{$question->name}</h3>\n";

    // format and add question text
    $questiontext = $question->questiontext;
    $format = $question->questiontextformat;
    $formatted_text = format_text($questiontext, $format);
    $expout .= "<p class=\"questiontext\">{$formatted_text}</p>\n";

    // selection depends on question type
    switch ($question->qtype) {
      case TRUEFALSE:
        $st_true = get_string('true', 'quiz');
        $st_false = get_string('false', 'quiz');
        $expout .= "<ul class=\"truefalse\">\n";
        $expout .= "  <li><input name=\"quest_{$id}\" type=\"radio\" value=\"{$st_true}\" />{$st_true}</li>\n";
        $expout .= "  <li><input name=\"quest_{$id}\" type=\"radio\" value=\"{$st_false}\" />{$st_false}</li>\n";
        $expout .= "</ul>\n";
        break;
      case MULTICHOICE:
        $expout .= "<ul class=\"multichoice\">\n";
        foreach ($question->options->answers as $answer) {
          $ans_text = $this
            ->repchar($answer->answer);
          if ($question->options->single) {
            $expout .= "  <li><input name=\"quest_{$id}\" type=\"radio\" value=\"{$ans_text}\" />{$ans_text}</li>\n";
          }
          else {
            $expout .= "  <li><input name=\"quest_{$id}\" type=\"checkbox\" value=\"{$ans_text}\" />{$ans_text}</li>\n";
          }
        }
        $expout .= "</ul>\n";
        break;
      case SHORTANSWER:
        $expout .= "<ul class=\"shortanswer\">\n";
        $expout .= "  <li><input name=\"quest_{$id}\" type=\"text\" /></li>\n";
        $expout .= "</ul>\n";
        break;
      case NUMERICAL:
        $expout .= "<ul class=\"numerical\">\n";
        $expout .= "  <li><input name=\"quest_{$id}\" type=\"text\" /></li>\n";
        $expout .= "</ul>\n";
        break;
      case MATCH:
        $expout .= "<ul class=\"match\">\n";

        // build answer list
        $ans_list = array();
        foreach ($question->options->subquestions as $subquestion) {
          $ans_list[] = $this
            ->repchar($subquestion->answertext);
        }
        shuffle($ans_list);

        // random display order
        // build drop down for answers
        $dropdown = "<select name=\"quest_{$id}\">\n";
        foreach ($ans_list as $ans) {
          $dropdown .= "<option value=\"{$ans}\">{$ans}</option>\n";
        }
        $dropdown .= "</select>\n";

        // finally display
        foreach ($question->options->subquestions as $subquestion) {
          $quest_text = $this
            ->repchar($subquestion->questiontext);
          $expout .= "  <li>{$quest_text}</li>\n";
          $expout .= $dropdown;
        }
        $expout .= "</ul>\n";
        break;
      case DESCRIPTION:
        break;
      case MULTIANSWER:
        $expout .= "<!-- CLOZE type is not supported  -->\n";
        break;
      default:
        notify("No handler for qtype {$question->qtype} for GIFT export");
    }

    // close off div
    $expout .= "</div>\n\n\n";
    return $expout;
  }
  function presave_process($content) {

    // override method to allow us to add xhtml headers and footers
    global $CFG;

    // get css bit
    $css_lines = file("{$CFG->dirroot}/question/format/xhtml/xhtml.css");
    $css = implode(' ', $css_lines);
    $xp = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
    $xp .= "  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
    $xp .= "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";
    $xp .= "<head>\n";
    $xp .= "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n";
    $xp .= "<title>Moodle Quiz XHTML Export</title>\n";
    $xp .= $css;
    $xp .= "</head>\n";
    $xp .= "<body>\n";
    $xp .= "<form action=\"...REPLACE ME...\" method=\"post\">\n\n";
    $xp .= $content;
    $xp .= "<p class=\"submit\">\n";
    $xp .= "  <input type=\"submit\" />\n";
    $xp .= "</p>\n";
    $xp .= "</form>\n";
    $xp .= "</body>\n";
    $xp .= "</html>\n";
    return $xp;
  }
  function export_file_extension() {
    return ".html";
  }

}

Classes

Namesort descending Description
qformat_xhtml @package questionbank @subpackage importexport