Example #1
0
 public function search_question($id = 0, $generate = 0)
 {
     if (!$this->check_power('interview_rule_manage')) {
         return;
     }
     if ($id = intval($id)) {
         $query = $this->db->get_where('interview_rule', array('rule_id' => $id));
         $rule = $query->row_array();
     }
     if (empty($rule)) {
         message('规则不存在');
         return;
     }
     if ($rule['status']) {
         // 已生成试题,跳到试题列表
         redirect('admin/interview_rule/questions/' . $id);
     }
     $where = $param = array();
     // 年段
     if ($rule['grade_period']) {
         $where[] = "q.grade_period LIKE '%," . $rule['grade_period'] . ",%'";
     }
     // 类型
     if ($rule['class_id']) {
         $where[] = "q.class_id LIKE '%," . $rule['class_id'] . ",%'";
     }
     if ($rule['lang']) {
         $where[] = "q.lang='{$rule['lang']}'";
     }
     // 考点
     if ($rule['type_id'] && $rule['extend_type']) {
         $type_children = InterviewTypeModel::get_children($rule['type_id']);
         if ($type_children) {
             $type_children = array_keys($type_children);
         }
         if ($rule['type_id'] == $rule['extend_type']) {
             $type_ids = array($rule['type_id']);
             if ($type_children) {
                 $type_ids = $type_ids + $type_children;
             }
         } else {
             $type_ids = $type_children;
             if ($rule['extend_type'] == implode(',', $type_children)) {
                 $type_ids = $rule['type_id'] + $type_ids;
             }
         }
         if (count($type_ids) == 1) {
             $where[] = "q.interview_type = '{$rule['type_id']}'";
         } else {
             $where[] = "q.interview_type IN (" . implode(',', $type_ids) . ")";
         }
     }
     if ($rule['exam_id']) {
         // todo
         // 排除和机考题目关联的笔试题
     }
     $where = $where ? implode(' AND ', $where) : '1';
     $sql = "SELECT id FROM {pre}interview_question q WHERE {$where} LIMIT {$rule['ques_num']}";
     $query = $this->db->query($sql);
     $total = $query->num_rows();
     if ($generate) {
         if (empty($total)) {
             message('暂无匹配试题!');
             return;
         }
         $sql = "SELECT q.id,count(rk.id) use_count, max(r.rule_time) max_time FROM {pre}interview_question q\n                    LEFT JOIN {pre}interview_rule_question rk ON q.id=rk.ques_id\n                    LEFT JOIN {pre}interview_rule r ON rk.rule_id=r.rule_id\n                    WHERE {$where} \n                    GROUP BY q.id\n                    ORDER BY use_count, q.id DESC, max_time LIMIT {$total}";
         $res = $this->db->query($sql);
         $records = array();
         foreach ($res->result_array() as $row) {
             $record = array('rule_id' => $id, 'ques_id' => $row['id']);
             $records[] = $record;
         }
         if ($records) {
             try {
                 $this->db->trans_start();
                 $this->db->insert_batch('interview_rule_question', $records);
                 $update = array('status' => 1, 'rule_time' => time());
                 $this->db->update('interview_rule', $update, array('rule_id' => $id));
                 $this->db->trans_complete();
                 admin_log('generate', 'interview_rule_question', $id);
                 message('试题导出成功', 'admin/interview_rule_question/rule/' . $id);
             } catch (Exception $e) {
                 message('试题导出失败');
                 return;
             }
         }
         if (empty($total)) {
             message('暂无匹配试题!');
             return;
         }
     } else {
         $size = 15;
         $totalpage = ceil($total / $size);
         $page = isset($_GET['page']) && intval($_GET['page']) > 1 ? intval($_GET['page']) : 1;
         $page = $page > $totalpage ? $totalpage : $page;
         $offset = ($page - 1) * $size;
         $limit = $page == $totalpage ? $total - $offset : $size;
         // 加载分类数据
         $class_list = ClassModel::get_class_list();
         $periods = C('grade_period');
         $langs = C('interview_lang');
         $types = C('interview_type');
         $list = array();
         if ($total) {
             $sql = "SELECT q.*,count(rk.id) use_count, max(r.rule_time) max_time FROM {pre}interview_question q\n                        LEFT JOIN {pre}interview_rule_question rk ON q.id=rk.ques_id\n                        LEFT JOIN {pre}interview_rule r ON rk.rule_id=r.rule_id\n                        WHERE {$where} \n                        GROUP BY q.id\n                        ORDER BY use_count, q.id DESC, max_time LIMIT {$offset}, {$limit}";
             $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'] : '';
                 }
                 // 年段
                 $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['max_time'] = $row['max_time'] ? date('Y-m-d H:i', $row['max_time']) : '---';
                 $list[] = $row;
             }
         }
         $data['list'] = $list;
         $data['rule'] = $rule;
         // 分页
         $purl = site_url('admin/interview_rule/search_question/' . $id) . ($param ? '?' . implode('&', $param) : '');
         $data['pagination'] = multipage($total, $size, $page, $purl);
         // 模版
         $this->load->view('interview_rule/search_question', $data);
     }
 }
Example #2
0
 public function interview_type()
 {
     $pid = intval($this->input->post('pid'));
     $list = InterviewTypeModel::get_children($pid);
     sort($list);
     echo json_encode($list);
 }
Example #3
0
 public function delete_batch()
 {
     if (!$this->check_power('interview_type_manage')) {
         return;
     }
     $ids = (array) $this->input->post('ids');
     if ($ids) {
         $this->db->where_in('type_id', $ids)->delete('interview_type');
         admin_log('delete', 'interview_type', implode(',', $ids));
         InterviewTypeModel::update_cache();
         message('分类删除成功!', 'admin/interview_type/index');
     } else {
         message('请选择要删除的分类');
     }
 }