.
/**
* XHTML question exporter.
*
* @package qformat
* @subpackage xhtml
* @copyright 2005 Howard Miller
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* XHTML question exporter.
*
* Exports questions as static HTML.
*
* @copyright 2005 Howard Miller
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class qformat_xhtml extends qformat_default {
public function provide_export() {
return true;
}
protected function repchar($text) {
return $text;
}
protected function writequestion($question) {
global $OUTPUT;
// 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 .= "\n";
$expout .= "
\n";
// add header
$expout .= "
$question->name
\n";
// Format and add the question text
$expout .= '
' . format_text($question->questiontext,
$question->questiontextformat) . "
\n";
// selection depends on question type
switch($question->qtype) {
case 'truefalse':
$st_true = get_string('true', 'qtype_truefalse');
$st_false = get_string('false', 'qtype_truefalse');
$expout .= "
\n";
break;
case 'multichoice':
$expout .= "
\n";
break;
case 'shortanswer':
$expout .= html_writer::start_tag('ul', array('class' => 'shortanswer'));
$expout .= html_writer::start_tag('li');
$expout .= html_writer::label(get_string('answer'), 'quest_'.$id, false, array('class' => 'accesshide'));
$expout .= html_writer::empty_tag('input', array('id' => "quest_$id", 'name' => "quest_$id", 'type' => 'text'));
$expout .= html_writer::end_tag('li');
$expout .= html_writer::end_tag('ul');
break;
case 'numerical':
$expout .= html_writer::start_tag('ul', array('class' => 'numerical'));
$expout .= html_writer::start_tag('li');
$expout .= html_writer::label(get_string('answer'), 'quest_'.$id, false, array('class' => 'accesshide'));
$expout .= html_writer::empty_tag('input', array('id' => "quest_$id", 'name' => "quest_$id", 'type' => 'text'));
$expout .= html_writer::end_tag('li');
$expout .= html_writer::end_tag('ul');
break;
case 'match':
$expout .= html_writer::start_tag('ul', array('class' => 'match'));
// 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 select options.
$selectoptions = array();
foreach($ans_list as $ans) {
$selectoptions[s($ans)] = s($ans);
}
// display
$option = 0;
foreach($question->options->subquestions as $subquestion) {
// build drop down for answers
$quest_text = $this->repchar( $subquestion->questiontext );
$dropdown = html_writer::label(get_string('answer', 'qtype_match', $option+1), 'quest_'.$id.'_'.$option, false, array('class' => 'accesshide'));
$dropdown .= html_writer::select($selectoptions, "quest_{$id}_{$option}", '', false, array('id' => "quest_{$id}_{$option}"));
$expout .= html_writer::tag('li', $quest_text);
$expout .= $dropdown;
$option++;
}
$expout .= html_writer::end_tag('ul');
break;
case 'description':
break;
case 'multianswer':
default:
$expout .= "\n";
}
// close off div
$expout .= "
\n\n\n";
return $expout;
}
protected 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 = "\n";
$xp .= "\n";
$xp .= "\n";
$xp .= "