8.0交卷时候不能记录错题,看了代码,好像有问题,打分的时候不会返回错题集id 返回

  • 是的,在添加新功能的时候误删了此处的代码,打开app/exam/cls/exam.cls.php文件,找到 makescore 方法,更换为以下代码:

    public function markscore($sessionvars,$questypes)
        {
            if(!$sessionvars['examsessionid'])return false;
            $token = $this->ev->get('token');
            if(!$token || $token != md5($sessionvars['examsessionid'].'-'.$sessionvars['examsessionuserid'].'-'.$sessionvars['examsessiontoken']))
            {
                $message = array(
                    'statusCode' => 300,
                    "message" => "系统检测到试卷错误,请联系监考老师!"
                );
                $this->G->R($message);
            }
            if(!$sessionvars['examsessiontype'])
            {
                foreach($questypes as $questype)
                {
                    $sessionvars['examsessionsetting']['examsetting']['questype'][$questype['questid']]['score'] = 1;
                }
            }
            foreach($sessionvars['examsessionquestion']['questions'] as $key => $tmp)
            {
                if(!empty($tmp))
                {
                    if(!$questypes[$key]['questsort'])
                    {
                        foreach($tmp as $p)
                        {
                            $thisscore = $sessionvars['examsessionsetting']['examsetting']['scores'][$p['questionid']];
                            if(!$thisscore)$thisscore = $sessionvars['examsessionsetting']['examsetting']['questype'][$key]['score'];
                            if(is_array($sessionvars['examsessionuseranswer'][$p['questionid']]))
                            {
                                $nanswer = '';
                                $answer = $sessionvars['examsessionuseranswer'][$p['questionid']];
                                asort($answer);
                                $nanswer = implode("",$answer);
                                if($nanswer == $p['questionanswer'])
                                {
                                    $score = $thisscore;
                                }
                                else
                                {
                                    if($questypes[$key]['questchoice'] == 3)
                                    {
                                        $alen = strlen($p['questionanswer']);
                                        $rlen = 0;
                                        foreach($answer as $t)
                                        {
                                            if(strpos($p['questionanswer'],$t) === false)
                                            {
                                                $rlen = 0;
                                                break;
                                            }
                                            else
                                            {
                                                $rlen ++;
                                            }
                                        }
                                        $score = floatval($thisscore * $rlen/$alen);
                                    }
                                    else $score = 0;
                                    $wrongids[] = $p['questionid'];
                                }
                            }
                            else
                            {
                                $answer = $sessionvars['examsessionuseranswer'][$p['questionid']];
                                if($answer == $p['questionanswer'])
                                {
                                    $score = $thisscore;
                                }
                                else
                                {
                                    $score = 0;
                                    $wrongids[] = $p['questionid'];
                                }
                            }
                            $scorelist[$p['questionid']] = $score;
                        }
                    }
                    else
                    {
                        $needhand = 1;
                    }
                }
            }
            foreach($sessionvars['examsessionquestion']['questionrows'] as $key => $tmp)
            {
                if(!empty($tmp))
                {
                    foreach($tmp as $tmp2)
                    {
                        foreach ($tmp2['data'] as $p)
                        {
                            $thisscore = $sessionvars['examsessionsetting']['examsetting']['scores'][$p['questionid']];
                            if(!$thisscore)$thisscore = $sessionvars['examsessionsetting']['examsetting']['questype'][$key]['score'];
                            if (!$questypes[$p['questiontype']]['questsort'])
                            {
                                if (is_array($sessionvars['examsessionuseranswer'][$p['questionid']]))
                                {
                                    $answer = $sessionvars['examsessionuseranswer'][$p['questionid']];
                                    asort($answer);
                                    $nanswer = implode("", $answer);
                                    if ($nanswer == $p['questionanswer'])
                                    {
                                        $score = $thisscore;
                                    }
                                    else
                                    {
                                        if ($questypes[$key]['questchoice'] == 3)
                                        {
                                            $alen = strlen($p['questionanswer']);
                                            $rlen = 0;
                                            foreach ($answer as $t)
                                            {
                                                if (strpos($p['questionanswer'], $t) === false)
                                                {
                                                    $rlen = 0;
                                                    break;
                                                }
                                                else
                                                {
                                                    $rlen++;
                                                }
                                            }
                                            $score = $thisscore * $rlen / $alen;
                                        }
                                        else
                                        {
                                            $score = 0;
                                        }
                                        $wrongids[] = $p['questionid'];
                                    }
                                }
                                else
                                {
                                    $answer = $sessionvars['examsessionuseranswer'][$p['questionid']];
                                    if ($answer == $p['questionanswer'])
                                    {
                                        $score = $thisscore;
                                    }
                                    else
                                    {
                                        $score = 0;
                                        $wrongids[] = $p['questionid'];
                                    }
                                }
                                $scorelist[$p['questionid']] = $score;
                            }
                            else
                            {
                                $needhand = 1;
                            }
                        }
                    }
                }
            }
            $sessionvars['examsessionscorelist'] = $scorelist;
            $sessionvars['examsessionscore'] = array_sum($scorelist);
            if($needhand)$ehid = $this->favor->addExamHistory($sessionvars,0);
            else $ehid = $this->favor->addExamHistory($sessionvars);
            if($ehid)
            {
                $this->delExamSession($sessionvars['examsessionid']);
            }
            else
            {
                $message = array(
                    'statusCode' => 300,
                    "message" => "试卷异常,请联系监考老师后台收卷!"
                );
                $this->G->R($message);
            }
            return array('ehid' => $ehid,'needhand' => $needhand,'wrongids' => $wrongids);
        }

  • 2022-11-01