You are here

class qformat_xhtml in Quiz 6.5

Same name and namespace in other branches
  1. 6.6 includes/moodle/question/format/xhtml/format.php \qformat_xhtml

@package questionbank @subpackage importexport

Hierarchy

Expanded class hierarchy of qformat_xhtml

File

includes/moodle/question/format/xhtml/format.php, line 7

View source
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";
  }

}

Members

Namesort descending Modifiers Type Description Overrides
qformat_default::$canaccessbackupdata property
qformat_default::$category property
qformat_default::$catfromfile property
qformat_default::$cattofile property
qformat_default::$contextfromfile property
qformat_default::$contexttofile property
qformat_default::$course property
qformat_default::$displayerrors property
qformat_default::$filename property
qformat_default::$importerrors property
qformat_default::$matchgrades property
qformat_default::$questionids property
qformat_default::$questions property
qformat_default::$realfilename property
qformat_default::$stoponerror property
qformat_default::$translator property
qformat_default::count_questions function Count all non-category questions in the questions array.
qformat_default::create_category_path function find and/or create the category described by a delimited list e.g. $course$/tom/dick/harry or tom/dick/harry
qformat_default::defaultquestion function return an "empty" question Somewhere to specify question parameters that are not handled by import but are required db fields. This should not be overridden.
qformat_default::error function Handle parsing error
qformat_default::exportpostprocess function Do an post-processing that may be required
qformat_default::exportpreprocess function Do any pre-processing that may be required 1
qformat_default::exportprocess function Do the export For most types this should not need to be overrided 1
qformat_default::format_question_text function where question specifies a moodle (text) format this performs the conversion.
qformat_default::get_category_path function get the category as a path (e.g., tom/dick/harry)
qformat_default::importimagefile function Import an image file encoded in base64 format
qformat_default::importpostprocess function Override if any post-processing is required 2
qformat_default::importpreprocess function Perform any required pre-processing 2
qformat_default::importprocess function Process the file This method should not normally be overidden 1
qformat_default::provide_import function 12
qformat_default::question_get_export_dir function get directory into which export is going
qformat_default::readdata function Return complete file within an array, one item per line 1
qformat_default::readquestion function Given the data known to define a question in this format, this function converts it into a question object suitable for processing and insertion into Moodle. 5
qformat_default::readquestions function Parses an array of lines into an array of questions, where each item is a question object as defined by readquestion(). Questions are defined as anything between blank lines. 9
qformat_default::setCategory function set the category
qformat_default::setCatfromfile function set catfromfile
qformat_default::setCattofile function set cattofile
qformat_default::setContextfromfile function set contextfromfile
qformat_default::setContexts function set an array of contexts.
qformat_default::setContexttofile function set contexttofile
qformat_default::setCourse function set the course class variable
qformat_default::setFilename function set the filename
qformat_default::setMatchgrades function set matchgrades
qformat_default::setQuestions function Set the specific questions to export. Should not include questions with parents (sub questions of cloze question type). Only used for question export.
qformat_default::setRealfilename function set the "real" filename (this is what the user typed, regardless of wha happened next)
qformat_default::setStoponerror function set stoponerror
qformat_default::set_can_access_backupdata function
qformat_default::try_exporting_using_qtypes function Provide export functionality for plugin questiontypes Do not override
qformat_default::try_importing_using_qtypes function Import for questiontype plugins Do not override.
qformat_xhtml::export_file_extension function Return the files extension appropriate for this type override if you don't want .txt Overrides qformat_default::export_file_extension
qformat_xhtml::presave_process function Enable any processing to be done on the content just prior to the file being saved default is to do nothing Overrides qformat_default::presave_process
qformat_xhtml::provide_export function Overrides qformat_default::provide_export
qformat_xhtml::repchar function
qformat_xhtml::writequestion function convert a single question object into text output in the given format. This must be overriden Overrides qformat_default::writequestion