Exemplo n.º 1
0
 /**
  * 试卷试题列表未加入期次
  *
  * @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);
 }
Exemplo n.º 2
0
 /**
  * 预览试卷
  *
  * @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);
 }