Beispiel #1
0
 /**
  * @description 试卷预览分数修改
  * @author
  * @final
  * @param int $id 试卷id
  */
 public function preview($id = 0)
 {
     if (!$this->check_power('exam_list,exam_manage')) {
         return;
     }
     $id = intval($id);
     $paper = ExamPaperModel::get_paper($id);
     if (empty($paper)) {
         message('试卷不存在', 'javascript');
         return;
     }
     $exam = ExamModel::get_exam($paper['exam_id'], 'grade_id,class_id,subject_id,qtype_score,total_score');
     if (empty($exam)) {
         message('考试期次不存在');
         return;
     }
     // 分数计算
     $score = array();
     // 题目数量
     $question_num = explode(',', $paper['qtype_ques_num']);
     // 题型分数
     $qtype_score = explode(',', $exam['qtype_score']);
     // 总分 排除题组
     $total_score = 0;
     foreach ($qtype_score as $key => $value) {
         $score[$key + 1]['score'] = round($value, 2);
         $score[$key + 1]['num'] = isset($question_num[$key + 1]) ? $question_num[$key + 1] : 0;
         $score[$key + 1]['total_score'] = $score[$key + 1]['score'] * $score[$key + 1]['num'];
         $total_score += $score[$key + 1]['score'] * $score[$key + 1]['num'];
     }
     // 题组总分
     $total_0 = $exam['total_score'] - $total_score;
     $data['score'] = $score;
     $data['total_0'] = $total_0;
     if ($exam['subject_id'] == 3) {
         $group = array(1 => array(), 0 => array(), 4 => array(), 5 => array(), 8 => array(), 3 => array(), 7 => array(), 6 => array(), 2 => array(), 9 => array(), 14 => array());
     } else {
         $group = array(1 => array(), 2 => array(), 3 => array(), 0 => array(), 14 => array());
     }
     $paper = ExamPaperModel::get_paper_by_id($id);
     $questions_arr = json_decode($paper['question_sort'], true);
     /** 题组分值系数总和 */
     $sql = "SELECT sum(score_factor) as sum FROM {pre}question q\n        LEFT JOIN {pre}exam_question eq ON eq.ques_id=q.ques_id\n        LEFT JOIN {pre}relate_class rc ON rc.ques_id=q.ques_id AND rc.grade_id='{$exam['grade_id']}' AND rc.class_id='{$exam['class_id']}'\n        WHERE eq.paper_id={$id} and q.type=0";
     $query = $this->db->query($sql);
     $sum_score_factor = $query->row_array();
     $sql = "SELECT q.ques_id,q.type,q.title,q.picture,q.answer,q.score_factor,q.children_num,rc.difficulty\n        FROM {pre}exam_question eq\n        LEFT JOIN {pre}question q ON eq.ques_id=q.ques_id\n        LEFT JOIN {pre}relate_class rc ON rc.ques_id=q.ques_id AND rc.grade_id='{$exam['grade_id']}' AND rc.class_id='{$exam['class_id']}'\n        WHERE eq.paper_id={$id} ORDER BY rc.difficulty DESC,q.ques_id ASC";
     $query = $this->db->query($sql);
     $questions_tmp = $query->result_array();
     /* 重新排序 */
     $sort = array();
     if (!is_array($questions_arr)) {
         $sort = $questions_tmp;
     } else {
         foreach ($questions_arr as $v) {
             foreach ($questions_tmp as $value) {
                 if ($v == $value['ques_id']) {
                     $sort[$v] = $value;
                 }
             }
         }
     }
     foreach ($sort as $row) {
         $row['title'] = str_replace("\r\n", '<br/>', $row['title']);
         //$row['title'] = str_replace(" ", '&nbsp;', $row['title']);
         switch ($row['type']) {
             case 0:
                 $row['children'] = QuestionModel::get_children($row['ques_id']);
                 // 分值系数
                 if ($sum_score_factor > 0) {
                     $row['total_score'] = round($total_0 * $row['score_factor'] / $sum_score_factor['sum'], 2);
                     $row['score'] = round($row['total_score'] / $row['children_num'], 2);
                     $row['children_score'] = round($row['total_score'] / $row['children_num'], 2);
                 } else {
                     $row['total_score'] = 0;
                     $row['score'] = 0;
                 }
                 break;
             case 2:
                 //$row['answer'] = explode(',', $row['answer']);
             //$row['answer'] = explode(',', $row['answer']);
             case 1:
                 $row['options'] = QuestionModel::get_options($row['ques_id']);
                 break;
             case 3:
                 $row['answer'] = explode("\n", $row['answer']);
                 break;
             case 4:
                 $row['children'] = QuestionModel::get_children($row['ques_id']);
                 $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2);
                 break;
             case 5:
                 $row['children'] = QuestionModel::get_children($row['ques_id']);
                 $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2);
                 break;
             case 6:
                 $row['children'] = QuestionModel::get_children($row['ques_id']);
                 $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2);
                 break;
             case 7:
                 $row['options'] = QuestionModel::get_options($row['ques_id']);
                 break;
             case 8:
                 $row['children'] = QuestionModel::get_children($row['ques_id']);
                 $row['children_score'] = round($score[$row['type']]['score'] / $row['children_num'], 2);
                 break;
             case 9:
                 $row['answer'] = explode("\n", $row['answer']);
                 break;
             default:
                 break;
         }
         $group[$row['type']][] = $row;
     }
     $tmp_arr = array();
     if ($exam['subject_id'] == 3) {
         $types = array('12', '1', '0', '5', '4', '8', '3', '15', '11', '7', '6', '2', '9', '10', '13', '14');
     } else {
         $types = array('1', '2', '3', '0', '10', '14', '15', '11');
     }
     foreach ($types as $type) {
         $tmp_arr[$type] = isset($group[$type]) ? $group[$type] : array();
     }
     $data['paper'] = $paper;
     $data['qtypes'] = C('qtype');
     $data['qtypes'] = C('qtype');
     $data['group'] = $tmp_arr;
     // 模版
     $this->load->view('paper/preview', $data);
 }
Beispiel #2
0
 /**
  * 选择试题
  *
  * @return void
  **/
 public function select_question($paper_id = 0)
 {
     /* 查询条件 */
     $where = array();
     $param = array();
     /* 过滤题组子题目,在题组页面管理 */
     $where[] = "q.parent_id=0";
     /* 未禁用试题 */
     $where[] = "q.is_delete<>1";
     /* 纸质考试试题 */
     //$where[] = "q.test_way IN (1, 2, 3)";
     /* 录入人员 只能查看自己录入的题目 管理员可以看到所有题目 */
     $admin_id = $this->session->userdata('admin_id');
     if (!$admin_id) {
         message('获取管理员数据失败,请从新登陆后重试!');
     }
     //$where[] = "q.admin_id='{$admin_id}'";
     //限制只能查看自己创建的试题
     if (!$this->is_super_user() && !CpUserModel::is_action_type_all('question', 'r') && !CpUserModel::is_action_type_subject('question', 'r') && CpUserModel::is_action_type_self('question', 'r')) {
         $where[] = "q.admin_id='{$admin_id}'";
     } else {
         $where[] = "q.admin_id>0";
     }
     //限制只能查看所属学科
     $c_subject_id = array();
     if (!$this->is_super_user() && !CpUserModel::is_action_type_all('question', 'r') && CpUserModel::is_action_type_subject('question', 'r')) {
         $c_subject_id = rtrim($this->session->userdata('subject_id'), ',');
         if ($c_subject_id != '') {
             $c_subject_id = explode(',', $c_subject_id);
             $c_subject_id = array_values(array_filter($c_subject_id));
             $c_subject_id = implode(',', $c_subject_id);
             $where[] = "q.subject_id in({$c_subject_id})";
         }
     }
     //限制只能查看所属年级
     $c_grade_id = array();
     if (!$this->is_super_user() && !$this->is_all_grade_user()) {
         $c_grade_id = rtrim($this->session->userdata('grade_id'), ',');
         if ($c_grade_id != '') {
             $c_grade_id = explode(',', $c_grade_id);
             $c_grade_id = array_values(array_filter($c_grade_id));
             $c_grade_id = implode(',', $c_grade_id);
             $where_3 = " grade_id in({$c_grade_id})";
         } else {
             $where_3 = '1=1';
         }
     } else {
         $where_3 = '1=1';
     }
     //限制只能查看所属类型
     $c_class_id = array();
     if (!$this->is_super_user() && !$this->is_all_q_type_user()) {
         $c_q_type_id = rtrim($this->session->userdata('q_type_id'), ',');
         if ($c_q_type_id != '') {
             $c_q_type_id = explode(',', $c_q_type_id);
             $c_q_type_id = array_values(array_filter($c_q_type_id));
             $c_class_id = $c_q_type_id;
             $c_q_type_id = implode(',', $c_q_type_id);
             $where_4 = " class_id in ({$c_q_type_id})";
         } else {
             $where_4 = '1=1';
         }
     } else {
         $where_4 = '1=1';
     }
     if ($where_3 != '1=1' || $where_4 != '1=1') {
         $where[] = "q.ques_id IN (SELECT DISTINCT ques_id FROM rd_relate_class WHERE {$where_3} AND {$where_4}) ";
     }
     if ($paper_id) {
         $paper = ExamPaperModel::get_paper_by_id($paper_id);
         $where[] = "q.subject_id = {$paper['subject_id']}";
         $param[] = "subject_id={$paper['subject_id']}";
         $data['subject_id'] = $paper['subject_id'];
         if ($paper['exam_id']) {
             $exam = ExamModel::get_exam($paper['exam_id'], 'grade_id, class_id');
             list($grade_id, $class_id) = array_values($exam);
             $where[] = "q.start_grade <= {$grade_id} AND q.end_grade >= {$grade_id}";
             $param[] = "grade_id={$grade_id}";
             $data['grade_id'] = $exam['grade_id'];
             $where[] = "q.class_id LIKE '%,{$class_id},%'";
             $param[] = "class_id={$class_id}";
             $data['class_id'] = $exam['class_id'];
         }
     } else {
         if ($subject_id = $this->input->get('subject_id')) {
             $where[] = "q.subject_id = {$subject_id}";
             $param[] = "subject_id={$subject_id}";
         }
         if ($grade_id = $this->input->get('grade_id')) {
             $where[] = "q.start_grade <= {$grade_id} AND q.end_grade >= {$grade_id}";
             $param[] = "grade_id={$grade_id}";
         }
         if ($class_id = $this->input->get('class_id')) {
             $where[] = "q.class_id LIKE '%,{$class_id},%'";
             $param[] = "class_id={$class_id}";
         }
     }
     $type = $this->input->get('type');
     if (strlen($type) > 0 && $type >= 0) {
         $type = intval($type);
         $where[] = "q.type = {$type}";
         $param[] = "type={$type}";
     }
     if ($is_original = $this->input->get('is_original')) {
         $where[] = "q.is_original = {$is_original}";
         $param[] = "is_original={$is_original}";
     }
     if (Validate::isJoinedIntStr($this->input->get('ques_id'))) {
         $search_quesid = $this->input->get('ques_id');
         $where[] = "q.ques_id IN ({$search_quesid})";
         $param[] = "ques_id={$search_quesid}";
     }
     if ($remark = $this->input->get('remark')) {
         $where[] = "q.remark LIKE '%{$remark}%'";
         $param[] = "remark={$remark}";
     }
     $where = $where ? ' WHERE ' . implode(' AND ', $where) : ' 1 ';
     /* 统计数量 */
     $nums = QuestionModel::get_question_nums($where);
     $total = $nums['total'];
     /* 读取数据 */
     $size = 15;
     $page = $this->input->get('page') ? intval($this->input->get('page')) : 1;
     $offset = ($page - 1) * $size;
     $list = array();
     /* 学科 */
     $qtypes = C('q_type');
     /* 试题类型 */
     $subjects = C('subject');
     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['title'] = strip_tags($row['title']);
             $row['qtype'] = isset($qtypes[$row['type']]) ? $qtypes[$row['type']] : '';
             $row['subject_name'] = isset($subjects[$row['subject_id']]) ? $subjects[$row['subject_id']] : '';
             $row['addtime'] = date('Y-m-d H:i', $row['addtime']);
             $list[] = $row;
         }
     }
     $data['list'] =& $list;
     $data['q_class'] = $this->db->get_where('question_class')->result_array();
     $data['c_subject_id'] = $c_subject_id ? explode(',', $c_subject_id) : array();
     $data['c_class_id'] = $c_class_id;
     $data['c_grade_id'] = $c_grade_id ? explode(',', $c_grade_id) : array();
     $data['search_data'] = $_GET;
     /* 分页 */
     $purl = site_url('admin/paper_diy/select_question/' . ($param ? '?' . implode('&', $param) : ''));
     $data['pagination'] = multipage($total, $size, $page, $purl, '', $nums['relate_num']);
     /* 模版 */
     $this->load->view('paper_diy/question_list', $data);
 }