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); } }
public function interview_type() { $pid = intval($this->input->post('pid')); $list = InterviewTypeModel::get_children($pid); sort($list); echo json_encode($list); }
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('请选择要删除的分类'); } }