File: format.php

package info (click to toggle)
moodle 1.6.3-2%2Betch3
  • links: PTS
  • area: main
  • in suites: etch
  • size: 37,172 kB
  • ctags: 51,688
  • sloc: php: 231,916; sql: 5,631; xml: 2,688; sh: 1,185; perl: 638; makefile: 48; pascal: 36
file content (145 lines) | stat: -rwxr-xr-x 4,621 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php 
// Based on default.php, included by ../import.php

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

    // 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 .= "<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";
}

}
?>