diff options
author | Frederic Guillot <fred@kanboard.net> | 2017-03-11 18:08:25 -0500 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2017-03-11 18:08:25 -0500 |
commit | bb9e7916574bd7e21550bf7505757fccae6cbdd0 (patch) | |
tree | e3a063c049e39bd0afd184cc96b45a35da322fcf | |
parent | 748f1c09fbe3e160266e1fb6edb99b29725b6d3a (diff) |
Use same layout as task listing for task search
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | app/Controller/SearchController.php | 4 | ||||
-rw-r--r-- | app/Template/search/activity.php | 75 | ||||
-rw-r--r-- | app/Template/search/index.php | 81 | ||||
-rw-r--r-- | app/Template/search/results.php | 83 | ||||
-rw-r--r-- | app/Template/task_list/header.php | 10 |
6 files changed, 112 insertions, 142 deletions
@@ -9,6 +9,7 @@ Improvements: * Render QR code for TwoFactor authentication without Google Chart API * Add toggle button to show/hide subtasks in task list view +* Use same layout as task listing for task search * Display tags in task list view * Make user actions available from contextual menu * Change users and groups list layout diff --git a/app/Controller/SearchController.php b/app/Controller/SearchController.php index c9213085..e909a99c 100644 --- a/app/Controller/SearchController.php +++ b/app/Controller/SearchController.php @@ -3,6 +3,7 @@ namespace Kanboard\Controller; use Kanboard\Filter\TaskProjectsFilter; +use Kanboard\Model\TaskModel; /** * Search Controller @@ -21,11 +22,12 @@ class SearchController extends BaseController $paginator = $this->paginator ->setUrl('SearchController', 'index', array('search' => $search)) ->setMax(30) - ->setOrder('tasks.id') + ->setOrder(TaskModel::TABLE.'.id') ->setDirection('DESC'); if ($search !== '' && ! empty($projects)) { $paginator + ->setFormatter($this->taskListFormatter) ->setQuery($this->taskLexer ->build($search) ->withFilter(new TaskProjectsFilter(array_keys($projects))) diff --git a/app/Template/search/activity.php b/app/Template/search/activity.php index 6be346b6..c48cce22 100644 --- a/app/Template/search/activity.php +++ b/app/Template/search/activity.php @@ -1,45 +1,40 @@ -<section id="main"> - <div class="page-header"> - <ul> - <li> - <?= $this->url->icon('search', t('Search tasks'), 'SearchController', 'index') ?> - </li> - </ul> - </div> +<div class="page-header"> + <ul> + <li> + <?= $this->url->icon('search', t('Search tasks'), 'SearchController', 'index') ?> + </li> + </ul> +</div> - <div class="filter-box"> - <form method="get" action="<?= $this->url->dir() ?>" class="search"> - <?= $this->form->hidden('controller', $values) ?> - <?= $this->form->hidden('action', $values) ?> +<div class="filter-box margin-bottom"> + <form method="get" action="<?= $this->url->dir() ?>" class="search"> + <?= $this->form->hidden('controller', $values) ?> + <?= $this->form->hidden('action', $values) ?> - <div class="input-addon"> - <?= $this->form->text('search', $values, array(), array(empty($values['search']) ? 'autofocus' : '', 'placeholder="'.t('Search').'"'), 'input-addon-field') ?> - <div class="input-addon-item"> - <?= $this->render('app/filters_helper') ?> - </div> + <div class="input-addon"> + <?= $this->form->text('search', $values, array(), array(empty($values['search']) ? 'autofocus' : '', 'placeholder="'.t('Search').'"'), 'input-addon-field') ?> + <div class="input-addon-item"> + <?= $this->render('app/filters_helper') ?> </div> - </form> - </div> - - <?php if (empty($values['search'])): ?> - <div class="panel"> - <h3><?= t('Advanced search') ?></h3> - <p><?= t('Example of query: ') ?><strong>project:"My project" creator:me</strong></p> - <ul> - <li><?= t('Search by project: ') ?><strong>project:"My project"</strong></li> - <li><?= t('Search by creator: ') ?><strong>creator:admin</strong></li> - <li><?= t('Search by creation date: ') ?><strong>created:today</strong></li> - <li><?= t('Search by task status: ') ?><strong>status:open</strong></li> - <li><?= t('Search by task title: ') ?><strong>title:"My task"</strong></li> - </ul> - <p><i class="fa fa-external-link fa-fw"></i><?= $this->url->doc(t('View advanced search syntax'), 'search') ?></p> </div> - <?php elseif (! empty($values['search']) && $nb_events === 0): ?> - <p class="alert"><?= t('Nothing found.') ?></p> - <?php else: ?> - <div class="margin-top"> - <?= $this->render('event/events', array('events' => $events)) ?> - </div> - <?php endif ?> + </form> +</div> -</section> +<?php if (empty($values['search'])): ?> + <div class="panel"> + <h3><?= t('Advanced search') ?></h3> + <p><?= t('Example of query: ') ?><strong>project:"My project" creator:me</strong></p> + <ul> + <li><?= t('Search by project: ') ?><strong>project:"My project"</strong></li> + <li><?= t('Search by creator: ') ?><strong>creator:admin</strong></li> + <li><?= t('Search by creation date: ') ?><strong>created:today</strong></li> + <li><?= t('Search by task status: ') ?><strong>status:open</strong></li> + <li><?= t('Search by task title: ') ?><strong>title:"My task"</strong></li> + </ul> + <p><i class="fa fa-external-link fa-fw"></i><?= $this->url->doc(t('View advanced search syntax'), 'search') ?></p> + </div> +<?php elseif (! empty($values['search']) && $nb_events === 0): ?> + <p class="alert"><?= t('Nothing found.') ?></p> +<?php else: ?> + <?= $this->render('event/events', array('events' => $events)) ?> +<?php endif ?> diff --git a/app/Template/search/index.php b/app/Template/search/index.php index 9a5f2931..16bbac0f 100644 --- a/app/Template/search/index.php +++ b/app/Template/search/index.php @@ -1,47 +1,44 @@ -<section id="main"> - <div class="page-header"> - <ul> - <li> - <?= $this->url->icon('search', t('Activity stream search'), 'SearchController', 'activity') ?> - </li> - </ul> - </div> +<div class="page-header"> + <ul> + <li> + <?= $this->url->icon('search', t('Activity stream search'), 'SearchController', 'activity') ?> + </li> + </ul> +</div> - <div class="filter-box"> - <form method="get" action="<?= $this->url->dir() ?>" class="search"> - <?= $this->form->hidden('controller', $values) ?> - <?= $this->form->hidden('action', $values) ?> +<div class="filter-box margin-bottom"> + <form method="get" action="<?= $this->url->dir() ?>" class="search"> + <?= $this->form->hidden('controller', $values) ?> + <?= $this->form->hidden('action', $values) ?> - <div class="input-addon"> - <?= $this->form->text('search', $values, array(), array(empty($values['search']) ? 'autofocus' : '', 'placeholder="'.t('Search').'"'), 'input-addon-field') ?> - <div class="input-addon-item"> - <?= $this->render('app/filters_helper') ?> - </div> + <div class="input-addon"> + <?= $this->form->text('search', $values, array(), array(empty($values['search']) ? 'autofocus' : '', 'placeholder="'.t('Search').'"'), 'input-addon-field') ?> + <div class="input-addon-item"> + <?= $this->render('app/filters_helper') ?> </div> - </form> - </div> - - <?php if (empty($values['search'])): ?> - <div class="panel"> - <h3><?= t('Advanced search') ?></h3> - <p><?= t('Example of query: ') ?><strong>project:"My project" assignee:me due:tomorrow</strong></p> - <ul> - <li><?= t('Search by project: ') ?><strong>project:"My project"</strong></li> - <li><?= t('Search by column: ') ?><strong>column:"Work in progress"</strong></li> - <li><?= t('Search by assignee: ') ?><strong>assignee:nobody</strong></li> - <li><?= t('Search by color: ') ?><strong>color:Blue</strong></li> - <li><?= t('Search by category: ') ?><strong>category:"Feature Request"</strong></li> - <li><?= t('Search by description: ') ?><strong>description:"Something to find"</strong></li> - <li><?= t('Search by due date: ') ?><strong>due:2015-07-01</strong></li> - </ul> - <p><i class="fa fa-external-link fa-fw"></i><?= $this->url->doc(t('View advanced search syntax'), 'search') ?></p> </div> - <?php elseif (! empty($values['search']) && $paginator->isEmpty()): ?> - <p class="alert"><?= t('Nothing found.') ?></p> - <?php elseif (! $paginator->isEmpty()): ?> - <?= $this->render('search/results', array( - 'paginator' => $paginator, - )) ?> - <?php endif ?> + </form> +</div> -</section> +<?php if (empty($values['search'])): ?> + <div class="panel"> + <h3><?= t('Advanced search') ?></h3> + <p><?= t('Example of query: ') ?><strong>project:"My project" assignee:me due:tomorrow</strong></p> + <ul> + <li><?= t('Search by project: ') ?><strong>project:"My project"</strong></li> + <li><?= t('Search by column: ') ?><strong>column:"Work in progress"</strong></li> + <li><?= t('Search by assignee: ') ?><strong>assignee:nobody</strong></li> + <li><?= t('Search by color: ') ?><strong>color:Blue</strong></li> + <li><?= t('Search by category: ') ?><strong>category:"Feature Request"</strong></li> + <li><?= t('Search by description: ') ?><strong>description:"Something to find"</strong></li> + <li><?= t('Search by due date: ') ?><strong>due:2015-07-01</strong></li> + </ul> + <p><i class="fa fa-external-link fa-fw"></i><?= $this->url->doc(t('View advanced search syntax'), 'search') ?></p> + </div> +<?php elseif (! empty($values['search']) && $paginator->isEmpty()): ?> + <p class="alert"><?= t('Nothing found.') ?></p> +<?php elseif (! $paginator->isEmpty()): ?> + <?= $this->render('search/results', array( + 'paginator' => $paginator, + )) ?> +<?php endif ?> diff --git a/app/Template/search/results.php b/app/Template/search/results.php index f4d6d1db..f5a4cfc8 100644 --- a/app/Template/search/results.php +++ b/app/Template/search/results.php @@ -1,58 +1,31 @@ -<table class="table-small table-scrolling margin-top"> - <tr> - <th class="column-5"><?= $paginator->order(t('Id'), 'tasks.id') ?></th> - <th class="column-8"><?= $paginator->order(t('Project'), 'tasks.project_id') ?></th> - <th class="column-10"><?= $paginator->order(t('Swimlane'), 'tasks.swimlane_id') ?></th> - <th class="column-10"><?= $paginator->order(t('Column'), 'tasks.column_id') ?></th> - <th class="column-10"><?= $paginator->order(t('Category'), 'tasks.category_id') ?></th> - <th><?= $paginator->order(t('Title'), 'tasks.title') ?></th> - <th class="column-10"><?= $paginator->order(t('Assignee'), 'users.username') ?></th> - <th class="column-10"><?= $paginator->order(t('Due date'), 'tasks.date_due') ?></th> - <th class="column-5"><?= $paginator->order(t('Status'), 'tasks.is_active') ?></th> - </tr> +<div class="table-list"> + <?= $this->render('task_list/header', array( + 'paginator' => $paginator, + )) ?> + <?php foreach ($paginator->getCollection() as $task): ?> - <tr> - <td class="color-<?= $task['color_id'] ?>"> - <?php if ($this->user->hasProjectAccess('TaskModificationController', 'edit', $task['project_id'])): ?> - <?= $this->render('task/dropdown', array('task' => $task)) ?> - <?php else: ?> - #<?= $task['id'] ?> - <?php endif ?> - </td> - <td> - <?= $this->url->link($this->text->e($task['project_name']), 'BoardViewController', 'show', array('project_id' => $task['project_id'])) ?> - </td> - <td> - <?= $this->text->e($task['swimlane_name']) ?> - </td> - <td> - <?= $this->text->e($task['column_name']) ?> - </td> - <td> - <?= $this->text->e($task['category_name']) ?> - </td> - <td> - <?= $this->url->link($this->text->e($task['title']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), false, '', t('View this task')) ?> - </td> - <td> - <?php if ($task['assignee_username']): ?> - <?= $this->text->e($task['assignee_name'] ?: $task['assignee_username']) ?> - <?php else: ?> - <?= t('Unassigned') ?> - <?php endif ?> - </td> - <td> - <?= $this->dt->date($task['date_due']) ?> - </td> - <td> - <?php if ($task['is_active'] == \Kanboard\Model\TaskModel::STATUS_OPEN): ?> - <?= t('Open') ?> - <?php else: ?> - <?= t('Closed') ?> - <?php endif ?> - </td> - </tr> + <div class="table-list-row color-<?= $task['color_id'] ?>"> + <?= $this->render('task_list/task_title', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_details', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_avatars', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_icons', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_subtasks', array( + 'task' => $task, + )) ?> + </div> <?php endforeach ?> -</table> +</div> -<?= $paginator ?> +<?= $paginator ?>
\ No newline at end of file diff --git a/app/Template/task_list/header.php b/app/Template/task_list/header.php index 6501a919..7704e2df 100644 --- a/app/Template/task_list/header.php +++ b/app/Template/task_list/header.php @@ -7,10 +7,12 @@ <?php endif ?> </div> <div class="table-list-header-menu"> - <?php if ($this->user->hasSubtaskListActivated()): ?> - <?= $this->url->icon('tasks', t('Hide subtasks'), 'TaskListController', 'show', array('project_id' => $project['id'], 'hide_subtasks' => 1)) ?> - <?php else: ?> - <?= $this->url->icon('tasks', t('Show subtasks'), 'TaskListController', 'show', array('project_id' => $project['id'], 'show_subtasks' => 1)) ?> + <?php if (isset($project)): ?> + <?php if ($this->user->hasSubtaskListActivated()): ?> + <?= $this->url->icon('tasks', t('Hide subtasks'), 'TaskListController', 'show', array('project_id' => $project['id'], 'hide_subtasks' => 1)) ?> + <?php else: ?> + <?= $this->url->icon('tasks', t('Show subtasks'), 'TaskListController', 'show', array('project_id' => $project['id'], 'show_subtasks' => 1)) ?> + <?php endif ?> <?php endif ?> <?= $this->render('task_list/sort_menu', array('paginator' => $paginator)) ?> |