?? format.php
字號:
<?php // $Id: format.php,v 1.4.4.1 2007/11/02 16:21:06 tjhunt Exp $ // Alton College, Hampshire, UK - Tom Flannaghan, Andrew Walker// Imports learnwise multiple choice quizzes (single and multiple answers)// currently ignores the deduct attribute for multiple answer questions// deductions are currently simply found by dividing the award for the incorrect // answer by the total number of options// Based on format.php, included by ../../import.php/** * @package questionbank * @subpackage importexport */class qformat_learnwise extends qformat_default { function provide_import() { return true; } function readquestions($lines) { $questions = array(); $currentquestion = array(); foreach($lines as $line) { $line = trim($line); $currentquestion[] = $line; if ($question = $this->readquestion($currentquestion)) { $questions[] = $question; $currentquestion = array(); } } return $questions; } function readquestion($lines) { $text = implode(' ', $lines); $text = str_replace(array('\t','\n','\r','\''), array('','','','\\\''), $text); $startpos = strpos($text, '<question type'); $endpos = strpos($text, '</question>'); if ($startpos === false || $endpos === false) { return false; } preg_match("/<question type=[\"\']([^\"\']+)[\"\']>/i", $text, $matches); $type = strtolower($matches[1]); // multichoice or multianswerchoice $questiontext = $this->unhtmlentities($this->stringbetween($text, '<text>', '</text>')); $questionhint = $this->unhtmlentities($this->stringbetween($text, '<hint>', '</hint>')); $questionaward = $this->stringbetween($text, '<award>', '</award>'); $optionlist = $this->stringbetween($text, '<answer>', '</answer>'); $optionlist = explode('<option', $optionlist); $n = 0; $optionscorrect = array(); $optionstext = array(); if ($type == 'multichoice') { foreach ($optionlist as $option) { $correct = $this->stringbetween($option, ' correct="', '">'); $answer = $this->stringbetween($option, '">', '</option>'); $optionscorrect[$n] = $correct; $optionstext[$n] = $this->unhtmlentities($answer); ++$n; } } else if ($type == 'multianswerchoice') { $numcorrect = 0; $totalaward = 0; $optionsaward = array(); foreach ($optionlist as $option) { preg_match("/correct=\"([^\"]*)\"/i", $option, $correctmatch); preg_match("/award=\"([^\"]*)\"/i", $option, $awardmatch); $correct = $correctmatch[1]; $award = $awardmatch[1]; if ($correct == 'yes') { $totalaward += $award; ++$numcorrect; } $answer = $this->stringbetween($option, '">', '</option>'); $optionscorrect[$n] = $correct; $optionstext[$n] = $this->unhtmlentities($answer); $optionsaward[$n] = $award; ++$n; } } else { echo "<p>I don't understand this question type (type = <strong>$type</strong>).</p>\n"; } $question = $this->defaultquestion(); $question->qtype = MULTICHOICE; $question->name = substr($questiontext, 0, 30); if (strlen($questiontext) > 30) { $question->name .= '...'; } $question->questiontext = $questiontext; $question->single = ($type == 'multichoice') ? 1 : 0; $question->feedback[] = ''; $question->fraction = array(); $question->answer = array(); for ($n = 0; $n < count($optionstext); ++$n) { if ($optionstext[$n]) { if (!isset($numcorrect)) { // single answer if ($optionscorrect[$n] == 'yes') { $fraction = (int) $questionaward; } else { $fraction = 0; } } else { // mulitple answers if ($optionscorrect[$n] == 'yes') { $fraction = $optionsaward[$n] / $totalaward; } else { $fraction = -$optionsaward[$n] / count($optionstext); } } $question->fraction[] = $fraction; $question->answer[] = $optionstext[$n]; $question->feedback[] = ''; // no feedback in this type } } return $question; } function stringbetween($text, $start, $end) { $startpos = strpos($text, $start) + strlen($start); $endpos = strpos($text, $end); if ($startpos <= $endpos) { return substr($text, $startpos, $endpos - $startpos); } } function unhtmlentities($string) { $transtable = get_html_translation_table(HTML_ENTITIES); $transtable = array_flip($transtable); return strtr($string, $transtable); } }?>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -