summaryrefslogtreecommitdiff
path: root/app/Controller/App.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controller/App.php')
-rw-r--r--app/Controller/App.php181
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(),
)));
}