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)); }