コード例 #1
0
 public function index($mode = '')
 {
     // 加载分类数据
     $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";
     // 过滤题组子题目,在题组页面管理
     $mode = $mode == 'trash' ? 'trash' : '';
     if ($mode == 'trash') {
         $where[] = "q.is_delete = 1";
     } else {
         $where[] = "q.is_delete <> 1";
     }
     /* 用户信息 */
     $admin_info = $this->session->all_userdata();
     if (empty($admin_info['admin_id'])) {
         message('获取管理员数据失败,请从新登陆后重试!');
     } else {
         $where[] = "q.admin_id={$admin_info['admin_id']}";
         $param[] = "admin_id={$admin_info['admin_id']}";
         $search['admin_id'] = $admin_info['admin_id'];
     }
     // 操作时间
     $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'];
         }
     }
     $where[] = "q.ques_id IN (SELECT DISTINCT ques_id FROM rd_relate_class) ";
     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 ';
     //echo $where;
     // 统计数量
     $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']);
             $row['has_edit_power'] = true;
             /*
              * 检查是否有关联信息
              * 非题组:关联技能
              * 题组:题干关联技能、知识点,子题必须要全部添加知识点
              */
             $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;
             //获取回收站信息
             if ($mode == 'trash') {
                 $recycle = RecycleModel::get_recycle_list(array('type' => RECYCLE_QUESTION, 'obj_id' => $row['ques_id']), null, null, 'ctime asc');
                 $row['recycle'] = $recycle;
             } else {
                 $row['recycle'] = array();
             }
             $list[] = $row;
         }
     }
     $data['list'] =& $list;
     // 分页
     $purl = site_url('admin/question_external/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'] = true;
     $data['priv_trash'] = true;
     $data['priv_manage'] = true;
     $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');
     $data['is_english_admin'] = true;
     // 模版
     $this->load->view('question_external/index', $data);
 }
コード例 #2
0
 /**
  * 删除分类信息,及其下属信息条目
  *
  * @param   int/array        分类id
  * @return  boolean
  */
 public static function delete($id)
 {
     $db = Fn::db();
     $bOk = false;
     if ($db->beginTransaction()) {
         $tableInfo = $this->db->dbprefix('rd_comparison_info');
         $tableItem = $this->db->dbprefix('rd_comparison_item');
         if (is_array($id)) {
             $db->delete('rd_comparison_item', "cmp_info_id IN (SELECT cmp_info_id FROM rd_comparison_info WHERE cmp_type_id IN (" . my_implode($id) . "))");
             $db->delete('rd_comparison_info', "cmp_type_id = {$id}");
             $db->delete('rd_comparison_type', "cmp_type_id = {$id}");
         } else {
             $db->delete('rd_comparison_item', "cmp_info_id IN (SELECT cmp_info_id FROM rd_comparison_info WHERE cmp_type_id = {$id})");
             $db->delete('rd_comparison_info', "cmp_type_id = {$id}");
             $db->delete('rd_comparison_type', "cmp_type_id = {$id}");
         }
         $bOk = $db->commit();
         if (!$bOk) {
             $db->rollBack();
         }
     }
     return $bOk;
 }
コード例 #3
0
ファイル: common.php プロジェクト: Vincent-Shen/origin
 public function question_count()
 {
     $result = array('error' => '', 'count' => array(), 'group_count' => array());
     $type = intval($this->input->post('type'));
     $subject_id = intval($this->input->post('subject_id'));
     $grade_id = intval($this->input->post('grade_id'));
     $class_id = intval($this->input->post('class_id'));
     $subject_type = intval($this->input->post('subject_type'));
     $is_original = intval($this->input->post('is_original'));
     if (empty($subject_id) || empty($grade_id) || empty($class_id)) {
         $result['error'] = '请选择学科、年级、类型';
         die(json_encode($result));
     }
     if ($grade_id < 11 || $subject_id > 3 || !in_array($class_id, array(2, 3))) {
         $subject_type = '-1';
     }
     // 范围知识点
     $knowledge_ids = trim($this->input->post('knowledge_ids'));
     $knowledge_ids = explode(',', $knowledge_ids);
     $knowledge_id_arr = array();
     foreach ($knowledge_ids as $id) {
         $id = intval($id);
         $id && array_push($knowledge_id_arr, $id);
     }
     if ($type > 0 && empty($knowledge_id_arr)) {
         $result['error'] = '请选择知识点范围';
         die(json_encode($result));
     }
     // 重点知识点
     $rule_knowledge = intval($this->input->post('rule_knowledge'));
     $children_ids = array();
     if ($type == 2) {
         if ($rule_knowledge) {
             $pid = KnowledgeModel::get_knowledge($rule_knowledge, 'pid');
             if ($pid === false) {
                 $rule_knowledge = 0;
             } else {
                 if ($pid == 0) {
                     // 一级知识点
                     $children = KnowledgeModel::get_knowledge_list(0, $rule_knowledge, 0);
                     foreach ($knowledge_id_arr as $kid) {
                         if (isset($children[$kid])) {
                             $children_ids[] = $kid;
                         }
                     }
                 } else {
                     // 二级知识点
                     if (!in_array($rule_knowledge, $knowledge_id_arr)) {
                         $rule_knowledge = 0;
                     }
                 }
             }
         }
         if (empty($rule_knowledge)) {
             $result['error'] = '请选择重点知识点';
             die(json_encode($result));
         }
     }
     $where = array();
     $where[] = "q.is_delete<>1 AND q.parent_id=0";
     $where[] = "q.subject_id={$subject_id}";
     $where[] = "q.start_grade<={$grade_id} AND q.end_grade>={$grade_id}";
     $where[] = "q.ques_id IN (SELECT distinct ques_id FROM {pre}relate_class \n\t\t           WHERE grade_id={$grade_id} AND class_id={$class_id} AND subject_type={$subject_type})";
     if ($is_original > 0) {
         $where[] = "q.is_original={$is_original}";
     }
     //认知过程
     $know_process = intval($this->input->post('know_process'));
     //die(json_encode( $know_process));
     $know_process_sql = !$know_process ? '' : "and know_process={$know_process}";
     if ($type) {
         // 范围知识点 $knowledge_id_arr
         //             $except_ids = array();
         //             $query = $this->db->select('id')->get_where('knowledge', array('subject_id'=>$subject_id,'pid >'=>'0'));
         //             foreach ($query->result_array() as $row)
         //             {
         //                 if ( !in_array($row['id'], $knowledge_id_arr))
         //                     $except_ids[] = $row['id'];
         //             }
         if ($type == 2) {
             if ($children_ids) {
                 $where[] = "q.ques_id IN (SELECT ques_id FROM {pre}relate_knowledge \n                            where knowledge_id IN(" . my_implode($children_ids) . ") {$know_process_sql} and is_child=0)";
             } else {
                 $where[] = "q.ques_id IN (SELECT ques_id FROM {pre}relate_knowledge \n                    where knowledge_id={$rule_knowledge} {$know_process_sql} and is_child=0)";
             }
         } else {
             $where[] = "q.ques_id IN (SELECT ques_id FROM {pre}relate_knowledge \n                        where knowledge_id IN(" . implode(',', $knowledge_id_arr) . ") {$know_process_sql} and is_child=0)";
         }
         //  if ($except_ids)
         // {
         //   $where[] = "q.ques_id NOT IN (SELECT ques_id FROM {pre}relate_knowledge
         //  where knowledge_id IN(".implode(',', $except_ids).") {$know_process_sql} and is_child=0)";
         //  }
     }
     if ($type < 2) {
         // 总数量
         $sql = "SELECT COUNT(ques_id) nums FROM {pre}question q WHERE " . implode(' AND ', $where);
         $query = $this->db->query($sql);
         $row = $query->row_array();
         $result['count'][0] = $row['nums'];
         //--------------------------------------------//
         // 统计关联试题数
         // = 无分组试题数 + 分组数量
         //--------------------------------------------//
         $result['group_count'][0] = 0;
         // 独立试题数(无分组)
         $sql2 = "SELECT COUNT(q.ques_id) nums FROM {pre}question q \n                    WHERE " . implode(' AND ', $where) . "  AND q.group_id=0";
         $query = $this->db->query($sql2);
         foreach ($query->result_array() as $row) {
             $result['group_count'][0] = $row['nums'];
         }
         // 不同分组数
         $sql2 = "SELECT COUNT(distinct q.group_id) nums FROM {pre}question q \n                    WHERE " . implode(' AND ', $where) . "  AND q.group_id>0";
         $query = $this->db->query($sql2);
         foreach ($query->result_array() as $row) {
             $result['group_count'][0] += $row['nums'];
         }
         die(json_encode($result));
     }
     // 重点知识点统计:按题型、难易度区间分组
     $areas = C('difficulty_area');
     if ($subject_id == 3) {
         $result['count'] = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
         $result['group_count'] = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     } else {
         $result['count'] = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
         $result['group_count'] = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     }
     foreach ($areas as $k => $area) {
         $new_where = $where;
         $new_where[] = "qd.difficulty between {$area['0']} AND {$area['1']}";
         $sql = "SELECT q.type, COUNT(q.ques_id) nums FROM {pre}question q \n                     LEFT JOIN {pre}relate_class qd ON q.ques_id=qd.ques_id AND qd.grade_id={$grade_id} AND qd.class_id={$class_id}\n                     WHERE " . implode(' AND ', $new_where) . " GROUP BY q.type";
         //echo $sql ;die;
         $query = $this->db->query($sql);
         foreach ($query->result_array() as $row) {
             if ($row['type'] > 9) {
                 continue;
             }
             $result['count'][$row['type'] * 3 + $k] = $row['nums'];
         }
         // 独立试题数
         $sql2 = "SELECT q.type,COUNT(q.ques_id) nums FROM {pre}question q \n                     LEFT JOIN {pre}relate_class qd ON q.ques_id=qd.ques_id AND qd.grade_id={$grade_id} AND qd.class_id={$class_id}\n                    WHERE " . implode(' AND ', $new_where) . " AND q.group_id=0 GROUP BY q.type";
         $query = $this->db->query($sql2);
         foreach ($query->result_array() as $row) {
             if ($row['type'] > 9) {
                 continue;
             }
             $result['group_count'][$row['type'] * 3 + $k] = $row['nums'];
         }
         // 分组试题数
         $sql2 = "SELECT q.type, COUNT(distinct q.group_id) nums FROM {pre}question q \n                     LEFT JOIN {pre}relate_class qd ON q.ques_id=qd.ques_id AND qd.grade_id={$grade_id} AND qd.class_id={$class_id}\n                    WHERE " . implode(' AND ', $new_where) . " AND q.group_id>0 GROUP BY q.type";
         $query = $this->db->query($sql2);
         foreach ($query->result_array() as $row) {
             if ($row['type'] > 9) {
                 continue;
             }
             $result['group_count'][$row['type'] * 3 + $k] += $row['nums'];
         }
     }
     // echo $this->db->last_query();die;
     die(json_encode($result));
 }
コード例 #4
0
ファイル: functions.php プロジェクト: 123Haynes/MySQLDumper
function WriteCronScript($restore_values = false)
{
    global $nl, $config, $databases, $cron_db_array, $cron_dbpraefix_array, $cron_db_cbd_array, $cron_db_cad_array, $dontBackupDatabases;
    if (!isset($databases['db_selected_index'])) {
        $databases['db_selected_index'] = 0;
    }
    if (!isset($databases['praefix'][$databases['db_selected_index']])) {
        $databases['praefix'][$databases['db_selected_index']] = "";
    }
    if (!isset($databases['db_actual_cronindex'])) {
        $databases['db_actual_cronindex'] = $databases['db_selected_index'];
    }
    if (!isset($config['email_maxsize'])) {
        $config['email_maxsize'] = $config['email_maxsize1'] * ($config['email_maxsize2'] == 1 ? 1024 : 1024 * 1024);
    }
    $cron_dbname = $databases['db_actual'];
    // -2 = Multidump configuration
    // -3 = all databases - nothing to do
    // get standard values for all databases
    $cron_db_array = $databases['Name'];
    $cron_dbpraefix_array = $databases['praefix'];
    $cron_command_before_dump = $databases['command_before_dump'];
    $cron_command_after_dump = $databases['command_after_dump'];
    if (!isset($config['cron_dbindex'])) {
        $config['cron_dbindex'] = -3;
    }
    if (intval($config['cron_dbindex']) == -2) {
        // get selected dbs from multidump-settings
        $cron_db_array = $databases['multi'];
        $cron_dbpraefix_array = $databases['multi_praefix'];
        $cron_command_before_dump = $databases['multi_commandbeforedump'];
        $cron_command_after_dump = $databases['multi_commandafterdump'];
    }
    // we need to correct the index of the selected database after we cleaned
    // the db-array from information_schema and mysql if it points to a db-name
    if ($config['cron_dbindex'] >= 0) {
        $cronDbIndexDbName = $databases['Name'][$config['cron_dbindex']];
    } else {
        $cronDbIndex = $config['cron_dbindex'];
    }
    $newDbNames = $databases['Name'];
    //remove database we don't want to backup
    // from newDbNames
    foreach ($databases['Name'] as $k => $v) {
        if (in_array($v, $dontBackupDatabases)) {
            unset($newDbNames[$k]);
        }
    }
    // and from cron (cron_db_array has different length to newDbNames: at least mysql and information_schema are missing)
    foreach ($cron_db_array as $k => $v) {
        if (in_array($v, $dontBackupDatabases)) {
            unset($cron_db_array[$k], $cron_dbpraefix_array[$k], $cron_command_before_dump[$k], $cron_command_after_dump[$k]);
        }
    }
    // find new index
    if ($config['cron_dbindex'] >= 0) {
        sort($newDbNames);
        $dbNames = array_flip($newDbNames);
        if (isset($dbNames[$cronDbIndexDbName])) {
            $cronDbIndex = $dbNames[$cronDbIndexDbName];
        } else {
            $cronDbIndex = 0;
        }
    }
    $r = str_replace("\\\\", "/", $config['paths']['root']);
    $r = str_replace("@", "\\@", $r);
    $p1 = $r . $config['paths']['backup'];
    $p2 = $r . $config['files']['perllog'] . ($config['logcompression'] == 1 ? '.gz' : '');
    $p3 = $r . $config['files']['perllogcomplete'] . ($config['logcompression'] == 1 ? '.gz' : '');
    // auf manchen Server wird statt 0 ein leerer String gespeichert -> fuehrt zu einem Syntax-Fehler
    // hier die entsprechenden Ja/Nein-Variablen sicherheitshalber in intvalues aendern
    $int_array = array('dbport', 'cron_compression', 'cron_printout', 'multi_part', 'multipart_groesse', 'email_maxsize', 'auto_delete', 'max_backup_files', 'perlspeed', 'optimize_tables_beforedump', 'logcompression', 'log_maxsize', 'cron_completelog', 'cron_use_sendmail', 'cron_smtp_port');
    foreach ($int_array as $i) {
        if (is_array($i)) {
            foreach ($i as $key => $val) {
                $int_array[$key] = intval($val);
            }
        } else {
            $config[$i] = intval($config[$i]);
        }
    }
    if ($config['dbport'] == 0) {
        $config['dbport'] = 3306;
    }
    $cronscript = "<?php\n#Vars - written at " . date("Y-m-d") . $nl;
    $cronscript .= '$dbhost="' . $config['dbhost'] . '";' . $nl;
    $cronscript .= '$dbname="' . $cron_dbname . '";' . $nl;
    $cronscript .= '$dbuser="******";' . $nl;
    $cronscript .= '$dbpass="******";' . $nl;
    $cronscript .= '$dbport=' . $config['dbport'] . ';' . $nl;
    $cronscript .= '$dbsocket="' . escape_specialchars($config['dbsocket']) . '";' . $nl;
    $cronscript .= '$compression=' . $config['cron_compression'] . ';' . $nl;
    $cronscript .= '$backup_path="' . $p1 . '";' . $nl;
    $cronscript .= '$logdatei="' . $p2 . '";' . $nl;
    $cronscript .= '$completelogdatei="' . $p3 . '";' . $nl;
    $cronscript .= '$sendmail_call="' . escape_specialchars($config['cron_sendmail']) . '";' . $nl;
    $cronscript .= '$nl="\\n";' . $nl;
    $cronscript .= '$cron_dbindex=' . $cronDbIndex . ';' . $nl;
    $cronscript .= '$cron_printout=' . $config['cron_printout'] . ';' . $nl;
    $cronscript .= '$cronmail=' . $config['send_mail'] . ';' . $nl;
    $cronscript .= '$cronmail_dump=' . $config['send_mail_dump'] . ';' . $nl;
    $cronscript .= '$cronmailto="' . escape_specialchars($config['email_recipient']) . '";' . $nl;
    $cronscript .= '$cronmailto_cc="' . escape_specialchars($config['email_recipient_cc']) . '";' . $nl;
    $cronscript .= '$cronmailfrom="' . escape_specialchars($config['email_sender']) . '";' . $nl;
    $cronscript .= '$cron_use_sendmail=' . $config['cron_use_sendmail'] . ';' . $nl;
    $cronscript .= '$cron_smtp="' . escape_specialchars($config['cron_smtp']) . '";' . $nl;
    $cronscript .= '$cron_smtp_port="' . $config['cron_smtp_port'] . '";' . $nl;
    $cronscript .= '@cron_db_array=' . my_implode($cron_db_array);
    $cronscript .= '@cron_dbpraefix_array=' . my_implode($cron_dbpraefix_array);
    $cronscript .= '@cron_command_before_dump=' . my_implode($cron_command_before_dump);
    $cronscript .= '@cron_command_after_dump=' . my_implode($cron_command_after_dump);
    $cronscript .= '@ftp_server=' . my_implode($config['ftp_server']);
    $cronscript .= '@ftp_port=' . my_implode($config['ftp_port'], 1);
    $cronscript .= '@ftp_mode=' . my_implode($config['ftp_mode'], 1);
    $cronscript .= '@ftp_user='******'ftp_user']);
    $cronscript .= '@ftp_pass='******'ftp_pass']);
    $cronscript .= '@ftp_dir=' . my_implode($config['ftp_dir']);
    $cronscript .= '@ftp_timeout=' . my_implode($config['ftp_timeout'], 1);
    $cronscript .= '@ftp_useSSL=' . my_implode($config['ftp_useSSL'], 1);
    $cronscript .= '@ftp_transfer=' . my_implode($config['ftp_transfer'], 1);
    $cronscript .= '$mp=' . $config['multi_part'] . ';' . $nl;
    $cronscript .= '$multipart_groesse=' . $config['multipart_groesse'] . ';' . $nl;
    $cronscript .= '$email_maxsize=' . $config['email_maxsize'] . ';' . $nl;
    $cronscript .= '$auto_delete=' . $config['auto_delete'] . ';' . $nl;
    $cronscript .= '$max_backup_files=' . $config['max_backup_files'] . ';' . $nl;
    $cronscript .= '$perlspeed=' . $config['perlspeed'] . ';' . $nl;
    $cronscript .= '$optimize_tables_beforedump=' . $config['optimize_tables_beforedump'] . ';' . $nl;
    $cronscript .= '$logcompression=' . $config['logcompression'] . ';' . $nl;
    $cronscript .= '$log_maxsize=' . $config['log_maxsize'] . ';' . $nl;
    $cronscript .= '$complete_log=' . $config['cron_completelog'] . ';' . $nl;
    $cronscript .= '$my_comment="' . escape_specialchars(stripslashes($config['cron_comment'])) . '";' . $nl;
    $cronscript .= "?>";
    // Save config
    $ret = true;
    $sfile = $config['paths']['config'] . $config['config_file'] . '.conf.php';
    if (file_exists($sfile)) {
        @unlink($sfile);
    }
    if ($fp = fopen($sfile, "wb")) {
        if (!fwrite($fp, $cronscript)) {
            $ret = false;
        }
        if (!fclose($fp)) {
            $ret = false;
        }
        @chmod("{$sfile}", 0777);
    } else {
        $ret = false;
    }
    // if standard config was deleted -> restore it with the actual values
    if (!file_exists($config['paths']['config'] . "mysqldumper.conf.php")) {
        $sfile = $config['paths']['config'] . 'mysqldumper.conf.php';
        if ($fp = fopen($sfile, "wb")) {
            if (!fwrite($fp, $cronscript)) {
                $ret = false;
            }
            if (!fclose($fp)) {
                $ret = false;
            }
            @chmod("{$sfile}", 0777);
        } else {
            $ret = false;
        }
    }
    return $ret;
}
コード例 #5
0
 /**
  * 添加 考场 监考人员
  */
 public function insert()
 {
     if (!$this->check_power('exam_manage')) {
         return;
     }
     $place_id = (int) $this->input->post('place_id');
     if ($place_id) {
         $query = $this->db->select('p.*')->from('exam_place p')->join('exam e', 'p.exam_pid=e.exam_id')->join('school sch', 'p.school_id=sch.school_id')->where(array('p.place_id' => $place_id))->get();
         $place = $query->row_array();
     }
     if (empty($place)) {
         message('考场信息不存在', 'admin/exam/index');
         return;
     }
     $ids = $this->input->post('id');
     if (empty($ids) or !is_array($ids)) {
         message('请至少选择一项');
         return;
     }
     //控制考场只能在未开始考试操作
     $no_start = ExamPlaceModel::place_is_no_start($place_id);
     if (!$no_start) {
         message('该考场正在考试或已结束,无法做此操作');
     }
     $ids = my_intval($ids);
     $inserts = array();
     //获取未被分配考场的监考人员
     /*
      *  同一个监考人员不能同时出现在 相同时段的考场中
      */
     $place['start_time'] = $place['start_time'] + 1;
     $place['end_time'] = $place['end_time'] - 1;
     $sql = "SELECT i.invigilator_id FROM {pre}invigilator i \n                WHERE i.invigilator_flag=1 AND i.invigilator_id IN(" . my_implode($ids) . ")\n                AND NOT EXISTS(SELECT ps.invigilator_id FROM {pre}exam_place_invigilator ps,{pre}exam_place p WHERE ps.place_id=p.place_id AND ps.invigilator_id=i.invigilator_id and ((p.start_time >= {$place['start_time']} and p.start_time <= {$place['end_time']}) OR (p.end_time >= {$place['start_time']} and p.end_time <= {$place['end_time']}) OR (p.start_time <= {$place['start_time']} and p.end_time >= {$place['end_time']})))";
     //已经分配有考场的监考人员列表
     $failed_ids = array();
     $success_ids = array();
     $result = $this->db->query($sql)->result_array();
     foreach ($result as $row) {
         $inserts[] = array('place_id' => $place_id, 'invigilator_id' => $row['invigilator_id']);
         $success_ids[] = $row['invigilator_id'];
     }
     $failed_ids = array_diff($ids, $success_ids);
     $res = 0;
     if ($inserts) {
         // 关闭错误信息,防止 unique index 冲突出错
         $this->db->db_debug = false;
         $this->db->insert_batch('exam_place_invigilator', $inserts);
         $res = $this->db->affected_rows();
     }
     $back_url = 'admin/place_invigilator/index/' . $place_id;
     if ($res < 1) {
         message('监考人员添加失败', $back_url);
     } else {
         $failed_i_names = array();
         foreach ($failed_ids as $id) {
             $i_name = ExamInvigilatorModel::get_invigilator_by_id($id, 'name');
             if ($i_name) {
                 $failed_i_names[] = $i_name;
             }
         }
         $msg = array('监考人员添加成功');
         if (count($failed_i_names)) {
             $msg[] = '<hr/>以下监考人员已经分配了考场:<br/>' . implode('<br/>', $failed_i_names);
         }
         message(implode('', $msg), $back_url);
     }
 }
コード例 #6
0
ファイル: ExamPaper.php プロジェクト: Vincent-Shen/origin
 /**
  * 将已取到的试题关联的方法策略分类对应的试题数 进行升序排,
  * 试题不够时,用这些方法策略分类关联的其他试题来补齐
  */
 private static function _get_inserted_question_method_tactics($ques_ids)
 {
     $method_tactics = Fn::db()->fetchAll("SELECT method_tactic_id, COUNT(*) AS `count`\n    \t                  FROM rd_relate_method_tactic\n    \t                  WHERE ques_id IN (" . my_implode($ques_ids) . ")\n    \t                  GROUP BY method_tactic_id ORDER BY `count` ASC LIMIT 10");
     $method_tactic_ids = array();
     foreach ($method_tactics as $row) {
         $method_tactic_ids[] = $row['method_tactic_id'];
     }
     return $method_tactic_ids;
 }
コード例 #7
0
ファイル: exam_question.php プロジェクト: Vincent-Shen/origin
 /**
  * 试卷加入试题
  *
  * @param int $paper_id 试卷id
  * @param int $ques_ids 试题id
  * @return void
  */
 public function insert()
 {
     if (!$this->check_power('exam_manage')) {
         return;
     }
     $paper_id = intval($this->input->post('paper_id'));
     $ques_ids = trim($this->input->post('ques_ids'));
     if (empty($ques_ids)) {
         message('请选择要添加的试题');
         return;
     }
     $paper = ExamPaperModel::detail($paper_id);
     if (empty($paper)) {
         message('试卷不存在');
         return;
     }
     $exam = ExamModel::get_exam($paper['exam_id'], 'exam_pid,subject_id,grade_id,class_id');
     if (empty($exam)) {
         message('考试不存在');
         return;
     }
     //判断该试卷已经被考试过 或 正在被考
     $is_mini_test = ExamModel::is_mini_test($exam['exam_pid']);
     if (!$is_mini_test) {
         $be_tested = QuestionModel::paper_has_test_action($paper_id);
         if ($be_tested) {
             message('该试卷已经被考生考过 或者 正在被考, 无法修改');
         }
     }
     $ques_ids = my_intval(explode(',', $ques_ids));
     $this->check_total_score($paper_id, $ques_ids);
     $sql = "SELECT q.ques_id,q.group_id FROM {pre}question q,{pre}relate_class rc\n                WHERE q.ques_id=rc.ques_id AND q.subject_id={$exam['subject_id']} AND rc.grade_id={$exam['grade_id']}\n                AND rc.class_id={$exam['class_id']} AND q.ques_id IN (" . my_implode($ques_ids) . ")";
     $query = $this->db->query($sql);
     $inserts = array();
     $fail = $success = 0;
     $msg = array();
     foreach ($query->result_array() as $row) {
         if (in_array($row['ques_id'], $paper['ques_ids']) or $row['group_id'] && in_array($row['group_id'], $paper['group_ids'])) {
             $fail++;
             $msg[] = '该试卷同一试题已存在或者同一分组中的试题已存在!';
             continue;
         }
         $success++;
         $item = array('paper_id' => $paper['paper_id'], 'exam_id' => $paper['exam_id'], 'ques_id' => $row['ques_id']);
         $inserts[] = $item;
         $paper['ques_ids'][] = $row['ques_id'];
         if ($row['group_id']) {
             $paper['group_ids'][] = $row['group_id'];
         }
     }
     if ($inserts) {
         $this->db->insert_batch('exam_question', $inserts);
         ExamPaperModel::renew($paper_id);
         if ($is_mini_test) {
             SummaryModel::summary_paper($exam['exam_pid'], 0, $paper_id, true);
         }
     }
     $msg = '成功' . $success . '个,失败' . $fail . '个失败原因:<br>' . implode('<br>', $msg);
     message('试卷试题添加成功' . $msg, 'admin/exam_question/index/' . $paper_id);
 }
コード例 #8
0
ファイル: Knowledge.php プロジェクト: Vincent-Shen/origin
 /**
  * 计算知识点关联的试题数量,返回知识点信息数组
  * @param   mixed      知识点数组/知识点id
  * @return  array
  */
 public static function get_konwledge_ques_num($knowledge = array())
 {
     if (!is_array($knowledge) && $knowledge) {
         $knowledge = self::get_knowledge(intval($knowledge));
     }
     if (empty($knowledge)) {
         return array();
     }
     $id = $knowledge['id'];
     $pid = $knowledge['pid'];
     $where = array();
     $where[] = "q.ques_id = rk.ques_id";
     $where[] = "q.is_delete <> 1";
     $where[] = "q.parent_id = 0";
     // 如果是一级知识点,获取下级知识点id
     if ($pid == 0) {
         $ids = self::get_knowledge_list(0, $id, 0);
         $ids = array_keys($ids);
         $knowledge['children'] = count($ids);
     }
     //--------------------------------------------//
     // 统计试题数
     //--------------------------------------------//
     if ($pid || empty($ids)) {
         $where[] = "rk.knowledge_id = {$id}";
     } else {
         if (count($ids) == 1) {
             $where[] = "rk.knowledge_id = {$ids['0']}";
         } else {
             $where[] = "rk.knowledge_id IN (" . my_implode($ids) . ")";
         }
     }
     $sql = "SELECT COUNT(DISTINCT q.ques_id) nums FROM rd_question q, rd_relate_knowledge rk \n                WHERE " . implode(' AND ', $where) . ' AND rk.is_child = 0';
     $row = Fn::db()->fetchRow($sql);
     $knowledge['ques_num'] = (int) $row['nums'];
     //--------------------------------------------//
     // 统计关联试题数
     // = 无分组试题数 + 分组数量
     //--------------------------------------------//
     // 独立试题数
     $sql = "SELECT COUNT(DISTINCT q.ques_id) nums FROM rd_question q, rd_relate_knowledge rk \n                WHERE " . implode(' AND ', $where) . " AND q.group_id = 0 AND rk.is_child = 0";
     $row = Fn::db()->fetchRow($sql);
     $knowledge['relate_ques_num'] = (int) $row['nums'];
     // 分组数
     $sql = "SELECT COUNT(distinct q.group_id) nums FROM rd_question q,rd_relate_knowledge rk \n                WHERE " . implode(' AND ', $where) . " AND q.group_id > 0 AND rk.is_child = 0";
     $row = Fn::db()->fetchRow($sql);
     $knowledge['relate_ques_num'] += (int) $row['nums'];
     return $knowledge;
 }
コード例 #9
0
ファイル: subject_paper.php プロジェクト: Vincent-Shen/origin
 /**
  * @description 添加期次科目试卷
  * @author
  * @final
  * @param int $exam_id 考试期次id
  * @param array $ids 试卷id
  */
 public function insert()
 {
     if (!$this->check_power('exam_manage')) {
         return;
     }
     $exam_id = (int) $this->input->post('exam_id');
     $exam_id && ($exam = ExamModel::get_exam($exam_id, 'exam_id,exam_pid,grade_id,class_id'));
     if (empty($exam)) {
         message('考试期次科目不存在', 'admin/exam/index');
         return;
     }
     $ids = $this->input->post('ids');
     if (empty($ids) or !is_array($ids)) {
         message('请至少选择一项');
         return;
     }
     //检查该学科考试状态
     $has_tested = ExamPlaceSubjectModel::exam_subject_has_test_action($exam_id);
     if ($has_tested) {
         message('该期次科目已经被考生考过 或者 正在被考中,因此无法操作');
     }
     $ids = my_intval($ids);
     /* ------------------------------- */
     /* 补全外部新试卷信息 */
     foreach ($ids as $paper_id) {
         /* 查询试卷信息 */
         $paper = PaperModel::get_paper_by_id($paper_id, 'paper_id,admin_id,question_sort');
         /* 判定是否为外部试卷 */
         if ($paper['admin_id'] > 0) {
             $questions = json_decode($paper['question_sort'], true);
             $qtype_ques_num = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
             $question_difficulty = array();
             $this->db->trans_start();
             $sql = "DELETE FROM rd_exam_question WHERE paper_id={$paper_id} \n                        AND exam_id={$exam_id}";
             Fn::db()->query($sql);
             if (count($questions) > 0) {
                 foreach ($questions as $ques_id) {
                     /* 补全exam_question信息 */
                     $data = array();
                     $data['paper_id'] = $paper_id;
                     $data['exam_id'] = $exam_id;
                     $data['ques_id'] = $ques_id;
                     $this->db->insert('exam_question', $data);
                     $sql = "select q.ques_id,q.type,rc.difficulty from\n                            {pre}question q left join {pre}relate_class rc on q.ques_id=rc.ques_id\n                            where q.ques_id={$ques_id} and rc.grade_id={$exam['grade_id']} and rc.class_id={$exam['class_id']}";
                     $question = $this->db->query($sql)->row_array();
                     if (empty($question)) {
                         $this->db->trans_rollback();
                         message('当前试卷中存在不属于当前考试期次年级的试题!请检查试题!');
                         exit;
                     }
                     /* 各个类型试题数量 */
                     $qtype_ques_num[$question['type']]++;
                     /* 试题难易度 */
                     $question_difficulty[] = $question['difficulty'];
                 }
             }
             /* 补全exam_pager信息 */
             $data = array();
             $data['exam_id'] = $exam_id;
             $data['qtype_ques_num'] = implode(',', $qtype_ques_num);
             $data['difficulty'] = array_sum($question_difficulty) / count($question_difficulty);
             PaperModel::update_paper($paper_id, $data);
             $this->db->trans_complete();
         }
     }
     /* -------------------------------------- */
     $inserts = array();
     $sql = "SELECT p.paper_id,e.subject_id FROM {pre}exam_paper p,{pre}exam e\n            WHERE p.exam_id=e.exam_id AND p.paper_id IN (" . my_implode($ids) . ")\n            AND p.is_delete=0 AND p.exam_id={$exam_id}";
     $query = $this->db->query($sql);
     foreach ($query->result_array() as $row) {
         $inserts[] = array('exam_pid' => $exam['exam_pid'], 'exam_id' => $exam['exam_id'], 'paper_id' => $row['paper_id'], 'subject_id' => $row['subject_id']);
     }
     $res = 0;
     if ($inserts) {
         // 关闭错误信息,防止 unique index 冲突出错
         $this->db->db_debug = false;
         $this->db->insert_batch('exam_subject_paper', $inserts);
         $res = $this->db->affected_rows();
     }
     $back_url = 'admin/subject_paper/add/' . $exam_id;
     if ($res < 1) {
         message('试卷添加失败', $back_url);
     } else {
         message('试卷添加成功', $back_url);
     }
 }
コード例 #10
0
ファイル: place_student.php プロジェクト: Vincent-Shen/origin
 public function insert()
 {
     if (!$this->check_power('exam_manage')) {
         return;
     }
     $place_id = (int) $this->input->post('place_id');
     if ($place_id) {
         $query = $this->db->select('p.*,e.exam_name,e.exam_id,e.exam_pid,e.grade_id,sch.school_name')->from('exam_place p')->join('exam e', 'p.exam_pid=e.exam_id')->join('school sch', 'p.school_id=sch.school_id')->where(array('p.place_id' => $place_id))->get();
         $place = $query->row_array();
     }
     if (empty($place)) {
         message('考场信息不存在', 'admin/exam/index');
         return;
     }
     $ids = $this->input->post('ids');
     if (empty($ids) or !is_array($ids)) {
         message('请至少选择一项');
         return;
     }
     // 控制考场只能在未开始考试操作
     $no_start = ExamPlaceModel::place_is_no_start($place_id);
     if (!$no_start) {
         message('该考场正在考试或已结束,无法做此操作');
     }
     $ids = my_intval($ids);
     $school_id = (int) $this->input->post('school_id');
     $inserts = array();
     // 该考场所考到的学科
     $subject_ids = array();
     $query = $this->db->select('subject_id')->from('exam_place_subject')->where(array('place_id' => $place['place_id']))->get();
     $subjects = $query->row_array();
     $subject_ids = array();
     foreach ($subjects as $subject) {
         $subject_ids[] = $subject['subject_id'];
     }
     $subject_ids = count($subject_ids) ? implode(',', $subject_ids) : '""';
     $place['start_time'] = $place['start_time'] + 1;
     $place['end_time'] = $place['end_time'] - 1;
     $not_exists_sql = "SELECT uid FROM {pre}exam_place_student ps,{pre}exam_place p WHERE ps.place_id=p.place_id AND p.place_index={$place['place_index']} AND ps.uid=u.uid AND (((p.start_time >= {$place['start_time']} and p.start_time <= {$place['end_time']}) OR (p.end_time >= {$place['start_time']} and p.end_time <= {$place['end_time']}) OR (p.start_time <= {$place['start_time']} and p.end_time >= {$place['end_time']})) OR p.place_id IN(select distinct(place_id) from {pre}exam_place_subject eps where eps.subject_id in({$subject_ids}) and eps.exam_pid={$place['exam_id']}))";
     $sql = "SELECT u.uid FROM {pre}student u\n                WHERE u.school_id={$school_id} AND u.grade_id={$place['grade_id']} AND u.is_delete=0 AND u.uid IN(" . my_implode($ids) . ")\n                AND NOT EXISTS({$not_exists_sql})";
     $query = $this->db->query($sql);
     foreach ($query->result_array() as $row) {
         $inserts[] = array('place_id' => $place_id, 'uid' => $row['uid']);
     }
     // 添加学生时分配试卷
     $this->load->model('cron/cron_place_student_paper_model', 'cron_place_student_paper_model');
     $uids = array();
     foreach ($inserts as $key => $val) {
         $uids[] = $val['uid'];
         $place_id = $val['place_id'];
     }
     $insert_data = array('place_id' => $place_id, 'uid_data' => json_encode($uids));
     $this->cron_place_student_paper_model->insert($insert_data);
     // end
     $res = 0;
     if ($inserts) {
         // 关闭错误信息,防止 unique index 冲突出错
         $this->db->db_debug = false;
         $this->db->insert_batch('exam_place_student', $inserts);
         $res = $this->db->affected_rows();
     }
     $back_url = 'admin/place_student/add/manual/' . $place_id;
     if ($res < 1) {
         message('考生添加失败', $back_url);
     } else {
         message('考生添加成功', $back_url);
     }
 }