summaryrefslogtreecommitdiff
path: root/app/Controller/DashboardController.php
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-05-15 18:31:47 -0400
committerFrederic Guillot <fred@kanboard.net>2016-05-15 18:31:47 -0400
commit67b836164997527b91452b19adbcb8aa3c5decf1 (patch)
treeb5876d311912e97b0592c7e208639f7b52813a75 /app/Controller/DashboardController.php
parent108e867605dbc7ece4cbcbecc89a674e9c154a9b (diff)
Refactoring: added controlled middleware and changed response class
Diffstat (limited to 'app/Controller/DashboardController.php')
-rw-r--r--app/Controller/DashboardController.php183
1 files changed, 183 insertions, 0 deletions
diff --git a/app/Controller/DashboardController.php b/app/Controller/DashboardController.php
new file mode 100644
index 00000000..b05cd209
--- /dev/null
+++ b/app/Controller/DashboardController.php
@@ -0,0 +1,183 @@
+<?php
+
+namespace Kanboard\Controller;
+
+use Kanboard\Model\Project as ProjectModel;
+use Kanboard\Model\Subtask as SubtaskModel;
+
+/**
+ * Dashboard Controller
+ *
+ * @package Kanboard\Controller
+ * @author Frederic Guillot
+ */
+class DashboardController extends BaseController
+{
+ /**
+ * Get project pagination
+ *
+ * @access private
+ * @param integer $user_id
+ * @param string $action
+ * @param integer $max
+ * @return \Kanboard\Core\Paginator
+ */
+ private function getProjectPaginator($user_id, $action, $max)
+ {
+ return $this->paginator
+ ->setUrl('DashboardController', $action, array('pagination' => 'projects', 'user_id' => $user_id))
+ ->setMax($max)
+ ->setOrder(ProjectModel::TABLE.'.name')
+ ->setQuery($this->project->getQueryColumnStats($this->projectPermission->getActiveProjectIds($user_id)))
+ ->calculateOnlyIf($this->request->getStringParam('pagination') === 'projects');
+ }
+
+ /**
+ * Get task pagination
+ *
+ * @access private
+ * @param integer $user_id
+ * @param string $action
+ * @param integer $max
+ * @return \Kanboard\Core\Paginator
+ */
+ private function getTaskPaginator($user_id, $action, $max)
+ {
+ return $this->paginator
+ ->setUrl('DashboardController', $action, array('pagination' => 'tasks', 'user_id' => $user_id))
+ ->setMax($max)
+ ->setOrder('tasks.id')
+ ->setQuery($this->taskFinder->getUserQuery($user_id))
+ ->calculateOnlyIf($this->request->getStringParam('pagination') === 'tasks');
+ }
+
+ /**
+ * Get subtask pagination
+ *
+ * @access private
+ * @param integer $user_id
+ * @param string $action
+ * @param integer $max
+ * @return \Kanboard\Core\Paginator
+ */
+ private function getSubtaskPaginator($user_id, $action, $max)
+ {
+ return $this->paginator
+ ->setUrl('DashboardController', $action, array('pagination' => 'subtasks', 'user_id' => $user_id))
+ ->setMax($max)
+ ->setOrder('tasks.id')
+ ->setQuery($this->subtask->getUserQuery($user_id, array(SubTaskModel::STATUS_TODO, SubtaskModel::STATUS_INPROGRESS)))
+ ->calculateOnlyIf($this->request->getStringParam('pagination') === 'subtasks');
+ }
+
+ /**
+ * Dashboard overview
+ *
+ * @access public
+ */
+ public function show()
+ {
+ $user = $this->getUser();
+
+ $this->response->html($this->helper->layout->dashboard('dashboard/show', array(
+ 'title' => t('Dashboard'),
+ '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->helper->layout->dashboard('dashboard/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->helper->layout->dashboard('dashboard/subtasks', array(
+ 'title' => t('My subtasks'),
+ 'paginator' => $this->getSubtaskPaginator($user['id'], 'subtasks', 50),
+ 'user' => $user,
+ )));
+ }
+
+ /**
+ * My projects
+ *
+ * @access public
+ */
+ public function projects()
+ {
+ $user = $this->getUser();
+
+ $this->response->html($this->helper->layout->dashboard('dashboard/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->helper->layout->dashboard('dashboard/activity', array(
+ 'title' => t('My activity stream'),
+ 'events' => $this->helper->projectActivity->getProjectsEvents($this->projectPermission->getActiveProjectIds($user['id']), 100),
+ 'user' => $user,
+ )));
+ }
+
+ /**
+ * My calendar
+ *
+ * @access public
+ */
+ public function calendar()
+ {
+ $this->response->html($this->helper->layout->dashboard('dashboard/calendar', array(
+ 'title' => t('My calendar'),
+ 'user' => $this->getUser(),
+ )));
+ }
+
+ /**
+ * My notifications
+ *
+ * @access public
+ */
+ public function notifications()
+ {
+ $user = $this->getUser();
+
+ $this->response->html($this->helper->layout->dashboard('dashboard/notifications', array(
+ 'title' => t('My notifications'),
+ 'notifications' => $this->userUnreadNotification->getAll($user['id']),
+ 'user' => $user,
+ )));
+ }
+}