public function clone_task_set() { $url = $this->uri->ruri_to_assoc(3); $task_set_id = isset($url['task_set_id']) ? intval($url['task_set_id']) : 0; $result = new stdClass(); $result->result = FALSE; $result->message = $this->lang->line('admin_task_sets_error_task_set_not_found'); if ($task_set_id !== 0) { $this->_transaction_isolation(); $this->db->trans_begin(); $task_set = new Task_set(); $task_set->get_by_id($task_set_id); if ($task_set->exists()) { $new_task_set = $task_set->get_copy(); $new_task_set->published = 0; if ($new_task_set->save()) { $this->lang->clone_overlays('task_sets', $task_set->id, $new_task_set->id); $tasks = new Task(); $tasks->include_join_fields(); $tasks->where_related_task_set($task_set); $tasks->get_iterated(); foreach ($tasks as $task) { $new_task_set->save_task($task); $task->set_join_field($new_task_set, 'sorting', $task->join_sorting); $task->set_join_field($new_task_set, 'points_total', $task->join_points_total); $task->set_join_field($new_task_set, 'test_min_points', $task->join_test_min_points); $task->set_join_field($new_task_set, 'test_max_points', $task->join_test_max_points); $task->set_join_field($new_task_set, 'bonus_task', $task->join_bonus_task); $task->set_join_field($new_task_set, 'max_projects_selections', $task->join_max_projects_selections); } $task_set_permissions = new Task_set_permission(); $task_set_permissions->where_related($task_set); $task_set_permissions->get_iterated(); foreach ($task_set_permissions as $task_set_permission) { $new_task_set_permission = $task_set_permission->get_copy(); $new_task_set_permission->save($new_task_set); } if ($this->db->trans_status()) { $this->db->trans_commit(); $result->result = TRUE; $result->message = $this->lang->line('admin_task_sets_success_task_set_cloned'); $this->_action_success(); } else { $this->db->trans_rollback(); $result->message = $this->lang->line('admin_task_sets_error_task_set_cant_be_cloned'); } } else { $this->db->trans_rollback(); $result->message = $this->lang->line('admin_task_sets_error_task_set_cant_be_cloned'); } } else { $this->db->trans_rollback(); } } $this->output->set_content_type('application/json'); $this->output->set_output(json_encode($result)); }