format.php

来自「很棒的在线教学系统」· PHP 代码 · 共 152 行

PHP
152
字号
<?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 + =
减小字号Ctrl + -
显示快捷键?