/** * 听力题-预览 * * @return void */ public function correct($parent_id = 0) { // 读取题干信息 $parent_id = intval($parent_id); $this->examine_permission($parent_id); $parent_id && ($parent = QuestionModel::get_question($parent_id)); if (empty($parent) or !$parent['is_parent']) { message('改错题不存在!'); exit; } if (!QuestionModel::check_question_power($parent_id, 'r')) { return; } //判断该试题已经被考试过 或 正在被考 $parent['be_tested'] = QuestionModel::question_has_test_action($parent_id); $grades = C('grades'); $qtypes = C('qtype'); $subjects = CpUserModel::get_allowed_subjects(); $subject_types = C('subject_type'); // 类型、学科属性(文理科)、难易度 $class_list = ClassModel::get_class_list(); $show_subject_type = $parent['subject_id'] <= 3 && $parent['end_grade'] >= 11; $class_names = array(); $query = $this->db->get_where('relate_class', array('ques_id' => $parent_id)); foreach ($query->result_array() as $arr) { $subject_type = $show_subject_type ? ' , ' . $subject_types[$arr['subject_type']] : ''; $class_names[$arr['grade_id']][] = isset($class_list[$arr['class_id']]['class_name']) ? $class_list[$arr['class_id']]['class_name'] . '[难易度:' . $arr['difficulty'] . $subject_type . ']' : ''; } $parent['class_names'] = $class_names; // 技能 $skill_ids = explode(',', trim($parent['skill'], ',')); $arr_tmp = array(); if ($skill_ids) { $query = $this->db->select('skill_name')->where_in('id', $skill_ids)->get('skill'); foreach ($query->result_array() as $row) { $arr_tmp[] = $row['skill_name']; } } $parent['skill_name'] = implode(',', $arr_tmp); $parent['count_subject_method_tactics'] = $this->_count_subject_method_tactics($parent['subject_id']); // 知识点 $knowledge_ids = explode(',', trim($parent['knowledge'], ',')); $arr_tmp = array(); if ($knowledge_ids) { $query = $this->db->select('knowledge_name')->where_in('id', $knowledge_ids)->get('knowledge'); foreach ($query->result_array() as $row) { $arr_tmp[] = $row['knowledge_name']; } } $parent['knowledge_name'] = implode(',', $arr_tmp); $parent['start_grade'] = isset($grades[$parent['start_grade']]) ? $grades[$parent['start_grade']] : ''; $parent['end_grade'] = isset($grades[$parent['end_grade']]) ? $grades[$parent['end_grade']] : ''; $parent['subject_name'] = isset($subjects[$parent['subject_id']]) ? $subjects[$parent['subject_id']] : ''; $parent['addtime'] = date('Y-m-d H:i', $parent['addtime']); $parent['title'] = str_replace("\n", '<br/>', $parent['title']); /** ---------------- 真题 ----------------- */ if ($parent['is_original'] == 2) { $relateds = $this->db->query("select ques_id from {pre}question where related={$parent_id}")->result_array(); if (count($relateds) > 0) { $parent['relateds'] = $relateds; } } elseif ($parent['related']) { $related = $parent['related']; $relateds = $this->db->query("select ques_id from {pre}question where related={$related}")->result_array(); if (count($relateds) > 0) { $parent['relateds'] = $relateds; } } $cpusers = CpUserModel::get_cpuser_list(); // 读取子题信息 $query = $this->db->select('ques_id,type,title,picture,answer,knowledge,method_tactic,group_type,admin_id,addtime')->get_where('question', array('parent_id' => $parent_id, 'is_delete' => 0)); $list = $query->result_array(); foreach ($list as &$row) { $row['cpuser'] = isset($cpusers[$row['admin_id']]['realname']) ? $cpusers[$row['admin_id']]['realname'] : ''; $row['addtime'] = date('Y-m-d H:i:s', $row['addtime']); $query = $this->db->get_where('option', array('ques_id' => $row['ques_id'])); $row['options'] = $query->result_array(); foreach ($row['options'] as $key => $arr) { $row['options'][$key]['is_answer'] = in_array($arr['option_id'], explode(',', $row['answer'])); } // 知识点 $query = $this->db->select('k.knowledge_name, rk.knowledge_id, rk.know_process')->from('relate_knowledge rk')->join('knowledge k', 'rk.knowledge_id=k.id', 'left')->where_in('rk.ques_id', $row['ques_id'])->get(); $knowledge_arr = array(); foreach ($query->result_array() as $arr) { $knowledge_arr[] = $arr['knowledge_name'] . '(认知过程:' . C('know_process/' . $arr['know_process']) . ')'; } $row['knowledge_name'] = count($knowledge_arr) ? implode(',', $knowledge_arr) : '<font style="font-size:15px;color:red;">该子题还未添加知识点</font>'; //方法策略 $query = $this->db->select('mt.name')->from('relate_method_tactic rmt')->join('method_tactic mt', 'rmt.method_tactic_id=mt.id', 'left')->where('rmt.ques_id', $row['ques_id'])->get(); $method_tactic_arr = array(); foreach ($query->result_array() as $arr) { $method_tactic_arr[] = $arr['name']; } $method_tactic_arr = array_filter($method_tactic_arr); $row['method_tactic_name'] = implode(',', $method_tactic_arr); if ($row['group_type']) { $query = $this->db->select('gt.group_type_name')->from('relate_group_type rgt')->join('group_type gt', 'rgt.group_type_id=gt.id', 'left')->where('rgt.ques_id', $row['ques_id'])->get(); $group_type_arr = array(); foreach ($query->result_array() as $arr) { $group_type_arr[] = $arr['group_type_name']; } $group_type_arr = array_filter($group_type_arr); $row['group_type_name'] = implode(',', $group_type_arr); } } // 读取子题信息(已删除) $query = $this->db->select('ques_id,type,title,picture,answer,admin_id,addtime')->get_where('question', array('parent_id' => $parent_id, 'is_delete' => 1)); $list2 = $query->result_array(); foreach ($list2 as &$row) { $row['cpuser'] = isset($cpusers[$row['admin_id']]['realname']) ? $cpusers[$row['admin_id']]['realname'] : ''; $row['addtime'] = date('Y-m-d H:i:s', $row['addtime']); $query = $this->db->get_where('option', array('ques_id' => $row['ques_id'])); $row['options'] = $query->result_array(); } $data['qtypes'] = $qtypes; $data['grades'] = $grades; $data['parent'] = $parent; $data['list'] = $list; $data['list2'] = $list2; // 模版 $this->load->view('question_external/correct', $data); }
public function group($group_id = 0) { if (!$this->check_power('question_manage')) { return; } $group_id = intval($group_id); if ($group_id) { $query = $this->db->get_where('relate_group', array('group_id' => $group_id)); $group = $query->row_array(); } if (empty($group)) { $site_url = site_url('/admin/question/index'); header("location: {$site_url}"); // message('关联分组不存在。','/admin/question/index'); return; } $cpusers = CpUserModel::get_cpuser_list(); // 加载分类数据 $class_list = ClassModel::get_class_list(); $subjects = CpUserModel::get_allowed_subjects(); $grades = C('grades'); $qtypes = C('qtype'); $periods = C('grade_period'); $langs = C('interview_lang'); $types = C('interview_type'); $list_ques = $list_interview = array(); $query = $this->db->get_where('question', array('group_id' => $group_id, 'parent_id' => 0, 'is_delete' => 0)); foreach ($query->result_array() as $row) { $row_cids = explode(',', trim($row['class_id'], ',')); $row_cname = array(); foreach ($row_cids as $cid) { $row_cname[] = isset($class_list[$cid]['class_name']) ? $class_list[$cid]['class_name'] : ''; } $row['class_name'] = implode(',', $row_cname); $row['start_grade'] = isset($grades[$row['start_grade']]) ? $grades[$row['start_grade']] : ''; $row['qtype'] = isset($qtypes[$row['type']]) ? $qtypes[$row['type']] : ''; $row['end_grade'] = isset($grades[$row['end_grade']]) ? $grades[$row['end_grade']] : ''; $row['subject_name'] = isset($subjects[$row['subject_id']]) ? $subjects[$row['subject_id']] : ''; $row['addtime'] = date('Y-m-d H:i', $row['addtime']); $row['cpuser'] = isset($cpusers[$row['admin_id']]['realname']) ? $cpusers[$row['admin_id']]['realname'] : ''; $row['has_edit_power'] = QuestionModel::check_question_power($row['ques_id'], 'w', false); //判断该试题已经被考试过 或 正在被考 $row['be_tested'] = QuestionModel::question_has_test_action($row['ques_id']); $list_ques[] = $row; } $query2 = $this->db->get_where('interview_question', array('group_id' => $group_id, 'is_delete' => 0)); foreach ($query2->result_array() as $row) { // 类型 $row_cids = explode(',', trim($row['class_id'], ',')); $row_cname = array(); foreach ($row_cids as $cid) { $row_cname[] = isset($class_list[$cid]['class_name']) ? $class_list[$cid]['class_name'] : ''; } // 年段 $row_pids = explode(',', trim($row['grade_period'], ',')); $row_pname = array(); foreach ($row_pids as $pid) { $row_pname[] = isset($periods[$pid]) ? $periods[$pid] : ''; } $row['class_name'] = implode(',', $row_cname); $row['period_name'] = implode(',', $row_pname); $row['language'] = isset($langs[$row['lang']]) ? $langs[$row['lang']] : ''; $row['type_name'] = isset($types[$row['interview_type']]['type_name']) ? $types[$row['interview_type']]['type_name'] : ''; $row['addtime'] = date('Y-m-d H:i', $row['addtime']); $row['cpuser'] = isset($cpusers[$row['admin_id']]['realname']) ? $cpusers[$row['admin_id']]['realname'] : ''; $list_interview[] = $row; } $priv = array('delete_question' => $this->check_power('question_delete', FALSE), 'delete_interview_question' => $this->check_power('invterview_question_delete', FALSE)); $data['group_id'] = $group_id; $data['list_ques'] = $list_ques; $data['list_interview'] = $list_interview; $data['priv'] = $priv; $data['has_edit_power'] = QuestionModel::check_question_power($group['group_name'], 'w', false); $data['has_interview_question_manage'] = $this->check_power('interview_question_manage', false); // 模版 $this->load->view('relate_group/group', $data); }
/** * 试题列表 * * @return void */ public function index() { // 加载分类数据 $class_list = ClassModel::get_class_list(); //限制只能查看所属学科 $subjects = CpUserModel::get_allowed_subjects(); $grades = C('grades'); $qtypes = C('qtype'); $knowledge_list = KnowledgeModel::get_knowledge_list(); // 查询条件 $where = array(); $param = array(); $search = array(); $where[] = "q.parent_id=0"; // 过滤题组子题目,在题组页面管 $where[] = "q.is_delete <> 1"; /* 真题不需要审核 */ $where[] = "q.is_original <> 2"; // 录入人员 if ($search['admin_id'] = intval($this->input->get('admin_id'))) { $where[] = "q.admin_id={$search['admin_id']}"; $param[] = "admin_id={$search['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')) { $c_uid = $this->session->userdata('admin_id'); $search['admin_id'] = $c_uid; $param[] = "admin_id={$c_uid}"; $where[] = "q.admin_id='{$c_uid}'"; } // 操作时间 $begin_time = $this->input->get('begin_time'); $end_time = $this->input->get('end_time'); if ($btime = (int) strtotime($begin_time)) { $search['begin_time'] = $begin_time; $where[] = "q.addtime >= {$btime}"; $param[] = "begin_time={$begin_time}"; } else { $search['begin_time'] = ''; } if ($etime = (int) strtotime($end_time)) { $etime += 86400; $search['end_time'] = $end_time; $where[] = "q.addtime < {$etime}"; $param[] = "end_time={$end_time}"; } else { $search['end_time'] = ''; } // 分组 if ($search['group_id'] = intval($this->input->get('group_id'))) { $where[] = "q.group_id={$search['group_id']}"; $param[] = "group_id={$search['group_id']}"; } // 题型 $search['type'] = $this->input->get('qtype'); if (strlen($search['type']) > 0) { $search['type'] = intval($search['type']); $where[] = "q.type={$search['type']}"; $param[] = "qtype={$search['type']}"; } // 考试方式 $search['test_way'] = $this->input->get('test_way'); if (strlen($search['test_way']) > 0) { $search['test_way'] = intval($search['test_way']); $where[] = "q.test_way IN ({$search['test_way']}, 3)"; $param[] = "test_way={$search['test_way']}"; } // 审核 $search['check'] = $this->input->get('check'); if (strlen($search['check']) > 0) { $search['check'] = intval($search['check']); $where[] = "q.check={$search['check']}"; $param[] = "check={$search['check']}"; } if ($search['subject_id'] = intval($this->input->get('subject_id'))) { $where[] = "q.subject_id={$search['subject_id']}"; $param[] = "subject_id={$search['subject_id']}"; $knowledge_parents = KnowledgeModel::get_knowledge_list($search['subject_id'], 0); } //信息提取方式 if ($search['group_type_id'] = intval($this->input->get('group_type_id'))) { $where[] = "q.group_type LIKE '%," . $search['group_type_id'] . ",%'"; $param[] = "group_type_id=" . $search['group_type_id']; } if ($search['group_type_pid'] = intval($this->input->get('group_type_pid'))) { $param[] = "group_type_pid=" . $search['group_type_pid']; if (isset($group_type_list[$search['group_type_pid']]['childlist']) && !$search['group_type_id']) { $group_type = $group_type_list[$search['group_type_pid']]['childlist']; $tmp_str = ''; foreach ($group_type as $item) { if ($tmp_str) { $tmp_str .= " OR q.group_type LIKE '%," . $item['id'] . ",%'"; } else { $tmp_str .= "q.group_type LIKE '%," . $item['id'] . ",%'"; } } $where[] = "(" . $tmp_str . ")"; } } // 题目类型 $search['is_original'] = $this->input->get('is_original'); $search['exam_year'] = $this->input->get('exam_year'); $search['remark'] = $this->input->get('remark'); if ($search['is_original'] > 0) { $search['is_original'] = intval($search['is_original']); $where[] = "q.is_original={$search['is_original']}"; $param[] = "is_original={$search['is_original']}"; //真题年份 if ($search['is_original'] == 2 && strlen($search['exam_year']) > 0) { $search['exam_year'] = intval($search['exam_year']); $where[] = "q.exam_year='{$search['exam_year']}'"; $param[] = "exam_year={$search['exam_year']}"; } // 真题备注关键词 if ($search['is_original'] == 2 && strlen($search['remark']) > 0) { $search['remark'] = $search['remark']; $where[] = "q.remark like '%" . $search['remark'] . "%'"; $param[] = "remark={$search['remark']}"; } } //标签 if ($search['tags'] = $this->input->get('tags')) { $tmp_item = explode('-', $search['tags']); if (strlen($search['type']) > 0) { $where[] = "q.tags = " . $tmp_item[1]; $param[] = "tags=" . $search['tags']; } else { $where[] = "q.type = " . $tmp_item[0] . " AND q.tags = " . $tmp_item[1]; $param[] = "tags=" . $search['tags']; } } //限制只能查看所属学科 if (!$this->is_super_user() && !$this->is_all_subject_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})"; } } //限制只能查看所属年级 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'; } //限制只能查看所属类型 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_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 ($search['subject_id_str'] = $this->input->get('subject_str')) { $param[] = implode('&subject_str[]=', $search['subject_id_str']); $search['subject_id_str'] = implode(',', $search['subject_id_str']); $where[] = "q.subject_id_str = '," . $search['subject_id_str'] . ",'"; } //-----------------------------------------// // 年级区间、试题类型、难易度区间、文理科 //-----------------------------------------// $search['start_grade'] = intval($this->input->get('start_grade')); $search['end_grade'] = intval($this->input->get('end_grade')); $search['class_id'] = $this->input->get('class_id'); $search['start_difficulty'] = floatval($this->input->get('start_difficulty')); $search['end_difficulty'] = floatval($this->input->get('end_difficulty')); $search['subject_type'] = trim($this->input->get('subject_type')); if (is_array($search['class_id'])) { $search['class_id'] = my_intval($search['class_id']); } else { $search['class_id'] = array(); } if ($search['class_id'] or $search['start_difficulty'] or $search['end_difficulty'] or is_numeric($search['subject_type'])) { $class_where = array(); if ($search['end_grade']) { $class_where[] = "grade_id BETWEEN {$search['start_grade']} AND {$search['end_grade']}"; } elseif ($search['start_grade']) { $class_where[] = "grade_id >= {$search['start_grade']}"; } if ($search['class_id']) { if (count($search['class_id']) == 1) { $class_where[] = "class_id='" . $search['class_id'][0] . "'"; } else { $class_where[] = "class_id IN (" . my_implode($search['class_id']) . ")"; } } //文理科 if (is_numeric($search['subject_type'])) { $class_where[] = "subject_type='" . $search['subject_type'] . "'"; } if ($search['end_difficulty']) { $class_where[] = "difficulty BETWEEN {$search['start_difficulty']} AND {$search['end_difficulty']}"; } elseif ($search['start_difficulty']) { $class_where[] = "difficulty >= {$search['start_difficulty']}"; } if ($class_where) { $where[] = "q.ques_id IN (SELECT DISTINCT ques_id FROM {pre}relate_class WHERE " . implode(' AND ', $class_where) . ")"; } } elseif ($search['start_grade'] && $search['end_grade']) { if ($search['start_grade'] <= $search['end_grade']) { $where[] = "q.start_grade <= {$search['end_grade']} AND q.end_grade>= {$search['start_grade']}"; } } elseif ($search['start_grade']) { $where[] = "q.start_grade <= {$search['start_grade']} AND q.end_grade>= {$search['start_grade']}"; } elseif ($search['end_grade']) { $where[] = "q.start_grade <= {$search['end_grade']} AND q.end_grade>= {$search['end_grade']}"; } // url参数 if ($search['start_grade']) { $param[] = "start_grade=" . $search['start_grade']; } else { $search['start_grade'] = ''; } if ($search['end_grade']) { $param[] = "end_grade=" . $search['end_grade']; } else { $search['end_grade'] = ''; } if ($search['class_id']) { $param[] = "class_id[]=" . implode('&class_id[]=', $search['class_id']); } if (is_numeric($search['subject_type'])) { $param[] = "subject_type=" . $search['subject_type']; } if ($search['start_difficulty']) { $param[] = "start_difficulty=" . $search['start_difficulty']; } else { $search['start_difficulty'] = ''; } if ($search['end_difficulty']) { $param[] = "end_difficulty=" . $search['end_difficulty']; } else { $search['end_difficulty'] = ''; } // 试题技能 $search['skill_id'] = $this->input->get('skill_id'); if ($search['skill_id'] && is_array($search['skill_id'])) { foreach ($search['skill_id'] as $sid) { $sid = intval($sid); $where[] = "q.skill LIKE '%,{$sid},%'"; $param[] = "skill_id[]={$sid}"; } } else { $search['skill_id'] = array(); } // 试题方法策略 $method_tactic_ids = trim($this->input->get('method_tactic_ids')); $method_tactic_arr = my_intval(explode(',', $method_tactic_ids)); $search['method_tactic_ids'] = implode(',', $method_tactic_arr); if ($search['method_tactic_ids']) { $param[] = "method_tactic_ids=" . $search['method_tactic_ids']; $where[] = "exists(select ques_id from {pre}relate_method_tactic rmt WHERE q.ques_id=rmt.ques_id AND rmt.method_tactic_id IN ({$search['method_tactic_ids']}) and rmt.is_child=0)"; } // 试题知识点 $knowledge_ids = trim($this->input->get('knowledge_ids')); $knowledge_arr = my_intval(explode(',', $knowledge_ids)); $search['knowledge_ids'] = implode(',', $knowledge_arr); $know_processes = $this->input->get('know_process'); $search['know_process'] = my_intval($know_processes); if ($search['knowledge_ids']) { $param[] = "knowledge_ids=" . $search['knowledge_ids']; if ($search['know_process']) { $tmp_know_process = implode(',', $search['know_process']); $param[] = "know_process[]=" . implode('&know_process[]=', $search['know_process']); $where[] = "exists(select ques_id from {pre}relate_knowledge rk WHERE q.ques_id=rk.ques_id AND rk.knowledge_id IN ({$search['knowledge_ids']}) AND rk.know_process IN ({$tmp_know_process}) AND rk.is_child=0)"; } else { $where[] = "exists(select ques_id from {pre}relate_knowledge rk WHERE q.ques_id=rk.ques_id AND rk.knowledge_id IN ({$search['knowledge_ids']}) AND rk.is_child=0)"; } } else { if ($search['know_process']) { $tmp_know_process = implode(',', $search['know_process']); $param[] = "know_process[]=" . implode('&know_process[]=', $search['know_process']); $where[] = "exists(select ques_id from {pre}relate_knowledge rk WHERE q.ques_id=rk.ques_id AND rk.know_process IN ({$tmp_know_process}) AND rk.is_child=0)"; } } if ($search['keyword'] = trim($this->input->get('keyword'))) { $escape_keyword = $this->db->escape_like_str($search['keyword']); $where[] = "q.title LIKE '%" . $escape_keyword . "%'"; $param[] = "keyword=" . urlencode($search['keyword']); } if ($ques_id = intval($this->input->get('ques_id'))) { $search['ques_id'] = $ques_id; $where[] = "q.ques_id={$ques_id}"; $param[] = "ques_id={$ques_id}"; } $where = $where ? ' WHERE ' . implode(' AND ', $where) : ' 1 '; // 统计数量 $nums = QuestionModel::get_question_nums($where); $total = $nums['total']; // 读取数据 $size = 15; $page = isset($_GET['page']) && intval($_GET['page']) > 1 ? intval($_GET['page']) : 1; $offset = ($page - 1) * $size; $list = array(); 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_cids = explode(',', trim($row['class_id'], ',')); $row_cname = array(); foreach ($row_cids as $cid) { $row_cname[] = isset($class_list[$cid]['class_name']) ? $class_list[$cid]['class_name'] : ''; } if ($row['exam_year'] == 0) { $row['exam_year'] = ''; } if ($row['related'] == 0) { $row['related'] = ''; } $row['class_name'] = implode(',', $row_cname); $row['qtype'] = isset($qtypes[$row['type']]) ? $qtypes[$row['type']] : ''; $row['start_grade'] = isset($grades[$row['start_grade']]) ? $grades[$row['start_grade']] : ''; $row['end_grade'] = isset($grades[$row['end_grade']]) ? $grades[$row['end_grade']] : ''; $row['subject_name'] = isset($subjects[$row['subject_id']]) ? $subjects[$row['subject_id']] : ''; $row['addtime'] = date('Y-m-d H:i', $row['addtime']); //判断该试题已经被考试过 或 正在被考 $row['be_tested'] = QuestionModel::question_has_test_action($row['ques_id']); //判断试题已经被考过 $row['be_tested_1'] = QuestionModel::question_has_be_tested($row['ques_id']); /* * 检查是否有关联信息 * 非题组:关联技能 * 题组:题干关联技能、知识点,子题必须要全部添加知识点 */ $no_relate_info = false; $q_type = $row['type']; if ($q_type > 0) { //非题组 $no_relate_info = $row['skill'] == ''; } else { //题组 //判断是否所有子题都已添加知识点 $tmp_ques_id = $row['ques_id']; $child_questions = $this->db->query("select count(*) as `count` from {pre}question where parent_id={$tmp_ques_id}")->row_array(); $count_child = $child_questions['count']; $child_count_result = $this->db->query("select count(*) as `count` from {pre}question where parent_id={$tmp_ques_id} and knowledge != ''")->row_array(); $tmp_count = $child_count_result['count']; if ($count_child == $tmp_count && $row['skill'] == '' && $row['knowledge'] == '') { $no_relate_info = true; } } $row['no_relate_info'] = $no_relate_info; $row['has_edit_power'] = QuestionModel::check_question_power($row['ques_id'], 'w', false); $row['recycle'] = array(); $list[] = $row; } } $data['list'] =& $list; // 分页 $purl = site_url('admin/question_audit/index/' . $mode) . ($param ? '?' . implode('&', $param) : ''); $data['pagination'] = multipage($total, $size, $page, $purl, '', $nums['relate_num']); if ($search['group_id'] && $list) { $row = array_pop($list); $data['relate_ques_id'] = $row['ques_id']; } $data['mode'] = $mode; $data['search'] = $search; $data['grades'] = $grades; $data['subjects'] = $subjects; $data['qtypes'] = $qtypes; $data['q_tags'] = C('q_tags'); $data['class_list'] = $class_list; $data['all_grade_class'] = ClassModel::all_grade_class(); $data['relate_class'] = array(); $data['knowledge_list'] = $knowledge_list; $data['priv_delete'] = $this->check_power('question_delete', FALSE); $data['priv_trash'] = $this->check_power('question_trash', FALSE); $data['priv_manage'] = $this->check_power('question_manage', FALSE); if (!$this->is_super_user() && !$this->is_all_subject_user() && CpUserModel::is_action_type_all('question', 'r')) { $query = $this->db->select('admin_id,admin_user,realname')->get_where('admin', array('is_delete' => 0)); } else { if (!$this->is_super_user() && !$this->is_all_subject_user() && CpUserModel::is_action_type_subject('question', 'r')) { $c_subject_id = $this->session->userdata('subject_id'); $c_subject_id = explode(',', $c_subject_id); $c_subject_id = array_values(array_filter($c_subject_id)); $where_11 = array(); foreach ($c_subject_id as $val) { $where_11[] = "find_in_set({$val},b.subject_id)"; } $where_12 = implode(' or ', $where_11); $sql = "SELECT admin_id,admin_user,realname FROM {pre}admin\n WHERE admin_id in(select admin_id from {pre}admin_role a,{pre}role b\n WHERE a.role_id=b.role_id and ({$where_12})) and is_delete=0 "; $query = $this->db->query($sql); /* $query = $this->db->select('admin_id,admin_user,realname')->where('subject_id', $c_subject_id)->get_where('admin', array('is_delete'=>0)); */ } else { if (!$this->is_super_user() && !$this->is_all_subject_user() && CpUserModel::is_action_type_self('question', 'r')) { $c_uid = $this->session->userdata('admin_id'); $query = $this->db->select('admin_id,admin_user,realname')->where('admin_id', $c_uid)->get_where('admin'); } else { $query = $this->db->select('admin_id,admin_user,realname')->get_where('admin', array('is_delete' => 0)); } } } $data['admin_list'] = $query->result_array(); //文理科 $data['subject_types'] = C('subject_type'); $data['all_subjects'] = C('subject'); //认知过程 $data['know_processes'] = C('know_process'); if ($this->is_super_user() || $this->is_all_subject_user() || $this->is_subject_user(3) || CpUserModel::is_action_type_all('question', 'w')) { $data['is_english_admin'] = true; } // 模版 $this->load->view('question_audit/index', $data); }
/** * 试卷试题列表未加入期次 * * @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); }
public function update_combination() { if (!$this->check_power('question_manage')) { return; } $act = $this->input->post('act'); $act = $act == 'add' ? $act : 'edit'; if ($act == 'edit') { $ques_id = $this->input->post('ques_id'); if (!QuestionModel::check_question_power($ques_id, 'w')) { return; } $ques_id && ($old_question = QuestionModel::get_question($ques_id)); if (empty($old_question)) { message('题组不存在'); return; } $be_tested = QuestionModel::question_has_test_action($ques_id); if ($be_tested) { message('该试题已经被考生考过 或者 正在被考, 无法操作'); } } // 题目基本信息 $class_ids = $this->input->post('class_id'); $skill_ids = $this->input->post('skill_id'); $knowledge_ids = $this->input->post('knowledge_id'); $difficulty = $this->input->post('difficulty'); $subject_types = $this->input->post('subject_type'); $question['type'] = 15; $question['test_way'] = array_sum($this->input->post('test_way')); $question['subject_id'] = intval($this->input->post('subject_id')); $question['start_grade'] = intval($this->input->post('start_grade')); $question['end_grade'] = intval($this->input->post('end_grade')); $question['title'] = trim($this->input->post('title')); $question['is_original'] = intval($this->input->post('is_original')); $question['exam_year'] = intval($this->input->post('exam_year')); $question['remark'] = trim($this->input->post('remark')); $question['related'] = intval($this->input->post('related')); $question['simulation'] = trim($this->input->post('simulation')); $file_save_path = $this->input->post('file_save_path'); if ($question['subject_id'] == 11) { $question['subject_id_str'] = ',' . implode(',', $this->input->post('subject_str')) . ','; } else { $question['subject_id_str'] = ',' . $question['subject_id'] . ','; } $extends = array('difficulty' => &$difficulty, 'class_ids' => &$class_ids, 'skill_ids' => &$skill_ids, 'knowledge_ids' => &$knowledge_ids, 'subject_types' => &$subject_types); $message = $this->_check_question($question, $extends, false, false); if ($message) { // 删除已上传试题图片 if (!empty($question['picture'])) { @unlink(_UPLOAD_ROOT_PATH_ . $question['picture']); } message(implode('<br/>', $message), null, null, 10); return; } if ($act == 'add') { $extends['group_id'] = intval($this->input->post('relate_group')); $extends['relate_ques_id'] = intval($this->input->post('relate_ques_id')); $ques_result = QuestionModel::add_group($question, $extends); } else { $question['ques_id'] = $ques_id; $ques_result = QuestionModel::update_group($question, $extends); } //清理试题文件 $ques_id = $ques_result['ques_id']; $this->clear_question_file($ques_id, $file_save_path); if ($ques_result['success'] == TRUE) { message('试题题编辑成功。', 'admin/question/combination/' . $ques_result['ques_id']); return; } else { message($ques_result['msg']); return; } }
public function index() { if (!$this->check_power('question_difficulty_list')) { return; } $page = intval($this->input->get('page')); $per_page = intval($this->input->get('per_page')); $id = intval($this->input->get('id')); $ques_id = intval($this->input->get('ques_id')); $grade_id = intval($this->input->get('grade_id')); $class_id = $this->input->get('class_id'); $subject_type = $this->input->get('subject_type'); $from_question_list = intval($this->input->get('from_question_list')); $difficulty_start = intval($this->input->get('difficulty_start')); $difficulty_end = intval($this->input->get('difficulty_end')); $copy_difficulty_start = intval($this->input->get('copy_difficulty_start')); $copy_difficulty_end = intval($this->input->get('copy_difficulty_end')); // 查询条件 $query = array(); $param = array(); $search = array('id' => '', 'ques_id' => '', 'grade_id' => '', 'subject_type' => '', 'class_id' => array(), 'difficulty_start' => '', 'difficulty_end' => '', 'copy_difficulty_start' => '', 'copy_difficulty_end' => ''); $grades = C('grades'); $subjects = CpUserModel::get_allowed_subjects(); $qtypes = C('qtype'); $subject_types = C('subject_type'); $class_list = ClassModel::get_class_list(); $data['grades'] = $grades; $data['subjects'] = $subjects; $data['qtypes'] = $qtypes; $data['subject_types'] = $subject_types; $data['class_list'] = $class_list; if ($id) { $query['id'] = $id; $param[] = "id={$id}"; $search['id'] = $id; } if ($ques_id) { $query['ques_id'] = $ques_id; $param[] = "ques_id={$ques_id}"; $search['ques_id'] = $ques_id; } if ($grade_id) { $query['grade_id'] = $grade_id; $param[] = "grade_id={$grade_id}"; $search['grade_id'] = $grade_id; } if (is_numeric($subject_type)) { $query['subject_type'] = $subject_type; $param[] = "subject_type={$subject_type}"; $search['subject_type'] = $subject_type; } if (is_array($class_id)) { $class_id = my_intval($class_id); if (count($class_id) == 1) { $query['class_id'] = $class_id[0]; } else { $query['class_id'] = $class_id; } $param[] = implode('&class_id[]=', $search['class_id']); $search['class_id'] = $class_id; } if ($difficulty_start) { $query['difficulty']['>='] = $difficulty_start; $param[] = "difficulty_start={$difficulty_start}"; $search['difficulty_start'] = $difficulty_start; } if ($difficulty_end) { $query['difficulty']['<='] = $difficulty_end; $param[] = "difficulty_end={$difficulty_end}"; $search['difficulty_end'] = $difficulty_end; } if ($copy_difficulty_start) { $query['copy_difficulty']['>='] = $copy_difficulty_start; $param[] = "copy_difficulty_start={$copy_difficulty_start}"; $search['copy_difficulty_start'] = $copy_difficulty_start; } if ($copy_difficulty_end) { $query['copy_difficulty']['<='] = $copy_difficulty_end; $param[] = "copy_difficulty_end={$copy_difficulty_end}"; $search['copy_difficulty_end'] = $copy_difficulty_end; } if ($from_question_list) { $param[] = "from_question_list={$from_question_list}"; $search['from_question_list'] = $from_question_list; } else { $search['from_question_list'] = '0'; } //限制只能查看所属学科 if (!$this->is_super_user() && !$this->is_all_subject_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); $where0 = " q.subject_id in({$c_subject_id})"; } else { $where0 = " 1=1"; } } else { $where0 = " 1=1"; } //限制只能查看所属年级 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); $where1 = " rc.grade_id in ({$c_grade_id})"; } else { $where1 = " 1=1"; } } else { $where1 = " 1=1"; } //限制只能查看所属类型 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_q_type_id = implode(',', $c_q_type_id); $where2 = " rc.class_id in ({$c_q_type_id})"; } else { $where2 = " 1=1"; } } else { $where2 = " 1=1"; } $where = $where0 . ' and (' . $where1 . ' and ' . $where2 . ')'; $select_what = 'rc.*'; $page = $page <= 0 ? 1 : $page; $per_page = $per_page <= 0 ? 10 : $per_page; $list = array(); if (!is_null($query)) { $list = RelateClassModel::get_relate_class_list($query, $page, $per_page, 'ques_id desc', $select_what, $group_by = null, $where); } //获取试题信息 $tmp_list = array(); foreach ($list as $k => $item) { $question = QuestionModel::get_question($item['ques_id'], 'title, subject_id, admin_id, addtime, type, is_parent'); if (!count($question)) { continue; } $admin = $this->db->query("SELECT a.realname FROM {pre}admin a where a.admin_id={$question['admin_id']}")->result_array(); $question['admin_name'] = count($admin) ? $admin[0]['realname'] : '--'; $question['subject_name'] = $subjects[$question['subject_id']]; $item['grade_name'] = $grades[$item['grade_id']]; $item['subject_type_name'] = $subject_types[$item['subject_type']]; $item['addtime'] = date('Y-m-d H:i:s', $question['addtime']); $question['type'] = $qtypes[$question['type']]; //获取试题类型 $item['class_name'] = isset($class_list[$item['class_id']]) ? $class_list[$item['class_id']]['class_name'] : '--'; //学科/试题相关权限 $has_question_power = QuestionModel::check_question_power($item['ques_id'], 'w', false); $has_subject_power = true; $item['has_edit_power'] = $has_question_power && $has_subject_power; $tmp_list[$k] = array_merge($item, $question); } $data['list'] =& $tmp_list; $data['search'] =& $search; $data['flags'] =& $flags; //难易度更新全新 $data['priv_manage'] = $this->check_power('update_system_difficulty', FALSE); $data['priv_question_manage'] = $this->check_power('question_manage', FALSE); // 分页 $purl = site_url('admin/relate_class/index/') . (count($param) ? '?' . implode('&', $param) : ''); $total = RelateClassModel::count_list($query, $where); $data['pagination'] = multipage($total, $per_page, $page, $purl); $this->load->view('relate_class/index', $data); }