Change dashboard
This commit is contained in:
@@ -13,6 +13,76 @@ use Model\Task as TaskModel;
|
||||
*/
|
||||
class App extends Base
|
||||
{
|
||||
/**
|
||||
* Common layout for dashboard views
|
||||
*
|
||||
* @access private
|
||||
* @param string $template Template name
|
||||
* @param array $params Template parameters
|
||||
* @return string
|
||||
*/
|
||||
private function layout($template, array $params)
|
||||
{
|
||||
$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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get project pagination
|
||||
*
|
||||
* @access private
|
||||
* @param integer $user_id
|
||||
* @param string $action
|
||||
* @param integer $max
|
||||
*/
|
||||
private function getProjectPaginator($user_id, $action, $max)
|
||||
{
|
||||
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');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get task pagination
|
||||
*
|
||||
* @access private
|
||||
* @param integer $user_id
|
||||
* @param string $action
|
||||
* @param integer $max
|
||||
*/
|
||||
private function getTaskPaginator($user_id, $action, $max)
|
||||
{
|
||||
return $this->paginator
|
||||
->setUrl('app', $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
|
||||
*/
|
||||
private function getSubtaskPaginator($user_id, $action, $max)
|
||||
{
|
||||
return $this->paginator
|
||||
->setUrl('app', $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');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the user is connected
|
||||
*
|
||||
@@ -24,56 +94,97 @@ class App extends Base
|
||||
}
|
||||
|
||||
/**
|
||||
* User dashboard view for admins
|
||||
* Dashboard overview
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function dashboard()
|
||||
public function index()
|
||||
{
|
||||
$this->index($this->request->getIntegerParam('user_id'), 'dashboard');
|
||||
$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,
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Dashboard for the current user
|
||||
* My tasks
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function index($user_id = 0, $action = 'index')
|
||||
public function tasks()
|
||||
{
|
||||
$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);
|
||||
$user = $this->getUser();
|
||||
|
||||
$task_paginator = $this->paginator
|
||||
->setUrl('app', $action, array('pagination' => 'tasks', 'user_id' => $user_id))
|
||||
->setMax(10)
|
||||
->setOrder('tasks.id')
|
||||
->setQuery($this->taskFinder->getUserQuery($user_id))
|
||||
->calculateOnlyIf($this->request->getStringParam('pagination') === 'tasks');
|
||||
$this->response->html($this->layout('app/tasks', array(
|
||||
'title' => t('My tasks'),
|
||||
'paginator' => $this->getTaskPaginator($user['id'], 'tasks', 50),
|
||||
'user' => $user,
|
||||
)));
|
||||
}
|
||||
|
||||
$subtask_paginator = $this->paginator
|
||||
->setUrl('app', $action, array('pagination' => 'subtasks', 'user_id' => $user_id))
|
||||
->setMax(10)
|
||||
->setOrder('tasks.id')
|
||||
->setQuery($this->subtask->getUserQuery($user_id, $status))
|
||||
->calculateOnlyIf($this->request->getStringParam('pagination') === 'subtasks');
|
||||
/**
|
||||
* My subtasks
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function subtasks()
|
||||
{
|
||||
$user = $this->getUser();
|
||||
|
||||
$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');
|
||||
$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(),
|
||||
)));
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,27 +31,6 @@ class User extends Base
|
||||
return $this->template->layout('user/layout', $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
@@ -138,20 +117,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
|
||||
*
|
||||
|
||||
@@ -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' => '*',
|
||||
|
||||
4
app/Template/app/activity.php
Normal file
4
app/Template/app/activity.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<div class="page-header">
|
||||
<h2><?= t('My activity stream') ?></h2>
|
||||
</div>
|
||||
<?= $this->render('event/events', array('events' => $events)) ?>
|
||||
@@ -3,4 +3,4 @@
|
||||
data-user-id="<?= $user['id'] ?>"
|
||||
data-save-url="<?= $this->url->href('calendar', 'save') ?>"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@@ -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>
|
||||
21
app/Template/app/layout.php
Normal file
21
app/Template/app/layout.php
Normal file
@@ -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>
|
||||
3
app/Template/app/overview.php
Normal file
3
app/Template/app/overview.php
Normal file
@@ -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)) ?>
|
||||
@@ -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: ?>
|
||||
|
||||
23
app/Template/app/sidebar.php
Normal file
23
app/Template/app/sidebar.php
Normal file
@@ -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>
|
||||
@@ -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: ?>
|
||||
|
||||
@@ -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: ?>
|
||||
|
||||
@@ -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): ?>
|
||||
|
||||
@@ -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'])): ?>
|
||||
|
||||
Reference in New Issue
Block a user