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

📄 continue.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 3 页
字号:
<?php // $Id: continue.php,v 1.39.2.9 2009/03/17 16:24:47 mark-nielsen Exp $/** * Action for processing page answers by users * * @version $Id: continue.php,v 1.39.2.9 2009/03/17 16:24:47 mark-nielsen Exp $ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @package lesson **/    confirm_sesskey();    require_once($CFG->dirroot.'/mod/lesson/pagelib.php');    require_once($CFG->libdir.'/blocklib.php');    // left menu code    // check to see if the user can see the left menu    if (!has_capability('mod/lesson:manage', $context)) {        $lesson->displayleft = lesson_displayleftif($lesson);    }    // This is the code updates the lesson time for a timed test    // get time information for this user    $timer = new stdClass;    if (!has_capability('mod/lesson:manage', $context)) {        if (!$timer = get_records_select('lesson_timer', "lessonid = $lesson->id AND userid = $USER->id", 'starttime')) {            error('Error: could not find records');        } else {            $timer = array_pop($timer); // this will get the latest start time record        }                if ($lesson->timed) {            $timeleft = ($timer->starttime + $lesson->maxtime * 60) - time();            if ($timeleft <= 0) {                // Out of time                lesson_set_message(get_string('eolstudentoutoftime', 'lesson'));                redirect("$CFG->wwwroot/mod/lesson/view.php?id=$cm->id&amp;pageid=".LESSON_EOL."&outoftime=normal");                die; // Shouldn't be reached, but make sure            } else if ($timeleft < 60) {                // One minute warning                lesson_set_message(get_string("studentoneminwarning", "lesson"));            }        }                $timer->lessontime = time();        if (!update_record("lesson_timer", $timer)) {            error("Error: could not update lesson_timer table");        }    }    // record answer (if necessary) and show response (if none say if answer is correct or not)    $pageid = required_param('pageid', PARAM_INT);    if (!$page = get_record("lesson_pages", "id", $pageid)) {        error("Continue: Page record not found");    }    // set up some defaults    $answerid        = 0;    $noanswer        = false;    $correctanswer   = false;    $isessayquestion = false;   // use this to turn off review button on essay questions    $newpageid       = 0;       // stay on the page    $studentanswer   = '';      // use this to store student's answer(s) in order to display it on feedback page    switch ($page->qtype) {         case LESSON_ESSAY :            $isessayquestion = true;            if (!$useranswer = $_POST['answer']) {                $noanswer = true;                break;            }            $useranswer = clean_param($useranswer, PARAM_RAW);                    if (!$answers = get_records("lesson_answers", "pageid", $pageid, "id")) {                error("Continue: No answers found");            }            $correctanswer = false;            foreach ($answers as $answer) {                $answerid = $answer->id;                $newpageid = $answer->jumpto;            }            /// 6/29/04 //            $userresponse->sent=0;            $userresponse->graded = 0;            $userresponse->score = 0;            $userresponse->answer = $useranswer;            $userresponse->response = "";            $userresponse = addslashes(serialize($userresponse));                        $studentanswer = s(stripslashes_safe($useranswer));            break;         case LESSON_SHORTANSWER :            if (isset($_POST['answer'])) {                $useranswer = $_POST['answer'];            } else {                $noanswer = true;                break;            }                        $useranswer = s(stripslashes(clean_param($useranswer, PARAM_RAW)));            $userresponse = addslashes($useranswer);            if (!$answers = get_records("lesson_answers", "pageid", $pageid, "id")) {                error("Continue: No answers found");            }            $i=0;            foreach ($answers as $answer) {                $i += 1;                $expectedanswer  = $answer->answer; // for easier handling of $answer->answer                $ismatch         = false;                 $markit          = false;                 $useregexp       = false;                if ($page->qoption) {                    $useregexp = true;                }                                if ($useregexp) { //we are using 'normal analysis', which ignores case                    $ignorecase = '';                    if ( substr($expectedanswer,strlen($expectedanswer) - 2, 2) == '/i') {                        $expectedanswer = substr($expectedanswer,0,strlen($expectedanswer) - 2);                        $ignorecase = 'i';                    }                } else {                    $expectedanswer = str_replace('*', '#####', $expectedanswer);                    $expectedanswer = preg_quote($expectedanswer, '/');                    $expectedanswer = str_replace('#####', '.*', $expectedanswer);                }                // see if user typed in any of the correct answers                if ((!$lesson->custom && lesson_iscorrect($pageid, $answer->jumpto)) or ($lesson->custom && $answer->score > 0) ) {                    if (!$useregexp) { // we are using 'normal analysis', which ignores case                        if (preg_match('/^'.$expectedanswer.'$/i',$useranswer)) {                            $ismatch = true;                        }                    } else {                        if (preg_match('/^'.$expectedanswer.'$/'.$ignorecase,$useranswer)) {                            $ismatch = true;                        }                    }                    if ($ismatch == true) {                        $correctanswer = true;                    }                } else {                   if (!$useregexp) { //we are using 'normal analysis'                        // see if user typed in any of the wrong answers; don't worry about case                        if (preg_match('/^'.$expectedanswer.'$/i',$useranswer)) {                            $ismatch = true;                        }                    } else { // we are using regular expressions analysis                        $startcode = substr($expectedanswer,0,2);                        switch ($startcode){                            //1- check for absence of required string in $useranswer (coded by initial '--')                            case "--":                                $expectedanswer = substr($expectedanswer,2);                                if (!preg_match('/^'.$expectedanswer.'$/'.$ignorecase,$useranswer)) {                                    $ismatch = true;                                }                                break;                                                                  //2- check for code for marking wrong strings (coded by initial '++')                            case "++":                                $expectedanswer=substr($expectedanswer,2);                                $markit = true;                                //check for one or several matches                                if (preg_match_all('/'.$expectedanswer.'/'.$ignorecase,$useranswer, $matches)) {                                    $ismatch   = true;                                    $nb        = count($matches[0]);                                    $original  = array();                                     $marked    = array();                                    $fontStart = '<span class="incorrect matches">';                                    $fontEnd   = '</span>';                                    for ($i = 0; $i < $nb; $i++) {                                        array_push($original,$matches[0][$i]);                                        array_push($marked,$fontStart.$matches[0][$i].$fontEnd);                                    }                                    $useranswer = str_replace($original, $marked, $useranswer);                                }                                break;                            //3- check for wrong answers belonging neither to -- nor to ++ categories                             default:                                if (preg_match('/^'.$expectedanswer.'$/'.$ignorecase,$useranswer, $matches)) {                                    $ismatch = true;                                }                                break;                        }                        $correctanswer = false;                    }                }                if ($ismatch) {                    $newpageid = $answer->jumpto;                    if (trim(strip_tags($answer->response))) {                        $response = $answer->response;                    }                    $answerid = $answer->id;                    break; // quit answer analysis immediately after a match has been found                }            }            $studentanswer = $useranswer;            break;                case LESSON_TRUEFALSE :            if (empty($_POST['answerid'])) {                $noanswer = true;                break;            }            $answerid = required_param('answerid', PARAM_INT);             if (!$answer = get_record("lesson_answers", "id", $answerid)) {                error("Continue: answer record not found");            }             if (lesson_iscorrect($pageid, $answer->jumpto)) {                $correctanswer = true;            }            if ($lesson->custom) {                if ($answer->score > 0) {                    $correctanswer = true;                } else {                    $correctanswer = false;                }            }            $newpageid = $answer->jumpto;            $response  = trim($answer->response);            $studentanswer = $answer->answer;            break;                case LESSON_MULTICHOICE :            if ($page->qoption) {                // MULTIANSWER allowed, user's answer is an array                if (isset($_POST['answer'])) {                    $useranswers = $_POST['answer'];                    foreach ($useranswers as $key => $useranswer) {                        $useranswers[$key] = clean_param($useranswer, PARAM_INT);                    }                } else {                    $noanswer = true;                    break;                }                // get what the user answered                $userresponse = implode(",", $useranswers);                // get the answers in a set order, the id order                if (!$answers = get_records("lesson_answers", "pageid", $pageid, "id")) {                    error("Continue: No answers found");                }                $ncorrect = 0;                $nhits = 0;                $correctresponse = '';                $wrongresponse = '';                $correctanswerid = 0;                $wronganswerid = 0;                // store student's answers for displaying on feedback page                foreach ($answers as $answer) {                    foreach ($useranswers as $key => $answerid) {                        if ($answerid == $answer->id) {                            $studentanswer .= '<br />'.$answer->answer;                        }                    }                }                // this is for custom scores.  If score on answer is positive, it is correct                                    if ($lesson->custom) {                    $ncorrect = 0;                    $nhits = 0;                    foreach ($answers as $answer) {                        if ($answer->score > 0) {                            $ncorrect++;                                                foreach ($useranswers as $key => $answerid) {                                if ($answerid == $answer->id) {                                   $nhits++;                                }                            }                            // save the first jumpto page id, may be needed!...                            if (!isset($correctpageid)) {                                  // leave in its "raw" state - will converted into a proper page id later                                $correctpageid = $answer->jumpto;                            }                            // save the answer id for scoring

⌨️ 快捷键说明

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