예제 #1
0
 public function enqueue_test()
 {
     $post_test = $this->input->post('test');
     $post_select_test_type = $this->input->post('select_test_type');
     $output = new stdClass();
     $output->status = FALSE;
     $output->message = '';
     if ($post_select_test_type !== '') {
         if (isset($post_test['version']) && (int) $post_test['version'] > 0) {
             if (isset($post_test['id']) && is_array($post_test['id']) && count($post_test['id']) > 0) {
                 if (isset($post_test['task_set_id']) && (int) $post_test['task_set_id'] > 0 && isset($post_test['student_id']) && (int) $post_test['student_id'] > 0) {
                     $this->_transaction_isolation();
                     $this->db->trans_begin();
                     $maximum_eqnueued_tests_allowed = (int) $this->config->item('test_maximum_enqueued_pe_student');
                     if ($maximum_eqnueued_tests_allowed <= 0) {
                         $maximum_eqnueued_tests_allowed = 1;
                     }
                     $enqueued = new Test_queue();
                     $enqueued->where('status', 0);
                     $enqueued->where_related('student', 'id', (int) $post_test['student_id']);
                     $enqueued_for_this_student = $enqueued->count();
                     if ($enqueued_for_this_student < $maximum_eqnueued_tests_allowed) {
                         $tests = new Test();
                         $tests->where_in('id', $post_test['id']);
                         $tests->where('type', $post_select_test_type);
                         $tests->get_iterated();
                         if ($tests->exists()) {
                             $task_set = new Task_set();
                             $task_set->get_by_id((int) $post_test['task_set_id']);
                             $student = new Student();
                             $student->get_by_id((int) $post_test['student_id']);
                             if ($task_set->exists() && $student->exists()) {
                                 $test_queue = new Test_queue();
                                 $test_queue->priority = $task_set->test_priority;
                                 $test_queue->original_priority = $task_set->test_priority;
                                 $test_queue->test_type = $post_select_test_type;
                                 $test_queue->version = (int) $post_test['version'];
                                 $test_queue->start = date('Y-m-d H:i:s');
                                 $test_queue->points = 0;
                                 $test_queue->bonus = 0;
                                 $test_queue->status = 0;
                                 $test_queue->system_language = $this->lang->get_current_idiom();
                                 if ($test_queue->save(array('student' => $student, 'task_set' => $task_set))) {
                                     $errors = 0;
                                     foreach ($tests as $test) {
                                         if (!$test_queue->save($test)) {
                                             $errors++;
                                         }
                                     }
                                     if ($errors == 0) {
                                         $this->db->trans_commit();
                                         $output->status = TRUE;
                                         $output->message = $this->lang->line('admin_tests_enqueue_test_success');
                                     } else {
                                         $this->db->trans_rollback();
                                         $output->message = $this->lang->line('admin_tests_enqueue_test_error_cant_add_to_queue');
                                     }
                                 } else {
                                     $this->db->trans_rollback();
                                     $output->message = $this->lang->line('admin_tests_enqueue_test_error_cant_add_to_queue');
                                 }
                             } else {
                                 $this->db->trans_rollback();
                                 $output->message = $this->lang->line('admin_tests_enqueue_test_error_task_set_or_student_not_found');
                             }
                         } else {
                             $this->db->trans_rollback();
                             $output->message = $this->lang->line('admin_tests_enqueue_test_error_no_tests_selected');
                         }
                     } else {
                         $this->db->trans_rollback();
                         $output->message = sprintf($this->lang->line('admin_tests_enqueue_test_error_maximum_enqueues_reached'), $maximum_eqnueued_tests_allowed);
                     }
                 } else {
                     $output->message = $this->lang->line('admin_tests_enqueue_test_error_task_set_or_student_not_found');
                 }
             } else {
                 $output->message = $this->lang->line('admin_tests_enqueue_test_error_no_tests_selected');
             }
         } else {
             $output->message = $this->lang->line('admin_tests_enqueue_test_error_no_version_selected');
         }
     } else {
         $output->message = $this->lang->line('admin_tests_enqueue_test_error_not_test_type_selected');
     }
     $this->output->set_content_type('application/json');
     $this->output->set_output(json_encode($output));
 }