public function edit($id = 0) { if (!$this->check_power('subject_manage')) { return; } $id = intval($id); $id && ($subject = SubjectModel::get_subject($id)); if (empty($subject)) { message('学校不存在'); return; } $data['grade_periods'] = C('grade_period'); $data['subject'] = $subject; $data['subjectlist'] = SubjectModel::get_subjects(); // 模版 $this->load->view('subject/edit', $data); }
public function knowledge_init() { $knowledge_ids = trim($this->input->post('knowledge_ids')); $subject_id = $this->input->post('subject_id'); if (Validate::isInt($subject_id)) { $relate_subject_id = SubjectModel::get_subject($subject_id, 'relate_subject_id'); if ($relate_subject_id) { $subject_id .= ",{$relate_subject_id}"; } } if ($subject_id && $knowledge_ids) { $knowledge_ids = explode(',', $knowledge_ids); $list = KnowledgeModel::get_knowledge_list($subject_id, 0, 1); foreach ($list as $key => $val) { if (empty($knowledge_ids)) { unset($list[$key]); continue; } $new_children = array(); $children = KnowledgeModel::get_knowledge_list($val['subject_id'], $val['id'], 1); foreach ($knowledge_ids as $k => $v) { if (isset($children[$v])) { $new_children[] = $children[$v]; unset($knowledge_ids[$k]); } } if ($new_children) { usort($new_children, 'cmp_knowledge'); $list[$key]['children'] = $new_children; } else { unset($list[$key]); } } usort($list, 'cmp_knowledge'); } else { $list = array(); } echo json_encode($list); }
/** * 学生成绩列表 * * @param int $exam_id * @return void */ public function index($exam_pid = 0) { if (!$this->check_power('exam_list,exam_manage')) { return; } $page = intval($this->input->get('page')); $per_page = intval($this->input->get('per_page')); $exam_pid = intval($this->input->get('exam_pid')); $flag = $this->input->get('flag'); $place_id = intval($this->input->get('place_id')); $school_id = intval($this->input->get('school_id')); $ticket = trim($this->input->get('ticket')); $score_start = trim($this->input->get('score_start')); $score_end = trim($this->input->get('score_end')); $subject_id = intval($this->input->get('subject_id')); $keyword = trim($this->input->get('keyword')); //var_dump($place_id);die; // 查询条件 $query = array(); $param = array(); $search = array('exam_pid' => '', 'place_id' => '', 'flag' => '-2', 'keyword' => '', 'subject_id' => '', 'school_id' => '', 'school_name' => '', 'ticket' => '', 'score_start' => '', 'score_end' => ''); $flags = array('-1' => '结果作废', '0' => '未生成分数(考试中)', '1' => '已交卷(未统计结果)', '2' => '已生成分数'); //考试期次 $exam_pid = !$exam_pid ? 0 : $exam_pid; if ($exam_pid) { $query['exam_pid'] = $exam_pid; $param[] = "exam_pid={$exam_pid}"; $search['exam_pid'] = $exam_pid; } //状态 if ($flag === false) { } else { if ($flag > -2) { $query['etp_flag'] = $flag; $param[] = "flag={$flag}"; $search['flag'] = $flag; } } /* if (isset($query['etp_flag']) && $query['etp_flag'] == '2') { $query['etp_flag'] = array('2', '-1'); } */ //考场 if ($place_id) { $query['place_id'] = $place_id; $param[] = "place_id={$place_id}"; $search['place_id'] = $place_id; } //学科 if ($subject_id) { $query['subject_id'] = $subject_id; $param[] = "subject_id={$subject_id}"; $search['subject_id'] = $subject_id; } //学科 if ($keyword) { $escape_keyword = $this->db->escape_like_str($keyword); $where = "fullname LIKE '%" . $escape_keyword . "%'"; $sql = "SELECT group_concat(uid) as uid FROM v_rd_student s WHERE {$where} "; $res = $this->db->query($sql)->row_array(); $uids = explode(',', $res['uid']); $query['uid'] = $uids; $search['keyword'] = $keyword; $param[] = "keyword=" . urlencode($search['keyword']); } //得分查询 if ($score_start != '') { $query['test_score']['>='] = $score_start; $param[] = "score_start={$score_start}"; $search['score_start'] = $score_start; } if ($score_end != '') { $query['test_score']['<='] = $score_end; $param[] = "score_end={$score_end}"; $search['score_end'] = $score_end; } //获取该学校下所有的学生 if ($school_id) { $param[] = "school_id={$school_id}"; $search['school_id'] = $school_id; $row = SchoolModel::schoolInfo($school_id, 'school_name'); if ($row) { $school_name = trim($row['school_name']); } else { $school_name = ''; } if (!count($school_name)) { $query = null; $search['school_name'] = $school_id; } else { $students = StudentModel::get_student_list(array('school_id' => $school_id), false, false, null, 'uid'); if (count($students)) { $uids = array(); foreach ($students as $student) { $uids[] = $student['uid']; } $query['uid'] = $uids; } else { $query = null; } $search['school_name'] = $school_name; } } //准考证号 if ($ticket) { if (stripos($ticket, '@') === false) { $uid = StudentModel::get_student_by_exam_ticket($ticket, 'uid'); } else { $uid = StudentModel::get_student_by_email($ticket, 'uid'); } if (count($uid)) { $query['uid'] = $uid; } else { $query = null; } $param[] = "ticket={$ticket}"; $search['ticket'] = $ticket; } $select_what = '*'; $page = $page <= 0 ? 1 : $page; $per_page = $per_page <= 0 ? 10 : $per_page; $list = array(); if (!is_null($query)) { $list = ExamTestPaperModel::get_test_paper_list($query, $page, $per_page, 'subject_id ASC,etp_id ASC', $select_what); } //获取学生信息 $grades = C('grades'); $subjects = C('subject'); $data['subjects'] = $subjects; $tmp_list = array(); foreach ($list as $k => $item) { $student = StudentModel::get_student($item['uid'], 'first_name, last_name, school_id, exam_ticket, grade_id'); if (!count($student)) { $tmp_list[$k] = array_merge($item, array('truename' => '--', 'school_name' => '--', 'grade_name' => '--', 'subject_name' => '--')); continue; } $student['truename'] = $student['last_name'] . $student['first_name']; //获取学生学校信息 $row = SchoolModel::schoolInfo($student['school_id'], 'school_name'); if ($row) { $school_name = trim($row['school_name']); } else { $school_name = ''; } $student['school_name'] = count($school_name) ? $school_name : '--'; //获取该学生所在的年级 $student['grade_name'] = isset($grades[$student['grade_id']]) ? $grades[$student['grade_id']] : '--'; //获取科目 $subject_name = SubjectModel::get_subject($item['subject_id'], 'subject_name'); $student['subject_name'] = count($subject_name) ? $subject_name : '--'; //获取考试试卷信息 $paper_name = ExamPaperModel::get_paper($item['paper_id'], 'paper_name'); $item['paper_name'] = count($paper_name) ? $paper_name : '--'; //获取作废记录 $etp_invalid_record = ExamTestPaperModel::get_etp_invalid_record($item['etp_id']); if (!$etp_invalid_record) { $item['invalid_record'] = false; $item['invalid_record_note'] = ''; } else { $item['invalid_record'] = true; $item['invalid_record_note'] = $etp_invalid_record['note']; } $tmp_list[$k] = array_merge($item, $student); } $data['list'] =& $tmp_list; $data['search'] =& $search; $data['flags'] =& $flags; // 分页 $purl = site_url('admin/exam_student_result/index/') . (count($param) ? '?' . implode('&', $param) : ''); $total = ExamTestPaperModel::count_list($query); $data['pagination'] = multipage($total, $per_page, $page, $purl); $data['priv_manage'] = $this->check_power('exam_manage', FALSE); $this->load->view('exam_student_result/index', $data); }
/** * 保存添加记录 * * @return void */ public function save() { if (!$this->check_power('evaluate_rule_manage')) { return; } $er_id = (int) $this->input->post('id'); $evaluate_rule = EvaluateRuleModel::get_evaluate_rule_list(array('id' => $er_id)); if ($er_id > 0 && !count($evaluate_rule)) { message('该评估规则不存在', 'admin/evaluate_rule/index'); return; } if ($er_id > 0 && $this->rule_is_reportting($er_id)) { message('该评估规则正在生成报告,无法操作', 'admin/evaluate_rule/index'); return; } $er_id && ($evaluate_rule = $evaluate_rule[0]); $name = trim($this->input->post('name')); $exam_pid = intval($this->input->post('exam_pid')); $contrast_exam_pid = intval($this->input->post('contrast_exam_pid')); //对比考试期次 $generate_subject_report = intval($this->input->post('generate_subject_report')); //是否生成学科报告 $generate_transcript = intval($this->input->post('generate_transcript')); //是否生成学生成绩单 $generate_class_report = intval($this->input->post('generate_class_report')); //是否生成班级报告 $generate_teacher_report = intval($this->input->post('generate_teacher_report')); //是否生成教师报告 $place_id = trim($this->input->post('place_id')); $subject_id = $this->input->post('subject_id'); $comparison_level = $this->input->post('comparison_level'); //对比等级(地域) $subject_percent = $this->input->post('subject_percent'); //学科->综合->各学科占比 $generate_mode = intval($this->input->post('generate_mode')); //生成模式 $generate_u_keyword = trim($this->input->post('generate_u_keyword')); //单人模式下的生成uid if ($name == '') { message('规则名称不能为空'); return; } if (!$exam_pid || !count(ExamModel::get_exam($exam_pid))) { message('请选择考试期次'); return; } if ($place_id == '' || $place_id > 0 && !count(ExamPlaceModel::get_place($place_id))) { message('请选择考试场次'); return; } if ($subject_id == '' || intval($subject_id) > 0 && !count(SubjectModel::get_subject($subject_id))) { message('请选择考试科目'); return; } if ($exam_pid == $contrast_exam_pid) { message('同一考试期次不能进行对比'); return; } $distribution_proportion = null; if ($generate_class_report || $generate_teacher_report) { $proportion_name = $this->input->post('distribution_proportion_name'); $proportion = $this->input->post('distribution_proportion'); if (array_filter($proportion_name) && array_filter($proportion)) { if (array_unique(array_filter($proportion_name)) != $proportion_name || array_unique(array_filter($proportion)) != $proportion) { message('分布比例填写不符合要求,请重新填写!'); return; } if (min($proportion) <= 0 || max($proportion) != 100) { message('分布比例临界值取值范围为(0, 100]左开右闭的区间的整数值!'); return; } $proportions = array(); foreach ($proportion_name as $i => $val) { if (!Validate::isNotEmpty($val) || !Validate::isInt($proportion[$i]) || $proportion[$i] <= 0 || $proportion[$i] > 100) { message('分布比例填写不符合要求,请重新填写!'); return; } $proportions[trim($val)] = round($proportion[$i]); } if (array_unique($proportions) != $proportions) { message('分布比例填写不符合要求,请重新填写!'); return; } asort($proportions); $distribution_proportion = json_encode($proportions); } } //对比等级 if (!is_array($comparison_level) || !count($comparison_level)) { message('请选择对比等级'); return; } if (!$generate_subject_report && !$generate_transcript && !$generate_class_report && !$generate_teacher_report) { message('请至少选择一个类型的报告进行生成工作'); return; } $query_arr = array('name' => $name); if ($er_id) { $query_arr['id !='] = $er_id; } $query = $this->db->select('id')->get_where('evaluate_rule', $query_arr); if ($query->num_rows()) { message('该规则名称已存在'); return; } $query_arr = array(); if (!$er_id) { $query_arr = array('exam_pid' => $exam_pid, 'place_id' => $place_id, 'subject_id' => $subject_id); } else { if ($evaluate_rule['exam_pid'] != $exam_pid || $evaluate_rule['place_id'] != $place_id || $evaluate_rule['subject_id'] != $subject_id) { $query_arr = array('exam_pid' => $exam_pid, 'place_id' => $place_id, 'subject_id' => $subject_id); } } if (count($query_arr)) { $query = $this->db->select('id')->get_where('evaluate_rule', $query_arr); if ($query->num_rows()) { message('该期次->考场->学科已存在'); return; } } //生成模式 $generate_uid = 0; if ($generate_mode == 1) { $student = array(); if (stripos($generate_u_keyword, '@') === false) { $student = StudentModel::get_student_by_exam_ticket($generate_u_keyword); } else { $student = StudentModel::get_student_by_email($generate_u_keyword); } if (!count($student)) { message('单人模式下 被搜索学生不存在,请检查.'); return; } $generate_uid = $student['uid']; //检查该考生是否在本场考试中 if (!$place_id) { $sql = "select count(eps.id) as count\n \t\t\t\tfrom {pre}exam_place_student eps, {pre}exam_place p\n \t\t\t\twhere eps.place_id=p.place_id and p.exam_pid={$exam_pid} and eps.uid={$generate_uid}"; $result = $this->db->query($sql)->result_array(); } else { $sql = "select count(eps.id) as count\n \t\t\t\tfrom {pre}exam_place_student eps, {pre}exam_place p\n \t\t\t\twhere eps.place_id=p.place_id and eps.place_id={$place_id} and eps.uid={$generate_uid}"; $result = $this->db->query($sql)->result_array(); } if (!$result[0]['count']) { message('该考生未参加当前所选考场中的考试.'); return; } //检查该学生是否作弊 $sql = "select count(*) as count from {pre}exam_test_paper where exam_pid={$exam_pid} and uid={$generate_uid} and etp_flag=-1"; $result = $this->db->query($sql)->row_array(); if ($result['count'] > 0) { message('该考生在本场考试中有作弊行为,无法生成报告'); return; } } //学科->综合->各学科占比检查 $tmp_subject_percent = array(); $current_subject_percent = 0; $total_subject_percent = 100; $subject_id = intval($subject_id); if ($subject_id == 0) { if (!is_array($subject_percent) || !count($subject_percent)) { message('学科->综合->各学科占比总和必须为 100'); return; } foreach ($subject_percent as $k => $item) { if (!is_numeric($item) || $item < 0) { $subject_name = C('subject/' . $k); message("学科->综合->{$subject_name}占比必须为 [0-100]"); break; } $current_subject_percent += $item; $tmp_subject_percent[] = "{$k}:{$item}"; } if ($current_subject_percent != $total_subject_percent) { message('学科->综合->各学科占比总和必须为 100'); return; } } $tmp_comparison_level = array(); foreach ($comparison_level as $item) { $tmp_comparison_level[] = $item; } $comparison_level = array_unique($tmp_comparison_level); //拼接更新数据 $rule_data = array('name' => $name, 'exam_pid' => $exam_pid, 'contrast_exam_pid' => $contrast_exam_pid, 'generate_subject_report' => $generate_subject_report, 'generate_transcript' => $generate_transcript, 'generate_class_report' => $generate_class_report, 'generate_teacher_report' => $generate_teacher_report, 'distribution_proportion' => $distribution_proportion, 'place_id' => $place_id, 'subject_id' => $subject_id, 'comparison_level' => implode(',', $comparison_level), 'generate_mode' => $generate_mode, 'generate_uid' => $generate_uid, 'subject_percent' => implode(',', $tmp_subject_percent)); //关联一级知识点 $knowledge_ids = $this->input->post('knowledge_ids'); $levels = $this->input->post('levels'); $comments = $this->input->post('comments'); //$suggests = $this->input->post('suggests'); !is_array($knowledge_ids) && ($knowledge_ids = array()); !is_array($levels) && ($levels = array()); !is_array($comments) && ($comments = array()); // !is_array($suggests) && $suggests = array(); $knowledge_data = array(); foreach ($knowledge_ids as $s_id => $knowledge) { foreach ($knowledge as $knowledge_id) { if (!isset($levels[$s_id][$knowledge_id]) || !isset($comments[$s_id][$knowledge_id])) { continue; } $tmp_comments = array(); foreach ($comments[$s_id][$knowledge_id] as $k => $item) { $knowledge_data[] = array('subject_id' => $s_id, 'knowledge_id' => $knowledge_id, 'comment' => trim($item), 'suggest' => '', 'level' => intval($levels[$s_id][$knowledge_id][$k])); } } } //关联方法策略 $method_tactic_ids = $this->input->post('method_tactic_ids'); $method_tactic_levels = $this->input->post('method_tactic_levels'); $method_tactic_comments = $this->input->post('method_tactic_comments'); // $method_tactic_suggests = $this->input->post('method_tactic_suggests'); !is_array($method_tactic_ids) && ($method_tactic_ids = array()); !is_array($method_tactic_levels) && ($method_tactic_levels = array()); !is_array($method_tactic_comments) && ($method_tactic_comments = array()); // !is_array($method_tactic_suggests) && $method_tactic_suggests = array(); //该考场所有的考试学科 $subject = $this->db->query("select distinct(s.subject_id) as subject_id from {pre}exam e, {pre}subject s where e.exam_pid={$exam_pid} and e.subject_id=s.subject_id")->result_array(); $subject_ids = array(); foreach ($subject as $item) { $subject_ids[] = $item['subject_id']; } $method_tactic_data = array(); //该分类下的所有学科 $subjects = array(); foreach ($method_tactic_ids as $s_id => $method_tactic) { if (!is_numeric($s_id) && !isset($subjects[$s_id])) { $subject_category_id = (int) end(explode("_", $s_id)); $subjects[$s_id] = $this->db->query("select subject_id from {pre}subject_category_subject where subject_category_id = {$subject_category_id}")->result_array(); } foreach ($method_tactic as $method_tactic_id) { if (!isset($method_tactic_levels[$s_id][$method_tactic_id]) || !isset($method_tactic_comments[$s_id][$method_tactic_id])) { continue; } $tmp_comments = array(); foreach ($method_tactic_comments[$s_id][$method_tactic_id] as $k => $item) { if (!is_numeric($s_id)) { foreach ($subjects[$s_id] as $subject) { if (in_array($subject['subject_id'], $subject_ids)) { $method_tactic_data[] = array('subject_id' => $subject['subject_id'], 'method_tactic_id' => $method_tactic_id, 'comment' => trim($item), 'suggest' => '', 'level' => intval($method_tactic_levels[$s_id][$method_tactic_id][$k])); } } } else { $method_tactic_data[] = array('subject_id' => $s_id, 'method_tactic_id' => $method_tactic_id, 'comment' => trim($item), 'suggest' => '', 'level' => intval($method_tactic_levels[$s_id][$method_tactic_id][$k])); } } } } //关联一级信息提取方式 $group_type_ids = $this->input->post('group_type_ids'); $group_type_levels = $this->input->post('group_type_levels'); $group_type_comments = $this->input->post('group_type_comments'); //$group_type_suggests = $this->input->post('group_type_suggests'); !is_array($group_type_ids) && ($group_type_ids = array()); !is_array($group_type_levels) && ($levels = array()); !is_array($group_type_comments) && ($group_type_comments = array()); //!is_array($group_type_suggests) && $group_type_suggests = array(); $group_type_data = array(); foreach ($group_type_ids as $s_id => $group_type) { foreach ($group_type as $gr_id) { if (!isset($group_type_levels[$s_id][$gr_id]) || !isset($group_type_comments[$s_id][$gr_id])) { continue; } $tmp_comments = array(); foreach ($group_type_comments[$s_id][$gr_id] as $k => $item) { $group_type_data[] = array('subject_id' => $s_id, 'group_type_id' => $gr_id, 'comment' => trim($item), 'suggest' => '', 'level' => intval($group_type_levels[$s_id][$gr_id][$k])); } } } //外部对比信息 $comparison_info = $this->input->post('comparison_info'); $tmp_comparison_info = array(); /* if (!is_array($comparison_info) || !count($comparison_info)) { message('请选择外部对比信息'); } */ foreach ($comparison_info as $item) { @(list($cmp_type_id, $cmp_info_id) = @explode('_', $item)); if (is_null($cmp_type_id) || is_null($cmp_info_id) || !intval($cmp_type_id) || !intval($cmp_info_id)) { continue; } $tmp_comparison_info[intval($cmp_type_id)][] = intval($cmp_info_id); } /* if (!count($tmp_comparison_info)) { message('请选择外部对比信息'); } */ $rule_data['comparison_info'] = serialize($tmp_comparison_info); $res = false; if ($er_id <= 0) { /** * 添加时间 */ $rule_data['addtime'] = time(); $res = EvaluateRuleModel::insert($rule_data, $knowledge_data, $method_tactic_data, $group_type_data); } else { //更新 $res = EvaluateRuleModel::update($er_id, $rule_data, $knowledge_data, $method_tactic_data, $group_type_data); } $back_url = 'admin/evaluate_rule/index'; if (!$res) { message('保存失败', $back_url); } else { if ($er_id <= 0) { admin_log('add', 'evaluate_rule'); } else { admin_log('edit', 'evaluate_rule', $er_id); } $this->session->set_userdata(array('comparison_info' => '')); message(' 保存成功', $back_url, 'success'); } }