Пример #1
0
 public function testDirty()
 {
     $observer = new ObserverModel();
     $subject = new SubjectModel();
     $subject->attach($observer);
     $subject->save();
     $subject->name = 'whatever';
     $subject->save();
     $this->expectOutputString('yesalsoyesalsodirty');
 }
Пример #2
0
 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);
 }
Пример #3
0
 public function remove_subject_dimension($subd_subjectid)
 {
     if (!Validate::isJoinedIntStr($subd_subjectid)) {
         message('请选择需要删除的学科四维');
     }
     if (SubjectModel::removeSubjectDimension($subd_subjectid)) {
         admin_log('delete', 'subject_dimension', $subd_subjectid);
         message('删除成功', '/admin/subject/subject_dimension_list');
     } else {
         message('删除失败', '/admin/subject/subject_dimension_list');
     }
 }
Пример #4
0
 /**
  * 学生成绩列表
  *
  * @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);
 }
Пример #5
0
 /**
  * 保存添加记录
  *
  * @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');
     }
 }