diff options
author | Frederic Guillot <fred@kanboard.net> | 2015-07-01 17:36:21 -0400 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2015-07-01 17:36:21 -0400 |
commit | 109a2a2e25e0e170d3df3860d054f82f70e78c4d (patch) | |
tree | 5aa324a06ba285ec7643589620e41411bf2d49eb /app | |
parent | 3f084916e3befbaadf8dc86c8329a408dfcdf351 (diff) |
Change dashboard
Diffstat (limited to 'app')
-rw-r--r-- | app/Controller/App.php | 181 | ||||
-rw-r--r-- | app/Controller/Base.php | 21 | ||||
-rw-r--r-- | app/Controller/User.php | 35 | ||||
-rw-r--r-- | app/Model/Acl.php | 1 | ||||
-rw-r--r-- | app/Template/app/activity.php | 4 | ||||
-rw-r--r-- | app/Template/app/calendar.php (renamed from app/Template/user/calendar.php) | 2 | ||||
-rw-r--r-- | app/Template/app/dashboard.php | 60 | ||||
-rw-r--r-- | app/Template/app/layout.php | 21 | ||||
-rw-r--r-- | app/Template/app/overview.php | 3 | ||||
-rw-r--r-- | app/Template/app/projects.php | 4 | ||||
-rw-r--r-- | app/Template/app/sidebar.php | 23 | ||||
-rw-r--r-- | app/Template/app/subtasks.php | 4 | ||||
-rw-r--r-- | app/Template/app/tasks.php | 4 | ||||
-rw-r--r-- | app/Template/event/events.php | 2 | ||||
-rw-r--r-- | app/Template/user/sidebar.php | 5 |
15 files changed, 230 insertions, 140 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(), ))); } diff --git a/app/Controller/Base.php b/app/Controller/Base.php index cab70c6b..b7ee431f 100644 --- a/app/Controller/Base.php +++ b/app/Controller/Base.php @@ -306,4 +306,25 @@ abstract class Base extends \Core\Base return $project; } + + /** + * Common method to get the user + * + * @access protected + * @return array + */ + protected function getUser() + { + $user = $this->user->getById($this->request->getIntegerParam('user_id', $this->userSession->getId())); + + if (empty($user)) { + $this->notfound(); + } + + if (! $this->userSession->isAdmin() && $this->userSession->getId() != $user['id']) { + $this->forbidden(); + } + + return $user; + } } diff --git a/app/Controller/User.php b/app/Controller/User.php index 6628bcb6..119041e5 100644 --- a/app/Controller/User.php +++ b/app/Controller/User.php @@ -32,27 +32,6 @@ class User extends Base } /** - * Common method to get the user - * - * @access protected - * @return array - */ - protected function getUser() - { - $user = $this->user->getById($this->request->getIntegerParam('user_id')); - - if (empty($user)) { - $this->notfound(); - } - - if (! $this->userSession->isAdmin() && $this->userSession->getId() != $user['id']) { - $this->forbidden(); - } - - return $user; - } - - /** * List all users * * @access public @@ -139,20 +118,6 @@ class User extends Base } /** - * Display user calendar - * - * @access public - */ - public function calendar() - { - $user = $this->getUser(); - - $this->response->html($this->layout('user/calendar', array( - 'user' => $user, - ))); - } - - /** * Display timesheet * * @access public diff --git a/app/Model/Acl.php b/app/Model/Acl.php index 684fae13..91ed035b 100644 --- a/app/Model/Acl.php +++ b/app/Model/Acl.php @@ -69,7 +69,6 @@ class Acl extends Base * @var array */ private $admin_acl = array( - 'app' => array('dashboard'), 'user' => array('index', 'create', 'save', 'remove'), 'config' => '*', 'link' => '*', diff --git a/app/Template/app/activity.php b/app/Template/app/activity.php new file mode 100644 index 00000000..71a67fb2 --- /dev/null +++ b/app/Template/app/activity.php @@ -0,0 +1,4 @@ +<div class="page-header"> + <h2><?= t('My activity stream') ?></h2> +</div> +<?= $this->render('event/events', array('events' => $events)) ?>
\ No newline at end of file diff --git a/app/Template/user/calendar.php b/app/Template/app/calendar.php index 7ec12496..6acee6ec 100644 --- a/app/Template/user/calendar.php +++ b/app/Template/app/calendar.php @@ -3,4 +3,4 @@ data-user-id="<?= $user['id'] ?>" data-save-url="<?= $this->url->href('calendar', 'save') ?>" > -</div>
\ No newline at end of file +</div> diff --git a/app/Template/app/dashboard.php b/app/Template/app/dashboard.php deleted file mode 100644 index faf49ef5..00000000 --- a/app/Template/app/dashboard.php +++ /dev/null @@ -1,60 +0,0 @@ -<section id="main"> - <div class="page-header page-header-mobile"> - <ul> - <?php if ($this->user->isAdmin()): ?> - <li><i class="fa fa-plus fa-fw"></i><?= $this->url->link(t('New project'), 'project', 'create') ?></li> - <?php endif ?> - <li><i class="fa fa-lock fa-fw"></i><?= $this->url->link(t('New private project'), 'project', 'create', array('private' => 1)) ?></li> - <li><i class="fa fa-folder fa-fw"></i><?= $this->url->link(t('Project management'), 'project', 'index') ?></li> - <?php if ($this->user->isAdmin()): ?> - <li><i class="fa fa-user fa-fw"></i><?= $this->url->link(t('User management'), 'user', 'index') ?></li> - <li><i class="fa fa-cog fa-fw"></i><?= $this->url->link(t('Settings'), 'config', 'index') ?></li> - <?php endif ?> - <li> - <span class="dropdown"> - <span> - <i class="fa fa-caret-down"></i> <a href="#" class="dropdown-menu"><?= t('Change dashboard view') ?></a> - <ul> - <li> - <a href="#" class="dashboard-toggle" data-toggle="projects"><?= t('Show/hide projects') ?></a> - </li> - <li> - <a href="#" class="dashboard-toggle" data-toggle="tasks"><?= t('Show/hide tasks') ?></a> - </li> - <li> - <a href="#" class="dashboard-toggle" data-toggle="subtasks"><?= t('Show/hide subtasks') ?></a> - </li> - <li> - <a href="#" class="dashboard-toggle" data-toggle="calendar"><?= t('Show/hide calendar') ?></a> - </li> - <li> - <a href="#" class="dashboard-toggle" data-toggle="activities"><?= t('Show/hide activities') ?></a> - </li> - </ul> - </span> - </span> - </li> - </ul> - </div> - <section id="dashboard"> - <div class="dashboard-left-column"> - <div id="dashboard-projects"><?= $this->render('app/projects', array('paginator' => $project_paginator)) ?></div> - <div id="dashboard-tasks"><?= $this->render('app/tasks', array('paginator' => $task_paginator)) ?></div> - <div id="dashboard-subtasks"><?= $this->render('app/subtasks', array('paginator' => $subtask_paginator)) ?></div> - </div> - <div class="dashboard-right-column"> - <div id="dashboard-calendar"> - <div id="user-calendar" - data-check-url="<?= $this->url->href('calendar', 'user') ?>" - data-user-id="<?= $user_id ?>" - data-save-url="<?= $this->url->href('calendar', 'save') ?>" - > - </div> - </div> - <div id="dashboard-activities"> - <h2><?= t('Activity stream') ?></h2> - <?= $this->render('event/events', array('events' => $events)) ?> - </div> - </div> - </section> -</section>
\ No newline at end of file diff --git a/app/Template/app/layout.php b/app/Template/app/layout.php new file mode 100644 index 00000000..d2d63f25 --- /dev/null +++ b/app/Template/app/layout.php @@ -0,0 +1,21 @@ +<section id="main"> + <div class="page-header page-header-mobile"> + <ul> + <?php if ($this->user->isAdmin()): ?> + <li><i class="fa fa-plus fa-fw"></i><?= $this->url->link(t('New project'), 'project', 'create') ?></li> + <?php endif ?> + <li><i class="fa fa-lock fa-fw"></i><?= $this->url->link(t('New private project'), 'project', 'create', array('private' => 1)) ?></li> + <li><i class="fa fa-folder fa-fw"></i><?= $this->url->link(t('Project management'), 'project', 'index') ?></li> + <?php if ($this->user->isAdmin()): ?> + <li><i class="fa fa-user fa-fw"></i><?= $this->url->link(t('User management'), 'user', 'index') ?></li> + <li><i class="fa fa-cog fa-fw"></i><?= $this->url->link(t('Settings'), 'config', 'index') ?></li> + <?php endif ?> + </ul> + </div> + <section class="sidebar-container" id="dashboard"> + <?= $this->render('app/sidebar', array('user' => $user)) ?> + <div class="sidebar-content"> + <?= $content_for_sublayout ?> + </div> + </section> +</section>
\ No newline at end of file diff --git a/app/Template/app/overview.php b/app/Template/app/overview.php new file mode 100644 index 00000000..bd7d28db --- /dev/null +++ b/app/Template/app/overview.php @@ -0,0 +1,3 @@ +<?= $this->render('app/projects', array('paginator' => $project_paginator)) ?> +<?= $this->render('app/tasks', array('paginator' => $task_paginator)) ?> +<?= $this->render('app/subtasks', array('paginator' => $subtask_paginator)) ?>
\ No newline at end of file diff --git a/app/Template/app/projects.php b/app/Template/app/projects.php index 27060f7d..22e0cc47 100644 --- a/app/Template/app/projects.php +++ b/app/Template/app/projects.php @@ -1,4 +1,6 @@ -<h2><?= t('My projects') ?> (<?= $paginator->getTotal() ?>)</h2> +<div class="page-header"> + <h2><?= t('My projects') ?> (<?= $paginator->getTotal() ?>)</h2> +</div> <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('Your are not member of any project.') ?></p> <?php else: ?> diff --git a/app/Template/app/sidebar.php b/app/Template/app/sidebar.php new file mode 100644 index 00000000..40bf6401 --- /dev/null +++ b/app/Template/app/sidebar.php @@ -0,0 +1,23 @@ +<div class="sidebar"> + <h2><?= $this->e($user['name'] ?: $user['username']) ?></h2> + <ul> + <li> + <?= $this->url->link(t('Overview'), 'app', 'index', array('user_id' => $user['id'])) ?> + </li> + <li> + <?= $this->url->link(t('My projects'), 'app', 'projects', array('user_id' => $user['id'])) ?> + </li> + <li> + <?= $this->url->link(t('My tasks'), 'app', 'tasks', array('user_id' => $user['id'])) ?> + </li> + <li> + <?= $this->url->link(t('My subtasks'), 'app', 'subtasks', array('user_id' => $user['id'])) ?> + </li> + <li> + <?= $this->url->link(t('My calendar'), 'app', 'calendar', array('user_id' => $user['id'])) ?> + </li> + <li> + <?= $this->url->link(t('My activity stream'), 'app', 'activity', array('user_id' => $user['id'])) ?> + </li> + </ul> +</div>
\ No newline at end of file diff --git a/app/Template/app/subtasks.php b/app/Template/app/subtasks.php index d6cbde6f..67f2d04f 100644 --- a/app/Template/app/subtasks.php +++ b/app/Template/app/subtasks.php @@ -1,4 +1,6 @@ -<h2><?= t('My subtasks') ?> (<?= $paginator->getTotal() ?>)</h2> +<div class="page-header"> + <h2><?= t('My subtasks') ?> (<?= $paginator->getTotal() ?>)</h2> +</div> <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('There is nothing assigned to you.') ?></p> <?php else: ?> diff --git a/app/Template/app/tasks.php b/app/Template/app/tasks.php index 6fd7d56d..8e7fe74a 100644 --- a/app/Template/app/tasks.php +++ b/app/Template/app/tasks.php @@ -1,4 +1,6 @@ -<h2><?= t('My tasks') ?> (<?= $paginator->getTotal() ?>)</h2> +<div class="page-header"> + <h2><?= t('My tasks') ?> (<?= $paginator->getTotal() ?>)</h2> +</div> <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('There is nothing assigned to you.') ?></p> <?php else: ?> diff --git a/app/Template/event/events.php b/app/Template/event/events.php index 971f6587..aec0b29e 100644 --- a/app/Template/event/events.php +++ b/app/Template/event/events.php @@ -1,5 +1,5 @@ <?php if (empty($events)): ?> - <p class="alert"><?= t('No activity.') ?></p> + <p class="alert"><?= t('There is no activity yet.') ?></p> <?php else: ?> <?php foreach ($events as $event): ?> diff --git a/app/Template/user/sidebar.php b/app/Template/user/sidebar.php index 2c8e909a..e61a43bf 100644 --- a/app/Template/user/sidebar.php +++ b/app/Template/user/sidebar.php @@ -6,10 +6,7 @@ </li> <?php if ($this->user->isAdmin()): ?> <li> - <?= $this->url->link(t('User dashboard'), 'app', 'dashboard', array('user_id' => $user['id'])) ?> - </li> - <li> - <?= $this->url->link(t('User calendar'), 'user', 'calendar', array('user_id' => $user['id'])) ?> + <?= $this->url->link(t('User dashboard'), 'app', 'index', array('user_id' => $user['id'])) ?> </li> <?php endif ?> <?php if ($this->user->isAdmin() || $this->user->isCurrentUser($user['id'])): ?> |