Index: application/controllers/TaskController.class.php =================================================================== --- application/controllers/TaskController.class.php (revision 161) +++ application/controllers/TaskController.class.php (working copy) @@ -450,8 +450,51 @@ } // if } // edit_task - + /** + * View task details page + * + * @access public + * @param void + * @return null + */ + function view_task() { + $this->setTemplate('view_task'); + $this->addHelper('textile'); + + $task = ProjectTasks::findById(get_id()); + if (!($task instanceof ProjectTask)) { + flash_error(lang('task dnx')); + $this->redirectTo('task'); + } // if + + $task_list = $task->getTaskList(); + if (!($task_list instanceof ProjectTaskList)) { + flash_error('task list dnx'); + $this->redirectTo('task'); + } // if + + if (!$task->canEdit(logged_user())) { + flash_error(lang('no access permissions')); + $this->redirectTo('task'); + } // if + + $task_data = array_var($_POST, 'task'); + if (!is_array($task_data)) { + $task_data = array( + 'text' => $task->getText(), + 'task_list_id' => $task->getTaskListId(), + 'assigned_to' => $task->getAssignedToCompanyId() . ':' . $task->getAssignedToUserId() + ); // array + } // if + + tpl_assign('task', $task); + tpl_assign('task_list', $task_list); + tpl_assign('task_data', $task_data); + + } // task_details + + /** * Delete specific task * * @access public Index: application/models/project_tasks/ProjectTask.class.php =================================================================== --- application/models/project_tasks/ProjectTask.class.php (revision 161) +++ application/models/project_tasks/ProjectTask.class.php (working copy) @@ -14,8 +14,15 @@ * @var boolean */ protected $is_searchable = true; - + /** + * Project task is commentable object + * + * @var boolean + */ + protected $is_commentable = true; + + /** * Array of searchable columns * * @var array @@ -149,7 +156,13 @@ * @return boolean */ function canView(User $user) { - return false; + if (!$user->isProjectUser($this->getProject())) { + return false; // user have access to project + } // if + if ($this->isPrivate() && !$user->isMemberOfOwnerCompany()) { + return false; // user that is not member of owner company can't access private objects + } // if + return true; } // canView /** @@ -308,8 +321,19 @@ function getEditUrl() { return get_url('task', 'edit_task', array('id' => $this->getId(), 'active_project' => $this->getProjectId())); } // getEditUrl - + /** + * Return view task URL + * + * @access public + * @param void + * @return string + */ + function getViewUrl() { + return get_url('task', 'view_task', array('id' => $this->getId(), 'active_project' => $this->getProjectId())); + } // getViewUrl + + /** * Return delete task URL * * @access public @@ -426,6 +450,7 @@ * @return string */ function getObjectUrl() { + return $this->getViewUrl(); $list = $this->getTaskList(); return $list instanceof ProjectTaskList ? $list->getViewUrl() : null; } // getObjectUrl Index: application/views/task/task_list.php =================================================================== --- application/views/task/task_list.php (revision 161) +++ application/views/task/task_list.php (working copy) @@ -46,6 +46,7 @@ getAssignedTo()->getObjectName()) ?>: getText()) ?> canEdit(logged_user())) { ?> canDelete(logged_user())) { ?>(: countComments() ?>) @@ -104,6 +105,7 @@ } else { echo lang('completed on', format_date($task->getCompletedOn())); } //if ?>) + (: countComments() ?>) Index: application/views/task/view_task.php =================================================================== --- application/views/task/view_task.php (revision 0) +++ application/views/task/view_task.php (revision 0) @@ -0,0 +1,31 @@ +getName(), $task_list->getViewUrl()), + array(lang('view task')) + )); + + $options = array(); + if($task->canEdit(logged_user())) $options[] = '' . lang('edit') . ''; + if($task->canDelete(logged_user())) $options[] = '' . lang('delete') . '' +?> + +
+
getText()) ?>
+
+
+ getAssignedTo()) { ?> +
getAssignedTo()->getObjectName())) ?>
+ + +
+ +
+
+
+
+ +getViewUrl()) ?> Index: language/en_us/actions.php =================================================================== --- language/en_us/actions.php (revision 161) +++ language/en_us/actions.php (working copy) @@ -58,6 +58,7 @@ 'delete task' => 'Delete task', 'mark task as completed' => 'Mark task as completed', 'mark task as open' => 'Mark task as open', + 'view task' => 'View task', // Milestone 'add milestone' => 'Add milestone',