/** * @description 试卷预览分数修改 * @author * @final * @param int $id 试卷id */ public function preview($id = 0) { if (!$this->check_power('exam_list,exam_manage')) { return; } $id = intval($id); $paper = ExamPaperModel::get_paper($id); if (empty($paper)) { message('试卷不存在', 'javascript'); return; } $exam = ExamModel::get_exam($paper['exam_id'], 'grade_id,class_id,subject_id,qtype_score,total_score'); if (empty($exam)) { message('考试期次不存在'); return; } // 分数计算 $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'] = round($value, 2); $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['score'] = $score; $data['total_0'] = $total_0; if ($exam['subject_id'] == 3) { $group = array(1 => array(), 0 => array(), 4 => array(), 5 => array(), 8 => array(), 3 => array(), 7 => array(), 6 => array(), 2 => array(), 9 => array(), 14 => array()); } else { $group = array(1 => array(), 2 => array(), 3 => array(), 0 => array(), 14 => array()); } $paper = ExamPaperModel::get_paper_by_id($id); $questions_arr = json_decode($paper['question_sort'], true); /** 题组分值系数总和 */ $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 AND rc.grade_id='{$exam['grade_id']}' AND rc.class_id='{$exam['class_id']}'\n WHERE eq.paper_id={$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']}' AND rc.class_id='{$exam['class_id']}'\n WHERE eq.paper_id={$id} ORDER BY rc.difficulty DESC,q.ques_id ASC"; $query = $this->db->query($sql); $questions_tmp = $query->result_array(); /* 重新排序 */ $sort = array(); if (!is_array($questions_arr)) { $sort = $questions_tmp; } else { foreach ($questions_arr as $v) { foreach ($questions_tmp as $value) { if ($v == $value['ques_id']) { $sort[$v] = $value; } } } } foreach ($sort as $row) { $row['title'] = str_replace("\r\n", '<br/>', $row['title']); //$row['title'] = str_replace(" ", ' ', $row['title']); switch ($row['type']) { case 0: $row['children'] = QuestionModel::get_children($row['ques_id']); // 分值系数 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); $row['children_score'] = round($row['total_score'] / $row['children_num'], 2); } else { $row['total_score'] = 0; $row['score'] = 0; } break; case 2: //$row['answer'] = explode(',', $row['answer']); //$row['answer'] = explode(',', $row['answer']); case 1: $row['options'] = QuestionModel::get_options($row['ques_id']); break; case 3: $row['answer'] = explode("\n", $row['answer']); break; case 4: $row['children'] = QuestionModel::get_children($row['ques_id']); $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2); break; case 5: $row['children'] = QuestionModel::get_children($row['ques_id']); $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2); break; case 6: $row['children'] = QuestionModel::get_children($row['ques_id']); $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2); break; case 7: $row['options'] = QuestionModel::get_options($row['ques_id']); break; case 8: $row['children'] = QuestionModel::get_children($row['ques_id']); $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2); break; case 9: $row['answer'] = explode("\n", $row['answer']); break; default: break; } $group[$row['type']][] = $row; } $tmp_arr = array(); if ($exam['subject_id'] == 3) { $types = array('12', '1', '0', '5', '4', '8', '3', '15', '11', '7', '6', '2', '9', '10', '13', '14'); } else { $types = array('1', '2', '3', '0', '10', '14', '15', '11'); } foreach ($types as $type) { $tmp_arr[$type] = isset($group[$type]) ? $group[$type] : array(); } $data['paper'] = $paper; $data['qtypes'] = C('qtype'); $data['qtypes'] = C('qtype'); $data['group'] = $tmp_arr; // 模版 $this->load->view('paper/preview', $data); }
/** * 选择试题 * * @return void **/ public function select_question($paper_id = 0) { /* 查询条件 */ $where = array(); $param = array(); /* 过滤题组子题目,在题组页面管理 */ $where[] = "q.parent_id=0"; /* 未禁用试题 */ $where[] = "q.is_delete<>1"; /* 纸质考试试题 */ //$where[] = "q.test_way IN (1, 2, 3)"; /* 录入人员 只能查看自己录入的题目 管理员可以看到所有题目 */ $admin_id = $this->session->userdata('admin_id'); if (!$admin_id) { message('获取管理员数据失败,请从新登陆后重试!'); } //$where[] = "q.admin_id='{$admin_id}'"; //限制只能查看自己创建的试题 if (!$this->is_super_user() && !CpUserModel::is_action_type_all('question', 'r') && !CpUserModel::is_action_type_subject('question', 'r') && CpUserModel::is_action_type_self('question', 'r')) { $where[] = "q.admin_id='{$admin_id}'"; } else { $where[] = "q.admin_id>0"; } //限制只能查看所属学科 $c_subject_id = array(); if (!$this->is_super_user() && !CpUserModel::is_action_type_all('question', 'r') && CpUserModel::is_action_type_subject('question', 'r')) { $c_subject_id = rtrim($this->session->userdata('subject_id'), ','); if ($c_subject_id != '') { $c_subject_id = explode(',', $c_subject_id); $c_subject_id = array_values(array_filter($c_subject_id)); $c_subject_id = implode(',', $c_subject_id); $where[] = "q.subject_id in({$c_subject_id})"; } } //限制只能查看所属年级 $c_grade_id = array(); if (!$this->is_super_user() && !$this->is_all_grade_user()) { $c_grade_id = rtrim($this->session->userdata('grade_id'), ','); if ($c_grade_id != '') { $c_grade_id = explode(',', $c_grade_id); $c_grade_id = array_values(array_filter($c_grade_id)); $c_grade_id = implode(',', $c_grade_id); $where_3 = " grade_id in({$c_grade_id})"; } else { $where_3 = '1=1'; } } else { $where_3 = '1=1'; } //限制只能查看所属类型 $c_class_id = array(); if (!$this->is_super_user() && !$this->is_all_q_type_user()) { $c_q_type_id = rtrim($this->session->userdata('q_type_id'), ','); if ($c_q_type_id != '') { $c_q_type_id = explode(',', $c_q_type_id); $c_q_type_id = array_values(array_filter($c_q_type_id)); $c_class_id = $c_q_type_id; $c_q_type_id = implode(',', $c_q_type_id); $where_4 = " class_id in ({$c_q_type_id})"; } else { $where_4 = '1=1'; } } else { $where_4 = '1=1'; } if ($where_3 != '1=1' || $where_4 != '1=1') { $where[] = "q.ques_id IN (SELECT DISTINCT ques_id FROM rd_relate_class WHERE {$where_3} AND {$where_4}) "; } if ($paper_id) { $paper = ExamPaperModel::get_paper_by_id($paper_id); $where[] = "q.subject_id = {$paper['subject_id']}"; $param[] = "subject_id={$paper['subject_id']}"; $data['subject_id'] = $paper['subject_id']; if ($paper['exam_id']) { $exam = ExamModel::get_exam($paper['exam_id'], 'grade_id, class_id'); list($grade_id, $class_id) = array_values($exam); $where[] = "q.start_grade <= {$grade_id} AND q.end_grade >= {$grade_id}"; $param[] = "grade_id={$grade_id}"; $data['grade_id'] = $exam['grade_id']; $where[] = "q.class_id LIKE '%,{$class_id},%'"; $param[] = "class_id={$class_id}"; $data['class_id'] = $exam['class_id']; } } else { if ($subject_id = $this->input->get('subject_id')) { $where[] = "q.subject_id = {$subject_id}"; $param[] = "subject_id={$subject_id}"; } if ($grade_id = $this->input->get('grade_id')) { $where[] = "q.start_grade <= {$grade_id} AND q.end_grade >= {$grade_id}"; $param[] = "grade_id={$grade_id}"; } if ($class_id = $this->input->get('class_id')) { $where[] = "q.class_id LIKE '%,{$class_id},%'"; $param[] = "class_id={$class_id}"; } } $type = $this->input->get('type'); if (strlen($type) > 0 && $type >= 0) { $type = intval($type); $where[] = "q.type = {$type}"; $param[] = "type={$type}"; } if ($is_original = $this->input->get('is_original')) { $where[] = "q.is_original = {$is_original}"; $param[] = "is_original={$is_original}"; } if (Validate::isJoinedIntStr($this->input->get('ques_id'))) { $search_quesid = $this->input->get('ques_id'); $where[] = "q.ques_id IN ({$search_quesid})"; $param[] = "ques_id={$search_quesid}"; } if ($remark = $this->input->get('remark')) { $where[] = "q.remark LIKE '%{$remark}%'"; $param[] = "remark={$remark}"; } $where = $where ? ' WHERE ' . implode(' AND ', $where) : ' 1 '; /* 统计数量 */ $nums = QuestionModel::get_question_nums($where); $total = $nums['total']; /* 读取数据 */ $size = 15; $page = $this->input->get('page') ? intval($this->input->get('page')) : 1; $offset = ($page - 1) * $size; $list = array(); /* 学科 */ $qtypes = C('q_type'); /* 试题类型 */ $subjects = C('subject'); if ($total) { $sql = "SELECT q.*,a.admin_user,a.realname FROM {pre}question q\n LEFT JOIN {pre}admin a ON a.admin_id=q.admin_id\n {$where} ORDER BY q.ques_id DESC LIMIT {$offset},{$size}"; $res = $this->db->query($sql); foreach ($res->result_array() as $row) { $row['title'] = strip_tags($row['title']); $row['qtype'] = isset($qtypes[$row['type']]) ? $qtypes[$row['type']] : ''; $row['subject_name'] = isset($subjects[$row['subject_id']]) ? $subjects[$row['subject_id']] : ''; $row['addtime'] = date('Y-m-d H:i', $row['addtime']); $list[] = $row; } } $data['list'] =& $list; $data['q_class'] = $this->db->get_where('question_class')->result_array(); $data['c_subject_id'] = $c_subject_id ? explode(',', $c_subject_id) : array(); $data['c_class_id'] = $c_class_id; $data['c_grade_id'] = $c_grade_id ? explode(',', $c_grade_id) : array(); $data['search_data'] = $_GET; /* 分页 */ $purl = site_url('admin/paper_diy/select_question/' . ($param ? '?' . implode('&', $param) : '')); $data['pagination'] = multipage($total, $size, $page, $purl, '', $nums['relate_num']); /* 模版 */ $this->load->view('paper_diy/question_list', $data); }