summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-07-01 17:36:21 -0400
committerFrederic Guillot <fred@kanboard.net>2015-07-01 17:36:21 -0400
commit109a2a2e25e0e170d3df3860d054f82f70e78c4d (patch)
tree5aa324a06ba285ec7643589620e41411bf2d49eb /app
parent3f084916e3befbaadf8dc86c8329a408dfcdf351 (diff)
Change dashboard
Diffstat (limited to 'app')
-rw-r--r--app/Controller/App.php181
-rw-r--r--app/Controller/Base.php21
-rw-r--r--app/Controller/User.php35
-rw-r--r--app/Model/Acl.php1
-rw-r--r--app/Template/app/activity.php4
-rw-r--r--app/Template/app/calendar.php (renamed from app/Template/user/calendar.php)2
-rw-r--r--app/Template/app/dashboard.php60
-rw-r--r--app/Template/app/layout.php21
-rw-r--r--app/Template/app/overview.php3
-rw-r--r--app/Template/app/projects.php4
-rw-r--r--app/Template/app/sidebar.php23
-rw-r--r--app/Template/app/subtasks.php4
-rw-r--r--app/Template/app/tasks.php4
-rw-r--r--app/Template/event/events.php2
-rw-r--r--app/Template/user/sidebar.php5
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'])): ?>