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

📄 format.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 3 页
字号:
            $name = "unknown";        }        return $name;    }    /**     * generates <text></text> tags, processing raw text therein      * @param int ilev the current indent level     * @param boolean short stick it on one line     * @return string formatted text     */    function writetext( $raw, $ilev=0, $short=true) {        $indent = str_repeat( "  ",$ilev );        // if required add CDATA tags        if (!empty($raw) and (htmlspecialchars($raw)!=$raw)) {            $raw = "<![CDATA[$raw]]>";        }        if ($short) {            $xml = "$indent<text>$raw</text>\n";        }        else {            $xml = "$indent<text>\n$raw\n$indent</text>\n";        }        return $xml;    }      function xmltidy( $content ) {        // can only do this if tidy is installed        if (extension_loaded('tidy')) {            $config = array( 'input-xml'=>true, 'output-xml'=>true, 'indent'=>true, 'wrap'=>0 );            $tidy = new tidy;            $tidy->parseString($content, $config, 'utf8');            $tidy->cleanRepair();             return $tidy->value;        }        else {            return $content;        }    }    function presave_process( $content ) {    // override method to allow us to add xml headers and footers        // add the xml headers and footers        $content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" .                       "<quiz>\n" .                       $content . "\n" .                       "</quiz>";        // make the xml look nice        $content = $this->xmltidy( $content );        return $content;    }    /**     * Include an image encoded in base 64     * @param string imagepath The location of the image file     * @return string xml code segment      */    function writeimage( $imagepath ) {        global $CFG;           if (empty($imagepath)) {            return '';        }        $courseid = $this->course->id;        if (!$binary = file_get_contents( "{$CFG->dataroot}/$courseid/$imagepath" )) {            return '';        }        $content = "    <image_base64>\n".addslashes(base64_encode( $binary ))."\n".            "\n    </image_base64>\n";        return $content;    }    /**     * Turns question into an xml segment     * @param array question question array     * @return string xml segment     */    function writequestion( $question ) {    global $CFG,$QTYPES;        // initial string;        $expout = "";        // add comment        $expout .= "\n\n<!-- question: $question->id  -->\n";        // check question type        if (!$question_type = $this->get_qtype( $question->qtype )) {            // must be a plugin then, so just accept the name supplied            $question_type = $question->qtype;        }        // add opening tag        // generates specific header for Cloze and category type question        if ($question->qtype == 'category') {            $categorypath = $this->writetext( $question->category );            $expout .= "  <question type=\"category\">\n";            $expout .= "    <category>\n";            $expout .= "        $categorypath\n";            $expout .= "    </category>\n";            $expout .= "  </question>\n";            return $expout;        }            elseif ($question->qtype != MULTIANSWER) {            // for all question types except Close            $name_text = $this->writetext( $question->name );            $qtformat = $this->get_format($question->questiontextformat);            $question_text = $this->writetext( $question->questiontext );            $generalfeedback = $this->writetext( $question->generalfeedback );            $expout .= "  <question type=\"$question_type\">\n";               $expout .= "    <name>$name_text</name>\n";            $expout .= "    <questiontext format=\"$qtformat\">\n";            $expout .= $question_text;            $expout .= "    </questiontext>\n";               $expout .= "    <image>{$question->image}</image>\n";            $expout .= $this->writeimage($question->image);            $expout .= "    <generalfeedback>\n";            $expout .= $generalfeedback;            $expout .= "    </generalfeedback>\n";            $expout .= "    <defaultgrade>{$question->defaultgrade}</defaultgrade>\n";            $expout .= "    <penalty>{$question->penalty}</penalty>\n";            $expout .= "    <hidden>{$question->hidden}</hidden>\n";        }        else {            // for Cloze type only            $name_text = $this->writetext( $question->name );            $question_text = $this->writetext( $question->questiontext );            $generalfeedback = $this->writetext( $question->generalfeedback );            $expout .= "  <question type=\"$question_type\">\n";            $expout .= "    <name>$name_text</name>\n";            $expout .= "    <questiontext>\n";            $expout .= $question_text;            $expout .= "    </questiontext>\n";            $expout .= "    <generalfeedback>\n";            $expout .= $generalfeedback;            $expout .= "    </generalfeedback>\n";        }        if (!empty($question->options->shuffleanswers)) {            $expout .= "    <shuffleanswers>{$question->options->shuffleanswers}</shuffleanswers>\n";        }        else {            $expout .= "    <shuffleanswers>0</shuffleanswers>\n";        }        // output depends on question type        switch($question->qtype) {        case 'category':            // not a qtype really - dummy used for category switching            break;            case TRUEFALSE:            foreach ($question->options->answers as $answer) {                $fraction_pc = round( $answer->fraction * 100 );                if ($answer->id == $question->options->trueanswer) {                    $answertext = 'true';                } else {                    $answertext = 'false';                }                 $expout .= "    <answer fraction=\"$fraction_pc\">\n";                $expout .= $this->writetext($answertext, 3) . "\n";                $expout .= "      <feedback>\n";                $expout .= $this->writetext( $answer->feedback,4,false );                $expout .= "      </feedback>\n";                $expout .= "    </answer>\n";            }            break;        case MULTICHOICE:            $expout .= "    <single>".$this->get_single($question->options->single)."</single>\n";            $expout .= "    <shuffleanswers>".$this->get_single($question->options->shuffleanswers)."</shuffleanswers>\n";            $expout .= "    <correctfeedback>".$this->writetext($question->options->correctfeedback, 3)."</correctfeedback>\n";            $expout .= "    <partiallycorrectfeedback>".$this->writetext($question->options->partiallycorrectfeedback, 3)."</partiallycorrectfeedback>\n";            $expout .= "    <incorrectfeedback>".$this->writetext($question->options->incorrectfeedback, 3)."</incorrectfeedback>\n";            $expout .= "    <answernumbering>{$question->options->answernumbering}</answernumbering>\n";            foreach($question->options->answers as $answer) {                $percent = $answer->fraction * 100;                $expout .= "      <answer fraction=\"$percent\">\n";                $expout .= $this->writetext( $answer->answer,4,false );                $expout .= "      <feedback>\n";                $expout .= $this->writetext( $answer->feedback,5,false );                $expout .= "      </feedback>\n";                $expout .= "    </answer>\n";                }            break;        case SHORTANSWER:        $expout .= "    <usecase>{$question->options->usecase}</usecase>\n ";            foreach($question->options->answers as $answer) {                $percent = 100 * $answer->fraction;                $expout .= "    <answer fraction=\"$percent\">\n";                $expout .= $this->writetext( $answer->answer,3,false );                $expout .= "      <feedback>\n";                $expout .= $this->writetext( $answer->feedback,4,false );                $expout .= "      </feedback>\n";                $expout .= "    </answer>\n";            }            break;        case NUMERICAL:            foreach ($question->options->answers as $answer) {                $tolerance = $answer->tolerance;                $percent = 100 * $answer->fraction;                $expout .= "<answer fraction=\"$percent\">\n";                // <text> tags are an added feature, old filed won't have them                $expout .= "    <text>{$answer->answer}</text>\n";                $expout .= "    <tolerance>$tolerance</tolerance>\n";                $expout .= "    <feedback>".$this->writetext( $answer->feedback )."</feedback>\n";                // fraction tag is deprecated                // $expout .= "    <fraction>{$answer->fraction}</fraction>\n";                $expout .= "</answer>\n";            }            $units = $question->options->units;            if (count($units)) {                $expout .= "<units>\n";                foreach ($units as $unit) {                    $expout .= "  <unit>\n";                    $expout .= "    <multiplier>{$unit->multiplier}</multiplier>\n";                    $expout .= "    <unit_name>{$unit->unit}</unit_name>\n";                    $expout .= "  </unit>\n";                }                $expout .= "</units>\n";            }            break;        case MATCH:            foreach($question->options->subquestions as $subquestion) {                $expout .= "<subquestion>\n";                $expout .= $this->writetext( $subquestion->questiontext );                $expout .= "<answer>".$this->writetext( $subquestion->answertext )."</answer>\n";                $expout .= "</subquestion>\n";            }            break;        case DESCRIPTION:            // nothing more to do for this type            break;        case MULTIANSWER:            $a_count=1;            foreach($question->options->questions as $question) {                $thispattern = addslashes("{#".$a_count."}");                $thisreplace = $question->questiontext;                $expout=ereg_replace($thispattern, $thisreplace, $expout );                $a_count++;            }        break;        case ESSAY:            if (!empty($question->options->answers)) {                foreach ($question->options->answers as $answer) {                    $percent = 100 * $answer->fraction;                    $expout .= "<answer fraction=\"$percent\">\n";                    $expout .= "    <feedback>".$this->writetext( $answer->feedback )."</feedback>\n";                    // fraction tag is deprecated                    // $expout .= "    <fraction>{$answer->fraction}</fraction>\n";                    $expout .= "</answer>\n";                }            }            break;        case CALCULATED:            foreach ($question->options->answers as $answer) {                $tolerance = $answer->tolerance;                $tolerancetype = $answer->tolerancetype;                $correctanswerlength= $answer->correctanswerlength ;                $correctanswerformat= $answer->correctanswerformat;                $percent = 100 * $answer->fraction;                $expout .= "<answer fraction=\"$percent\">\n";                // "<text/>" tags are an added feature, old files won't have them                $expout .= "    <text>{$answer->answer}</text>\n";                $expout .= "    <tolerance>$tolerance</tolerance>\n";                $expout .= "    <tolerancetype>$tolerancetype</tolerancetype>\n";                $expout .= "    <correctanswerformat>$correctanswerformat</correctanswerformat>\n";                $expout .= "    <correctanswerlength>$correctanswerformat</correctanswerlength>\n";                $expout .= "    <feedback>".$this->writetext( $answer->feedback )."</feedback>\n";                $expout .= "</answer>\n";            }            $units = $question->options->units;            if (count($units)) {                $expout .= "<units>\n";                foreach ($units as $unit) {                    $expout .= "  <unit>\n";                    $expout .= "    <multiplier>{$unit->multiplier}</multiplier>\n";                    $expout .= "    <unit_name>{$unit->unit}</unit_name>\n";                    $expout .= "  </unit>\n";                }                $expout .= "</units>\n";             }         //echo "<pre> question calc";print_r($question);echo "</pre>";         //First, we a new function to get all the   data itmes in the database         //   $question_datasetdefs =$QTYPES['calculated']->get_datasets_for_export ($question);        //    echo "<pre> question defs";print_r($question_datasetdefs);echo "</pre>";              //If there are question_datasets            if( isset($question->options->datasets)&&count($question->options->datasets)){// there should be                $expout .= "<dataset_definitions>\n";                foreach ($question->options->datasets as $def) {                    $expout .= "<dataset_definition>\n";                    $expout .= "    <status>".$this->writetext($def->status)."</status>\n";                    $expout .= "    <name>".$this->writetext($def->name)."</name>\n";                    $expout .= "    <type>calculated</type>\n";                    $expout .= "    <distribution>".$this->writetext($def->distribution)."</distribution>\n";                    $expout .= "    <minimum>".$this->writetext($def->minimum)."</minimum>\n";                    $expout .= "    <maximum>".$this->writetext($def->maximum)."</maximum>\n";                    $expout .= "    <decimals>".$this->writetext($def->decimals)."</decimals>\n";                                   $expout .= "    <itemcount>$def->itemcount</itemcount>\n";                    if ($def->itemcount > 0 ) {                        $expout .= "    <dataset_items>\n";                        foreach ($def->items as $item ){                              $expout .= "        <dataset_item>\n";                              $expout .= "           <number>".$item->itemnumber."</number>\n";                              $expout .= "           <value>".$item->value."</value>\n";                              $expout .= "        </dataset_item>\n";                        }                                $expout .= "    </dataset_items>\n";                        $expout .= "    <number_of_items>".$def-> number_of_items."</number_of_items>\n";                     }                    $expout .= "</dataset_definition>\n";                }                 $expout .= "</dataset_definitions>\n";                                                                                            }                                  break;        default:            // try support by optional plugin            if (!$data = $this->try_exporting_using_qtypes( $question->qtype, $question )) {                 notify( get_string( 'unsupportedexport','qformat_xml',$QTYPES[$question->qtype]->menu_name() ) );            }            $expout .= $data;        }        // close the question tag        $expout .= "</question>\n";        return $expout;    }}?>

⌨️ 快捷键说明

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