diff options
author | Frédéric Guillot <fred@kanboard.net> | 2014-11-15 21:49:06 -0500 |
---|---|---|
committer | Frédéric Guillot <fred@kanboard.net> | 2014-11-15 21:49:06 -0500 |
commit | aa6fffb05a7d84a36991341610675499b6ea8a79 (patch) | |
tree | e0eb08e76e61dfc5cc56ae0bfb7daf7dda49fc99 /app | |
parent | af93754ec99d8748677dc2cfd92137a8698a90fa (diff) |
Add pagination and sorting to the dashboard
Diffstat (limited to 'app')
-rw-r--r-- | app/Controller/App.php | 132 | ||||
-rw-r--r-- | app/Controller/Project.php | 8 | ||||
-rw-r--r-- | app/Model/Project.php | 34 | ||||
-rw-r--r-- | app/Model/ProjectAnalytic.php | 2 | ||||
-rw-r--r-- | app/Model/ProjectPaginator.php | 49 | ||||
-rw-r--r-- | app/Model/SubTask.php | 32 | ||||
-rw-r--r-- | app/Model/SubtaskPaginator.php | 68 | ||||
-rw-r--r-- | app/Model/TaskFinder.php | 94 | ||||
-rw-r--r-- | app/Model/TaskPaginator.php | 139 | ||||
-rw-r--r-- | app/Template/app/dashboard.php | 26 | ||||
-rw-r--r-- | app/Template/app/index.php | 114 | ||||
-rw-r--r-- | app/Template/app/projects.php | 33 | ||||
-rw-r--r-- | app/Template/app/subtasks.php | 31 | ||||
-rw-r--r-- | app/Template/app/tasks.php | 31 | ||||
-rw-r--r-- | app/helpers.php | 6 |
15 files changed, 514 insertions, 285 deletions
diff --git a/app/Controller/App.php b/app/Controller/App.php index 993149c5..2458800a 100644 --- a/app/Controller/App.php +++ b/app/Controller/App.php @@ -20,17 +20,137 @@ class App extends Base */ public function index() { + $paginate = $this->request->getStringParam('paginate', 'userTasks'); + $offset = $this->request->getIntegerParam('offset', 0); + $direction = $this->request->getStringParam('direction'); + $order = $this->request->getStringParam('order'); + $user_id = $this->acl->getUserId(); $projects = $this->projectPermission->getMemberProjects($user_id); $project_ids = array_keys($projects); - $this->response->html($this->template->layout('app/index', array( + $params = array( + 'title' => t('Dashboard'), 'board_selector' => $this->projectPermission->getAllowedProjects($user_id), 'events' => $this->projectActivity->getProjects($project_ids, 10), - 'tasks' => $this->taskFinder->getAllTasksByUser($user_id), - 'subtasks' => $this->subTask->getAllByUser($user_id, array(SubTask::STATUS_TODO, SubTask::STATUS_INPROGRESS)), - 'projects' => $this->project->getSummary($project_ids), - 'title' => t('Dashboard'), - ))); + ); + + $params += $this->getTaskPagination($user_id, $paginate, $offset, $order, $direction); + $params += $this->getSubtaskPagination($user_id, $paginate, $offset, $order, $direction); + $params += $this->getProjectPagination($project_ids, $paginate, $offset, $order, $direction); + + $this->response->html($this->template->layout('app/dashboard', $params)); + } + + /** + * Get tasks pagination + * + * @access public + */ + private function getTaskPagination($user_id, $paginate, $offset, $order, $direction) + { + $limit = 10; + + if (! in_array($order, array('tasks.id', 'project_name', 'title'))) { + $order = 'tasks.id'; + $direction = 'ASC'; + } + + if ($paginate === 'userTasks') { + $tasks = $this->taskPaginator->userTasks($user_id, $offset, $limit, $order, $direction); + } + else { + $offset = 0; + $tasks = $this->taskPaginator->userTasks($user_id, $offset, $limit); + } + + return array( + 'tasks' => $tasks, + 'task_pagination' => array( + 'controller' => 'app', + 'action' => 'index', + 'params' => array('paginate' => 'userTasks'), + 'direction' => $direction, + 'order' => $order, + 'total' => $this->taskPaginator->countUserTasks($user_id), + 'offset' => $offset, + 'limit' => $limit, + ) + ); + } + + /** + * Get subtasks pagination + * + * @access public + */ + private function getSubtaskPagination($user_id, $paginate, $offset, $order, $direction) + { + $status = array(SubTask::STATUS_TODO, SubTask::STATUS_INPROGRESS); + $limit = 10; + + if (! in_array($order, array('tasks.id', 'project_name', 'status', 'title'))) { + $order = 'tasks.id'; + $direction = 'ASC'; + } + + if ($paginate === 'userSubtasks') { + $subtasks = $this->subtaskPaginator->userSubtasks($user_id, $status, $offset, $limit, $order, $direction); + } + else { + $offset = 0; + $subtasks = $this->subtaskPaginator->userSubtasks($user_id, $status, $offset, $limit); + } + + return array( + 'subtasks' => $subtasks, + 'subtask_pagination' => array( + 'controller' => 'app', + 'action' => 'index', + 'params' => array('paginate' => 'userSubtasks'), + 'direction' => $direction, + 'order' => $order, + 'total' => $this->subtaskPaginator->countUserSubtasks($user_id, $status), + 'offset' => $offset, + 'limit' => $limit, + ) + ); + } + + /** + * Get projects pagination + * + * @access public + */ + private function getProjectPagination($project_ids, $paginate, $offset, $order, $direction) + { + $limit = 5; + + if (! in_array($order, array('id', 'name'))) { + $order = 'name'; + $direction = 'ASC'; + } + + if ($paginate === 'projectSummaries') { + $projects = $this->projectPaginator->projectSummaries($project_ids, $offset, $limit, $order, $direction); + } + else { + $offset = 0; + $projects = $this->projectPaginator->projectSummaries($project_ids, $offset, $limit); + } + + return array( + 'projects' => $projects, + 'project_pagination' => array( + 'controller' => 'app', + 'action' => 'index', + 'params' => array('paginate' => 'projectSummaries'), + 'direction' => $direction, + 'order' => $order, + 'total' => count($project_ids), + 'offset' => $offset, + 'limit' => $limit, + ) + ); } } diff --git a/app/Controller/Project.php b/app/Controller/Project.php index a479b1d6..cac5e0b8 100644 --- a/app/Controller/Project.php +++ b/app/Controller/Project.php @@ -428,8 +428,8 @@ class Project extends Base $limit = 25; if ($search !== '') { - $tasks = $this->taskFinder->search($project['id'], $search, $offset, $limit, $order, $direction); - $nb_tasks = $this->taskFinder->countSearch($project['id'], $search); + $tasks = $this->taskPaginator->searchTasks($project['id'], $search, $offset, $limit, $order, $direction); + $nb_tasks = $this->taskPaginator->countSearchTasks($project['id'], $search); } $this->response->html($this->template->layout('project_search', array( @@ -472,8 +472,8 @@ class Project extends Base $offset = $this->request->getIntegerParam('offset', 0); $limit = 25; - $tasks = $this->taskFinder->getClosedTasks($project['id'], $offset, $limit, $order, $direction); - $nb_tasks = $this->taskFinder->countByProjectId($project['id'], array(TaskModel::STATUS_CLOSED)); + $tasks = $this->taskPaginator->closedTasks($project['id'], $offset, $limit, $order, $direction); + $nb_tasks = $this->taskPaginator->countClosedTasks($project['id']); $this->response->html($this->template->layout('project_tasks', array( 'board_selector' => $this->projectPermission->getAllowedProjects($this->acl->getUserId()), diff --git a/app/Model/Project.php b/app/Model/Project.php index 2abee2aa..8b842519 100644 --- a/app/Model/Project.php +++ b/app/Model/Project.php @@ -96,40 +96,6 @@ class Project extends Base } /** - * Get project summary for a list of project (number of tasks for each column) - * - * @access public - * @param array $project_ids List of project id - * @param integer $status Project status - * @param string $order Sort on this column - * @param string $direction Sorting direction - * @return array Project properties - */ - public function getSummary(array $project_ids, $status = self::ACTIVE, $order = 'name', $direction = 'asc') - { - if (empty($project_ids)) { - return array(); - } - - $projects = $this->db->table(self::TABLE) - ->in('id', $project_ids) - ->eq('is_active', $status) - ->orderby($order, $direction) - ->findAll(); - - foreach ($projects as &$project) { - - $project['columns'] = $this->board->getColumns($project['id']); - - foreach ($project['columns'] as &$column) { - $column['nb_tasks'] = $this->taskFinder->countByColumnId($project['id'], $column['id']); - } - } - - return $projects; - } - - /** * Get all projects, optionaly fetch stats for each project and can check users permissions * * @access public diff --git a/app/Model/ProjectAnalytic.php b/app/Model/ProjectAnalytic.php index 8ecbf1f0..b62248eb 100644 --- a/app/Model/ProjectAnalytic.php +++ b/app/Model/ProjectAnalytic.php @@ -57,7 +57,7 @@ class ProjectAnalytic extends Base foreach ($tasks as $task) { - $user = $users[$task['owner_id']]; + $user = isset($users[$task['owner_id']]) ? $users[$task['owner_id']] : $users[0]; $total++; if (! isset($metrics[$user])) { diff --git a/app/Model/ProjectPaginator.php b/app/Model/ProjectPaginator.php new file mode 100644 index 00000000..9f1c39f0 --- /dev/null +++ b/app/Model/ProjectPaginator.php @@ -0,0 +1,49 @@ +<?php + +namespace Model; + +/** + * Project Paginator + * + * @package model + * @author Frederic Guillot + */ +class ProjectPaginator extends Base +{ + /** + * Get project summary for a list of project (number of tasks for each column) + * + * @access public + * @param array $project_ids List of project id + * @param integer $offset Offset + * @param integer $limit Limit + * @param string $column Sorting column + * @param string $direction Sorting direction + * @return array + */ + public function projectSummaries(array $project_ids, $offset = 0, $limit = 25, $column = 'name', $direction = 'asc') + { + if (empty($project_ids)) { + return array(); + } + + $projects = $this->db + ->table(Project::TABLE) + ->in('id', $project_ids) + ->offset($offset) + ->limit($limit) + ->orderBy($column, $direction) + ->findAll(); + + foreach ($projects as &$project) { + + $project['columns'] = $this->board->getColumns($project['id']); + + foreach ($project['columns'] as &$column) { + $column['nb_tasks'] = $this->taskFinder->countByColumnId($project['id'], $column['id']); + } + } + + return $projects; + } +} diff --git a/app/Model/SubTask.php b/app/Model/SubTask.php index f414da7f..886ad1f3 100644 --- a/app/Model/SubTask.php +++ b/app/Model/SubTask.php @@ -93,38 +93,6 @@ class SubTask extends Base } /** - * Get all subtasks assigned to a user - * - * @access public - * @param integer $user_id User id - * @param array $status List of status - * @return array - */ - public function getAllByUser($user_id, array $status) - { - $status_list = $this->getStatusList(); - $subtasks = $this->db->table(self::TABLE) - ->columns( - self::TABLE.'.*', - Task::TABLE.'.project_id', - Task::TABLE.'.color_id', - Project::TABLE.'.name AS project_name' - ) - ->eq('user_id', $user_id) - ->in(self::TABLE.'.status', $status) - ->join(Task::TABLE, 'id', 'task_id') - ->join(Project::TABLE, 'id', 'project_id', Task::TABLE) - ->asc(Task::TABLE.'.id') - ->findAll(); - - foreach ($subtasks as &$subtask) { - $subtask['status_name'] = $status_list[$subtask['status']]; - } - - return $subtasks; - } - - /** * Get a subtask by the id * * @access public diff --git a/app/Model/SubtaskPaginator.php b/app/Model/SubtaskPaginator.php new file mode 100644 index 00000000..8ccbd696 --- /dev/null +++ b/app/Model/SubtaskPaginator.php @@ -0,0 +1,68 @@ +<?php + +namespace Model; + +/** + * Subtask Paginator + * + * @package model + * @author Frederic Guillot + */ +class SubtaskPaginator extends Base +{ + /** + * Get all subtasks assigned to a user + * + * @access public + * @param integer $user_id User id + * @param array $status List of status + * @param integer $offset Offset + * @param integer $limit Limit + * @param string $column Sorting column + * @param string $direction Sorting direction + * @return array + */ + public function userSubtasks($user_id, array $status, $offset = 0, $limit = 25, $column = 'tasks.id', $direction = 'asc') + { + $status_list = $this->subTask->getStatusList(); + + $subtasks = $this->db->table(SubTask::TABLE) + ->columns( + SubTask::TABLE.'.*', + Task::TABLE.'.project_id', + Task::TABLE.'.color_id', + Project::TABLE.'.name AS project_name' + ) + ->eq('user_id', $user_id) + ->in(SubTask::TABLE.'.status', $status) + ->join(Task::TABLE, 'id', 'task_id') + ->join(Project::TABLE, 'id', 'project_id', Task::TABLE) + ->offset($offset) + ->limit($limit) + ->orderBy($column, $direction) + ->findAll(); + + foreach ($subtasks as &$subtask) { + $subtask['status_name'] = $status_list[$subtask['status']]; + } + + return $subtasks; + } + + /** + * Count all subtasks assigned to the user + * + * @access public + * @param integer $user_id User id + * @param array $status List of status + * @return integer + */ + public function countUserSubtasks($user_id, array $status) + { + return $this->db + ->table(SubTask::TABLE) + ->eq('user_id', $user_id) + ->in('status', $status) + ->count(); + } +} diff --git a/app/Model/TaskFinder.php b/app/Model/TaskFinder.php index 56795152..0e581025 100644 --- a/app/Model/TaskFinder.php +++ b/app/Model/TaskFinder.php @@ -15,10 +15,10 @@ class TaskFinder extends Base /** * Common request to fetch a list of tasks * - * @access private + * @access public * @return \PicoDb\Table */ - private function prepareRequestList() + public function getQuery() { return $this->db ->table(Task::TABLE) @@ -51,51 +51,6 @@ class TaskFinder extends Base } /** - * Task search with pagination - * - * @access public - * @param integer $project_id Project id - * @param string $search Search terms - * @param integer $offset Offset - * @param integer $limit Limit - * @param string $column Sorting column - * @param string $direction Sorting direction - * @return array - */ - public function search($project_id, $search, $offset = 0, $limit = 25, $column = 'tasks.id', $direction = 'DESC') - { - return $this->prepareRequestList() - ->eq('project_id', $project_id) - ->like('title', '%'.$search.'%') - ->offset($offset) - ->limit($limit) - ->orderBy($column, $direction) - ->findAll(); - } - - /** - * Get all completed tasks with pagination - * - * @access public - * @param integer $project_id Project id - * @param integer $offset Offset - * @param integer $limit Limit - * @param string $column Sorting column - * @param string $direction Sorting direction - * @return array - */ - public function getClosedTasks($project_id, $offset = 0, $limit = 25, $column = 'tasks.date_completed', $direction = 'DESC') - { - return $this->prepareRequestList() - ->eq('project_id', $project_id) - ->eq('is_active', Task::STATUS_CLOSED) - ->offset($offset) - ->limit($limit) - ->orderBy($column, $direction) - ->findAll(); - } - - /** * Get all tasks shown on the board (sorted by position) * * @access public @@ -104,7 +59,7 @@ class TaskFinder extends Base */ public function getTasksOnBoard($project_id) { - return $this->prepareRequestList() + return $this->getQuery() ->eq('project_id', $project_id) ->eq('is_active', Task::STATUS_OPEN) ->asc('tasks.position') @@ -112,33 +67,6 @@ class TaskFinder extends Base } /** - * Get all open tasks for a given user - * - * @access public - * @param integer $user_id User id - * @return array - */ - public function getAllTasksByUser($user_id) - { - return $this->db - ->table(Task::TABLE) - ->columns( - 'tasks.id', - 'tasks.title', - 'tasks.date_due', - 'tasks.date_creation', - 'tasks.project_id', - 'tasks.color_id', - 'projects.name AS project_name' - ) - ->join(Project::TABLE, 'id', 'project_id') - ->eq('tasks.owner_id', $user_id) - ->eq('tasks.is_active', Task::STATUS_OPEN) - ->asc('tasks.id') - ->findAll(); - } - - /** * Get all tasks for a given project and status * * @access public @@ -296,22 +224,6 @@ class TaskFinder extends Base } /** - * Count the number of tasks for a custom search - * - * @access public - * @param integer $project_id Project id - * @param string $search Search terms - * @return integer - */ - public function countSearch($project_id, $search) - { - return $this->db->table(Task::TABLE) - ->eq('project_id', $project_id) - ->like('title', '%'.$search.'%') - ->count(); - } - - /** * Return true if the task exists * * @access public diff --git a/app/Model/TaskPaginator.php b/app/Model/TaskPaginator.php new file mode 100644 index 00000000..4ae3566c --- /dev/null +++ b/app/Model/TaskPaginator.php @@ -0,0 +1,139 @@ +<?php + +namespace Model; + +/** + * Task Paginator model + * + * @package model + * @author Frederic Guillot + */ +class TaskPaginator extends Base +{ + /** + * Task search with pagination + * + * @access public + * @param integer $project_id Project id + * @param string $search Search terms + * @param integer $offset Offset + * @param integer $limit Limit + * @param string $column Sorting column + * @param string $direction Sorting direction + * @return array + */ + public function searchTasks($project_id, $search, $offset = 0, $limit = 25, $column = 'tasks.id', $direction = 'DESC') + { + return $this->taskFinder->getQuery() + ->eq('project_id', $project_id) + ->like('title', '%'.$search.'%') + ->offset($offset) + ->limit($limit) + ->orderBy($column, $direction) + ->findAll(); + } + + /** + * Count the number of tasks for a custom search + * + * @access public + * @param integer $project_id Project id + * @param string $search Search terms + * @return integer + */ + public function countSearchTasks($project_id, $search) + { + return $this->db->table(Task::TABLE) + ->eq('project_id', $project_id) + ->like('title', '%'.$search.'%') + ->count(); + } + + /** + * Get all completed tasks with pagination + * + * @access public + * @param integer $project_id Project id + * @param integer $offset Offset + * @param integer $limit Limit + * @param string $column Sorting column + * @param string $direction Sorting direction + * @return array + */ + public function closedTasks($project_id, $offset = 0, $limit = 25, $column = 'tasks.date_completed', $direction = 'DESC') + { + return $this->taskFinder->getQuery() + ->eq('project_id', $project_id) + ->eq('is_active', Task::STATUS_CLOSED) + ->offset($offset) + ->limit($limit) + ->orderBy($column, $direction) + ->findAll(); + } + + /** + * Count all closed tasks + * + * @access public + * @param integer $project_id Project id + * @param array $status List of status id + * @return integer + */ + public function countClosedTasks($project_id) + { + return $this->db + ->table(Task::TABLE) + ->eq('project_id', $project_id) + ->eq('is_active', Task::STATUS_CLOSED) + ->count(); + } + + /** + * Get all open tasks for a given user + * + * @access public + * @param integer $user_id User id + * @param integer $offset Offset + * @param integer $limit Limit + * @param string $column Sorting column + * @param string $direction Sorting direction + * @return array + */ + public function userTasks($user_id, $offset = 0, $limit = 25, $column = 'tasks.id', $direction = 'ASC') + { + return $this->db + ->table(Task::TABLE) + ->columns( + 'tasks.id', + 'tasks.title', + 'tasks.date_due', + 'tasks.date_creation', + 'tasks.project_id', + 'tasks.color_id', + 'projects.name AS project_name' + ) + ->join(Project::TABLE, 'id', 'project_id') + ->eq('tasks.owner_id', $user_id) + ->eq('tasks.is_active', Task::STATUS_OPEN) + ->offset($offset) + ->limit($limit) + ->orderBy($column, $direction) + ->findAll(); + } + + /** + * Count all tasks assigned to the user + * + * @access public + * @param integer $user_id User id + * @return integer + */ + public function countUserTasks($user_id) + { + return $this->db + ->table(Task::TABLE) + ->eq('owner_id', $user_id) + ->eq('is_active', Task::STATUS_OPEN) + ->count(); + } +} diff --git a/app/Template/app/dashboard.php b/app/Template/app/dashboard.php new file mode 100644 index 00000000..9bcd69f6 --- /dev/null +++ b/app/Template/app/dashboard.php @@ -0,0 +1,26 @@ +<section id="main"> + <div class="page-header"> + <ul> + <?php if (Helper\is_admin()): ?> + <li><i class="fa fa-plus fa-fw"></i><?= Helper\a(t('New project'), 'project', 'create') ?></li> + <?php endif ?> + <li><i class="fa fa-lock fa-fw"></i><?= Helper\a(t('New private project'), 'project', 'create', array('private' => 1)) ?></li> + <li><i class="fa fa-folder fa-fw"></i><?= Helper\a(t('Project management'), 'project', 'index') ?></li> + <?php if (Helper\is_admin()): ?> + <li><i class="fa fa-user fa-fw"></i><?= Helper\a(t('User management'), 'user', 'index') ?></li> + <li><i class="fa fa-cog fa-fw"></i><?= Helper\a(t('Settings'), 'config', 'index') ?></li> + <?php endif ?> + </ul> + </div> + <section id="dashboard"> + <div class="dashboard-left-column"> + <?= Helper\Template('app/projects', array('projects' => $projects, 'pagination' => $project_pagination)) ?> + <?= Helper\Template('app/tasks', array('tasks' => $tasks, 'pagination' => $task_pagination)) ?> + <?= Helper\Template('app/subtasks', array('subtasks' => $subtasks, 'pagination' => $subtask_pagination)) ?> + </div> + <div class="dashboard-right-column"> + <h2><?= t('Activity stream') ?></h2> + <?= Helper\template('project_events', array('events' => $events)) ?> + </div> + </section> +</section>
\ No newline at end of file diff --git a/app/Template/app/index.php b/app/Template/app/index.php deleted file mode 100644 index 637bc402..00000000 --- a/app/Template/app/index.php +++ /dev/null @@ -1,114 +0,0 @@ -<section id="main"> - <div class="page-header"> - <ul> - <?php if (Helper\is_admin()): ?> - <li><i class="fa fa-plus fa-fw"></i><?= Helper\a(t('New project'), 'project', 'create') ?></li> - <?php endif ?> - <li><i class="fa fa-lock fa-fw"></i><?= Helper\a(t('New private project'), 'project', 'create', array('private' => 1)) ?></li> - <li><i class="fa fa-folder fa-fw"></i><?= Helper\a(t('Project management'), 'project', 'index') ?></li> - <?php if (Helper\is_admin()): ?> - <li><i class="fa fa-user fa-fw"></i><?= Helper\a(t('User management'), 'user', 'index') ?></li> - <li><i class="fa fa-cog fa-fw"></i><?= Helper\a(t('Settings'), 'config', 'index') ?></li> - <?php endif ?> - </ul> - </div> - <section id="dashboard"> - <div class="dashboard-left-column"> - <h2><?= t('My projects') ?></h2> - <?php if (empty($projects)): ?> - <p class="alert"><?= t('Your are not member of any project.') ?></p> - <?php else: ?> - <table class="table-fixed"> - <tr> - <th class="column-8"> </th> - <th class="column-20"><?= t('Project') ?></th> - <th><?= t('Columns') ?></th> - </tr> - <?php foreach ($projects as $project): ?> - <tr> - <td> - <?= Helper\a('#'.$project['id'], 'board', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link') ?> - </td> - <td> - <?php if (Helper\is_project_admin($project)): ?> - <?= Helper\a('<i class="fa fa-cog"></i>', 'project', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Settings')) ?> - <?php endif ?> - <?= Helper\a(Helper\escape($project['name']), 'board', 'show', array('project_id' => $project['id'])) ?> - </td> - <td class="dashboard-project-stats"> - <?php foreach ($project['columns'] as $column): ?> - <strong title="<?= t('Task count') ?>"><?= $column['nb_tasks'] ?></strong> - <span><?= Helper\escape($column['title']) ?></span> - <?php endforeach ?> - </td> - </tr> - <?php endforeach ?> - </table> - <?php endif ?> - - <h2><?= t('My tasks') ?></h2> - <?php if (empty($tasks)): ?> - <p class="alert"><?= t('There is nothing assigned to you.') ?></p> - <?php else: ?> - <table class="table-fixed"> - <tr> - <th class="column-8"> </th> - <th class="column-20"><?= t('Project') ?></th> - <th><?= t('Task') ?></th> - <th class="column-20"><?= t('Due date') ?></th> - </tr> - <?php foreach ($tasks as $task): ?> - <tr> - <td class="task-table task-<?= $task['color_id'] ?>"> - <?= Helper\a('#'.$task['id'], 'task', 'show', array('task_id' => $task['id'])) ?> - </td> - <td> - <?= Helper\a(Helper\escape($task['project_name']), 'board', 'show', array('project_id' => $task['project_id'])) ?> - </td> - <td> - <?= Helper\a(Helper\escape($task['title']), 'task', 'show', array('task_id' => $task['id'])) ?> - </td> - <td> - <?= dt('%B %e, %Y', $task['date_due']) ?> - </td> - </tr> - <?php endforeach ?> - </table> - <?php endif ?> - - <h2><?= t('My subtasks') ?></h2> - <?php if (empty($subtasks)): ?> - <p class="alert"><?= t('There is nothing assigned to you.') ?></p> - <?php else: ?> - <table class="table-fixed"> - <tr> - <th class="column-8"> </th> - <th class="column-20"><?= t('Project') ?></th> - <th class="column-15"><?= t('Status') ?></th> - <th><?= t('Subtask') ?></th> - </tr> - <?php foreach ($subtasks as $subtask): ?> - <tr> - <td class="task-table task-<?= $subtask['color_id'] ?>"> - <?= Helper\a('#'.$subtask['task_id'], 'task', 'show', array('task_id' => $subtask['task_id'])) ?> - </td> - <td> - <?= Helper\a(Helper\escape($subtask['project_name']), 'board', 'show', array('project_id' => $subtask['project_id'])) ?> - </td> - <td> - <?= Helper\escape($subtask['status_name']) ?> - </td> - <td> - <?= Helper\a(Helper\escape($subtask['title']), 'task', 'show', array('task_id' => $subtask['task_id'])) ?> - </td> - </tr> - <?php endforeach ?> - </table> - <?php endif ?> - - </div> - <div class="dashboard-right-column"> - <h2><?= t('Activity stream') ?></h2> - <?= Helper\template('project_events', array('events' => $events)) ?> - </section> -</section>
\ No newline at end of file diff --git a/app/Template/app/projects.php b/app/Template/app/projects.php new file mode 100644 index 00000000..2c13a052 --- /dev/null +++ b/app/Template/app/projects.php @@ -0,0 +1,33 @@ +<h2><?= t('My projects') ?></h2> +<?php if (empty($projects)): ?> + <p class="alert"><?= t('Your are not member of any project.') ?></p> +<?php else: ?> + <table class="table-fixed"> + <tr> + <th class="column-8"><?= Helper\order('Id', 'id', $pagination) ?></th> + <th class="column-20"><?= Helper\order(t('Project'), 'name', $pagination) ?></th> + <th><?= t('Columns') ?></th> + </tr> + <?php foreach ($projects as $project): ?> + <tr> + <td> + <?= Helper\a('#'.$project['id'], 'board', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link') ?> + </td> + <td> + <?php if (Helper\is_project_admin($project)): ?> + <?= Helper\a('<i class="fa fa-cog"></i>', 'project', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Settings')) ?> + <?php endif ?> + <?= Helper\a(Helper\escape($project['name']), 'board', 'show', array('project_id' => $project['id'])) ?> + </td> + <td class="dashboard-project-stats"> + <?php foreach ($project['columns'] as $column): ?> + <strong title="<?= t('Task count') ?>"><?= $column['nb_tasks'] ?></strong> + <span><?= Helper\escape($column['title']) ?></span> + <?php endforeach ?> + </td> + </tr> + <?php endforeach ?> + </table> + + <?= Helper\paginate($pagination) ?> +<?php endif ?>
\ No newline at end of file diff --git a/app/Template/app/subtasks.php b/app/Template/app/subtasks.php new file mode 100644 index 00000000..f51ef1db --- /dev/null +++ b/app/Template/app/subtasks.php @@ -0,0 +1,31 @@ +<h2><?= t('My subtasks') ?></h2> +<?php if (empty($subtasks)): ?> + <p class="alert"><?= t('There is nothing assigned to you.') ?></p> +<?php else: ?> + <table class="table-fixed"> + <tr> + <th class="column-10"><?= Helper\order(t('Task Id'), 'tasks.id', $pagination) ?></th> + <th class="column-20"><?= Helper\order(t('Project'), 'project_name', $pagination) ?></th> + <th class="column-15"><?= Helper\order(t('Status'), 'status', $pagination) ?></th> + <th><?= Helper\order(t('Subtask'), 'title', $pagination) ?></th> + </tr> + <?php foreach ($subtasks as $subtask): ?> + <tr> + <td class="task-table task-<?= $subtask['color_id'] ?>"> + <?= Helper\a('#'.$subtask['task_id'], 'task', 'show', array('task_id' => $subtask['task_id'])) ?> + </td> + <td> + <?= Helper\a(Helper\escape($subtask['project_name']), 'board', 'show', array('project_id' => $subtask['project_id'])) ?> + </td> + <td> + <?= Helper\escape($subtask['status_name']) ?> + </td> + <td> + <?= Helper\a(Helper\escape($subtask['title']), 'task', 'show', array('task_id' => $subtask['task_id'])) ?> + </td> + </tr> + <?php endforeach ?> + </table> + + <?= Helper\paginate($pagination) ?> +<?php endif ?>
\ No newline at end of file diff --git a/app/Template/app/tasks.php b/app/Template/app/tasks.php new file mode 100644 index 00000000..d1e1ed4e --- /dev/null +++ b/app/Template/app/tasks.php @@ -0,0 +1,31 @@ +<h2><?= t('My tasks') ?></h2> +<?php if (empty($tasks)): ?> + <p class="alert"><?= t('There is nothing assigned to you.') ?></p> +<?php else: ?> + <table class="table-fixed"> + <tr> + <th class="column-8"><?= Helper\order('Id', 'tasks.id', $pagination) ?></th> + <th class="column-20"><?= Helper\order(t('Project'), 'project_name', $pagination) ?></th> + <th><?= Helper\order(t('Task'), 'title', $pagination) ?></th> + <th class="column-20"><?= Helper\order(t('Due date'), 'date_due', $pagination) ?></th> + </tr> + <?php foreach ($tasks as $task): ?> + <tr> + <td class="task-table task-<?= $task['color_id'] ?>"> + <?= Helper\a('#'.$task['id'], 'task', 'show', array('task_id' => $task['id'])) ?> + </td> + <td> + <?= Helper\a(Helper\escape($task['project_name']), 'board', 'show', array('project_id' => $task['project_id'])) ?> + </td> + <td> + <?= Helper\a(Helper\escape($task['title']), 'task', 'show', array('task_id' => $task['id'])) ?> + </td> + <td> + <?= dt('%B %e, %Y', $task['date_due']) ?> + </td> + </tr> + <?php endforeach ?> + </table> + + <?= Helper\paginate($pagination) ?> +<?php endif ?>
\ No newline at end of file diff --git a/app/helpers.php b/app/helpers.php index 14d6a5ee..b53e59e7 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -618,8 +618,8 @@ function paginate(array $pagination) { extract($pagination); - $html = '<div id="pagination">'; - $html .= '<span id="pagination-previous">'; + $html = '<div class="pagination">'; + $html .= '<span class="pagination-previous">'; if ($pagination['offset'] > 0) { $offset = $pagination['offset'] - $limit; @@ -630,7 +630,7 @@ function paginate(array $pagination) } $html .= '</span>'; - $html .= '<span id="pagination-next">'; + $html .= '<span class="pagination-next">'; if (($total - $pagination['offset']) > $limit) { $offset = $pagination['offset'] + $limit; |