/** * 生成测试报告 */ public function general_report() { $this->load->model('demo/report/subject_question_model', 'sq_model'); $this->load->model('demo/report/subject_suggest_model', 'ss_model'); $now = time(); //考试期次 $userdata = $this->session->all_userdata(); //检查该考试是否已经考完 && 作弊 if (!isset($userdata['report_mark'])) { return false; } list($exam_pid, $subject_id, $uid, $exam_id) = explode('_', $userdata['report_mark']); $subject_name = C('subject/' . $subject_id); $filepath = $this->_get_cache_root_path() . "/html/demo_report/{$exam_pid}/{$uid}/{$subject_id}.html"; if (file_exists($filepath)) { return true; } try { //生成成绩 //require_once ('exam.php'); //$exam_cron = new Exam(); //$exam_cron->cal_test_score($exam_pid, $uid); $result = ExamstatModel::calStudentResults($exam_pid, $uid); if (!$result) { return false; } //统计报告所需数据 $result = SummaryModel::summary_demo($exam_pid, $uid); if (!$result) { return false; } //检查该学生是否作弊 & 正在考中 $sql = "select etp_flag, full_score, test_score \n\t\t\t from {pre}exam_test_paper \n\t\t\t where exam_pid={$exam_pid} and subject_id={$subject_id} and uid={$uid}"; $result = $this->db->query($sql)->row_array(); if (isset($result['etp_flag']) && $result['etp_flag'] != '2') { return false; } $data = array(); $data['subject_name'] = $subject_name; $data['test_score'] = $result['test_score']; $data['full_score'] = $result['full_score']; //试题分析及与之对应的评价 $data['sq_all'] = $this->sq_model->get_all($exam_id, $uid); //知识点 //诊断及建议 $data['ss_summary'] = $this->ss_model->module_summary($exam_id, $uid); //总体水平等级和排名 $data['ss_application_situation'] = $this->ss_model->module_application_situation($exam_id, $uid); //总体水平等级和排名 $output = $this->load->view('../demo/report/subject', $data, true); //保存html模板 $res = $this->_put_html_content($exam_pid, $subject_id, $uid, $output); return $res; } catch (Exception $e) { return false; } }
public function summary_student() { set_time_limit(0); $this->load->model('cron/cron_exam_result_model', 'cer_model'); $exam_list = $this->cer_model->get_task_exam_list(3, NULL, 5); if (!$exam_list) { return false; } foreach ($exam_list as $item) { $this->cer_model->set_task_exam_result_status(array('status' => 100), $item['id']); $result = SummaryModel::summary_student($item['exam_pid']); $this->cer_model->set_task_exam_result_status(array('status' => $result ? 4 : 3), $item['id']); } }
/** * 获取某考试期次下考试学科 */ private static function _get_test_exams($exam_pid = 0) { if (!empty(self::$_exam_data[$exam_pid])) { return self::$_exam_data[$exam_pid]; } $exam_pid = intval($exam_pid); if (!$exam_pid) { return array(); } $sql = "SELECT exam_id, subject_id FROM rd_exam \n WHERE exam_pid={$exam_pid}"; self::$_exam_subject = Fn::db()->fetchPairs($sql); self::$_exam_data[$exam_pid] = array_keys(self::$_exam_subject); return self::$_exam_data[$exam_pid]; }
/** * 批量删除试卷中的试题 * * @param int $paper_id 试卷id * @param int $ids 试卷中的试题id * @return void */ public function batch_delete() { if (!$this->check_power('exam_manage')) { return; } $paper_id = (int) $this->input->post('paper_id'); $ids = $this->input->post('ids'); if (empty($ids) or !is_array($ids)) { message('请选择要操作的项目!'); return; } $paper = PaperModel::get_paper_by_id($paper_id); if (!$paper) { message('试卷不存在'); return; } $exam_pid = ExamModel::get_exam($paper['exam_id'], 'exam_pid'); $is_mini_test = ExamModel::is_mini_test($exam_pid); //判断该试卷已经被考试过 或 正在被考 $count_fail = 0; $count_success = 0; $tmp_ids = array(); foreach ($ids as $ques_id) { if (!$is_mini_test) { $be_tested = QuestionModel::paper_question_has_been_tested($paper_id, $ques_id); if ($be_tested) { $count_fail++; continue; } } $tmp_ids[] = $ques_id; $count_success++; } $back_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'admin/exam_question/index/' . $paper_id; $this->db->where_in('id', $tmp_ids)->delete('exam_question'); ExamPaperModel::renew($paper_id); if ($is_mini_test && $count_success) { SummaryModel::summary_paper($exam_pid, 0, $paper_id, true); } message("批量操作完成(成功 {$count_success}个,失败 {$count_fail} 个)", $back_url); }
/** * 更新试卷试题 * @param array $paper_id 试卷ID * @return boolen 成功返回true, 失败返回false */ public static function update_paper_question($paper_id) { /* 更新外部新试卷信息 */ $paper_id = (int) $paper_id; if (!$paper_id) { return false; } /* 查询试卷信息 */ $paper = self::get_paper_by_id($paper_id, 'exam_id,paper_id,admin_id,question_sort'); if (!$paper) { return false; } $exam = ExamModel::get_exam($paper['exam_id'], 'exam_id,exam_pid,grade_id,class_id'); if (!$exam) { return false; } $db = Fn::db(); /* 判定是否为外部试卷 */ if ($paper['admin_id'] > 0) { $questions = json_decode($paper['question_sort'], true); $question_difficulty = array(); $qtype_ques_num = array_fill(0, count(C('qtype')), '0'); if (!$db->beginTransaction()) { return false; } /* 清除exam_question原有信息 */ $db->delete('rd_exam_question', 'exam_id =? AND paper_id = ?', array($paper['exam_id'], $paper_id)); if (count($questions) > 0) { foreach ($questions as $ques_id) { $sql = "SELECT q.ques_id,q.type,rc.difficulty FROM\n rd_question q \n LEFT JOIN rd_relate_class rc ON q.ques_id=rc.ques_id\n WHERE q.ques_id={$ques_id} AND rc.grade_id={$exam['grade_id']} \n AND rc.class_id={$exam['class_id']}"; $question = $db->fetchRow($sql); if (empty($question)) { $db->rollBack(); throw new Exception('当前试卷中存在不属于当前考试期次年级的试题!请检查试题!'); } /* 补全exam_question信息 */ $data = array(); $data['paper_id'] = $paper_id; $data['exam_id'] = $paper['exam_id']; $data['ques_id'] = $ques_id; $db->insert('rd_exam_question', $data); /* 试题难易度 */ $question_difficulty[] = $question['difficulty']; /* 各个类型试题数量 */ $qtype_ques_num[$question['type']]++; } } /* 补全exam_pager信息 */ $data = array(); $data['exam_id'] = $paper['exam_id']; $data['difficulty'] = array_sum($question_difficulty) / count($question_difficulty); $data['qtype_ques_num'] = implode(',', $qtype_ques_num); PaperModel::update_paper($paper_id, $data); $flag = $db->commit(); if (!$flag) { $db->rollBack(); } //如果是mini测试卷,则更新试卷统计 if (ExamModel::is_mini_test($exam['exam_pid'])) { $sql = "SELECT exam_pid FROM rd_exam_subject_paper \n WHERE paper_id = {$paper_id} AND exam_id = " . $exam['exam_id']; if (Fn::db()->fetchOne($sql)) { SummaryModel::summary_paper($exam['exam_pid'], 0, $paper_id, true); } } return $flag; } }
/** * コンストラクタ */ public function __construct(&$core) { parent::__construct($core); $this->searchDateKind = array(1 => "アクション日付", 2 => SEIKA_NAME_ACCEPT_1 . "締め日", 3 => SEIKA_NAME_ACCEPT_2 . "締め日"); }