diff options
Diffstat (limited to 'app/Controller/App.php')
-rw-r--r-- | app/Controller/App.php | 181 |
1 files changed, 146 insertions, 35 deletions
diff --git a/app/Controller/App.php b/app/Controller/App.php index 5c9c45b5..c26cb122 100644 --- a/app/Controller/App.php +++ b/app/Controller/App.php @@ -14,66 +14,177 @@ use Model\Task as TaskModel; class App extends Base { /** - * Check if the user is connected + * Common layout for dashboard views * - * @access public + * @access private + * @param string $template Template name + * @param array $params Template parameters + * @return string */ - public function status() + private function layout($template, array $params) { - $this->response->text('OK'); + $params['board_selector'] = $this->projectPermission->getAllowedProjects($this->userSession->getId()); + $params['content_for_sublayout'] = $this->template->render($template, $params); + + return $this->template->layout('app/layout', $params); } /** - * User dashboard view for admins + * Get project pagination * - * @access public + * @access private + * @param integer $user_id + * @param string $action + * @param integer $max */ - public function dashboard() + private function getProjectPaginator($user_id, $action, $max) { - $this->index($this->request->getIntegerParam('user_id'), 'dashboard'); + return $this->paginator + ->setUrl('app', $action, array('pagination' => 'projects', 'user_id' => $user_id)) + ->setMax($max) + ->setOrder('name') + ->setQuery($this->project->getQueryColumnStats($this->projectPermission->getActiveMemberProjectIds($user_id))) + ->calculateOnlyIf($this->request->getStringParam('pagination') === 'projects'); } /** - * Dashboard for the current user + * Get task pagination * - * @access public + * @access private + * @param integer $user_id + * @param string $action + * @param integer $max */ - public function index($user_id = 0, $action = 'index') + private function getTaskPaginator($user_id, $action, $max) { - $status = array(SubTaskModel::STATUS_TODO, SubtaskModel::STATUS_INPROGRESS); - $user_id = $user_id ?: $this->userSession->getId(); - $projects = $this->projectPermission->getActiveMemberProjects($user_id); - $project_ids = array_keys($projects); - - $task_paginator = $this->paginator + return $this->paginator ->setUrl('app', $action, array('pagination' => 'tasks', 'user_id' => $user_id)) - ->setMax(10) + ->setMax($max) ->setOrder('tasks.id') ->setQuery($this->taskFinder->getUserQuery($user_id)) ->calculateOnlyIf($this->request->getStringParam('pagination') === 'tasks'); + } - $subtask_paginator = $this->paginator + /** + * Get subtask pagination + * + * @access private + * @param integer $user_id + * @param string $action + * @param integer $max + */ + private function getSubtaskPaginator($user_id, $action, $max) + { + return $this->paginator ->setUrl('app', $action, array('pagination' => 'subtasks', 'user_id' => $user_id)) - ->setMax(10) + ->setMax($max) ->setOrder('tasks.id') - ->setQuery($this->subtask->getUserQuery($user_id, $status)) + ->setQuery($this->subtask->getUserQuery($user_id, array(SubTaskModel::STATUS_TODO, SubtaskModel::STATUS_INPROGRESS))) ->calculateOnlyIf($this->request->getStringParam('pagination') === 'subtasks'); + } - $project_paginator = $this->paginator - ->setUrl('app', $action, array('pagination' => 'projects', 'user_id' => $user_id)) - ->setMax(10) - ->setOrder('name') - ->setQuery($this->project->getQueryColumnStats($project_ids)) - ->calculateOnlyIf($this->request->getStringParam('pagination') === 'projects'); + /** + * Check if the user is connected + * + * @access public + */ + public function status() + { + $this->response->text('OK'); + } + + /** + * Dashboard overview + * + * @access public + */ + public function index() + { + $user = $this->getUser(); + + $this->response->html($this->layout('app/overview', array( + 'title' => t('Overview'), + 'project_paginator' => $this->getProjectPaginator($user['id'], 'index', 10), + 'task_paginator' => $this->getTaskPaginator($user['id'], 'index', 10), + 'subtask_paginator' => $this->getSubtaskPaginator($user['id'], 'index', 10), + 'user' => $user, + ))); + } + + /** + * My tasks + * + * @access public + */ + public function tasks() + { + $user = $this->getUser(); + + $this->response->html($this->layout('app/tasks', array( + 'title' => t('My tasks'), + 'paginator' => $this->getTaskPaginator($user['id'], 'tasks', 50), + 'user' => $user, + ))); + } + + /** + * My subtasks + * + * @access public + */ + public function subtasks() + { + $user = $this->getUser(); + + $this->response->html($this->layout('app/subtasks', array( + 'title' => t('My subtasks'), + 'paginator' => $this->getSubtaskPaginator($user['id'], 'subtasks', 50), + 'user' => $user, + ))); + } - $this->response->html($this->template->layout('app/dashboard', array( - 'title' => t('Dashboard'), - 'board_selector' => $this->projectPermission->getAllowedProjects($user_id), - 'events' => $this->projectActivity->getProjects($project_ids, 5), - 'task_paginator' => $task_paginator, - 'subtask_paginator' => $subtask_paginator, - 'project_paginator' => $project_paginator, - 'user_id' => $user_id, + /** + * My projects + * + * @access public + */ + public function projects() + { + $user = $this->getUser(); + + $this->response->html($this->layout('app/projects', array( + 'title' => t('My projects'), + 'paginator' => $this->getProjectPaginator($user['id'], 'projects', 25), + 'user' => $user, + ))); + } + + /** + * My activity stream + * + * @access public + */ + public function activity() + { + $user = $this->getUser(); + + $this->response->html($this->layout('app/activity', array( + 'title' => t('My activity stream'), + 'events' => $this->projectActivity->getProjects($this->projectPermission->getActiveMemberProjectIds($user['id']), 100), + 'user' => $user, + ))); + } + + /** + * My calendar + * + * @access public + */ + public function calendar() + { + $this->response->html($this->layout('app/calendar', array( + 'title' => t('My calendar'), + 'user' => $this->getUser(), ))); } |