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

📄 format.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
                }  // end foreach answer                    //$question->defaultgrade = 1;                //$question->image = "";   // No images with this format                return $question;                break;            case MATCH:                $answers = explode("=", $answertext);                if (isset($answers[0])) {                    $answers[0] = trim($answers[0]);                }                if (empty($answers[0])) {                    array_shift($answers);                }                    if (!$this->check_answer_count( 2,$answers,$text )) {                    return false;                    break;                }                    foreach ($answers as $key => $answer) {                    $answer = trim($answer);                    if (strpos($answer, "->") === false) {                        $giftmatchingformat = get_string('giftmatchingformat','quiz');                        $this->error($giftmatchingformat, $answer );                        return false;                        break 2;                    }                    $marker = strpos($answer,"->");                    $question->subquestions[$key] = addslashes(trim($this->escapedchar_post(substr($answer, 0, $marker))));                    $question->subanswers[$key]   = addslashes(trim($this->escapedchar_post(substr($answer, $marker+2))));                }  // end foreach answer                    return $question;                break;                        case TRUEFALSE:                $answer = $answertext;                $comment = $this->commentparser($answer); // commentparser also removes comment from $answer                $feedback = $this->split_truefalse_comment($comment);                if ($answer == "T" OR $answer == "TRUE") {                    $question->answer = 1;                    $question->feedbacktrue = $feedback['right'];                    $question->feedbackfalse = $feedback['wrong'];                } else {                    $question->answer = 0;                    $question->feedbackfalse = $feedback['right'];                    $question->feedbacktrue = $feedback['wrong'];                }                $question->penalty = 1;                $question->correctanswer = $question->answer;                return $question;                break;                            case SHORTANSWER:                // SHORTANSWER Question                $answers = explode("=", $answertext);                if (isset($answers[0])) {                    $answers[0] = trim($answers[0]);                }                if (empty($answers[0])) {                    array_shift($answers);                }                    if (!$this->check_answer_count( 1,$answers,$text )) {                    return false;                    break;                }                foreach ($answers as $key => $answer) {                    $answer = trim($answer);                    // Answer Weight                    if (ereg($gift_answerweight_regex, $answer)) {    // check for properly formatted answer weight                        $answer_weight = $this->answerweightparser($answer);                    } else {     //default, i.e., full-credit anwer                        $answer_weight = 1;                    }                    $question->fraction[$key] = $answer_weight;                    $question->feedback[$key] = $this->commentparser($answer); //commentparser also removes comment from $answer                    $question->answer[$key]   = addslashes($this->escapedchar_post($answer));                }     // end foreach                //$question->usecase = 0;  // Ignore case                //$question->defaultgrade = 1;                //$question->image = "";   // No images with this format                return $question;                break;            case NUMERICAL:                // Note similarities to ShortAnswer                $answertext = substr($answertext, 1); // remove leading "#"                // If there is feedback for a wrong answer, store it for now.                if (($pos = strpos($answertext, '~')) !== false) {                    $wrongfeedback = substr($answertext, $pos);                    $answertext = substr($answertext, 0, $pos);                } else {                    $wrongfeedback = '';                }                $answers = explode("=", $answertext);                if (isset($answers[0])) {                    $answers[0] = trim($answers[0]);                }                if (empty($answers[0])) {                    array_shift($answers);                }                    if (count($answers) == 0) {                    // invalid question                    $giftnonumericalanswers = get_string('giftnonumericalanswers','quiz');                    $this->error( $giftnonumericalanswers, $text );                    return false;                    break;                }                foreach ($answers as $key => $answer) {                    $answer = trim($answer);                    // Answer weight                    if (ereg($gift_answerweight_regex, $answer)) {    // check for properly formatted answer weight                        $answer_weight = $this->answerweightparser($answer);                    } else {     //default, i.e., full-credit anwer                        $answer_weight = 1;                    }                    $question->fraction[$key] = $answer_weight;                    $question->feedback[$key] = $this->commentparser($answer); //commentparser also removes comment from $answer                    //Calculate Answer and Min/Max values                    if (strpos($answer,"..") > 0) { // optional [min]..[max] format                        $marker = strpos($answer,"..");                        $max = trim(substr($answer, $marker+2));                        $min = trim(substr($answer, 0, $marker));                        $ans = ($max + $min)/2;                        $tol = $max - $ans;                    } elseif (strpos($answer,":") > 0){ // standard [answer]:[errormargin] format                        $marker = strpos($answer,":");                        $tol = trim(substr($answer, $marker+1));                        $ans = trim(substr($answer, 0, $marker));                    } else { // only one valid answer (zero errormargin)                        $tol = 0;                        $ans = trim($answer);                    }                        if (!(is_numeric($ans) || $ans = '*') || !is_numeric($tol)) {                            $errornotnumbers = get_string( 'errornotnumbers' );                            $this->error( $errornotnumbers, $text );                        return false;                        break;                    }                                        // store results                    $question->answer[$key] = $ans;                    $question->tolerance[$key] = $tol;                } // end foreach                if ($wrongfeedback) {                    $key += 1;                    $question->fraction[$key] = 0;                    $question->feedback[$key] = $this->commentparser($wrongfeedback);                    $question->answer[$key] = '';                    $question->tolerance[$key] = '';                }                return $question;                break;                default:                    $giftnovalidquestion = get_string('giftnovalidquestion','quiz');                    $this->error( $giftnovalidquestion, $text );                return false;                break;                                } // end switch ($question->qtype)    }    // end function readquestion($lines)function repchar( $text, $format=0 ) {    // escapes 'reserved' characters # = ~ { ) : and removes new lines    // also pushes text through format routine    $reserved = array( '#', '=', '~', '{', '}', ':', "\n","\r");    $escaped =  array( '\#','\=','\~','\{','\}','\:','\n',''  ); //dlnsk    $newtext = str_replace( $reserved, $escaped, $text );     $format = 0; // turn this off for now    if ($format) {        $newtext = format_text( $format );    }    return $newtext;    }function writequestion( $question ) {    // turns question into string    // question reflects database fields for general question and specific to type    global $QTYPES;     // initial string;    $expout = "";    // add comment    $expout .= "// question: $question->id  name: $question->name \n";    // get  question text format    $textformat = $question->questiontextformat;    $tfname = "";    if ($textformat!=FORMAT_MOODLE) {        $tfname = text_format_name( (int)$textformat );        $tfname = "[$tfname]";    }    // output depends on question type    switch($question->qtype) {    case 'category':        // not a real question, used to insert category switch        $expout .= "\$CATEGORY: $question->category\n";            break;    case DESCRIPTION:        $expout .= '::'.$this->repchar($question->name).'::';        $expout .= $tfname;        $expout .= $this->repchar( $question->questiontext, $textformat);        break;    case ESSAY:        $expout .= '::'.$this->repchar($question->name).'::';        $expout .= $tfname;        $expout .= $this->repchar( $question->questiontext, $textformat);        $expout .= "{}\n";        break;    case TRUEFALSE:        $trueanswer = $question->options->answers[$question->options->trueanswer];        $falseanswer = $question->options->answers[$question->options->falseanswer];        if ($trueanswer->fraction == 1) {            $answertext = 'TRUE';            $right_feedback = $trueanswer->feedback;            $wrong_feedback = $falseanswer->feedback;        } else {            $answertext = 'FALSE';            $right_feedback = $falseanswer->feedback;            $wrong_feedback = $trueanswer->feedback;        }        $wrong_feedback = $this->repchar($wrong_feedback);        $right_feedback = $this->repchar($right_feedback);        $expout .= "::".$this->repchar($question->name)."::".$tfname.$this->repchar( $question->questiontext,$textformat )."{".$this->repchar( $answertext );        if ($wrong_feedback) {            $expout .= "#" . $wrong_feedback;        } else if ($right_feedback) {            $expout .= "#";        }        if ($right_feedback) {            $expout .= "#" . $right_feedback;        }        $expout .= "}\n";        break;    case MULTICHOICE:        $expout .= "::".$this->repchar($question->name)."::".$tfname.$this->repchar( $question->questiontext, $textformat )."{\n";        foreach($question->options->answers as $answer) {            if ($answer->fraction==1) {                $answertext = '=';            }            elseif ($answer->fraction==0) {                $answertext = '~';            }            else {                $export_weight = $answer->fraction*100;                $answertext = "~%$export_weight%";            }            $expout .= "\t".$answertext.$this->repchar( $answer->answer );            if ($answer->feedback!="") {                $expout .= "#".$this->repchar( $answer->feedback );            }            $expout .= "\n";        }        $expout .= "}\n";        break;    case SHORTANSWER:        $expout .= "::".$this->repchar($question->name)."::".$tfname.$this->repchar( $question->questiontext, $textformat )."{\n";        foreach($question->options->answers as $answer) {            $weight = 100 * $answer->fraction;            $expout .= "\t=%".$weight."%".$this->repchar( $answer->answer )."#".$this->repchar( $answer->feedback )."\n";        }        $expout .= "}\n";        break;    case NUMERICAL:        $expout .= "::".$this->repchar($question->name)."::".$tfname.$this->repchar( $question->questiontext, $textformat )."{#\n";        foreach ($question->options->answers as $answer) {            if ($answer->answer != '') {                $percentage = '';                if ($answer->fraction < 1) {                    $pval = $answer->fraction * 100;                    $percentage = "%$pval%";                }                $expout .= "\t=$percentage".$answer->answer.":".(float)$answer->tolerance."#".$this->repchar( $answer->feedback )."\n";            } else {                $expout .= "\t~#".$this->repchar( $answer->feedback )."\n";            }        }        $expout .= "}\n";        break;    case MATCH:        $expout .= "::".$this->repchar($question->name)."::".$tfname.$this->repchar( $question->questiontext, $textformat )."{\n";        foreach($question->options->subquestions as $subquestion) {            $expout .= "\t=".$this->repchar( $subquestion->questiontext )." -> ".$this->repchar( $subquestion->answertext )."\n";        }        $expout .= "}\n";        break;    default:        // check for plugins        if ($out = $this->try_exporting_using_qtypes( $question->qtype, $question )) {            $expout .= $out;        }        else {            $expout .= "// $question->qtype is not supported by the GIFT format\n";            $menuname = $QTYPES[$question->qtype]->menu_name();             notify( get_string('nohandler','qformat_gift', $menuname ) );        }    }    // add empty line to delimit questions    $expout .= "\n";    return $expout;}}?>

⌨️ 快捷键说明

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