/** * 试卷试题列表未加入期次 * * @param int $paper_id 试卷id * @param int $qtype 题型 * @param int $method_tactic_id 方法策略 * @param int $kid 知识点 * @return void */ public function index3($paper_id = 0) { if (!$this->check_power('exam_list,exam_manage,paper_diy')) { return; } $paper_id = intval($paper_id); $paper = ExamPaperModel::get_paper($paper_id); if (!empty($paper['question_sort'])) { $paper = ExamPaperModel::detail_sg($paper_id, 1, 1); } $paper['ques_ids'] = json_decode($paper['question_sort'], true); $ques_ids_str = implode(',', $paper['ques_ids']); if (empty($paper)) { message('试卷不存在'); return; } /* * 考试期次 */ $exam = ExamModel::get_exam($paper['exam_id'], 'exam_pid,grade_id,class_id'); $search = $where = $param = array(); if (!empty($paper['question_sort'])) { $where[] = "1=1"; } $qtypes = C('qtype'); $qtype = $this->input->get('qtype'); if (strlen($qtype)) { $qtype = abs(intval($qtype)); $where['qtype'] = "q.type={$qtype}"; $param[] = "qtype={$qtype}"; } $search['qtype'] =& $qtype; /** is_original */ $is_original = $this->input->get('is_original'); if (in_array($is_original, array(1, 2))) { $where['is_original'] = "q.is_original={$is_original}"; $param[] = "is_original={$is_original}"; } $search['is_original'] =& $is_original; //方法逻辑 $method_tactic_id = intval($this->input->get('method_tactic_id')); if ($method_tactic_id) { $where['method_tactic_id'] = "q.ques_id IN (SELECT\n DISTINCT rmt.ques_id FROM {pre}relate_method_tactic rmt\n WHERE rmt.ques_id in({$ques_ids_str})\n AND rmt.method_tactic_id={$method_tactic_id})"; $param[] = "method_tactic_id={$method_tactic_id}"; } $search['method_tactic_id'] =& $method_tactic_id; //知识点 if ($kid = intval($this->input->get('kid'))) { $pkid = KnowledgeModel::get_knowledge($kid, 'pid'); if ($pkid !== false) { if ($pkid == 0) { // 一级知识点 $k_children = KnowledgeModel::get_knowledge_list(0, $kid, 0); $where['knowledge'] = "q.ques_id IN (\n SELECT DISTINCT rk.ques_id FROM {pre}relate_knowledge rk\n WHERE rk.ques_id in({$ques_ids_str}) AND rk.knowledge_id\n IN (" . my_implode(array_keys($k_children)) . ") AND rk.is_child=0)"; } else { // 二级知识点 if (!empty($paper['question_sort'])) { $where['knowledge'] = "q.ques_id IN (SELECT DISTINCT rk.ques_id FROM {pre}relate_knowledge\n rk WHERE rk.ques_id in({$ques_ids_str}) AND rk.knowledge_id={$kid} AND rk.is_child=0)"; } } $param[] = "kid={$kid}"; } } $search['kid'] =& $kid; /* 信息提取方式 */ if ($gid = intval($this->input->get('group_type_id'))) { $pgid = GroupTypeModel::get_group_type($gid, 'pid'); if ($pgid !== false) { if ($pgid == 0) { $g_children = GroupTypeModel::get_group_type_list($gid, 0); if (!empty($paper['question_sort'])) { $where['group_type'] = "q.ques_id IN ( SELECT DISTINCT\n rk.ques_id FROM {pre}relate_group_type rk WHERE\n rk.ques_id in({$ques_ids_str}) AND rk.group_type_id\n IN (" . my_implode(array_keys($g_children)) . ") AND rk.is_child=0)"; } } else { if (!empty($paper['question_sort'])) { $where['group_type'] = "q.ques_id IN (\n SELECT DISTINCT rk.ques_id FROM {pre}relate_group_type rk\n WHERE rk.ques_id in({$ques_ids_str})\n AND rk.group_type_id={$gid} AND rk.is_child=0)"; } } $param[] = "group_type_id={$gid}"; } } $search['group_type_id'] =& $gid; if (!empty($paper['question_sort'])) { $total = count($paper['question_sort']); } $size = 150; $page = isset($_GET['page']) && intval($_GET['page']) > 1 ? intval($_GET['page']) : 1; $offset = ($page - 1) * $size; $list = array(); if ($total) { $sql = "SELECT q.ques_id,q.title,q.type,q.group_id,q.addtime,\n (SELECT AVG(rc.difficulty) FROM {pre}relate_class rc where rc.ques_id=q.ques_id) AS difficulty\n FROM {pre}question q WHERE q.ques_id in({$ques_ids_str})\n AND " . implode(' AND ', $where) . " LIMIT {$offset},{$size}"; $res = $this->db->query($sql); foreach ($res->result_array() as $row) { $row['qtype'] = isset($qtypes[$row['type']]) ? $qtypes[$row['type']] : ''; $row['addtime'] = date('Y-m-d H:i', $row['addtime']); $row['has_edit_power'] = QuestionModel::check_question_power($row['ques_id'], 'w', false); $row['difficulty'] = round($row['difficulty'], 2); $list[] = $row; } } // 分页 $purl = site_url('admin/exam_question/index3/' . $paper_id . '/') . ($param ? '?' . implode('&', $param) : ''); $data['pagination'] = multipage($total, $size, $page, $purl); // 按题型分组统计数量 $qtype_nums = array(0, 0, 0, 0); foreach (explode(',', $paper['qtype_ques_num']) as $k => $v) { $qtype_nums[$k] = $v; } //判断该试题已经被考试过 或 正在被考 $paper['be_tested'] = false; if (!ExamModel::is_mini_test($exam['exam_pid'])) { $paper['be_tested'] = QuestionModel::paper_has_test_action($paper_id); } $data['search'] = $search; $data['qtypes'] = $qtypes; $data['paper'] = $paper; $data['list'] = $list; $data['qtype_nums'] = $qtype_nums; $data['priv_manage'] = $this->check_power('exam_manage', FALSE); /* 是否有权限查看试卷列表 */ $is_exam_paper_list = $this->check_power('exam_list', false); $data['is_exam_paper_list'] = $is_exam_paper_list; // 模版 $this->load->view('exam_question/index3', $data); }
/** * 预览试卷 * * @return void **/ public function detail($paper_id) { $paper = PaperModel::get_paper_by_id($paper_id); if (empty($paper)) { message('未查询到当前试卷,请重试!'); } $admin_info = $this->session->all_userdata(); if ($paper['admin_id'] != $admin_info['admin_id'] && !$admin_info['is_super']) { message('你没有该试卷的权限!'); } $questions_arr = json_decode($paper['question_sort'], true); $questions_score = json_decode($paper['question_score'], true); if (empty($questions_arr)) { echo "当前试卷暂无试题!"; exit; } /* 查询试题信息 */ $sql = "SELECT ques_id,type,title,picture,answer FROM {pre}question \n WHERE ques_id in (" . implode(',', $questions_arr) . ")"; $questions_tmp = $this->db->query($sql)->result_array(); $sort = array(); /* 重新排序 */ foreach ($questions_arr as $v) { foreach ($questions_tmp as $value) { if ($v == $value['ques_id']) { $sort[] = $value; } } } $questions = array(); $tmp_index = 0; foreach ($sort as $key => $row) { $row['title'] = $this->_format_question_content($row['title'], in_array($row['type'], array(3, 9))); $row['score'] = array_sum($questions_score[$row['ques_id']]); /* switch($row['type']){ case 0: case 15: $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))); } 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; } */ if ($key <= 0) { $questions[$tmp_index]['type'] = $row['type']; $questions[$tmp_index]['questions'][] = $row; $questions[$tmp_index]['scores'] += array_sum($questions_score[$row['ques_id']]); } else { if ($row['type'] == $sort[$key - 1]['type']) { $questions[$tmp_index]['questions'][] = $row; $questions[$tmp_index]['scores'] += array_sum($questions_score[$row['ques_id']]); } else { $tmp_index++; $questions[$tmp_index]['type'] = $row['type']; $questions[$tmp_index]['questions'][] = $row; $questions[$tmp_index]['scores'] += array_sum($questions_score[$row['ques_id']]); } } } $data = array(); $subject = C('subject'); $data['subject'] = $subject; $data['qtypes'] = C('qtype'); $data['questions'] = $questions; $data['paper'] = $paper; $data['group_index'] = array('一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四'); $data['back_url'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : site_url('admin/paper_diy/index'); $paper_detail = ExamPaperModel::detail_sg($paper_id, 1, 1); $data['paper'] = $paper_detail; /* 是否有权限查看试卷列表 */ $is_exam_paper_list = $this->check_power('exam_list', false); $data['is_exam_paper_list'] = $is_exam_paper_list; $this->load->view('paper_diy/detail', $data); }