⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 format.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
                            case CALCULATED:                                foreach ($question->answers as $answer) {                                    if ($formulaerror =qtype_calculated_find_formula_errors($answer)) { //$QTYPES['calculated']->                                        $warnings[] = "'$question->name': ". $formulaerror;                                        $QuestionOK = FALSE;                                    }                                }                                foreach ($question->dataset as $dataset) {                                    $dataset->itemcount=count($dataset->datasetitem);                                }                                $question->import_process=TRUE ;                                unset($question->answer); //not used in calculated question                                break;                            case MATCH:                                // MDL-10680:                                // switch subquestions and subanswers                                foreach ($question->subquestions as $id=>$subquestion) {                                    $temp = $question->subquestions[$id];                                    $question->subquestions[$id] = $question->subanswers[$id];                                    $question->subanswers[$id] = $temp;                                 }                                if (count($question->answer) < 3){                                    // add a dummy missing question                                    $question->name = 'Dummy question added '.$question->name ;                                    $question->answer[] = 'dummy';                                    $question->subanswers[] = 'dummy';                                    $question->subquestions[] = 'dummy';                                                                        $question->fraction[] = '0.0';                                    $question->feedback[] = '';                                 }                                    break;                               default:                                // No problemo                        }                    }                    if ($QuestionOK) {                                               // echo "<pre>"; print_r ($question);                        $questions[] = $question;    // store it                        unset($question);            // and prepare a new one                        $question = $this->defaultquestion();                    }                }                $nQuestionStartLine = $nLineCounter;            }            // Processing Question Header            if (eregi("^:TYPE:MC:1(.*)",$line,$webct_options)) {                // Multiple Choice Question with only one good answer                $question = $this->defaultquestion();                $question->feedback = array();                $question->qtype = MULTICHOICE;                $question->single = 1;        // Only one answer is allowed                $ignore_rest_of_question = FALSE;                continue;            }            if (eregi("^:TYPE:MC:N(.*)",$line,$webct_options)) {                // Multiple Choice Question with several good answers                $question = $this->defaultquestion();                $question->feedback = array();                $question->qtype = MULTICHOICE;                $question->single = 0;        // Many answers allowed                $ignore_rest_of_question = FALSE;                continue;            }            if (eregi("^:TYPE:S",$line)) {                // Short Answer Question                $question = $this->defaultquestion();                $question->feedback = array();                $question->qtype = SHORTANSWER;                $question->usecase = 0;       // Ignore case                $ignore_rest_of_question = FALSE;                continue;            }            if (eregi("^:TYPE:C",$line)) {                // Calculated Question           /*     $warnings[] = get_string("calculatedquestion", "quiz", $nLineCounter);                unset($question);                $ignore_rest_of_question = TRUE;         // Question Type not handled by Moodle             */                $question = $this->defaultquestion();                $question->qtype = CALCULATED;                $question->answers = array(); // No problem as they go as :FORMULA: from webct                $question->units = array();                $question->dataset = array();                // To make us pass the end-of-question sanity checks                $question->answer = array('dummy');                $question->fraction = array('1.0');                $question->feedback = array();                $currentchoice = -1;                $ignore_rest_of_question = FALSE;                continue;            }            if (eregi("^:TYPE:M",$line)) {                // Match Question                $question = $this->defaultquestion();                $question->qtype = MATCH;                $question->feedback = array();                $ignore_rest_of_question = FALSE;         // match question processing is not debugged                continue;            }            if (eregi("^:TYPE:P",$line)) {                // Paragraph Question                $warnings[] = get_string("paragraphquestion", "quiz", $nLineCounter);                unset($question);                $ignore_rest_of_question = TRUE;         // Question Type not handled by Moodle                continue;            }            if (eregi("^:TYPE:",$line)) {                // Unknow Question                $warnings[] = get_string("unknowntype", "quiz", $nLineCounter);                unset($question);                $ignore_rest_of_question = TRUE;         // Question Type not handled by Moodle                continue;            }            if ($ignore_rest_of_question) {                continue;            }            if (eregi("^:TITLE:(.*)",$line,$webct_options)) {                $name = trim($webct_options[1]);                if (strlen($name) > 255) {                    $name = substr($name,0,250)."...";                    $warnings[] = get_string("questionnametoolong", "quiz", $nLineCounter);                }                $question->name = addslashes($name);                continue;            }            if (eregi("^:IMAGE:(.*)",$line,$webct_options)) {                $filename = trim($webct_options[1]);                if (eregi("^http://",$filename)) {                    $question->image = $filename;                }                continue;            }            // Need to put the parsing of calculated items here to avoid ambitiuosness:            // if question isn't defined yet there is nothing to do here (avoid notices)            if (!isset($question)) {                continue;            }             if (isset($question->qtype ) && CALCULATED == $question->qtype && ereg(                    "^:([[:lower:]].*|::.*)-(MIN|MAX|DEC|VAL([0-9]+))::?:?($webctnumberregex)", $line, $webct_options)) {                $datasetname = ereg_replace('^::', '', $webct_options[1]);                $datasetvalue = qformat_webct_convert_formula($webct_options[4]);                switch ($webct_options[2]) {                    case 'MIN':                        $question->dataset[$datasetname]->min = $datasetvalue;                        break;                    case 'MAX':                        $question->dataset[$datasetname]->max = $datasetvalue;                        break;                    case 'DEC':                        $datasetvalue = floor($datasetvalue); // int only!                        $question->dataset[$datasetname]->length = max(0, $datasetvalue);                        break;                    default:                        // The VAL case:                        $question->dataset[$datasetname]->datasetitem[$webct_options[3]] = new stdClass();                        $question->dataset[$datasetname]->datasetitem[$webct_options[3]]->itemnumber = $webct_options[3];                        $question->dataset[$datasetname]->datasetitem[$webct_options[3]]->value  = $datasetvalue;                        break;                }                continue;            }            $bIsHTMLText = eregi(":H$",$line);  // True if next lines are coded in HTML            if (eregi("^:QUESTION",$line)) {                $questiontext="";               // Start gathering next lines                continue;            }            if (eregi("^:ANSWER([0-9]+):([^:]+):([0-9\.\-]+):(.*)",$line,$webct_options)) {      /// SHORTANSWER                $currentchoice=$webct_options[1];                $answertext=$webct_options[2];            // Start gathering next lines                $question->fraction[$currentchoice]=($webct_options[3]/100);                continue;            }            if (eregi("^:ANSWER([0-9]+):([0-9\.\-]+)",$line,$webct_options)) {                $answertext="";                 // Start gathering next lines                $currentchoice=$webct_options[1];                $question->fraction[$currentchoice]=($webct_options[2]/100);                continue;            }            if (eregi('^:FORMULA:(.*)', $line, $webct_options)) {                // Answer for a CALCULATED question                ++$currentchoice;                $question->answers[$currentchoice] =                        qformat_webct_convert_formula($webct_options[1]);                // Default settings:                $question->fraction[$currentchoice] = 1.0;                $question->tolerance[$currentchoice] = 0.0;                $question->tolerancetype[$currentchoice] = 2; // nominal (units in webct)                $question->feedback[$currentchoice] = '';                $question->correctanswerlength[$currentchoice] = 4;                $datasetnames = $QTYPES[CALCULATED]->find_dataset_names($webct_options[1]);                foreach ($datasetnames as $datasetname) {                    $question->dataset[$datasetname] = new stdClass();                    $question->dataset[$datasetname]->datasetitem = array();                    $question->dataset[$datasetname]->name = $datasetname ;                     $question->dataset[$datasetname]->distribution = 'uniform';                     $question->dataset[$datasetname]->status ='private';                }                continue;            }            if (eregi("^:L([0-9]+)",$line,$webct_options)) {                $answertext="";                 // Start gathering next lines                $currentchoice=$webct_options[1];                $question->fraction[$currentchoice]=1;                 continue;            }            if (eregi("^:R([0-9]+)",$line,$webct_options)) {                $responsetext="";                // Start gathering next lines                $currentchoice=$webct_options[1];                continue;            }            if (eregi("^:REASON([0-9]+):?",$line,$webct_options)) {                $feedbacktext="";               // Start gathering next lines                $currentchoice=$webct_options[1];                continue;            }            if (eregi("^:FEEDBACK([0-9]+):?",$line,$webct_options)) {                $generalfeedbacktext="";               // Start gathering next lines                $currentchoice=$webct_options[1];                continue;            }            if (eregi('^:FEEDBACK:(.*)',$line,$webct_options)) {                $generalfeedbacktext="";               // Start gathering next lines                continue;            }            if (eregi('^:LAYOUT:(.*)',$line,$webct_options)) {            //    ignore  since layout in question_multichoice  is no more used in moodle                   //    $webct_options[1] contains either vertical or horizontal ;                continue;            }            if (isset($question->qtype ) && CALCULATED == $question->qtype && eregi('^:ANS-DEC:([1-9][0-9]*)', $line, $webct_options)) {                // We can but hope that this always appear before the ANSTYPE property                $question->correctanswerlength[$currentchoice] = $webct_options[1];                continue;            }            if (isset($question->qtype )&& CALCULATED == $question->qtype && eregi("^:TOL:($webctnumberregex)", $line, $webct_options)) {                // We can but hope that this always appear before the TOL property                $question->tolerance[$currentchoice] =                        qformat_webct_convert_formula($webct_options[1]);                continue;            }            if (isset($question->qtype )&& CALCULATED == $question->qtype && eregi('^:TOLTYPE:percent', $line)) {                // Percentage case is handled as relative in Moodle:                $question->tolerance[$currentchoice]  /= 100;                $question->tolerancetype[$currentchoice] = 1; // Relative                continue;            }            if (eregi('^:UNITS:(.+)', $line, $webct_options)                    and $webctunits = trim($webct_options[1])) {                // This is a guess - I really do not know how different webct units are separated...                $webctunits = explode(':', $webctunits);                $unitrec->multiplier = 1.0; // Webct does not seem to support this                foreach ($webctunits as $webctunit) {                    $unitrec->unit = trim($webctunit);                    $question->units[] = $unitrec;                }                continue;            }            if (!empty($question->units) && eregi('^:UNITREQ:(.*)', $line, $webct_options)                    && !$webct_options[1]) {                // There are units but units are not required so add the no unit alternative                // We can but hope that the UNITS property always appear before this property                $unitrec->unit = '';                $unitrec->multiplier = 1.0;                $question->units[] = $unitrec;                continue;            }            if (!empty($question->units) && eregi('^:UNITCASE:', $line)) {                // This could be important but I was not able to figure out how                // it works so I ignore it for now                continue;            }            if (isset($question->qtype )&& CALCULATED == $question->qtype && eregi('^:ANSTYPE:dec', $line)) {                $question->correctanswerformat[$currentchoice]='1';                continue;            }            if (isset($question->qtype )&& CALCULATED == $question->qtype && eregi('^:ANSTYPE:sig', $line)) {                $question->correctanswerformat[$currentchoice]='2';                continue;            }        }        if (sizeof($errors) > 0) {            echo "<p>".get_string("errorsdetected", "quiz", sizeof($errors))."</p><ul>";            foreach($errors as $error) {                echo "<li>$error</li>";            }            echo "</ul>";            unset($questions);     // no questions imported        }        if (sizeof($warnings) > 0) {            echo "<p>".get_string("warningsdetected", "quiz", sizeof($warnings))."</p><ul>";            foreach($warnings as $warning) {                echo "<li>$warning</li>";            }            echo "</ul>";        }        return $questions;    }}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -