is_logged_in() && $TeKe->has_access(ACCESS_CAN_EDIT)) { $response = new AJAXResponse(); $task = ProjectManager::getTaskById(get_input('task_id')); if (!($task instanceof Task)) { $TeKe->add_system_message(_("No such task."), 'error'); $response->setMessages(); echo $response->getJSON(); exit; } $project = $task->getProjectObject(); // TODO Possibly admin should be allowed to see stuff if (!(($project instanceof Project) && ($project->isMember(get_logged_in_user_id())))) { $TeKe->add_system_message(_("No project or insufficient privileges."), 'error'); $response->setMessages(); echo $response->getJSON(); exit; } if ($task->isTimelined()) { $TeKe->add_system_message(_("This task has already been added to the timeline. Same task can not be added twice."), 'error'); $response->setMessages(); echo $response->getJSON(); exit; } // Define fields array $fields = array('start_date' => true, 'end_date' => true); $inputs = array(); foreach ($fields as $key => $requirement) { $inputs[$key] = get_input($key); if (in_array($key, array('start_date', 'end_date'))) { $inputs[$key] = strtotime($inputs[$key]); } if ($requirement && !$inputs[$key]) { $response->addError($key); } } // Check if dates are allowed if ( !( (strtotime($project->getStartDate()) <= $inputs['start_date']) && ($inputs['start_date'] <= strtotime($project->getEndDate())) && (strtotime($project->getStartDate()) <= $inputs['end_date']) && ($inputs['end_date'] <= strtotime($project->getEndDate())) && ($inputs['start_date'] < $inputs['end_date']) ) ) { $TeKe->add_system_message(_("Provided dates are not suitable."), 'error'); $response->setMessages(); echo $response->getJSON(); exit; } if (sizeof($response->getErrors()) == 0) { $creator = $TeKe->user->getId(); if ($task->addToTimeline($inputs['start_date'], $inputs['end_date'])) { // Reload task $task = new Task($task->getId()); $task_data = array( 'id' => $task->getId(), 'title' => $task->getTitle(), 'description' => $task->getDescription(), 'members' => array(), 'resources' => array(), 'start_date' => format_date_for_js($task->getStartDate()), 'end_date' => format_date_for_js($task->getEndDate()) ); $task_members = $task->getAssociatedMembers(); if ($task_members && is_array($task_members) && sizeof($task_members) > 0) { foreach ($task_members as $tmember) { $task_data['members'][] = array( 'id' => $tmember->getId(), 'url' => $tmember->getURL(), 'fullname' => $tmember->getFullname(), 'image_url' => $tmember->getImageURL() ); } } $task_resources = $task->getAssociatedResources(); if ($task_resources && is_array($task_resources) && sizeof($task_resources) > 0) { foreach ($task_resources as $tres) { $task_data['resources'][] = array( 'id' => $tres->getId(), 'title' => $tres->getTitle(), 'resource_type_url' => $tres->getResourceTypeURL(), 'url' => $tres->getURL(), 'description' => $tres->getDescription() ); } } $response->addData('task', $task_data); $response->setStateSuccess(); $TeKe->add_system_message(_("Task added to timeline.")); } } else { $TeKe->add_system_message(_("Task could not be added to timeline."), 'error'); } $response->setMessages(); echo $response->getJSON(); exit; }