/** * 邮件通知 */ public function batch_mail($rule_id = 0) { $rule_id = intval($rule_id); $rule_id && ($rule = EvaluateRuleModel::get_evaluate_rule($rule_id)); if (empty($rule)) { message('不存在该评估规则'); } $uid = $this->input->post('uid'); $send_all = intval($this->input->post('send_all')); if (!$send_all && (!is_array($uid) || !count($uid))) { message('请选择要通知的考生'); } $uids = array(); if ($send_all) { $sql = "select uids from {pre}evaluate_student where rule_id={$rule_id}"; $result = $this->db->query($sql)->row_array(); $uids = isset($result['uids']) ? trim($result['uids']) : ''; $uids = explode(',', $uids); } else { $uids = $uid; } //获取考试期次信息 $rule['exam_name'] = ExamModel::get_exam($rule['exam_pid'], 'exam_name'); //获取该期次所考到的科目 $exam_subjects = array(); $exam_names = array(); $sql = "select exam_id, subject_id from {pre}exam where exam_pid=" . $rule['exam_pid']; $result = $this->db->query($sql)->result_array(); foreach ($result as $item) { $exam_names[$item['exam_id']] = C('subject/' . $item['subject_id']); } $rule['exams'] = $exam_names; //获取未生成zip的考生 $sql = "select uid from {pre}evaluate_student_stat where rule_id={$rule_id} and zip_ready=0 and uid in(" . implode(',', $uids) . ")"; $result = $this->db->query($sql)->result_array(); $no_zip_ready_uids = array(); foreach ($result as $item) { $no_zip_ready_uids[] = $item['uid']; } $data = array(); $fails = array(); $email_tpl = C('email_template/send_zip'); foreach ($uids as $uid) { $uid && ($student = StudentModel::get_student($uid, 'uid, email, last_name, first_name')); if (empty($student)) { $fails[] = 'uid:' . $uid . '【原因:考生不存在】'; continue; } if (in_array($uid, $no_zip_ready_uids)) { $fails[] = 'uid:' . $uid . '【原因:未生成zip压缩包】'; continue; } $email = $student['email']; if (!is_email($email)) { $fails[] = 'uid:' . $uid . '->email:' . $email . '【原因:邮件地址格式不正确】'; continue; } $email_content = $this->load->view($email_tpl['tpl'], array('rule' => $rule, 'student' => $student), true); $data[] = array('type' => 1, 'target_id' => "{$rule_id}-{$uid}", 'email' => $email, 'title' => $email_tpl['subject'], 'content' => $email_content, 'attache' => "report/{$rule_id}/{$uid}.zip"); } $res = $this->cron_task_email_model->insert_batch($data); if ($res) { if (count($fails)) { message('已成功将部分该考生加入通知队列中,等待系统处理中,以下考生出现异常:<br/>' . implode('<hr/>', $fails)); } else { message('已成功将该考生加入通知队列中,等待系统处理中'); } } else { message('操作失败,请重试.'); } }
/** * 学生成绩列表 * * @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); }
/** * @description 重置密码 * @author * @final * @param int $uid 学生id * @param string $new_password 新密码 * @param string $confirm_password 重复密码 */ public function reset_password() { if (!$this->check_power('student_manage')) { return; } $new_password = $this->input->post('new_password'); $new_confirm_password = $this->input->post('confirm_password'); $uid = intval($this->input->post('uid')); if (is_string($passwd_msg = is_password($new_password))) { output_json(CODE_ERROR, $passwd_msg); } if (!strlen(trim($new_confirm_password))) { output_json(CODE_ERROR, '确认密码不能为空.'); } if ($new_confirm_password != $new_password) { output_json(CODE_ERROR, '两次密码输入不一致.'); } //检查是否存在该学生 $passwd = StudentModel::get_student($uid, 'password'); if (!count($passwd)) { output_json(CODE_ERROR, '不存在该学生.'); } //修改学生密码 $flag = StudentModel::reset_password($uid, my_md5($new_password)); if (!$flag) { output_json(CODE_ERROR, '密码修改失败,请重试'); } output_json(CODE_SUCCESS, '密码修改成功.'); }
/** * @param int $rule_id * @param int $exam_id * @param int $stu_id * @return mixed */ public static function studentTranscriptInfo($rule_id, $exam_id, $stu_id) { $rule_id = intval($rule_id); $exam_id = intval($exam_id); $stu_id = intval($stu_id); if (!$rule_id || !$exam_id || !$stu_id) { return array(); } //考试信息 $exam = self::$_data['exam_info'][$exam_id]; if (!$exam) { $exam = ExamModel::get_exam($exam_id); if (!$exam) { return array(); } self::$_data['exam_info'][$exam_id] = $exam; } //学生信息 $stu_info = StudentModel::get_student($stu_id, 'school_id,last_name,first_name,external_account,exam_ticket'); if (!$stu_info) { return array(); } $db = Fn::db(); $data = array(); $subject_id = $exam['subject_id']; $exam_pid = $exam['exam_pid']; $subject_name = C('subject/' . $subject_id); if (!isset(self::$_data['school_rank'][$exam_id][$stu_info['school_id']])) { $sql = "SELECT uid, rank\n FROM rd_summary_region_student_rank\n WHERE exam_id = {$exam_id} AND region_id = ?\n AND is_school = 1 AND is_class = 0\n ORDER BY rank ASC"; $grade_rank = $db->fetchPairs($sql, array($stu_info['school_id'])); self::$_data['school_rank'][$exam_id][$stu_info['school_id']] = $grade_rank; } else { $grade_rank = self::$_data['school_rank'][$exam_id][$stu_info['school_id']]; } $sql = "SELECT a.etp_id, paper_id, test_score, ques_id FROM rd_exam_test_paper a\n LEFT JOIN rd_exam_test_paper_question b ON a.etp_id = b.etp_id\n WHERE uid = ? AND exam_id = ?"; $bind = array($stu_id, $exam_id); $etp = $db->fetchRow($sql, $bind); if (!$etp) { return array(); } $proportion = self::$_data['distribution_proportion'][$rule_id]; if (!$proportion) { $proportion = json_decode(EvaluateRuleModel::get_evaluate_rule($rule_id, 'distribution_proportion'), true); if (!$proportion) { $proportion = array('高分段' => 27, '中分段' => 73, '低分段' => 100); } $proportion = array_values($proportion); self::$_data['distribution_proportion'][$rule_id] = $proportion; } $level_results = 'A'; $prev_rank = 0; $stu_num = count($grade_rank); $stu_rank = $grade_rank[$stu_id]; foreach ($proportion as $k => $rate) { $rank = $stu_num * $rate / 100; if ($prev_rank < $stu_rank && $stu_rank <= $rank) { break; } $level_results++; $prev_rank = $rank; } $sch_name = self::$_data['school_info'][$stu_info['school_id']]; if (!$sch_name) { $school = SchoolModel::schoolInfo($stu_info['school_id'], 'school_name'); $sch_name = $school['school_name']; self::$_data['school_info'][$stu_info['school_id']] = $sch_name; } //成绩信息 $data['results'] = array('exam_name' => $exam['exam_name'], 'stu_fullname' => $stu_info['last_name'] . $stu_info['first_name'], 'stu_schname' => $sch_name, 'subject_name' => $subject_name, 'exam_ticket' => $stu_info['external_account'] ? $stu_info['external_account'] : $stu_info['exam_ticket'], 'test_score' => $etp['test_score'], 'level_results' => $level_results); //试题得分 //计算学校总体试卷试题得分率 $level_percent = self::$_data['school_question_level_percent'][$etp['paper_id']][$stu_info['school_id']]; if (!$level_percent) { $sql = "SELECT ques_id, ROUND(test_score / total_score * 100) AS percent\n FROM rd_summary_region_question\n WHERE exam_id = {$exam_id} AND region_id = {$stu_info['school_id']}\n AND is_school = 1"; $stmt = $db->query($sql); while ($item = $stmt->fetch(PDO_DB::FETCH_ASSOC)) { self::calLevelPercent($item['ques_id'], $item['percent'], $level_percent); } self::$_data['school_level_percent'][$etp['paper_id']][$stu_info['school_id']] = $level_percent; } //计算本次学生试题得分率 $sql = "SELECT ques_id, ROUND(SUM(test_score) / SUM(full_score) * 100) AS percent\n FROM rd_exam_test_result WHERE etp_id = ?\n GROUP BY ques_id"; $stu_percent = $db->fetchPairs($sql, array($etp['etp_id'])); //计算学生考试试题得分率对应等级 $ques_ids = explode(',', $etp['ques_id']); $data['question'] = array(1 => array(), 2 => array(), 3 => array(), 4 => array(), 5 => array()); foreach ($ques_ids as $index => $ques_id) { $percent = $stu_percent[$ques_id] > 100 ? 100 : (int) $stu_percent[$ques_id]; foreach ($level_percent[$ques_id] as $level => $v) { if ($v[0] <= $percent && $percent <= $v[1]) { $data['question'][$level][] = $index + 1; break; } } } ksort($data['question']); //知识点 $level_percent = self::$_data['school_knowledge_level_percent'][$etp['paper_id']][$stu_info['school_id']]; if (!$level_percent) { $sql = "SELECT knowledge_id, ROUND(test_score / total_score * 100) AS percent\n FROM rd_summary_region_knowledge\n WHERE exam_id = {$exam_id} AND region_id = {$stu_info['school_id']}\n AND is_school = 1 AND is_parent = 0"; $stmt = $db->query($sql); while ($item = $stmt->fetch(PDO::FETCH_ASSOC)) { self::calLevelPercent($item['knowledge_id'], $item['percent'], $level_percent); } self::$_data['school_knowledge_level_percent'][$etp['paper_id']][$stu_info['school_id']] = $level_percent; } //计算本次学生知识点得分率 $sql = "SELECT knowledge_id, knowledge_name, ROUND(test_score / total_score * 100) AS percent\n FROM rd_summary_student_knowledge ssk\n LEFT JOIN rd_knowledge k ON k.id = ssk.knowledge_id\n WHERE paper_id = ? AND uid = ? AND is_parent = 0"; $stu_percent = $db->fetchAssoc($sql, array($etp['paper_id'], $stu_id)); $data['knowledge'] = array(1 => array(), 2 => array(), 3 => array(), 4 => array(), 5 => array()); foreach ($level_percent as $knowledge_id => $levels) { $percent = $stu_percent[$knowledge_id]['percent'] > 100 ? 100 : (int) $stu_percent[$knowledge_id]['percent']; foreach ($levels as $level => $v) { if ($v[0] <= $percent && $percent <= $v[1]) { $data['knowledge'][$level][] = $stu_percent[$knowledge_id]['knowledge_name']; break; } } } ksort($data['knowledge']); //方法策略 $sql = "SELECT DISTINCT(subject_id) FROM rd_subject_category_subject"; $subject_ids = $db->fetchCol($sql); if (in_array($subject_id, $subject_ids)) { $level_percent = self::$_data['school_method_tactic_level_percent'][$etp['paper_id']][$stu_info['school_id']]; if (!$level_percent) { $sql = "SELECT method_tactic_id, ROUND(test_score / total_score * 100) AS percent\n FROM rd_summary_region_method_tactic\n WHERE exam_id = {$exam_id} AND region_id = {$stu_info['school_id']}\n AND is_school = 1"; $stmt = $db->query($sql); while ($item = $stmt->fetch(PDO::FETCH_ASSOC)) { self::calLevelPercent($item['method_tactic_id'], $item['percent'], $level_percent); } self::$_data['school_method_tactic_level_percent'][$etp['paper_id']][$stu_info['school_id']] = $level_percent; } //计算本次学生方法策略得分率 $sql = "SELECT method_tactic_id, name, ROUND(test_score / total_score * 100) AS percent\n FROM rd_summary_student_method_tactic ssmt\n LEFT JOIN rd_method_tactic mt ON mt.id = ssmt.method_tactic_id\n WHERE paper_id = ? AND uid = ?"; $stu_percent = $db->fetchAssoc($sql, array($etp['paper_id'], $stu_id)); $data['method_tactic'] = array(1 => array(), 2 => array(), 3 => array(), 4 => array(), 5 => array()); foreach ($level_percent as $method_tactic_id => $levels) { $percent = $stu_percent[$method_tactic_id]['percent'] > 100 ? 100 : (int) $stu_percent[$method_tactic_id]['percent']; foreach ($levels as $level => $v) { if ($v[0] <= $percent && $percent <= $v[1]) { $data['method_tactic'][$level][] = $stu_percent[$method_tactic_id]['name']; break; } } } ksort($data['method_tactic']); } else { if ($subject_id == 3) { $level_percent = self::$_data['school_group_type_level_percent'][$etp['paper_id']][$stu_info['school_id']]; if (!$level_percent) { $sql = "SELECT group_type_id, ROUND(test_score / total_score * 100) AS percent\n FROM rd_summary_region_group_type\n WHERE exam_id = {$exam_id} AND region_id = {$stu_info['school_id']}\n AND is_school = 1 AND is_parent = 0"; $stmt = $db->query($sql); while ($item = $stmt->fetch(PDO::FETCH_ASSOC)) { self::calLevelPercent($item['group_type_id'], $item['percent'], $level_percent); } self::$_data['school_group_type_level_percent'][$etp['paper_id']][$stu_info['school_id']] = $level_percent; } //计算本次学生信息提取方式得分率 $sql = "SELECT group_type_id, group_type_name, ROUND(test_score / total_score * 100) AS percent\n FROM rd_summary_student_group_type ssgt\n LEFT JOIN rd_group_type gt ON gt.id = ssgt.group_type_id\n WHERE paper_id = ? AND uid = ? AND is_parent = 0"; $stu_percent = $db->fetchAssoc($sql, array($etp['paper_id'], $stu_id)); $data['group_type'] = array(1 => array(), 2 => array(), 3 => array(), 4 => array(), 5 => array()); foreach ($level_percent as $group_type_id => $levels) { $percent = $stu_percent[$group_type_id]['percent'] > 100 ? 100 : (int) $stu_percent[$group_type_id]['percent']; foreach ($levels as $level => $v) { if ($v[0] <= $percent && $percent <= $v[1]) { $data['group_type'][$level][] = $stu_percent[$group_type_id]['group_type_name']; break; } } } ksort($data['group_type']); } } return $data; }
function email_hash($operation, $key, $validate_time = 0) { if ($operation == 'encode') { $uid = intval($key); $CI =& get_instance(); $addtime = StudentModel::get_student($uid, 'addtime'); $hash = substr(md5($uid . C('hash_code') . $addtime), 16, 8); $hash_code = base64_encode($uid . ',' . $hash . ',' . time()); $sql = "SELECT COUNT(1) as 'count' FROM {pre}user_resetpassword WHERE uid='{$uid}' "; $row = $CI->db->query($sql)->row_array(); if ($row['count']) { $expiretime = time() + 1800; $sql = "update {pre}user_resetpassword set hash = '{$hash_code}',expiretime = '{$expiretime}'\n WHERE uid = '{$uid}' "; $CI->db->query($sql); } else { $expiretime = time() + 1800; $sql = "INSERT INTO {pre}user_resetpassword ( hash, uid, expiretime ) values( '{$hash_code}','{$uid}', '{$expiretime}')"; $CI->db->query($sql); } return $hash_code; } else { $CI =& get_instance(); $hash_code = trim($key); $now_time = time(); $hash = base64_decode(trim($key)); $row = explode(',', $hash); if (count($row) != 3) { return FALSE; } $uid = intval($row[0]); $salt = trim($row[1]); $time = intval($row[2]); $sql = <<<EOT SELECT uid FROM rd_user_resetpassword WHERE uid = ? AND expiretime >= ? AND hash = ? EOT; $row = Fn::db()->fetchRow($sql, array($uid, $now_time, $hash_code)); if (empty($row)) { return FALSE; } if ($uid <= 0 || $validate_time && time() - $time > $validate_time) { return FALSE; } $sql = <<<EOT SELECT addtime FROM rd_student WHERE uid = {$uid} EOT; $row = Fn::db()->fetchRow($sql); $pre_salt = substr(md5($uid . C('hash_code') . $row['addtime']), 16, 8); if ($pre_salt == $salt) { return $uid; } else { return FALSE; } } }
/** * 考试成绩查询 */ public function examresult() { Fn::ajax_call($this, 'logout', 'login'); $uid = $this->_uinfo['uid']; $data = array(); $data['page_title'] = '考试成绩'; $data['uinfo'] = $this->_uinfo; if (!$uid) { redirect('student/exam/index'); } else { $data['student'] = StudentModel::get_student($this->_uinfo['uid']); // 检查学生信息是否完善 // $check_message = $this->check_perfect_student(); if ($check_message) { $data['check_message'] = $check_message; } else { $sql = <<<EOT SELECT DISTINCT(e.exam_id), e.exam_name FROM rd_exam e JOIN rd_exam_result_publish erp ON e.exam_id = erp.exam_pid JOIN rd_exam_place ep ON e.exam_id = ep.exam_pid JOIN rd_exam_place_student eps ON ep.place_id = eps.place_id WHERE eps.uid = {$uid} EOT; $exam_list = Fn::db()->fetchAssoc($sql); if (!empty($exam_list)) { $exam_pid_str = implode(',', array_keys($exam_list)); $sql = <<<EOT SELECT exam_pid, id, subject_id FROM rd_evaluate_rule WHERE exam_pid IN ({$exam_pid_str}) ORDER BY subject_id EOT; $rule_list = Fn::db()->fetchAll($sql); foreach ($rule_list as $v) { $source_path = $v['id'] . "/{$uid}.zip"; $filepath = realpath(dirname(APPPATH)) . "/cache/zip/report/" . $source_path; if (!file_exists($filepath)) { //continue; } if (!isset($exam_list[$v['exam_pid']]['list'])) { $exam_list[$v['exam_pid']]['list'] = array(); } $v['subject_name'] = $this->_subject_name($uid, $v['exam_pid'], $v['subject_id']); $exam_list[$v['exam_pid']]['list'][] = $v; } asort($exam_list); } $data['exam_result_list'] = array_values($exam_list); $data['subject'] = C('subject'); $data['subject'][0] = '总结'; if (C('sfe_data_gz')) { $sql = <<<EOT SELECT sfe_uid, sfe_exampid, sfe_placeid, sfe_starttime, sfe_endtime, sfe_report_status, sfe_subjectid, b.exam_name, c.place_name FROM t_student_free_exam a LEFT JOIN rd_exam b ON a.sfe_exampid = b.exam_id LEFT JOIN rd_exam_place c ON a.sfe_placeid = c.place_id WHERE sfe_uid = {$uid} ORDER BY sfe_exampid DESC, sfe_placeid ASC EOT; $rows = Fn::db()->fetchAll($sql); $exam_free_list = array(); $exam_free_map = array(); foreach ($rows as $row) { $exam_pid = $row['sfe_exampid']; $exam_free_list[] = $exam_pid; if (!isset($exam_free_map[$exam_pid])) { $exam_free_map[$exam_pid] = array(); } $row['subject'] = explode(',', trim($row['sfe_subjectid'])); $exam_free_map[$exam_pid][] = $row; } $data['exam_free_list'] = array_unique($exam_free_list); $data['exam_free_map'] = $exam_free_map; } else { $sql = <<<EOT SELECT sfe_uid, sfe_exampid, sfe_placeid, sfe_starttime, sfe_endtime, sfe_report_status, sfe_data, b.exam_name, c.place_name FROM t_student_free_exam a LEFT JOIN rd_exam b ON a.sfe_exampid = b.exam_id LEFT JOIN rd_exam_place c ON a.sfe_placeid = c.place_id WHERE sfe_uid = {$uid} ORDER BY sfe_exampid DESC, sfe_placeid ASC EOT; $rows = Fn::db()->fetchAll($sql); $exam_free_list = array(); $exam_free_map = array(); foreach ($rows as $row) { $exam_pid = $row['sfe_exampid']; $exam_free_list[] = $exam_pid; if (!isset($exam_free_map[$exam_pid])) { $exam_free_map[$exam_pid] = array(); } $v = json_decode($row['sfe_data'], true); $row['subject'] = array_keys($v); $exam_free_map[$exam_pid][] = $row; } $data['exam_free_list'] = array_unique($exam_free_list); $data['exam_free_map'] = $exam_free_map; } } } $this->load->view('exam/examresult', $data); }
/** * 编辑信息 * * @param int $id * @return void */ public function edit($id) { if (!$this->check_power('evaluate_rule_manage')) { return; } $data = array(); $query = array('id' => $id); $detail = EvaluateRuleModel::get_evaluate_rule_list($query); if (!$id || !count($detail)) { message('不存在评估规则信息'); return; } $detail = $detail[0]; $detail['is_reportting'] = $this->rule_is_reportting($id); // 获取关联知识点 $query = array('er_id' => $id); $knowledge_list = EvaluateRuleModel::get_evaluate_knowledge_list($query, null, null, null, null, true); // 按照 等级 归档 $tmp_knowledge_list = array(); foreach ($knowledge_list as $k => $v) { $subject_id = $k; foreach ($v as $i) { $knowledge_id = $i['knowledge_id']; $tmp_knowledge_list['s_' . $subject_id]['k_' . $knowledge_id]['l_' . $i['level']] = array('comment' => $i['comment'], 'suggest' => $i['suggest']); } } // 获取关联 方法策略 $query = array('er_id' => $id); $method_tactic_list = EvaluateRuleModel::get_evaluate_method_tactic_list($query, null, null, null, null, true); $method_tactic_ids = array(); foreach ($method_tactic_list as $val) { foreach ($val as $item) { $method_tactic_ids[] = $item['method_tactic_id']; } } $method_tactic_ids = array_filter($method_tactic_ids); $method_tactic_ids = array_unique($method_tactic_ids); $method_tactic_ids = count($method_tactic_ids) ? $method_tactic_ids : array(0); $method_tactic_ids = implode(',', $method_tactic_ids); $subject_category = $this->db->query("select sc.id as subject_category_id,mt.id as method_tactic_id, mt.name, scs.subject_id from {pre}method_tactic mt, {pre}subject_category_subject scs,{pre}subject_category sc where mt.subject_category_id=scs.subject_category_id and sc.id=scs.subject_category_id and mt.id in ({$method_tactic_ids})")->result_array(); // 按照 等级 归档 $tmp_method_tactic_list = array(); foreach ($method_tactic_list as $k => $v) { $subject_id = $k; foreach ($v as $i) { $method_tactic_id = $i['method_tactic_id']; foreach ($subject_category as $item) { if ($method_tactic_id == $item['method_tactic_id']) { $tmp_method_tactic_list['sc_' . $item['subject_category_id']]['method_tactic_' . $method_tactic_id]['l_' . $i['level']] = array('comment' => $i['comment'], 'suggest' => $i['suggest']); continue; } else { $tmp_method_tactic_list['s_' . $subject_id]['method_tactic_' . $method_tactic_id]['l_' . $i['level']] = array('comment' => $i['comment'], 'suggest' => $i['suggest']); } } } } // 获取关联信息提取方式 $query = array('er_id' => $id); $group_type_list = EvaluateRuleModel::get_evaluate_group_type_list($query, null, null, null, null, true); // 按照 等级 归档 $tmp_group_type_list = array(); foreach ($group_type_list as $k => $v) { $subject_id = $k; foreach ($v as $i) { $gr_id = $i['group_type_id']; $tmp_group_type_list['s_' . $subject_id]['gr_' . $gr_id]['l_' . $i['level']] = array('comment' => $i['comment'], 'suggest' => $i['suggest']); } } // 获取单人模式下被搜索考生 $student = array(); if ($detail['generate_mode'] == '1') { $student = StudentModel::get_student($detail['generate_uid']); } $detail['generate_u_keyword'] = count($student) ? $student['email'] : ''; // 获取当前期次 $exam = ExamModel::get_exam($detail['exam_pid'], 'exam_id, exam_name'); $detail['exam_name'] = count($exam) ? $exam['exam_name'] : '该考试期次已经被删除'; // 获取当前考场 $place = ExamPlaceModel::get_place($detail['place_id'], 'place_id, place_name'); $detail['place_name'] = is_array($place) && count($place) ? $place['place_name'] : ($detail['place_id'] == 0 ? '所有考场' : '该考场已经被删除'); // 外部对比信息 $comparison_info = unserialize($detail['comparison_info']); $comparison_info = is_array($comparison_info) ? $comparison_info : array(); $detail['comparison_info'] = $comparison_info; $this->session->set_userdata(array('comparison_info' => $detail['comparison_info'])); $data['detail'] =& $detail; $data['knowledge_list'] =& $tmp_knowledge_list; $data['method_tactic_list'] =& $tmp_method_tactic_list; $data['group_type_list'] =& $tmp_group_type_list; $data['comparison_types'] = $this->_get_comparison_info(); $data['mode'] = 'edit'; $data['comparison_levels'] = C('evaluate_comparison_level'); $this->load->view('evaluate_rule/add', $data); }
public function resetpwd() { Fn::ajax_call($this, 'login', 'logout'); $hash = $this->input->get('code'); $uid = email_hash('decode', $hash, 1800); $uid && ($student = StudentModel::get_student($uid)); if (!$student) { message('重置链接已失效,请重新提交申请', 'student/index/forget'); } if ($this->input->post('act') == 'submit') { $password = $this->input->post('password'); $newpwd_confirm = $this->input->post('password_confirm'); if (is_string($passwd_msg = is_password($password))) { message($passwd_msg); } if ($password != $newpwd_confirm) { message('您两次输入密码不一致,返回请确认!'); } $this->db->update('student', array('password' => my_md5($password)), array('uid' => $uid)); $now_time = time() - 1800; $sql = "UPDATE {pre}user_resetpassword SET expiretime='{$now_time}' WHERE uid='{$uid}' and hash = '{$hash}'"; $row = $this->db->query($sql); message('您的新密码已设置成功.', 'student/index/login', 'success'); } else { $data = array(); $data['uinfo'] = StudentModel::studentLoginUInfo(); $data['hash'] = $hash; // 模版 $this->load->view('index/resetpwd', $data); } }