예제 #1
0
 public function summary_paper()
 {
     set_time_limit(0);
     $this->load->model('cron/cron_exam_result_model', 'cer_model');
     $exam_list = $this->cer_model->get_task_exam_list(1, NULL, 5);
     if (!$exam_list) {
         return false;
     }
     foreach ($exam_list as $item) {
         $this->cer_model->set_task_exam_result_status(array('status' => 100), $item['id']);
         $result = SummaryModel::summary_paper($item['exam_pid'], null, null, true);
         $this->cer_model->set_task_exam_result_status(array('status' => $result ? 2 : 1), $item['id']);
     }
 }
예제 #2
0
 /**
  * 批量删除试卷中的试题
  *
  * @param int $paper_id 试卷id
  * @param int $ids 试卷中的试题id
  * @return void
  */
 public function batch_delete()
 {
     if (!$this->check_power('exam_manage')) {
         return;
     }
     $paper_id = (int) $this->input->post('paper_id');
     $ids = $this->input->post('ids');
     if (empty($ids) or !is_array($ids)) {
         message('请选择要操作的项目!');
         return;
     }
     $paper = PaperModel::get_paper_by_id($paper_id);
     if (!$paper) {
         message('试卷不存在');
         return;
     }
     $exam_pid = ExamModel::get_exam($paper['exam_id'], 'exam_pid');
     $is_mini_test = ExamModel::is_mini_test($exam_pid);
     //判断该试卷已经被考试过 或 正在被考
     $count_fail = 0;
     $count_success = 0;
     $tmp_ids = array();
     foreach ($ids as $ques_id) {
         if (!$is_mini_test) {
             $be_tested = QuestionModel::paper_question_has_been_tested($paper_id, $ques_id);
             if ($be_tested) {
                 $count_fail++;
                 continue;
             }
         }
         $tmp_ids[] = $ques_id;
         $count_success++;
     }
     $back_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'admin/exam_question/index/' . $paper_id;
     $this->db->where_in('id', $tmp_ids)->delete('exam_question');
     ExamPaperModel::renew($paper_id);
     if ($is_mini_test && $count_success) {
         SummaryModel::summary_paper($exam_pid, 0, $paper_id, true);
     }
     message("批量操作完成(成功 {$count_success}个,失败 {$count_fail} 个)", $back_url);
 }
예제 #3
0
 /**
  * 更新试卷试题
  * @param array $paper_id 试卷ID
  * @return boolen 成功返回true, 失败返回false
  */
 public static function update_paper_question($paper_id)
 {
     /* 更新外部新试卷信息 */
     $paper_id = (int) $paper_id;
     if (!$paper_id) {
         return false;
     }
     /* 查询试卷信息 */
     $paper = self::get_paper_by_id($paper_id, 'exam_id,paper_id,admin_id,question_sort');
     if (!$paper) {
         return false;
     }
     $exam = ExamModel::get_exam($paper['exam_id'], 'exam_id,exam_pid,grade_id,class_id');
     if (!$exam) {
         return false;
     }
     $db = Fn::db();
     /* 判定是否为外部试卷 */
     if ($paper['admin_id'] > 0) {
         $questions = json_decode($paper['question_sort'], true);
         $question_difficulty = array();
         $qtype_ques_num = array_fill(0, count(C('qtype')), '0');
         if (!$db->beginTransaction()) {
             return false;
         }
         /* 清除exam_question原有信息 */
         $db->delete('rd_exam_question', 'exam_id =? AND paper_id = ?', array($paper['exam_id'], $paper_id));
         if (count($questions) > 0) {
             foreach ($questions as $ques_id) {
                 $sql = "SELECT q.ques_id,q.type,rc.difficulty FROM\n                            rd_question q \n                            LEFT JOIN rd_relate_class rc ON q.ques_id=rc.ques_id\n                            WHERE q.ques_id={$ques_id} AND rc.grade_id={$exam['grade_id']} \n                            AND rc.class_id={$exam['class_id']}";
                 $question = $db->fetchRow($sql);
                 if (empty($question)) {
                     $db->rollBack();
                     throw new Exception('当前试卷中存在不属于当前考试期次年级的试题!请检查试题!');
                 }
                 /* 补全exam_question信息 */
                 $data = array();
                 $data['paper_id'] = $paper_id;
                 $data['exam_id'] = $paper['exam_id'];
                 $data['ques_id'] = $ques_id;
                 $db->insert('rd_exam_question', $data);
                 /* 试题难易度 */
                 $question_difficulty[] = $question['difficulty'];
                 /* 各个类型试题数量 */
                 $qtype_ques_num[$question['type']]++;
             }
         }
         /* 补全exam_pager信息 */
         $data = array();
         $data['exam_id'] = $paper['exam_id'];
         $data['difficulty'] = array_sum($question_difficulty) / count($question_difficulty);
         $data['qtype_ques_num'] = implode(',', $qtype_ques_num);
         PaperModel::update_paper($paper_id, $data);
         $flag = $db->commit();
         if (!$flag) {
             $db->rollBack();
         }
         //如果是mini测试卷,则更新试卷统计
         if (ExamModel::is_mini_test($exam['exam_pid'])) {
             $sql = "SELECT exam_pid FROM rd_exam_subject_paper \n                        WHERE paper_id = {$paper_id} AND exam_id = " . $exam['exam_id'];
             if (Fn::db()->fetchOne($sql)) {
                 SummaryModel::summary_paper($exam['exam_pid'], 0, $paper_id, true);
             }
         }
         return $flag;
     }
 }