/** * 获取试卷信息 * @param int $paper_id * @return array */ private function _paper($paper_id) { if (!$paper_id) { return array(); } $paper = ExamPaperModel::get_paper($paper_id); if (empty($paper)) { return array(); } $exam = ExamModel::get_exam($paper['exam_id'], 'grade_id, class_id, subject_id, qtype_score, total_score'); if (empty($exam)) { return array(); } // 分数计算 $score = array(); // 题目数量 $question_num = explode(',', $paper['qtype_ques_num']); // 题型分数 $qtype_score = explode(',', $exam['qtype_score']); // 总分 排除题组 $total_score = 0; foreach ($qtype_score as $key => $value) { $score[$key + 1]['score'] = $value; $score[$key + 1]['num'] = isset($question_num[$key + 1]) ? $question_num[$key + 1] : 0; $score[$key + 1]['total_score'] = $score[$key + 1]['score'] * $score[$key + 1]['num']; $total_score += $score[$key + 1]['score'] * $score[$key + 1]['num']; } // 题组总分 $total_0 = $exam['total_score'] - $total_score; $data = array(); $data['exam'] = $exam; $data['score'] = $score; $data['total_0'] = $total_0; if ($exam['subject_id'] == 3) { $group = array(1 => array(), 4 => array(), 0 => array(), 5 => array(), 6 => array(), 7 => array(), 2 => array(), 3 => array(), 8 => array(), 9 => array()); } else { $group = array(1 => array(), 2 => array(), 3 => array(), 0 => array()); } /** 题组分值系数总和 */ $sql = "SELECT sum(score_factor) as sum FROM {pre}question q\n LEFT JOIN {pre}exam_question eq ON eq.ques_id=q.ques_id\n LEFT JOIN {pre}relate_class rc ON rc.ques_id=q.ques_id\n AND rc.grade_id = {$exam['grade_id']} AND rc.class_id = {$exam['class_id']}\n WHERE eq.paper_id = {$paper_id} and q.type=0"; $query = $this->db->query($sql); $sum_score_factor = $query->row_array(); $sql = "SELECT q.ques_id,q.type,q.title,q.picture,q.answer,q.score_factor,q.children_num,rc.difficulty\n FROM {pre}exam_question eq\n LEFT JOIN {pre}question q ON eq.ques_id=q.ques_id\n LEFT JOIN {pre}relate_class rc ON rc.ques_id = q.ques_id AND rc.grade_id = {$exam['grade_id']}\n AND rc.class_id = {$exam['class_id']}\n WHERE eq.paper_id = {$paper_id} ORDER BY rc.difficulty DESC,q.ques_id ASC"; $query = $this->db->query($sql); foreach ($query->result_array() as $row) { $row['title'] = $this->_format_question_content($row['title'], in_array($row['type'], array(3, 9))); switch ($row['type']) { case 0: $row['children'] = QuestionModel::get_children($row['ques_id']); foreach ($row['children'] as &$child) { $child['title'] = $this->_format_question_content($child['title'], in_array($child['type'], array(3, 9))); } // 分值系数 if ($sum_score_factor > 0) { $row['total_score'] = round($total_0 * $row['score_factor'] / $sum_score_factor['sum'], 2); $row['score'] = round($row['total_score'] / $row['children_num'], 2); } else { $row['total_score'] = 0; $row['score'] = 0; } break; case 1: case 2: case 7: $row['options'] = QuestionModel::get_options($row['ques_id']); break; case 3: case 9: $row['answer'] = explode("\n", $row['answer']); break; case 4: case 5: case 6: case 8: $row['children'] = QuestionModel::get_children($row['ques_id']); break; default: } $group[$row['type']][] = $row; } $paper_info = array(); $types = array_keys($group); foreach ($types as $type) { $paper_info[$type] = isset($group[$type]) ? $group[$type] : array(); } $data['group'] = array_filter($paper_info); return $data; }
/** * 试卷加入试题 * * @param int $paper_id 试卷id * @return void */ public function add($paper_id = 0) { if (!$this->check_power('exam_manage')) { return; } $paper_id = intval($paper_id); $paper = ExamPaperModel::get_paper($paper_id); $data['paper'] = $paper; $data['exam'] = $this->db->select('subject_id')->get_where('exam', array('exam_id' => $paper['exam_id']))->row_array(); $this->check_total_score($paper_id); // 模版 $this->load->view('exam_question/add', $data); }
/** * 学生成绩列表 * * @param int $exam_id * @return void */ public function index($exam_pid = 0) { if (!$this->check_power('exam_list,exam_manage')) { return; } $page = intval($this->input->get('page')); $per_page = intval($this->input->get('per_page')); $exam_pid = intval($this->input->get('exam_pid')); $flag = $this->input->get('flag'); $place_id = intval($this->input->get('place_id')); $school_id = intval($this->input->get('school_id')); $ticket = trim($this->input->get('ticket')); $score_start = trim($this->input->get('score_start')); $score_end = trim($this->input->get('score_end')); $subject_id = intval($this->input->get('subject_id')); $keyword = trim($this->input->get('keyword')); //var_dump($place_id);die; // 查询条件 $query = array(); $param = array(); $search = array('exam_pid' => '', 'place_id' => '', 'flag' => '-2', 'keyword' => '', 'subject_id' => '', 'school_id' => '', 'school_name' => '', 'ticket' => '', 'score_start' => '', 'score_end' => ''); $flags = array('-1' => '结果作废', '0' => '未生成分数(考试中)', '1' => '已交卷(未统计结果)', '2' => '已生成分数'); //考试期次 $exam_pid = !$exam_pid ? 0 : $exam_pid; if ($exam_pid) { $query['exam_pid'] = $exam_pid; $param[] = "exam_pid={$exam_pid}"; $search['exam_pid'] = $exam_pid; } //状态 if ($flag === false) { } else { if ($flag > -2) { $query['etp_flag'] = $flag; $param[] = "flag={$flag}"; $search['flag'] = $flag; } } /* if (isset($query['etp_flag']) && $query['etp_flag'] == '2') { $query['etp_flag'] = array('2', '-1'); } */ //考场 if ($place_id) { $query['place_id'] = $place_id; $param[] = "place_id={$place_id}"; $search['place_id'] = $place_id; } //学科 if ($subject_id) { $query['subject_id'] = $subject_id; $param[] = "subject_id={$subject_id}"; $search['subject_id'] = $subject_id; } //学科 if ($keyword) { $escape_keyword = $this->db->escape_like_str($keyword); $where = "fullname LIKE '%" . $escape_keyword . "%'"; $sql = "SELECT group_concat(uid) as uid FROM v_rd_student s WHERE {$where} "; $res = $this->db->query($sql)->row_array(); $uids = explode(',', $res['uid']); $query['uid'] = $uids; $search['keyword'] = $keyword; $param[] = "keyword=" . urlencode($search['keyword']); } //得分查询 if ($score_start != '') { $query['test_score']['>='] = $score_start; $param[] = "score_start={$score_start}"; $search['score_start'] = $score_start; } if ($score_end != '') { $query['test_score']['<='] = $score_end; $param[] = "score_end={$score_end}"; $search['score_end'] = $score_end; } //获取该学校下所有的学生 if ($school_id) { $param[] = "school_id={$school_id}"; $search['school_id'] = $school_id; $row = SchoolModel::schoolInfo($school_id, 'school_name'); if ($row) { $school_name = trim($row['school_name']); } else { $school_name = ''; } if (!count($school_name)) { $query = null; $search['school_name'] = $school_id; } else { $students = StudentModel::get_student_list(array('school_id' => $school_id), false, false, null, 'uid'); if (count($students)) { $uids = array(); foreach ($students as $student) { $uids[] = $student['uid']; } $query['uid'] = $uids; } else { $query = null; } $search['school_name'] = $school_name; } } //准考证号 if ($ticket) { if (stripos($ticket, '@') === false) { $uid = StudentModel::get_student_by_exam_ticket($ticket, 'uid'); } else { $uid = StudentModel::get_student_by_email($ticket, 'uid'); } if (count($uid)) { $query['uid'] = $uid; } else { $query = null; } $param[] = "ticket={$ticket}"; $search['ticket'] = $ticket; } $select_what = '*'; $page = $page <= 0 ? 1 : $page; $per_page = $per_page <= 0 ? 10 : $per_page; $list = array(); if (!is_null($query)) { $list = ExamTestPaperModel::get_test_paper_list($query, $page, $per_page, 'subject_id ASC,etp_id ASC', $select_what); } //获取学生信息 $grades = C('grades'); $subjects = C('subject'); $data['subjects'] = $subjects; $tmp_list = array(); foreach ($list as $k => $item) { $student = StudentModel::get_student($item['uid'], 'first_name, last_name, school_id, exam_ticket, grade_id'); if (!count($student)) { $tmp_list[$k] = array_merge($item, array('truename' => '--', 'school_name' => '--', 'grade_name' => '--', 'subject_name' => '--')); continue; } $student['truename'] = $student['last_name'] . $student['first_name']; //获取学生学校信息 $row = SchoolModel::schoolInfo($student['school_id'], 'school_name'); if ($row) { $school_name = trim($row['school_name']); } else { $school_name = ''; } $student['school_name'] = count($school_name) ? $school_name : '--'; //获取该学生所在的年级 $student['grade_name'] = isset($grades[$student['grade_id']]) ? $grades[$student['grade_id']] : '--'; //获取科目 $subject_name = SubjectModel::get_subject($item['subject_id'], 'subject_name'); $student['subject_name'] = count($subject_name) ? $subject_name : '--'; //获取考试试卷信息 $paper_name = ExamPaperModel::get_paper($item['paper_id'], 'paper_name'); $item['paper_name'] = count($paper_name) ? $paper_name : '--'; //获取作废记录 $etp_invalid_record = ExamTestPaperModel::get_etp_invalid_record($item['etp_id']); if (!$etp_invalid_record) { $item['invalid_record'] = false; $item['invalid_record_note'] = ''; } else { $item['invalid_record'] = true; $item['invalid_record_note'] = $etp_invalid_record['note']; } $tmp_list[$k] = array_merge($item, $student); } $data['list'] =& $tmp_list; $data['search'] =& $search; $data['flags'] =& $flags; // 分页 $purl = site_url('admin/exam_student_result/index/') . (count($param) ? '?' . implode('&', $param) : ''); $total = ExamTestPaperModel::count_list($query); $data['pagination'] = multipage($total, $per_page, $page, $purl); $data['priv_manage'] = $this->check_power('exam_manage', FALSE); $this->load->view('exam_student_result/index', $data); }
/** * @description 更新试卷统计 * @author * @final * @param int $id 试卷id */ public function renew($id = 0) { $id = intval($id); $exam_id = ExamPaperModel::get_paper($id, 'exam_id'); if (empty($exam_id)) { message('试卷不存在'); return; } if (QuestionModel::paper_has_test_action($id)) { message('该试卷已经被考生考过 或者 正在被考中,因此无法操作'); return; } $back_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'admin/paper/index/' . $exam_id; if (ExamPaperModel::renew($id)) { message('更新成功', $back_url); } else { message('更新失败'); } }