diff options
Diffstat (limited to 'app')
110 files changed, 833 insertions, 633 deletions
diff --git a/app/Api/Procedure/TaskMetadataProcedure.php b/app/Api/Procedure/TaskMetadataProcedure.php new file mode 100644 index 00000000..169482f5 --- /dev/null +++ b/app/Api/Procedure/TaskMetadataProcedure.php @@ -0,0 +1,38 @@ +<?php + +namespace Kanboard\Api\Procedure; + +use Kanboard\Api\Authorization\TaskAuthorization; + +/** + * Class TaskMetadataProcedure + * + * @package Kanboard\Api\Procedure + * @author Frederic Guillot + */ +class TaskMetadataProcedure extends BaseProcedure +{ + public function getTaskMetadata($task_id) + { + TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTask', $task_id); + return $this->taskMetadataModel->getAll($task_id); + } + + public function getTaskMetadataByName($task_id, $name) + { + TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTask', $task_id); + return $this->taskMetadataModel->get($task_id, $name); + } + + public function saveTaskMetadata($task_id, array $values) + { + TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'updateTask', $task_id); + return $this->taskMetadataModel->save($task_id, $values); + } + + public function removeTaskMetadata($task_id, $name) + { + TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'updateTask', $task_id); + return $this->taskMetadataModel->remove($task_id, $name); + } +} diff --git a/app/Api/Procedure/TaskProcedure.php b/app/Api/Procedure/TaskProcedure.php index 8661deef..ee9242d1 100644 --- a/app/Api/Procedure/TaskProcedure.php +++ b/app/Api/Procedure/TaskProcedure.php @@ -92,7 +92,7 @@ class TaskProcedure extends BaseProcedure $recurrence_basedate = 0, $reference = '') { ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'createTask', $project_id); - + if ($owner_id !== 0 && ! $this->projectPermissionModel->isAssignable($project_id, $owner_id)) { return false; } diff --git a/app/Controller/ActivityController.php b/app/Controller/ActivityController.php index 9f9841af..476e4aac 100644 --- a/app/Controller/ActivityController.php +++ b/app/Controller/ActivityController.php @@ -40,6 +40,7 @@ class ActivityController extends BaseController 'task' => $task, 'project' => $this->projectModel->getById($task['project_id']), 'events' => $this->helper->projectActivity->getTaskEvents($task['id']), + 'tags' => $this->taskTagModel->getList($task['id']), ))); } } diff --git a/app/Controller/TaskCreationController.php b/app/Controller/TaskCreationController.php index 073b31b0..5f1337e5 100644 --- a/app/Controller/TaskCreationController.php +++ b/app/Controller/TaskCreationController.php @@ -2,6 +2,8 @@ namespace Kanboard\Controller; +use Kanboard\Core\Controller\PageNotFoundException; + /** * Task Creation Controller * @@ -14,9 +16,9 @@ class TaskCreationController extends BaseController * Display a form to create a new task * * @access public - * @param array $values - * @param array $errors - * @throws \Kanboard\Core\Controller\PageNotFoundException + * @param array $values + * @param array $errors + * @throws PageNotFoundException */ public function show(array $values = array(), array $errors = array()) { @@ -24,15 +26,7 @@ class TaskCreationController extends BaseController $swimlanes_list = $this->swimlaneModel->getList($project['id'], false, true); if (empty($values)) { - $values = array( - 'swimlane_id' => $this->request->getIntegerParam('swimlane_id', key($swimlanes_list)), - 'column_id' => $this->request->getIntegerParam('column_id'), - 'color_id' => $this->colorModel->getDefaultColor(), - 'owner_id' => $this->userSession->getId(), - ); - - $values = $this->hook->merge('controller:task:form:default', $values, array('default_values' => $values)); - $values = $this->hook->merge('controller:task-creation:form:default', $values, array('default_values' => $values)); + $values = $this->prepareValues($swimlanes_list); } $this->response->html($this->template->render('task_creation/show', array( @@ -43,7 +37,6 @@ class TaskCreationController extends BaseController 'users_list' => $this->projectUserRoleModel->getAssignableUsersList($project['id'], true, false, true), 'categories_list' => $this->categoryModel->getList($project['id']), 'swimlanes_list' => $swimlanes_list, - 'title' => $project['name'].' > '.t('New task') ))); } @@ -61,17 +54,17 @@ class TaskCreationController extends BaseController if ($valid && $this->taskCreationModel->create($values)) { $this->flash->success(t('Task created successfully.')); - return $this->afterSave($project, $values); + $this->afterSave($project, $values); + } else { + $this->flash->failure(t('Unable to create your task.')); + $this->show($values, $errors); } - - $this->flash->failure(t('Unable to create your task.')); - return $this->show($values, $errors); } private function afterSave(array $project, array &$values) { if (isset($values['another_task']) && $values['another_task'] == 1) { - return $this->show(array( + $this->show(array( 'owner_id' => $values['owner_id'], 'color_id' => $values['color_id'], 'category_id' => isset($values['category_id']) ? $values['category_id'] : 0, @@ -79,8 +72,29 @@ class TaskCreationController extends BaseController 'swimlane_id' => isset($values['swimlane_id']) ? $values['swimlane_id'] : 0, 'another_task' => 1, )); + } else { + $this->response->redirect($this->helper->url->to('BoardViewController', 'show', array('project_id' => $project['id'])), true); } + } + + /** + * Prepare form values + * + * @access protected + * @param array $swimlanes_list + * @return array + */ + protected function prepareValues(array $swimlanes_list) + { + $values = array( + 'swimlane_id' => $this->request->getIntegerParam('swimlane_id', key($swimlanes_list)), + 'column_id' => $this->request->getIntegerParam('column_id'), + 'color_id' => $this->colorModel->getDefaultColor(), + 'owner_id' => $this->userSession->getId(), + ); - return $this->response->redirect($this->helper->url->to('BoardViewController', 'show', array('project_id' => $project['id'])), true); + $values = $this->hook->merge('controller:task:form:default', $values, array('default_values' => $values)); + $values = $this->hook->merge('controller:task-creation:form:default', $values, array('default_values' => $values)); + return $values; } } diff --git a/app/Controller/TaskGanttCreationController.php b/app/Controller/TaskGanttCreationController.php index 07b74a49..0fbac8bb 100644 --- a/app/Controller/TaskGanttCreationController.php +++ b/app/Controller/TaskGanttCreationController.php @@ -38,7 +38,6 @@ class TaskGanttCreationController extends BaseController 'users_list' => $this->projectUserRoleModel->getAssignableUsersList($project['id'], true, false, true), 'categories_list' => $this->categoryModel->getList($project['id']), 'swimlanes_list' => $this->swimlaneModel->getList($project['id'], false, true), - 'title' => $project['name'].' > '.t('New task') ))); } @@ -54,17 +53,12 @@ class TaskGanttCreationController extends BaseController list($valid, $errors) = $this->taskValidator->validateCreation($values); - if ($valid) { - $task_id = $this->taskCreationModel->create($values); - - if ($task_id !== false) { - $this->flash->success(t('Task created successfully.')); - return $this->response->redirect($this->helper->url->to('TaskGanttController', 'show', array('project_id' => $project['id']))); - } else { - $this->flash->failure(t('Unable to create your task.')); - } + if ($valid && $this->taskCreationModel->create($values)) { + $this->flash->success(t('Task created successfully.')); + $this->response->redirect($this->helper->url->to('TaskGanttController', 'show', array('project_id' => $project['id']))); + } else { + $this->flash->failure(t('Unable to create your task.')); + $this->show($values, $errors); } - - return $this->show($values, $errors); } } diff --git a/app/Controller/TaskModificationController.php b/app/Controller/TaskModificationController.php index b064123a..cbc3777a 100644 --- a/app/Controller/TaskModificationController.php +++ b/app/Controller/TaskModificationController.php @@ -37,11 +37,7 @@ class TaskModificationController extends BaseController $project = $this->projectModel->getById($task['project_id']); if (empty($values)) { - $values = $task; - $values = $this->hook->merge('controller:task:form:default', $values, array('default_values' => $values)); - $values = $this->hook->merge('controller:task-modification:form:default', $values, array('default_values' => $values)); - $values = $this->dateParser->format($values, array('date_due'), $this->dateParser->getUserDateFormat()); - $values = $this->dateParser->format($values, array('date_started'), $this->dateParser->getUserDateTimeFormat()); + $values = $this->prepareValues($task); } $this->response->html($this->template->render('task_modification/show', array( @@ -75,4 +71,19 @@ class TaskModificationController extends BaseController $this->edit($values, $errors); } } + + /** + * Prepare form values + * + * @access protected + * @param array $task + * @return array + */ + protected function prepareValues(array $task) + { + $values = $task; + $values = $this->hook->merge('controller:task:form:default', $values, array('default_values' => $values)); + $values = $this->hook->merge('controller:task-modification:form:default', $values, array('default_values' => $values)); + return $values; + } } diff --git a/app/Controller/TaskViewController.php b/app/Controller/TaskViewController.php index f40f8bea..36597457 100644 --- a/app/Controller/TaskViewController.php +++ b/app/Controller/TaskViewController.php @@ -22,7 +22,6 @@ class TaskViewController extends BaseController { $project = $this->projectModel->getByToken($this->request->getStringParam('token')); - // Token verification if (empty($project)) { throw AccessForbiddenException::getInstance()->withoutLayout(); } @@ -63,19 +62,9 @@ class TaskViewController extends BaseController $task = $this->getTask(); $subtasks = $this->subtaskModel->getAll($task['id']); - $values = array( - 'id' => $task['id'], - 'date_started' => $task['date_started'], - 'time_estimated' => $task['time_estimated'] ?: '', - 'time_spent' => $task['time_spent'] ?: '', - ); - - $values = $this->dateParser->format($values, array('date_started'), $this->dateParser->getUserDateTimeFormat()); - $this->response->html($this->helper->layout->task('task/show', array( 'task' => $task, 'project' => $this->projectModel->getById($task['project_id']), - 'values' => $values, 'files' => $this->taskFileModel->getAllDocuments($task['id']), 'images' => $this->taskFileModel->getAllImages($task['id']), 'comments' => $this->commentModel->getAll($task['id'], $this->userSession->getCommentSorting()), @@ -102,6 +91,7 @@ class TaskViewController extends BaseController 'lead_time' => $this->taskAnalyticModel->getLeadTime($task), 'cycle_time' => $this->taskAnalyticModel->getCycleTime($task), 'time_spent_columns' => $this->taskAnalyticModel->getTimeSpentByColumn($task), + 'tags' => $this->taskTagModel->getList($task['id']), ))); } @@ -126,6 +116,7 @@ class TaskViewController extends BaseController 'task' => $task, 'project' => $this->projectModel->getById($task['project_id']), 'subtask_paginator' => $subtask_paginator, + 'tags' => $this->taskTagModel->getList($task['id']), ))); } @@ -142,6 +133,7 @@ class TaskViewController extends BaseController 'task' => $task, 'project' => $this->projectModel->getById($task['project_id']), 'transitions' => $this->transitionModel->getAllByTask($task['id']), + 'tags' => $this->taskTagModel->getList($task['id']), ))); } } diff --git a/app/Core/Filter/LexerBuilder.php b/app/Core/Filter/LexerBuilder.php index 626d7614..e3ab725b 100644 --- a/app/Core/Filter/LexerBuilder.php +++ b/app/Core/Filter/LexerBuilder.php @@ -51,7 +51,7 @@ class LexerBuilder */ public function __construct() { - $this->lexer = new Lexer; + $this->lexer = new Lexer(); $this->queryBuilder = new QueryBuilder(); } diff --git a/app/Core/Mail/Transport/Smtp.php b/app/Core/Mail/Transport/Smtp.php index 66f0a3aa..1f4e54ce 100644 --- a/app/Core/Mail/Transport/Smtp.php +++ b/app/Core/Mail/Transport/Smtp.php @@ -24,6 +24,15 @@ class Smtp extends Mail $transport->setUsername(MAIL_SMTP_USERNAME); $transport->setPassword(MAIL_SMTP_PASSWORD); $transport->setEncryption(MAIL_SMTP_ENCRYPTION); + if (HTTP_VERIFY_SSL_CERTIFICATE === false) { + $transport->setStreamOptions(array( + 'ssl' => array( + 'allow_self_signed' => true, + 'verify_peer' => false, + 'verify_peer_name' => false, + ) + )); + } return $transport; } diff --git a/app/Core/Plugin/Hook.php b/app/Core/Plugin/Hook.php index ade69150..ca197937 100644 --- a/app/Core/Plugin/Hook.php +++ b/app/Core/Plugin/Hook.php @@ -96,4 +96,21 @@ class Hook return null; } + + /** + * Hook with reference + * + * @access public + * @param string $hook + * @param mixed $param + * @return mixed + */ + public function reference($hook, &$param) + { + foreach ($this->getListeners($hook) as $listener) { + $listener($param); + } + + return $param; + } } diff --git a/app/Formatter/BoardFormatter.php b/app/Formatter/BoardFormatter.php index 350dde6c..df443a52 100644 --- a/app/Formatter/BoardFormatter.php +++ b/app/Formatter/BoardFormatter.php @@ -44,6 +44,13 @@ class BoardFormatter extends BaseFormatter implements FormatterInterface { $swimlanes = $this->swimlaneModel->getSwimlanes($this->projectId); $columns = $this->columnModel->getAll($this->projectId); + + if (empty($swimlanes) || empty($columns)) { + return array(); + } + + $this->hook->reference('formatter:board:query', $this->query); + $tasks = $this->query ->eq(TaskModel::TABLE.'.project_id', $this->projectId) ->asc(TaskModel::TABLE.'.position') @@ -52,10 +59,6 @@ class BoardFormatter extends BaseFormatter implements FormatterInterface $task_ids = array_column($tasks, 'id'); $tags = $this->taskTagModel->getTagsByTasks($task_ids); - if (empty($swimlanes) || empty($columns)) { - return array(); - } - return BoardSwimlaneFormatter::getInstance($this->container) ->withSwimlanes($swimlanes) ->withColumns($columns) diff --git a/app/Helper/FormHelper.php b/app/Helper/FormHelper.php index c2ea1d72..0bb94d39 100644 --- a/app/Helper/FormHelper.php +++ b/app/Helper/FormHelper.php @@ -307,6 +307,48 @@ class FormHelper extends Base } /** + * Date field + * + * @access public + * @param string $label + * @param string $name + * @param array $values + * @param array $errors + * @param array $attributes + * @return string + */ + public function date($label, $name, array $values, array $errors = array(), array $attributes = array()) + { + $userFormat = $this->dateParser->getUserDateFormat(); + $values = $this->dateParser->format($values, array($name), $userFormat); + $attributes = array_merge(array('placeholder="'.date($userFormat).'"'), $attributes); + + return $this->helper->form->label($label, $name) . + $this->helper->form->text($name, $values, $errors, $attributes, 'form-date'); + } + + /** + * Datetime field + * + * @access public + * @param string $label + * @param string $name + * @param array $values + * @param array $errors + * @param array $attributes + * @return string + */ + public function datetime($label, $name, array $values, array $errors = array(), array $attributes = array()) + { + $userFormat = $this->dateParser->getUserDateTimeFormat(); + $values = $this->dateParser->format($values, array($name), $userFormat); + $attributes = array_merge(array('placeholder="'.date($userFormat).'"'), $attributes); + + return $this->helper->form->label($label, $name) . + $this->helper->form->text($name, $values, $errors, $attributes, 'form-datetime'); + } + + /** * Display the form error class * * @access private diff --git a/app/Helper/HookHelper.php b/app/Helper/HookHelper.php index cb4dc1ef..24b7d00a 100644 --- a/app/Helper/HookHelper.php +++ b/app/Helper/HookHelper.php @@ -2,6 +2,7 @@ namespace Kanboard\Helper; +use Closure; use Kanboard\Core\Base; /** @@ -24,8 +25,8 @@ class HookHelper extends Base { $buffer = ''; - foreach ($this->hook->getListeners($hook) as $file) { - $buffer .= $this->helper->asset->$type($file); + foreach ($this->hook->getListeners($hook) as $params) { + $buffer .= $this->helper->asset->$type($params['template']); } return $buffer; @@ -43,8 +44,18 @@ class HookHelper extends Base { $buffer = ''; - foreach ($this->hook->getListeners($hook) as $template) { - $buffer .= $this->template->render($template, $variables); + foreach ($this->hook->getListeners($hook) as $params) { + if (! empty($params['variables'])) { + $variables = array_merge($variables, $params['variables']); + } elseif (! empty($params['callable'])) { + $result = call_user_func_array($params['callable'], $variables); + + if (is_array($result)) { + $variables = array_merge($variables, $result); + } + } + + $buffer .= $this->template->render($params['template'], $variables); } return $buffer; @@ -54,13 +65,39 @@ class HookHelper extends Base * Attach a template to a hook * * @access public - * @param string $hook - * @param string $template + * @param string $hook + * @param string $template + * @param array $variables * @return $this */ - public function attach($hook, $template) + public function attach($hook, $template, array $variables = array()) { - $this->hook->on($hook, $template); + $this->hook->on($hook, array( + 'template' => $template, + 'variables' => $variables, + )); + + return $this; + } + + /** + * Attach a template to a hook with a callable + * + * Arguments passed to the callback are the one passed to the hook + * + * @access public + * @param string $hook + * @param string $template + * @param Closure $callable + * @return $this + */ + public function attachCallable($hook, $template, Closure $callable) + { + $this->hook->on($hook, array( + 'template' => $template, + 'callable' => $callable, + )); + return $this; } } diff --git a/app/Helper/SubtaskHelper.php b/app/Helper/SubtaskHelper.php index dac71203..833544a7 100644 --- a/app/Helper/SubtaskHelper.php +++ b/app/Helper/SubtaskHelper.php @@ -66,7 +66,10 @@ class SubtaskHelper extends Base $html = $this->helper->form->label(t('Assignee'), 'user_id'); $html .= $this->helper->form->select('user_id', $users, $values, $errors, $attributes); - $html .= ' <a href="#" class="assign-me" data-target-id="form-user_id" data-current-id="'.$this->userSession->getId().'" title="'.t('Assign to me').'">'.t('Me').'</a>'; + $html .= ' '; + $html .= '<small>'; + $html .= '<a href="#" class="assign-me" data-target-id="form-user_id" data-current-id="'.$this->userSession->getId().'" title="'.t('Assign to me').'">'.t('Me').'</a>'; + $html .= '</small>'; return $html; } diff --git a/app/Helper/TaskHelper.php b/app/Helper/TaskHelper.php index 481a5efb..678b4bed 100644 --- a/app/Helper/TaskHelper.php +++ b/app/Helper/TaskHelper.php @@ -103,7 +103,10 @@ class TaskHelper extends Base $html = $this->helper->form->label(t('Assignee'), 'owner_id'); $html .= $this->helper->form->select('owner_id', $users, $values, $errors, $attributes); - $html .= ' <a href="#" class="assign-me" data-target-id="form-owner_id" data-current-id="'.$this->userSession->getId().'" title="'.t('Assign to me').'">'.t('Me').'</a>'; + $html .= ' '; + $html .= '<small>'; + $html .= '<a href="#" class="assign-me" data-target-id="form-owner_id" data-current-id="'.$this->userSession->getId().'" title="'.t('Assign to me').'">'.t('Me').'</a>'; + $html .= '</small>'; return $html; } @@ -148,7 +151,7 @@ class TaskHelper extends Base { $html = ''; - if ($project['priority_end'] > $project['priority_start']) { + if ($project['priority_end'] != $project['priority_start']) { $range = range($project['priority_start'], $project['priority_end']); $options = array_combine($range, $range); $values += array('priority' => $project['priority_default']); @@ -204,31 +207,21 @@ class TaskHelper extends Base public function selectStartDate(array $values, array $errors = array(), array $attributes = array()) { - $placeholder = date($this->configModel->get('application_date_format', 'm/d/Y H:i')); - $attributes = array_merge(array('tabindex="12"', 'placeholder="'.$placeholder.'"'), $attributes); - - $html = $this->helper->form->label(t('Start Date'), 'date_started'); - $html .= $this->helper->form->text('date_started', $values, $errors, $attributes, 'form-datetime'); - - return $html; + $attributes = array_merge(array('tabindex="12"'), $attributes); + return $this->helper->form->datetime(t('Start Date'), 'date_started', $values, $errors, $attributes); } public function selectDueDate(array $values, array $errors = array(), array $attributes = array()) { - $placeholder = date($this->configModel->get('application_date_format', 'm/d/Y')); - $attributes = array_merge(array('tabindex="13"', 'placeholder="'.$placeholder.'"'), $attributes); - - $html = $this->helper->form->label(t('Due Date'), 'date_due'); - $html .= $this->helper->form->text('date_due', $values, $errors, $attributes, 'form-date'); - - return $html; + $attributes = array_merge(array('tabindex="13"'), $attributes); + return $this->helper->form->date(t('Due Date'), 'date_due', $values, $errors, $attributes); } public function formatPriority(array $project, array $task) { $html = ''; - if ($project['priority_end'] > $project['priority_start']) { + if ($project['priority_end'] != $project['priority_start']) { $html .= '<span class="task-board-priority" title="'.t('Task priority').'">'; $html .= $task['priority'] >= 0 ? 'P'.$task['priority'] : '-P'.abs($task['priority']); $html .= '</span>'; diff --git a/app/Locale/id_ID/translations.php b/app/Locale/id_ID/translations.php index 28f590a9..9ecb0121 100644 --- a/app/Locale/id_ID/translations.php +++ b/app/Locale/id_ID/translations.php @@ -813,166 +813,166 @@ return array( 'Documentation' => 'Dokumentasi', 'Table of contents' => 'Daftar isi', 'Gantt' => 'Gantt', - // 'Author' => '', - // 'Version' => '', - // 'Plugins' => '', - // 'There is no plugin loaded.' => '', - // 'My notifications' => '', - // 'Custom filters' => '', - // 'Your custom filter have been created successfully.' => '', - // 'Unable to create your custom filter.' => '', - // 'Custom filter removed successfully.' => '', - // 'Unable to remove this custom filter.' => '', - // 'Edit custom filter' => '', - // 'Your custom filter have been updated successfully.' => '', - // 'Unable to update custom filter.' => '', - // 'Web' => '', - // 'New attachment on task #%d: %s' => '', - // 'New comment on task #%d' => '', - // 'Comment updated on task #%d' => '', - // 'New subtask on task #%d' => '', - // 'Subtask updated on task #%d' => '', - // 'New task #%d: %s' => '', - // 'Task updated #%d' => '', - // 'Task #%d closed' => '', - // 'Task #%d opened' => '', - // 'Column changed for task #%d' => '', - // 'New position for task #%d' => '', - // 'Swimlane changed for task #%d' => '', - // 'Assignee changed on task #%d' => '', - // '%d overdue tasks' => '', - // 'Task #%d is overdue' => '', - // 'No new notifications.' => '', - // 'Mark all as read' => '', - // 'Mark as read' => '', - // 'Total number of tasks in this column across all swimlanes' => '', - // 'Collapse swimlane' => '', - // 'Expand swimlane' => '', - // 'Add a new filter' => '', - // 'Share with all project members' => '', - // 'Shared' => '', - // 'Owner' => '', - // 'Unread notifications' => '', - // 'Notification methods:' => '', - // 'Import tasks from CSV file' => '', - // 'Unable to read your file' => '', - // '%d task(s) have been imported successfully.' => '', - // 'Nothing have been imported!' => '', - // 'Import users from CSV file' => '', - // '%d user(s) have been imported successfully.' => '', - // 'Comma' => '', - // 'Semi-colon' => '', - // 'Tab' => '', - // 'Vertical bar' => '', - // 'Double Quote' => '', - // 'Single Quote' => '', - // '%s attached a file to the task #%d' => '', - // 'There is no column or swimlane activated in your project!' => '', - // 'Append filter (instead of replacement)' => '', - // 'Append/Replace' => '', - // 'Append' => '', - // 'Replace' => '', - // 'Import' => '', - // 'change sorting' => '', - // 'Tasks Importation' => '', - // 'Delimiter' => '', - // 'Enclosure' => '', - // 'CSV File' => '', - // 'Instructions' => '', - // 'Your file must use the predefined CSV format' => '', - // 'Your file must be encoded in UTF-8' => '', - // 'The first row must be the header' => '', - // 'Duplicates are not verified for you' => '', - // 'The due date must use the ISO format: YYYY-MM-DD' => '', - // 'Download CSV template' => '', - // 'No external integration registered.' => '', - // 'Duplicates are not imported' => '', - // 'Usernames must be lowercase and unique' => '', - // 'Passwords will be encrypted if present' => '', - // '%s attached a new file to the task %s' => '', + 'Author' => 'Penulis', + 'Version' => 'Versi', + 'Plugins' => 'Plugin', + 'There is no plugin loaded.' => 'Tidak ada plugin yang dimuat', + 'My notifications' => 'Notifikasi saya', + 'Custom filters' => 'Filter kustom', + 'Your custom filter have been created successfully.' => 'Filter kustom anda telah berhasil dibuat', + 'Unable to create your custom filter.' => 'Tidak dapat membuat filter kustom', + 'Custom filter removed successfully.' => 'Filter kustom berhail dihapus', + 'Unable to remove this custom filter.' => 'Tidak dapat menghapus filter kustom', + 'Edit custom filter' => 'Modifikasi filter kustom', + 'Your custom filter have been updated successfully.' => 'Filter kustom anda telah berhasil diperbaharui', + 'Unable to update custom filter.' => 'Tidak dapat memperbaharui filter kustom', + 'Web' => 'Web', + 'New attachment on task #%d: %s' => 'Lampiran baru pada tugas #%d: %s', + 'New comment on task #%d' => 'Komentar baru pada tugas #%d', + 'Comment updated on task #%d' => 'Komentar diperbaharui pada tugas #%d', + 'New subtask on task #%d' => 'Subtask baru pada tugas #%d', + 'Subtask updated on task #%d' => 'Subtask diperbaharui pada tugas #%d', + 'New task #%d: %s' => 'Tugas baru #%d: %s', + 'Task updated #%d' => 'Tugas diperbaharui #%d', + 'Task #%d closed' => 'Tugas #%d ditutup', + 'Task #%d opened' => 'Tugas #%d dibuka', + 'Column changed for task #%d' => 'Kolom berubah untuk tugas #%d', + 'New position for task #%d' => 'Posisi baru untuk tugas #%d', + 'Swimlane changed for task #%d' => 'Swimlane berubah untuk tugas #%d', + 'Assignee changed on task #%d' => 'Orang yang ditugaskan berubah pada tugas #%d', + '%d overdue tasks' => '%d tugas terlambat', + 'Task #%d is overdue' => 'Tugas #%d terlambat', + 'No new notifications.' => 'Tidak ada notifikasi baru', + 'Mark all as read' => 'Tandai semua sebagai sudah dibaca', + 'Mark as read' => 'Tandai sebagai sudah dibaca', + 'Total number of tasks in this column across all swimlanes' => 'Total jumlah tugas di kolom ini di semua swimlanes', + 'Collapse swimlane' => 'Lipat swimlane', + 'Expand swimlane' => 'Perluas swimlane', + 'Add a new filter' => 'Tambah filter baru', + 'Share with all project members' => 'Bagikan dengan semua member proyek', + 'Shared' => 'Dibagikan', + 'Owner' => 'Pemilik', + 'Unread notifications' => 'Notifikasi belum terbaca', + 'Notification methods:' => 'Metode pemberitahuan', + 'Import tasks from CSV file' => 'Impor tugas dari berkas CSV', + 'Unable to read your file' => 'Tidak dapat membaca berkas anda', + '%d task(s) have been imported successfully.' => '%d tugas telah berhasil di impor', + 'Nothing have been imported!' => 'Tidak ada yang dapat di impor', + 'Import users from CSV file' => 'Impor pengguna dari berkas CSV', + '%d user(s) have been imported successfully.' => '%d pengguna telah berhasil di impor', + 'Comma' => 'Koma', + 'Semi-colon' => 'Titik Koma', + 'Tab' => 'Tab', + 'Vertical bar' => 'Bar vertikal', + 'Double Quote' => 'Kutip Ganda', + 'Single Quote' => 'Kutip Satu', + '%s attached a file to the task #%d' => '%s berkas dilampirkan untuk tugas #%d', + 'There is no column or swimlane activated in your project!' => 'Tidak ada kolom atau swimlane aktif untuk proyek anda', + 'Append filter (instead of replacement)' => 'Tambahkan filter (bukan pengganti)', + 'Append/Replace' => 'Tambah/Ganti', + 'Append' => 'Tambahkan', + 'Replace' => 'Ganti', + 'Import' => 'Impor', + 'change sorting' => 'rubah sortir', + 'Tasks Importation' => 'Tugas Impor', + 'Delimiter' => 'Pembatas', + 'Enclosure' => 'Lampiran', + 'CSV File' => 'Berkas CSV', + 'Instructions' => 'Intruksi', + 'Your file must use the predefined CSV format' => 'Berkas Anda harus menggunakan format CSV yang telah ditetapkan', + 'Your file must be encoded in UTF-8' => 'Berkas anda harus di kodekan dalam bentuk UTF-8', + 'The first row must be the header' => 'Baris pertama harus header', + 'Duplicates are not verified for you' => 'Duplikasi tidak diverifikasi untuk anda', + 'The due date must use the ISO format: YYYY-MM-DD' => 'Tanggal jatuh tempo harus menggunakan format ISO: YYYY-MM-DD', + 'Download CSV template' => 'Unduh template CSV', + 'No external integration registered.' => 'Tidak ada integrasi eksternal terdaftar', + 'Duplicates are not imported' => 'Duplikasi tidak diimpor', + 'Usernames must be lowercase and unique' => 'Username harus huruf kecil dan unik', + 'Passwords will be encrypted if present' => 'Kata sandi akan di enkripsi jika ada', + '%s attached a new file to the task %s' => '%s berkas baru dilampirkan untuk tugas %s', 'Link type' => 'Tipe tautan', - // 'Assign automatically a category based on a link' => '', - // 'BAM - Konvertible Mark' => '', - // 'Assignee Username' => '', - // 'Assignee Name' => '', - // 'Groups' => '', - // 'Members of %s' => '', - // 'New group' => '', - // 'Group created successfully.' => '', - // 'Unable to create your group.' => '', - // 'Edit group' => '', - // 'Group updated successfully.' => '', - // 'Unable to update your group.' => '', - // 'Add group member to "%s"' => '', - // 'Group member added successfully.' => '', - // 'Unable to add group member.' => '', - // 'Remove user from group "%s"' => '', - // 'User removed successfully from this group.' => '', - // 'Unable to remove this user from the group.' => '', - // 'Remove group' => '', - // 'Group removed successfully.' => '', - // 'Unable to remove this group.' => '', - // 'Project Permissions' => '', - // 'Manager' => '', - // 'Project Manager' => '', - // 'Project Member' => '', - // 'Project Viewer' => '', - // 'Your account is locked for %d minutes' => '', - // 'Invalid captcha' => '', - // 'The name must be unique' => '', - // 'View all groups' => '', - // 'There is no user available.' => '', - // 'Do you really want to remove the user "%s" from the group "%s"?' => '', - // 'There is no group.' => '', - // 'External Id' => '', - // 'Add group member' => '', - // 'Do you really want to remove this group: "%s"?' => '', - // 'There is no user in this group.' => '', - // 'Remove this user' => '', - // 'Permissions' => '', - // 'Allowed Users' => '', - // 'No user have been allowed specifically.' => '', - // 'Role' => '', - // 'Enter user name...' => '', - // 'Allowed Groups' => '', - // 'No group have been allowed specifically.' => '', - // 'Group' => '', - // 'Group Name' => '', - // 'Enter group name...' => '', - // 'Role:' => '', + 'Assign automatically a category based on a link' => 'Menetapkan otomatis kategori berdasarkan tautan', + 'BAM - Konvertible Mark' => 'BAM - Konvertible Mark', + 'Assignee Username' => 'Username yang ditugaskan', + 'Assignee Name' => 'Nama yang ditugaskan', + 'Groups' => 'Grup', + 'Members of %s' => 'Anggota dari %s', + 'New group' => 'Grup baru', + 'Group created successfully.' => 'Grup berhasil dibuat', + 'Unable to create your group.' => 'Tidak dapat membuat grup anda', + 'Edit group' => 'Rubah grup', + 'Group updated successfully.' => 'Grup berhasil diperbaharui', + 'Unable to update your group.' => 'Tidak dapat memperbaharui grup anda', + 'Add group member to "%s"' => 'Tambahkan anggota grup ke "%s"', + 'Group member added successfully.' => 'Anggota grup berhasil ditambahkan', + 'Unable to add group member.' => 'Tidak dapat menambahkan anggota grup', + 'Remove user from group "%s"' => 'hapus pengguna dari grup "%s"', + 'User removed successfully from this group.' => 'Pengguna berhasil dihapus dari grup ini', + 'Unable to remove this user from the group.' => 'Tidak dapat menghapus pengguna dari grup', + 'Remove group' => 'Hapus grup', + 'Group removed successfully.' => 'Grup berhasil dihapus', + 'Unable to remove this group.' => 'Tidak dapat menghapus grup ini', + 'Project Permissions' => 'Izin Proyek', + 'Manager' => 'Manajer', + 'Project Manager' => 'Manajer Proyek', + 'Project Member' => 'Anggota Proyek', + 'Project Viewer' => 'Penonton Proyek', + 'Your account is locked for %d minutes' => 'Akun anda dikunci untuk %d menit', + 'Invalid captcha' => 'Captcha tidak valid', + 'The name must be unique' => 'Nama harus unik', + 'View all groups' => 'Lihat semua grup', + 'There is no user available.' => 'Tidak ada pengguna yang tersedia', + 'Do you really want to remove the user "%s" from the group "%s"?' => 'Anda yakin akan menghapus pengguna "%s" dari grup "%s"?', + 'There is no group.' => 'Tidak ada grup', + 'External Id' => 'Id Eksternal', + 'Add group member' => 'Tambah anggota grup', + 'Do you really want to remove this group: "%s"?' => 'Anda yakin akan menghapus grup ini: "%s"?', + 'There is no user in this group.' => 'Tidak ada pengguna dalam grup ini', + 'Remove this user' => 'Hapus pengguna ini', + 'Permissions' => 'Izin', + 'Allowed Users' => 'Pengguna Yang Diperbolehkan', + 'No user have been allowed specifically.' => 'Tidak ada user yang diperbolehkan secara khusus', + 'Role' => 'Peran', + 'Enter user name...' => 'Masukkan nama pengguna...', + 'Allowed Groups' => 'Grup Yang Diperbolehkan', + 'No group have been allowed specifically.' => 'Tidak ada grup yang diperbolehkan secara khusus', + 'Group' => 'Grup', + 'Group Name' => 'Nama Grup', + 'Enter group name...' => 'Masukkan nama grup...', + 'Role:' => 'Peran:', 'Project members' => 'Anggota proyek', - // '%s mentioned you in the task #%d' => '', - // '%s mentioned you in a comment on the task #%d' => '', - // 'You were mentioned in the task #%d' => '', - // 'You were mentioned in a comment on the task #%d' => '', - // 'Estimated hours: ' => '', - // 'Actual hours: ' => '', - // 'Hours Spent' => '', - // 'Hours Estimated' => '', - // 'Estimated Time' => '', - // 'Actual Time' => '', - // 'Estimated vs actual time' => '', - // 'RUB - Russian Ruble' => '', - // 'Assign the task to the person who does the action when the column is changed' => '', - // 'Close a task in a specific column' => '', - // 'Time-based One-time Password Algorithm' => '', - // 'Two-Factor Provider: ' => '', - // 'Disable two-factor authentication' => '', - // 'Enable two-factor authentication' => '', - // 'There is no integration registered at the moment.' => '', - // 'Password Reset for Kanboard' => '', - // 'Forgot password?' => '', - // 'Enable "Forget Password"' => '', - // 'Password Reset' => '', - // 'New password' => '', - // 'Change Password' => '', - // 'To reset your password click on this link:' => '', - // 'Last Password Reset' => '', - // 'The password has never been reinitialized.' => '', - // 'Creation' => '', - // 'Expiration' => '', - // 'Password reset history' => '', - // 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => '', + '%s mentioned you in the task #%d' => '%s menyebut anda dalam tugas #%d', + '%s mentioned you in a comment on the task #%d' => '%s menyebut anda dalam komentar pada tugas #%d', + 'You were mentioned in the task #%d' => 'Anda disebutkan dalam tugas #%d', + 'You were mentioned in a comment on the task #%d' => 'Anda disebutkan dalam komentar pada tugas #%d', + 'Estimated hours: ' => 'Estimasi jam:', + 'Actual hours: ' => 'Aktual jam', + 'Hours Spent' => 'Jam dihabiskan', + 'Hours Estimated' => 'Jam diperkirakan', + 'Estimated Time' => 'Waktu Estimasi', + 'Actual Time' => 'Waktu Aktual', + 'Estimated vs actual time' => 'Estimasi vs waktu aktual', + 'RUB - Russian Ruble' => 'RUB - Rusia rubel', + 'Assign the task to the person who does the action when the column is changed' => 'Menetapkan tugas kepada orang yang melakukan tindakan ketika kolom berubah', + 'Close a task in a specific column' => 'Tutup tugas di kolom tertentu', + 'Time-based One-time Password Algorithm' => 'Waktu berbasis Satu-waktu Algoritma Kata sandi', + 'Two-Factor Provider: ' => 'Provider Dua-Faktor', + 'Disable two-factor authentication' => 'Nonaktifkan otentikasi dua-faktor', + 'Enable two-factor authentication' => 'Aktifkan otentikasi dua-faktor', + 'There is no integration registered at the moment.' => 'Tidak ada integrasi yang diregristasi untuk saat ini', + 'Password Reset for Kanboard' => 'Setel ulang Kata sandi untuk Kanboard', + 'Forgot password?' => 'Lupa kata sandi', + 'Enable "Forget Password"' => 'Aktifkan "Lupa Kata Sandi"', + 'Password Reset' => 'Setel ulang Kata sandi', + 'New password' => 'Kata sandi baru', + 'Change Password' => 'Rubah kata sandi', + 'To reset your password click on this link:' => 'Untuk menyetel ulang kata sandi anda klik tautan ini:', + 'Last Password Reset' => 'Terakhir Setel Ulang Kata Sandi', + 'The password has never been reinitialized.' => 'Kata sandi tidak pernah di reinisialisasi', + 'Creation' => 'Kreasi', + 'Expiration' => 'Waktu berakhir', + 'Password reset history' => 'Sejarah setel ulang kata sandi', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Semua tugas dalam kolom "%s" dan swimlane "%s" telah berhasil ditutup', // 'Do you really want to close all tasks of this column?' => '', // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', // 'Close all tasks of this column' => '', diff --git a/app/Locale/pt_PT/translations.php b/app/Locale/pt_PT/translations.php index 83670db1..ebc26cd7 100644 --- a/app/Locale/pt_PT/translations.php +++ b/app/Locale/pt_PT/translations.php @@ -371,7 +371,7 @@ return array( 'Not assigned, estimate of %sh' => 'Não assignado, estimado em %sh', '%s updated a comment on the task %s' => '%s actualizou o comentário na tarefa %s', '%s commented the task %s' => '%s comentou a tarefa %s', - '%s\'s activity' => 'Atividades de%s', + '%s\'s activity' => 'Atividades %s', 'RSS feed' => 'Feed RSS', '%s updated a comment on the task #%d' => '%s actualizou um comentário sobre a tarefa #%d', '%s commented on the task #%d' => '%s comentou sobre a tarefa #%d', diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index 1669ce9b..f3ec5af7 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -1164,8 +1164,8 @@ return array( 'Email settings' => 'Настройки почты', 'Email sender address' => 'Адрес отправителя', 'Email transport' => 'Почтовый транспорт', - // 'Webhook token' => '', - // 'Imports' => '', + 'Webhook token' => 'Webhook токены', + 'Imports' => 'Импорт', 'Project tags management' => 'Управление метками проекта', 'Tag created successfully.' => 'Метка успешно создана.', 'Unable to create this tag.' => 'Невозможно создать эту метку.', @@ -1186,32 +1186,32 @@ return array( 'Global tags' => 'Глобальные метка', 'There is no global tag at the moment.' => 'Нет глобальных меток.', 'This field cannot be empty' => 'Это поле не может быть пустым', - // 'Close a task when there is no activity in an specific column' => '', - // '%s removed a subtask for the task #%d' => '', - // '%s removed a comment on the task #%d' => '', - // 'Comment removed on task #%d' => '', - // 'Subtask removed on task #%d' => '', + 'Close a task when there is no activity in an specific column' => 'Закрыть задачу при отсутствии активности в определенной колонке', + '%s removed a subtask for the task #%d' => '%s удалил подзадачу для #%d', + '%s removed a comment on the task #%d' => '%s удалил комментарий к задаче #%d', + 'Comment removed on task #%d' => 'Комментарий удален в задаче #%d', + 'Subtask removed on task #%d' => 'Подзадача удалена в задаче #%d', 'Hide tasks in this column in the dashboard' => 'Не показывать задачи из этой колонки в кабинете', - // '%s removed a comment on the task %s' => '', - // '%s removed a subtask for the task %s' => '', - // 'Comment removed' => '', - // 'Subtask removed' => '', - // '%s set a new internal link for the task #%d' => '', - // '%s removed an internal link for the task #%d' => '', - // 'A new internal link for the task #%d have been defined' => '', - // 'Internal link removed for the task #%d' => '', - // '%s set a new internal link for the task %s' => '', - // '%s removed an internal link for the task %s' => '', - // 'Automatically set the due date on task creation' => '', - // 'Move the task to another column when closed' => '', - // 'Move the task to another column when not moved during a given period' => '', - // 'Dashboard for %s' => '', - // 'Tasks overview for %s' => '', - // 'Subtasks overview for %s' => '', - // 'Projects overview for %s' => '', - // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', - // 'Subtasks export' => '', - // 'Tasks exportation' => '', + '%s removed a comment on the task %s' => '%s удалил комментарии к задаче %s', + '%s removed a subtask for the task %s' => '%s удалил подзадачу для %s', + 'Comment removed' => 'Комментарий удален', + 'Subtask removed' => 'Подзадача удалена', + '%s set a new internal link for the task #%d' => '%s добавил внутреннюю ссылку для задачи #%d', + '%s removed an internal link for the task #%d' => '%s удалил внутреннюю ссылку для задачи #%d', + 'A new internal link for the task #%d have been defined' => 'Внешняя ссылка для задачи #%d была установлена', + 'Internal link removed for the task #%d' => 'Внутренняя ссылка удалена для задачи #%d', + '%s set a new internal link for the task %s' => '%s добавил внутреннюю ссылку для задачи %s', + '%s removed an internal link for the task %s' => '%s удалил внутреннюю ссылку для задачи %s', + 'Automatically set the due date on task creation' => 'Автоматическая установка срока задачи при создании', + 'Move the task to another column when closed' => 'Переместить задачу в другую колонку при закрытии', + 'Move the task to another column when not moved during a given period' => 'Переместить задачу в другую колонку если она не был перемещен в указанный период', + 'Dashboard for %s' => 'Панель управления для %s', + 'Tasks overview for %s' => 'Обзор задач для %s', + 'Subtasks overview for %s' => 'Обзор подзадач для %s', + 'Projects overview for %s' => 'Обзор проектов для %s', + 'Activity stream for %s' => 'Лента активности для %s', + 'Calendar for %s' => 'Календарь для %s', + 'Notifications for %s' => 'Уведомления для %s', + 'Subtasks export' => 'Экспорт подзадач', + 'Tasks exportation' => 'Экспортирование задач', ); diff --git a/app/Model/TaskCreationModel.php b/app/Model/TaskCreationModel.php index 1c0fd7d9..b9b07d5e 100644 --- a/app/Model/TaskCreationModel.php +++ b/app/Model/TaskCreationModel.php @@ -85,5 +85,7 @@ class TaskCreationModel extends Base $values['date_modification'] = $values['date_creation']; $values['date_moved'] = $values['date_creation']; $values['position'] = $this->taskFinderModel->countByColumnAndSwimlaneId($values['project_id'], $values['column_id'], $values['swimlane_id']) + 1; + + $this->hook->reference('model:task:creation:prepare', $values); } } diff --git a/app/Model/TaskFinderModel.php b/app/Model/TaskFinderModel.php index 924f339b..3c32e140 100644 --- a/app/Model/TaskFinderModel.php +++ b/app/Model/TaskFinderModel.php @@ -2,7 +2,6 @@ namespace Kanboard\Model; -use PDO; use Kanboard\Core\Base; /** @@ -298,59 +297,30 @@ class TaskFinderModel extends Base */ public function getDetails($task_id) { - $sql = ' - SELECT - tasks.id, - tasks.reference, - tasks.title, - tasks.description, - tasks.date_creation, - tasks.date_completed, - tasks.date_modification, - tasks.date_due, - tasks.date_started, - tasks.time_estimated, - tasks.time_spent, - tasks.color_id, - tasks.project_id, - tasks.column_id, - tasks.owner_id, - tasks.creator_id, - tasks.position, - tasks.is_active, - tasks.score, - tasks.category_id, - tasks.priority, - tasks.swimlane_id, - tasks.date_moved, - tasks.recurrence_status, - tasks.recurrence_trigger, - tasks.recurrence_factor, - tasks.recurrence_timeframe, - tasks.recurrence_basedate, - tasks.recurrence_parent, - tasks.recurrence_child, - project_has_categories.name AS category_name, - swimlanes.name AS swimlane_name, - projects.name AS project_name, - projects.default_swimlane, - columns.title AS column_title, - users.username AS assignee_username, - users.name AS assignee_name, - creators.username AS creator_username, - creators.name AS creator_name - FROM tasks - LEFT JOIN users ON users.id = tasks.owner_id - LEFT JOIN users AS creators ON creators.id = tasks.creator_id - LEFT JOIN project_has_categories ON project_has_categories.id = tasks.category_id - LEFT JOIN projects ON projects.id = tasks.project_id - LEFT JOIN columns ON columns.id = tasks.column_id - LEFT JOIN swimlanes ON swimlanes.id = tasks.swimlane_id - WHERE tasks.id = ? - '; - - $rq = $this->db->execute($sql, array($task_id)); - return $rq->fetch(PDO::FETCH_ASSOC); + return $this->db->table(TaskModel::TABLE) + ->columns( + TaskModel::TABLE.'.*', + CategoryModel::TABLE.'.name AS category_name', + SwimlaneModel::TABLE.'.name AS swimlane_name', + ProjectModel::TABLE.'.name AS project_name', + ProjectModel::TABLE.'.default_swimlane', + ColumnModel::TABLE.'.title AS column_title', + UserModel::TABLE.'.username AS assignee_username', + UserModel::TABLE.'.name AS assignee_name', + 'uc.username AS creator_username', + 'uc.name AS creator_name', + CategoryModel::TABLE.'.description AS category_description', + ColumnModel::TABLE.'.position AS column_position', + ProjectModel::TABLE.'.default_swimlane' + ) + ->join(UserModel::TABLE, 'id', 'owner_id', TaskModel::TABLE) + ->left(UserModel::TABLE, 'uc', 'id', TaskModel::TABLE, 'creator_id') + ->join(CategoryModel::TABLE, 'id', 'category_id', TaskModel::TABLE) + ->join(ColumnModel::TABLE, 'id', 'column_id', TaskModel::TABLE) + ->join(SwimlaneModel::TABLE, 'id', 'swimlane_id', TaskModel::TABLE) + ->join(ProjectModel::TABLE, 'id', 'project_id', TaskModel::TABLE) + ->eq(TaskModel::TABLE.'.id', $task_id) + ->findOne(); } /** diff --git a/app/Model/TaskModificationModel.php b/app/Model/TaskModificationModel.php index 16b48f3d..6e16fbec 100644 --- a/app/Model/TaskModificationModel.php +++ b/app/Model/TaskModificationModel.php @@ -106,6 +106,8 @@ class TaskModificationModel extends Base $this->helper->model->convertIntegerFields($values, array('priority', 'is_active', 'recurrence_status', 'recurrence_trigger', 'recurrence_factor', 'recurrence_timeframe', 'recurrence_basedate')); $values['date_modification'] = time(); + + $this->hook->reference('model:task:modification:prepare', $values); } /** diff --git a/app/Notification/MailNotification.php b/app/Notification/MailNotification.php index a5f51b89..9e042820 100644 --- a/app/Notification/MailNotification.php +++ b/app/Notification/MailNotification.php @@ -80,7 +80,7 @@ class MailNotification extends Base implements NotificationInterface { return sprintf( '[%s] %s', - $eventData['task']['project_name'], + isset($eventData['project_name']) ? $eventData['project_name'] : $eventData['task']['project_name'], $this->notificationModel->getTitleWithoutAuthor($eventName, $eventData) ); } diff --git a/app/Pagination/SubtaskPagination.php b/app/Pagination/SubtaskPagination.php index f0cd6148..c55d0fb4 100644 --- a/app/Pagination/SubtaskPagination.php +++ b/app/Pagination/SubtaskPagination.php @@ -26,11 +26,14 @@ class SubtaskPagination extends Base */ public function getDashboardPaginator($user_id, $method, $max) { + $query = $this->subtaskModel->getUserQuery($user_id, array(SubtaskModel::STATUS_TODO, SubtaskModel::STATUS_INPROGRESS)); + $this->hook->reference('pagination:dashboard:subtask:query', $query); + return $this->paginator ->setUrl('DashboardController', $method, array('pagination' => 'subtasks', 'user_id' => $user_id)) ->setMax($max) ->setOrder(TaskModel::TABLE.'.id') - ->setQuery($this->subtaskModel->getUserQuery($user_id, array(SubtaskModel::STATUS_TODO, SubtaskModel::STATUS_INPROGRESS))) + ->setQuery($query) ->calculateOnlyIf($this->request->getStringParam('pagination') === 'subtasks'); } } diff --git a/app/Pagination/TaskPagination.php b/app/Pagination/TaskPagination.php index a395ab84..5fe986e7 100644 --- a/app/Pagination/TaskPagination.php +++ b/app/Pagination/TaskPagination.php @@ -25,11 +25,14 @@ class TaskPagination extends Base */ public function getDashboardPaginator($user_id, $method, $max) { + $query = $this->taskFinderModel->getUserQuery($user_id); + $this->hook->reference('pagination:dashboard:task:query', $query); + return $this->paginator ->setUrl('DashboardController', $method, array('pagination' => 'tasks', 'user_id' => $user_id)) ->setMax($max) ->setOrder(TaskModel::TABLE.'.id') - ->setQuery($this->taskFinderModel->getUserQuery($user_id)) + ->setQuery($query) ->calculateOnlyIf($this->request->getStringParam('pagination') === 'tasks'); } } diff --git a/app/ServiceProvider/ApiProvider.php b/app/ServiceProvider/ApiProvider.php index 5cf6231c..d5d1f260 100644 --- a/app/ServiceProvider/ApiProvider.php +++ b/app/ServiceProvider/ApiProvider.php @@ -22,6 +22,7 @@ use Kanboard\Api\Procedure\ProjectPermissionProcedure; use Kanboard\Api\Procedure\SubtaskProcedure; use Kanboard\Api\Procedure\SubtaskTimeTrackingProcedure; use Kanboard\Api\Procedure\SwimlaneProcedure; +use Kanboard\Api\Procedure\TaskMetadataProcedure; use Kanboard\Api\Procedure\TaskProcedure; use Kanboard\Api\Procedure\TaskLinkProcedure; use Kanboard\Api\Procedure\UserProcedure; @@ -69,6 +70,7 @@ class ApiProvider implements ServiceProviderInterface ->withObject(new TaskProcedure($container)) ->withObject(new TaskLinkProcedure($container)) ->withObject(new TaskExternalLinkProcedure($container)) + ->withObject(new TaskMetadataProcedure($container)) ->withObject(new UserProcedure($container)) ->withObject(new GroupProcedure($container)) ->withObject(new GroupMemberProcedure($container)) diff --git a/app/Template/action/index.php b/app/Template/action/index.php index 0a94e4f0..085ea3ad 100644 --- a/app/Template/action/index.php +++ b/app/Template/action/index.php @@ -15,7 +15,7 @@ <?php if (empty($actions)): ?> <p class="alert"><?= t('There is no action at the moment.') ?></p> <?php else: ?> - <table> + <table class="table-scrolling"> <tr> <th><?= t('Automatic actions') ?></th> <th><?= t('Action parameters') ?></th> diff --git a/app/Template/activity/task.php b/app/Template/activity/task.php index 04c64c63..39953d1a 100644 --- a/app/Template/activity/task.php +++ b/app/Template/activity/task.php @@ -1,9 +1,12 @@ -<div class="task-show-title color-<?= $task['color_id'] ?>"> - <h2><?= $this->text->e($task['title']) ?></h2> -</div> +<?= $this->render('task/details', array( + 'task' => $task, + 'tags' => $tags, + 'project' => $project, + 'editable' => false, +)) ?> <div class="page-header"> <h2><?= t('Activity stream') ?></h2> </div> -<?= $this->render('event/events', array('events' => $events)) ?>
\ No newline at end of file +<?= $this->render('event/events', array('events' => $events)) ?> diff --git a/app/Template/analytic/avg_time_columns.php b/app/Template/analytic/avg_time_columns.php index 5f6c6b35..91c269fc 100644 --- a/app/Template/analytic/avg_time_columns.php +++ b/app/Template/analytic/avg_time_columns.php @@ -9,7 +9,7 @@ <div id="chart" data-metrics='<?= json_encode($metrics, JSON_HEX_APOS) ?>' data-label="<?= t('Average time spent') ?>"></div> - <table class="table-stripped"> + <table class="table-striped"> <tr> <th><?= t('Column') ?></th> <th><?= t('Average time spent') ?></th> diff --git a/app/Template/analytic/compare_hours.php b/app/Template/analytic/compare_hours.php index e4a0b60e..c0b9cfc3 100644 --- a/app/Template/analytic/compare_hours.php +++ b/app/Template/analytic/compare_hours.php @@ -23,7 +23,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('No tasks found.') ?></p> <?php elseif (! $paginator->isEmpty()): ?> - <table class="table-fixed table-small"> + <table class="table-fixed table-small table-scrolling"> <tr> <th class="column-5"><?= $paginator->order(t('Id'), 'tasks.id') ?></th> <th><?= $paginator->order(t('Title'), 'tasks.title') ?></th> diff --git a/app/Template/analytic/tasks.php b/app/Template/analytic/tasks.php index 9e7b1fd7..4bc19784 100644 --- a/app/Template/analytic/tasks.php +++ b/app/Template/analytic/tasks.php @@ -9,7 +9,7 @@ <div id="chart" data-metrics='<?= json_encode($metrics, JSON_HEX_APOS) ?>'></div> - <table> + <table class="table-striped"> <tr> <th><?= t('Column') ?></th> <th><?= t('Number of tasks') ?></th> diff --git a/app/Template/analytic/users.php b/app/Template/analytic/users.php index 9d1d3a1e..91bec11b 100644 --- a/app/Template/analytic/users.php +++ b/app/Template/analytic/users.php @@ -9,7 +9,7 @@ <div id="chart" data-metrics='<?= json_encode($metrics, JSON_HEX_APOS) ?>'></div> - <table> + <table class="table-striped"> <tr> <th><?= t('User') ?></th> <th><?= t('Number of tasks') ?></th> diff --git a/app/Template/board/table_column.php b/app/Template/board/table_column.php index 75a6eb4c..c0b71eab 100644 --- a/app/Template/board/table_column.php +++ b/app/Template/board/table_column.php @@ -5,9 +5,9 @@ <!-- column in collapsed mode --> <div class="board-column-collapsed"> - <span class="board-column-header-task-count" title="<?= t('Show this column') ?>"> + <small class="board-column-header-task-count" title="<?= t('Show this column') ?>"> <span id="task-number-column-<?= $column['id'] ?>"><?= $column['nb_tasks'] ?></span> - </span> + </small> </div> <!-- column in expanded mode --> diff --git a/app/Template/board/tooltip_external_links.php b/app/Template/board/tooltip_external_links.php index 65331864..a9f1fc7f 100644 --- a/app/Template/board/tooltip_external_links.php +++ b/app/Template/board/tooltip_external_links.php @@ -1,5 +1,5 @@ <div class="tooltip-large"> - <table> + <table class="table-small"> <tr> <th class="column-20"><?= t('Type') ?></th> <th class="column-70"><?= t('Title') ?></th> diff --git a/app/Template/board/tooltip_files.php b/app/Template/board/tooltip_files.php index 6f9e2640..4e704dac 100644 --- a/app/Template/board/tooltip_files.php +++ b/app/Template/board/tooltip_files.php @@ -1,5 +1,5 @@ <div class="tooltip-large"> - <table> + <table class="table-small"> <?php foreach ($files as $file): ?> <tr> <th> diff --git a/app/Template/board/tooltip_subtasks.php b/app/Template/board/tooltip_subtasks.php index 0322d373..8d5bc059 100644 --- a/app/Template/board/tooltip_subtasks.php +++ b/app/Template/board/tooltip_subtasks.php @@ -1,5 +1,5 @@ <div class="tooltip-large"> - <table> + <table class="table-small"> <tr> <th class="column-80"><?= t('Subtask') ?></th> <th><?= t('Assignee') ?></th> diff --git a/app/Template/board/tooltip_tasklinks.php b/app/Template/board/tooltip_tasklinks.php index d1156cbe..08432e71 100644 --- a/app/Template/board/tooltip_tasklinks.php +++ b/app/Template/board/tooltip_tasklinks.php @@ -1,5 +1,5 @@ <div class="tooltip-large"> - <table> + <table class="table-small"> <?php foreach ($links as $label => $grouped_links): ?> <tr> <th colspan="4"><?= t($label) ?></th> diff --git a/app/Template/category/index.php b/app/Template/category/index.php index a103d89f..ac60d9a8 100644 --- a/app/Template/category/index.php +++ b/app/Template/category/index.php @@ -2,7 +2,7 @@ <div class="page-header"> <h2><?= t('Categories') ?></h2> </div> -<table> +<table class="table-striped"> <tr> <th><?= t('Category Name') ?></th> <th class="column-8"><?= t('Actions') ?></th> diff --git a/app/Template/column/index.php b/app/Template/column/index.php index 04760a16..66890ba5 100644 --- a/app/Template/column/index.php +++ b/app/Template/column/index.php @@ -12,7 +12,7 @@ <p class="alert alert-error"><?= t('Your board doesn\'t have any columns!') ?></p> <?php else: ?> <table - class="columns-table table-stripped" + class="columns-table table-striped" data-save-position-url="<?= $this->url->href('ColumnController', 'move', array('project_id' => $project['id'])) ?>"> <thead> <tr> diff --git a/app/Template/comment/show.php b/app/Template/comment/show.php index 8419a14e..16a807bc 100644 --- a/app/Template/comment/show.php +++ b/app/Template/comment/show.php @@ -4,10 +4,10 @@ <div class="comment-title"> <?php if (! empty($comment['username'])): ?> - <span class="comment-username"><?= $this->text->e($comment['name'] ?: $comment['username']) ?></span> + <strong class="comment-username"><?= $this->text->e($comment['name'] ?: $comment['username']) ?></strong> <?php endif ?> - <span class="comment-date"><?= $this->dt->datetime($comment['date_creation']) ?></span> + <small class="comment-date"><?= $this->dt->datetime($comment['date_creation']) ?></small> </div> <div class="comment-content"> diff --git a/app/Template/comments/show.php b/app/Template/comments/show.php index 43f6b2c2..5c6d8e20 100644 --- a/app/Template/comments/show.php +++ b/app/Template/comments/show.php @@ -5,8 +5,10 @@ <div class="accordion-content" id="comments"> <?php if (!isset($is_public) || !$is_public): ?> <div class="comment-sorting"> - <i class="fa fa-sort"></i> - <?= $this->url->link(t('change sorting'), 'CommentController', 'toggleSorting', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> + <small> + <i class="fa fa-sort"></i> + <?= $this->url->link(t('change sorting'), 'CommentController', 'toggleSorting', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> + </small> </div> <?php endif ?> <?php foreach ($comments as $comment): ?> diff --git a/app/Template/currency/index.php b/app/Template/currency/index.php index 9881cee5..db9b21af 100644 --- a/app/Template/currency/index.php +++ b/app/Template/currency/index.php @@ -4,7 +4,7 @@ <?php if (! empty($rates)): ?> -<table class="table-stripped"> +<table class="table-striped"> <tr> <th class="column-35"><?= t('Currency') ?></th> <th><?= t('Rate') ?></th> diff --git a/app/Template/custom_filter/index.php b/app/Template/custom_filter/index.php index 08c8040c..dcab891b 100644 --- a/app/Template/custom_filter/index.php +++ b/app/Template/custom_filter/index.php @@ -3,7 +3,7 @@ <h2><?= t('Custom filters') ?></h2> </div> <div> - <table> + <table class="table-striped table-scrolling"> <tr> <th class="column-15"><?= t('Name') ?></th> <th class="column-30"><?= t('Filter') ?></th> diff --git a/app/Template/dashboard/notifications.php b/app/Template/dashboard/notifications.php index 3b70b49f..a189d74f 100644 --- a/app/Template/dashboard/notifications.php +++ b/app/Template/dashboard/notifications.php @@ -13,7 +13,7 @@ </ul> </div> - <table class="table-fixed table-small"> + <table class="table-striped table-scrolling table-small"> <tr> <th><?= t('Notification') ?></th> <th class="column-20"><?= t('Date') ?></th> diff --git a/app/Template/dashboard/projects.php b/app/Template/dashboard/projects.php index 3a7f1d86..f8806c01 100644 --- a/app/Template/dashboard/projects.php +++ b/app/Template/dashboard/projects.php @@ -4,7 +4,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('Your are not member of any project.') ?></p> <?php else: ?> - <table class="table-fixed table-small"> + <table class="table-striped table-small table-scrolling"> <tr> <th class="column-5"><?= $paginator->order('Id', \Kanboard\Model\ProjectModel::TABLE.'.id') ?></th> <th class="column-3"><?= $paginator->order('<i class="fa fa-lock fa-fw" title="'.t('Private project').'"></i>', \Kanboard\Model\ProjectModel::TABLE.'.is_private') ?></th> @@ -43,7 +43,7 @@ <td class="dashboard-project-stats"> <?php foreach ($project['columns'] as $column): ?> <strong title="<?= t('Task count') ?>"><?= $column['nb_tasks'] ?></strong> - <span><?= $this->text->e($column['title']) ?></span> + <small><?= $this->text->e($column['title']) ?></small> <?php endforeach ?> </td> diff --git a/app/Template/dashboard/show.php b/app/Template/dashboard/show.php index 637b60f8..aec6f591 100644 --- a/app/Template/dashboard/show.php +++ b/app/Template/dashboard/show.php @@ -2,11 +2,18 @@ <form method="get" action="<?= $this->url->dir() ?>" class="search"> <?= $this->form->hidden('controller', array('controller' => 'SearchController')) ?> <?= $this->form->hidden('action', array('action' => 'index')) ?> - <?= $this->form->text('search', array(), array(), array('placeholder="'.t('Search').'"'), 'form-input-large') ?> - <?= $this->render('app/filters_helper') ?> + + <div class="input-addon"> + <?= $this->form->text('search', array(), array(), array('placeholder="'.t('Search').'"'), 'input-addon-field') ?> + <div class="input-addon-item"> + <?= $this->render('app/filters_helper') ?> + </div> + </div> </form> </div> <?= $this->render('dashboard/projects', array('paginator' => $project_paginator, 'user' => $user)) ?> <?= $this->render('dashboard/tasks', array('paginator' => $task_paginator, 'user' => $user)) ?> <?= $this->render('dashboard/subtasks', array('paginator' => $subtask_paginator, 'user' => $user)) ?> + +<?= $this->hook->render('template:dashboard:show', array('user' => $user)) ?> diff --git a/app/Template/dashboard/sidebar.php b/app/Template/dashboard/sidebar.php index df4e91a5..108c028a 100644 --- a/app/Template/dashboard/sidebar.php +++ b/app/Template/dashboard/sidebar.php @@ -21,6 +21,6 @@ <li <?= $this->app->checkMenuSelection('DashboardController', 'notifications') ?>> <?= $this->url->link(t('My notifications'), 'DashboardController', 'notifications', array('user_id' => $user['id'])) ?> </li> - <?= $this->hook->render('template:dashboard:sidebar') ?> + <?= $this->hook->render('template:dashboard:sidebar', array('user' => $user)) ?> </ul> </div> diff --git a/app/Template/dashboard/subtasks.php b/app/Template/dashboard/subtasks.php index ca550e4c..b71deeb9 100644 --- a/app/Template/dashboard/subtasks.php +++ b/app/Template/dashboard/subtasks.php @@ -4,7 +4,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('There is nothing assigned to you.') ?></p> <?php else: ?> - <table class="table-fixed table-small"> + <table class="table-striped table-small table-scrolling"> <tr> <th class="column-5"><?= $paginator->order('Id', \Kanboard\Model\TaskModel::TABLE.'.id') ?></th> <th class="column-20"><?= $paginator->order(t('Project'), 'project_name') ?></th> diff --git a/app/Template/dashboard/tasks.php b/app/Template/dashboard/tasks.php index d9cb4f9e..427b903d 100644 --- a/app/Template/dashboard/tasks.php +++ b/app/Template/dashboard/tasks.php @@ -4,12 +4,12 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('There is nothing assigned to you.') ?></p> <?php else: ?> - <table class="table-fixed table-small"> + <table class="table-striped table-small table-scrolling"> <tr> <th class="column-5"><?= $paginator->order('Id', \Kanboard\Model\TaskModel::TABLE.'.id') ?></th> <th class="column-20"><?= $paginator->order(t('Project'), 'project_name') ?></th> <th><?= $paginator->order(t('Task'), \Kanboard\Model\TaskModel::TABLE.'.title') ?></th> - <th class="column-5"><?= $paginator->order(t('Priority'), \Kanboard\Model\TaskModel::TABLE.'.priority') ?></th> + <th class="column-8"><?= $paginator->order(t('Priority'), \Kanboard\Model\TaskModel::TABLE.'.priority') ?></th> <th class="column-20"><?= t('Time tracking') ?></th> <th class="column-10"><?= $paginator->order(t('Due date'), \Kanboard\Model\TaskModel::TABLE.'.date_due') ?></th> <th class="column-10"><?= $paginator->order(t('Column'), 'column_title') ?></th> diff --git a/app/Template/event/comment_create.php b/app/Template/event/comment_create.php index 45132e6d..780bba93 100644 --- a/app/Template/event/comment_create.php +++ b/app/Template/event/comment_create.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/comment_delete.php b/app/Template/event/comment_delete.php index ead7d56a..e3a2f9fa 100644 --- a/app/Template/event/comment_delete.php +++ b/app/Template/event/comment_delete.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/comment_update.php b/app/Template/event/comment_update.php index 5be598ac..9e25ec2d 100644 --- a/app/Template/event/comment_update.php +++ b/app/Template/event/comment_update.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/subtask_create.php b/app/Template/event/subtask_create.php index 1bf36c05..9a115c73 100644 --- a/app/Template/event/subtask_create.php +++ b/app/Template/event/subtask_create.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/subtask_delete.php b/app/Template/event/subtask_delete.php index 8ac11853..7f0d6d58 100644 --- a/app/Template/event/subtask_delete.php +++ b/app/Template/event/subtask_delete.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/subtask_update.php b/app/Template/event/subtask_update.php index 201402f6..e566022e 100644 --- a/app/Template/event/subtask_update.php +++ b/app/Template/event/subtask_update.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_assignee_change.php b/app/Template/event/task_assignee_change.php index 7539cd0b..405f8ac1 100644 --- a/app/Template/event/task_assignee_change.php +++ b/app/Template/event/task_assignee_change.php @@ -10,7 +10,7 @@ <?php else: ?> <?= e('%s removed the assignee of the task %s', $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']))) ?> <?php endif ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_close.php b/app/Template/event/task_close.php index 90ff9207..1ac81ea9 100644 --- a/app/Template/event/task_close.php +++ b/app/Template/event/task_close.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_create.php b/app/Template/event/task_create.php index 017a5ada..9d0ff358 100644 --- a/app/Template/event/task_create.php +++ b/app/Template/event/task_create.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_file_create.php b/app/Template/event/task_file_create.php index d329529a..7e58fdc1 100644 --- a/app/Template/event/task_file_create.php +++ b/app/Template/event/task_file_create.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($file['name']) ?></p> diff --git a/app/Template/event/task_internal_link_create_update.php b/app/Template/event/task_internal_link_create_update.php index de257977..4bc6ae9a 100644 --- a/app/Template/event/task_internal_link_create_update.php +++ b/app/Template/event/task_internal_link_create_update.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"> diff --git a/app/Template/event/task_internal_link_delete.php b/app/Template/event/task_internal_link_delete.php index e537bf81..3465fa57 100644 --- a/app/Template/event/task_internal_link_delete.php +++ b/app/Template/event/task_internal_link_delete.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"> diff --git a/app/Template/event/task_move_column.php b/app/Template/event/task_move_column.php index f3155e47..e7e5ec28 100644 --- a/app/Template/event/task_move_column.php +++ b/app/Template/event/task_move_column.php @@ -4,7 +4,7 @@ $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])), $this->text->e($task['column_title']) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_move_position.php b/app/Template/event/task_move_position.php index ecdd02b6..48fbbb1e 100644 --- a/app/Template/event/task_move_position.php +++ b/app/Template/event/task_move_position.php @@ -5,7 +5,7 @@ $task['position'], $this->text->e($task['column_title']) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_move_swimlane.php b/app/Template/event/task_move_swimlane.php index fe9bfb55..a467875b 100644 --- a/app/Template/event/task_move_swimlane.php +++ b/app/Template/event/task_move_swimlane.php @@ -11,7 +11,7 @@ $this->text->e($task['swimlane_name']) ) ?> <?php endif ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_open.php b/app/Template/event/task_open.php index 548aa98f..6d5252a1 100644 --- a/app/Template/event/task_open.php +++ b/app/Template/event/task_open.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/event/task_update.php b/app/Template/event/task_update.php index 7c7507c0..2608f623 100644 --- a/app/Template/event/task_update.php +++ b/app/Template/event/task_update.php @@ -3,7 +3,7 @@ $this->text->e($author), $this->url->link(t('#%d', $task['id']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ) ?> - <span class="activity-date"><?= $this->dt->datetime($date_creation) ?></span> + <small class="activity-date"><?= $this->dt->datetime($date_creation) ?></small> </p> <div class="activity-description"> <p class="activity-task-title"><?= $this->text->e($task['title']) ?></p> diff --git a/app/Template/group/index.php b/app/Template/group/index.php index 1062e18c..fe8a07e7 100644 --- a/app/Template/group/index.php +++ b/app/Template/group/index.php @@ -8,7 +8,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('There is no group.') ?></p> <?php else: ?> - <table class="table-small table-fixed"> + <table class="table-small table-fixed table-scrolling"> <tr> <th class="column-5"><?= $paginator->order(t('Id'), 'id') ?></th> <th class="column-20"><?= $paginator->order(t('External Id'), 'external_id') ?></th> diff --git a/app/Template/group/users.php b/app/Template/group/users.php index a4895ab7..73597b39 100644 --- a/app/Template/group/users.php +++ b/app/Template/group/users.php @@ -8,7 +8,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('There is no user in this group.') ?></p> <?php else: ?> - <table> + <table class="table-striped table-scrolling"> <tr> <th><?= $paginator->order(t('Id'), 'id') ?></th> <th><?= $paginator->order(t('Username'), 'username') ?></th> diff --git a/app/Template/header.php b/app/Template/header.php index a2b3fcb3..2fe68ebe 100644 --- a/app/Template/header.php +++ b/app/Template/header.php @@ -1,119 +1,26 @@ -<header> - <nav> - <h1> - <span class="logo"> - <?= $this->url->link('K<span>B</span>', 'DashboardController', 'show', array(), false, '', t('Dashboard')) ?> - </span> - <span class="title"> - <?php if (! empty($project) && ! empty($task)): ?> - <?= $this->url->link($this->text->e($project['name']), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?> - <?php else: ?> - <?= $this->text->e($title) ?> - <?php endif ?> - </span> - <?php if (! empty($description)): ?> - <span class="tooltip" title="<?= $this->text->markdownAttribute($description) ?>"> - <i class="fa fa-info-circle"></i> - </span> - <?php endif ?> - </h1> - <ul> - <?php if (isset($board_selector) && ! empty($board_selector)): ?> - <li> - <select id="board-selector" - class="chosen-select select-auto-redirect" - tabindex="-1" - data-search-threshold="0" - data-notfound="<?= t('No results match:') ?>" - data-placeholder="<?= t('Display another project') ?>" - data-redirect-regex="PROJECT_ID" - data-redirect-url="<?= $this->url->href('BoardViewController', 'show', array('project_id' => 'PROJECT_ID')) ?>"> - <option value=""></option> - <?php foreach ($board_selector as $board_id => $board_name): ?> - <option value="<?= $board_id ?>"><?= $this->text->e($board_name) ?></option> - <?php endforeach ?> - </select> - </li> - <?php endif ?> - <li class="user-links"> - <?php if ($this->user->hasNotifications()): ?> - <span class="notification"> - <?= $this->url->link('<i class="fa fa-bell web-notification-icon"></i>', 'DashboardController', 'notifications', array('user_id' => $this->user->getId()), false, '', t('Unread notifications')) ?> - </span> - <?php endif ?> - - <?php $has_project_creation_access = $this->user->hasAccess('ProjectCreationController', 'create'); ?> - <?php $is_private_project_enabled = $this->app->config('disable_private_project', 0) == 0; ?> - - <?php if ($has_project_creation_access || (!$has_project_creation_access && $is_private_project_enabled)): ?> - <div class="dropdown"> - <a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-plus fa-fw"></i><i class="fa fa-caret-down"></i></a> - <ul> - <?php if ($has_project_creation_access): ?> - <li><i class="fa fa-plus fa-fw"></i> - <?= $this->url->link(t('New project'), 'ProjectCreationController', 'create', array(), false, 'popover') ?></li> - <?php endif ?> - <?php if ($is_private_project_enabled): ?> - <li> - <i class="fa fa-lock fa-fw"></i> - <?= $this->url->link(t('New private project'), 'ProjectCreationController', 'createPrivate', array(), false, 'popover') ?> - </li> - <?php endif ?> - <?= $this->hook->render('template:header:creation-dropdown') ?> - </ul> - </div> - <?php endif ?> +<?php $_title = $this->render('header/title', array( + 'project' => isset($project) ? $project : null, + 'task' => isset($task) ? $task : null, + 'description' => isset($description) ? $description : null, + 'title' => $title, +)) ?> - <div class="dropdown"> - <a href="#" class="dropdown-menu dropdown-menu-link-icon"><?= $this->avatar->currentUserSmall('avatar-inline') ?><i class="fa fa-caret-down"></i></a> - <ul> - <li class="no-hover"><strong><?= $this->text->e($this->user->getFullname()) ?></strong></li> - <li> - <i class="fa fa-tachometer fa-fw"></i> - <?= $this->url->link(t('My dashboard'), 'DashboardController', 'show', array('user_id' => $this->user->getId())) ?> - </li> - <li> - <i class="fa fa-home fa-fw"></i> - <?= $this->url->link(t('My profile'), 'UserViewController', 'show', array('user_id' => $this->user->getId())) ?> - </li> - <li> - <i class="fa fa-folder fa-fw"></i> - <?= $this->url->link(t('Projects management'), 'ProjectListController', 'show') ?> - </li> - <?php if ($this->user->hasAccess('UserListController', 'show')): ?> - <li> - <i class="fa fa-user fa-fw"></i> - <?= $this->url->link(t('Users management'), 'UserListController', 'show') ?> - </li> - <li> - <i class="fa fa-group fa-fw"></i> - <?= $this->url->link(t('Groups management'), 'GroupListController', 'index') ?> - </li> - <li> - <i class="fa fa-cubes" aria-hidden="true"></i> - <?= $this->url->link(t('Plugins'), 'PluginController', 'show') ?> - </li> - <li> - <i class="fa fa-cog fa-fw"></i> - <?= $this->url->link(t('Settings'), 'ConfigController', 'index') ?> - </li> - <?php endif ?> +<?php $_top_right_corner = implode(' ', array( + $this->render('header/user_notifications'), + $this->render('header/creation_dropdown'), + $this->render('header/user_dropdown') + )) ?> - <?= $this->hook->render('template:header:dropdown') ?> - - <li> - <i class="fa fa-life-ring fa-fw"></i> - <?= $this->url->link(t('Documentation'), 'DocumentationController', 'show') ?> - </li> - <?php if (! DISABLE_LOGOUT): ?> - <li> - <i class="fa fa-sign-out fa-fw"></i> - <?= $this->url->link(t('Logout'), 'AuthController', 'logout') ?> - </li> - <?php endif ?> - </ul> - </div> - </li> - </ul> - </nav> +<header> + <div class="title-container"> + <?= $_title ?> + </div> + <?php if (! empty($board_selector)): ?> + <div class="board-selector-container"> + <?= $this->render('header/board_selector', array('board_selector' => $board_selector)) ?> + </div> + <?php endif ?> + <div class="menus-container pull-right"> + <?= $_top_right_corner ?> + </div> </header> diff --git a/app/Template/header/board_selector.php b/app/Template/header/board_selector.php new file mode 100644 index 00000000..b42d47f9 --- /dev/null +++ b/app/Template/header/board_selector.php @@ -0,0 +1,13 @@ +<select id="board-selector" + class="chosen-select select-auto-redirect" + tabindex="-1" + data-search-threshold="0" + data-notfound="<?= t('No results match:') ?>" + data-placeholder="<?= t('Display another project') ?>" + data-redirect-regex="PROJECT_ID" + data-redirect-url="<?= $this->url->href('BoardViewController', 'show', array('project_id' => 'PROJECT_ID')) ?>"> + <option value=""></option> + <?php foreach ($board_selector as $board_id => $board_name): ?> + <option value="<?= $board_id ?>"><?= $this->text->e($board_name) ?></option> + <?php endforeach ?> +</select> diff --git a/app/Template/header/creation_dropdown.php b/app/Template/header/creation_dropdown.php new file mode 100644 index 00000000..d3b9e7cb --- /dev/null +++ b/app/Template/header/creation_dropdown.php @@ -0,0 +1,22 @@ +<?php $has_project_creation_access = $this->user->hasAccess('ProjectCreationController', 'create'); ?> +<?php $is_private_project_enabled = $this->app->config('disable_private_project', 0) == 0; ?> + +<?php if ($has_project_creation_access || (!$has_project_creation_access && $is_private_project_enabled)): ?> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-plus fa-fw"></i><i class="fa fa-caret-down"></i></a> + <ul> + <?php if ($has_project_creation_access): ?> + <li><i class="fa fa-plus fa-fw"></i> + <?= $this->url->link(t('New project'), 'ProjectCreationController', 'create', array(), false, 'popover') ?> + </li> + <?php endif ?> + <?php if ($is_private_project_enabled): ?> + <li> + <i class="fa fa-lock fa-fw"></i> + <?= $this->url->link(t('New private project'), 'ProjectCreationController', 'createPrivate', array(), false, 'popover') ?> + </li> + <?php endif ?> + <?= $this->hook->render('template:header:creation-dropdown') ?> + </ul> + </div> +<?php endif ?> diff --git a/app/Template/header/title.php b/app/Template/header/title.php new file mode 100644 index 00000000..61c6ee9a --- /dev/null +++ b/app/Template/header/title.php @@ -0,0 +1,17 @@ +<h1> + <span class="logo"> + <?= $this->url->link('K<span>B</span>', 'DashboardController', 'show', array(), false, '', t('Dashboard')) ?> + </span> + <span class="title"> + <?php if (! empty($project) && ! empty($task)): ?> + <?= $this->url->link($this->text->e($project['name']), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?> + <?php else: ?> + <?= $this->text->e($title) ?> + <?php endif ?> + </span> + <?php if (! empty($description)): ?> + <small class="tooltip" title="<?= $this->text->markdownAttribute($description) ?>"> + <i class="fa fa-info-circle"></i> + </small> + <?php endif ?> +</h1> diff --git a/app/Template/header/user_dropdown.php b/app/Template/header/user_dropdown.php new file mode 100644 index 00000000..49d08213 --- /dev/null +++ b/app/Template/header/user_dropdown.php @@ -0,0 +1,49 @@ +<div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><?= $this->avatar->currentUserSmall('avatar-inline') ?><i class="fa fa-caret-down"></i></a> + <ul> + <li class="no-hover"><strong><?= $this->text->e($this->user->getFullname()) ?></strong></li> + <li> + <i class="fa fa-tachometer fa-fw"></i> + <?= $this->url->link(t('My dashboard'), 'DashboardController', 'show', array('user_id' => $this->user->getId())) ?> + </li> + <li> + <i class="fa fa-home fa-fw"></i> + <?= $this->url->link(t('My profile'), 'UserViewController', 'show', array('user_id' => $this->user->getId())) ?> + </li> + <li> + <i class="fa fa-folder fa-fw"></i> + <?= $this->url->link(t('Projects management'), 'ProjectListController', 'show') ?> + </li> + <?php if ($this->user->hasAccess('UserListController', 'show')): ?> + <li> + <i class="fa fa-user fa-fw"></i> + <?= $this->url->link(t('Users management'), 'UserListController', 'show') ?> + </li> + <li> + <i class="fa fa-group fa-fw"></i> + <?= $this->url->link(t('Groups management'), 'GroupListController', 'index') ?> + </li> + <li> + <i class="fa fa-cubes" aria-hidden="true"></i> + <?= $this->url->link(t('Plugins'), 'PluginController', 'show') ?> + </li> + <li> + <i class="fa fa-cog fa-fw"></i> + <?= $this->url->link(t('Settings'), 'ConfigController', 'index') ?> + </li> + <?php endif ?> + + <?= $this->hook->render('template:header:dropdown') ?> + + <li> + <i class="fa fa-life-ring fa-fw"></i> + <?= $this->url->link(t('Documentation'), 'DocumentationController', 'show') ?> + </li> + <?php if (! DISABLE_LOGOUT): ?> + <li> + <i class="fa fa-sign-out fa-fw"></i> + <?= $this->url->link(t('Logout'), 'AuthController', 'logout') ?> + </li> + <?php endif ?> + </ul> +</div> diff --git a/app/Template/header/user_notifications.php b/app/Template/header/user_notifications.php new file mode 100644 index 00000000..83c545d2 --- /dev/null +++ b/app/Template/header/user_notifications.php @@ -0,0 +1,5 @@ +<?php if ($this->user->hasNotifications()): ?> + <span class="notification"> + <?= $this->url->link('<i class="fa fa-bell web-notification-icon"></i>', 'DashboardController', 'notifications', array('user_id' => $this->user->getId()), false, '', t('Unread notifications')) ?> + </span> +<?php endif ?> diff --git a/app/Template/layout.php b/app/Template/layout.php index 411237cb..8c85ffc6 100644 --- a/app/Template/layout.php +++ b/app/Template/layout.php @@ -15,7 +15,6 @@ <?= $this->asset->colorCss() ?> <?= $this->asset->css('assets/css/vendor.min.css') ?> <?= $this->asset->css('assets/css/app.min.css') ?> - <?= $this->asset->css('assets/css/print.min.css', true, 'print') ?> <?= $this->asset->customCss() ?> <?php if (! isset($not_editable)): ?> diff --git a/app/Template/link/index.php b/app/Template/link/index.php index 7e32069a..70ead4a6 100644 --- a/app/Template/link/index.php +++ b/app/Template/link/index.php @@ -2,7 +2,7 @@ <h2><?= t('Link labels') ?></h2> </div> <?php if (! empty($links)): ?> -<table> +<table class="table-striped table-scrolling"> <tr> <th class="column-70"><?= t('Link labels') ?></th> <th><?= t('Actions') ?></th> diff --git a/app/Template/project_header/header.php b/app/Template/project_header/header.php index aaa8137b..6c91e38b 100644 --- a/app/Template/project_header/header.php +++ b/app/Template/project_header/header.php @@ -1,15 +1,21 @@ <div class="project-header"> <?= $this->hook->render('template:project:header:before', array('project' => $project)) ?> - <?= $this->render('project_header/dropdown', array('project' => $project, 'board_view' => $board_view)) ?> - <?= $this->render('project_header/views', array('project' => $project, 'filters' => $filters)) ?> - <?= $this->render('project_header/search', array( - 'project' => $project, - 'filters' => $filters, - 'custom_filters_list' => isset($custom_filters_list) ? $custom_filters_list : array(), - 'users_list' => isset($users_list) ? $users_list : array(), - 'categories_list' => isset($categories_list) ? $categories_list : array(), - )) ?> + <div class="dropdown-component"> + <?= $this->render('project_header/dropdown', array('project' => $project, 'board_view' => $board_view)) ?> + </div> + <div class="views-switcher-component"> + <?= $this->render('project_header/views', array('project' => $project, 'filters' => $filters)) ?> + </div> + <div class="filter-box-component"> + <?= $this->render('project_header/search', array( + 'project' => $project, + 'filters' => $filters, + 'custom_filters_list' => isset($custom_filters_list) ? $custom_filters_list : array(), + 'users_list' => isset($users_list) ? $users_list : array(), + 'categories_list' => isset($categories_list) ? $categories_list : array(), + )) ?> + </div> <?= $this->hook->render('template:project:header:after', array('project' => $project)) ?> -</div>
\ No newline at end of file +</div> diff --git a/app/Template/project_header/search.php b/app/Template/project_header/search.php index 8885d9c9..512e88d7 100644 --- a/app/Template/project_header/search.php +++ b/app/Template/project_header/search.php @@ -3,43 +3,54 @@ <?= $this->form->hidden('controller', $filters) ?> <?= $this->form->hidden('action', $filters) ?> <?= $this->form->hidden('project_id', $filters) ?> - <?= $this->form->text('search', $filters, array(), array('placeholder="'.t('Filter').'"')) ?> - <?= $this->render('app/filters_helper', array('reset' => 'status:open', 'project' => $project)) ?> + <div class="input-addon"> + <?= $this->form->text('search', $filters, array(), array('placeholder="'.t('Filter').'"'), 'input-addon-field') ?> + <div class="input-addon-item"> + <?= $this->render('app/filters_helper', array('reset' => 'status:open', 'project' => $project)) ?> + </div> - <?php if (isset($custom_filters_list) && ! empty($custom_filters_list)): ?> - <div class="dropdown"> - <a href="#" class="dropdown-menu dropdown-menu-link-icon" title="<?= t('Custom filters') ?>"><i class="fa fa-bookmark fa-fw"></i><i class="fa fa-caret-down"></i></a> - <ul> - <?php foreach ($custom_filters_list as $filter): ?> - <li><a href="#" class="filter-helper" data-<?php if ($filter['append']): ?><?= 'append-' ?><?php endif ?>filter='<?= $this->text->e($filter['filter']) ?>'><?= $this->text->e($filter['name']) ?></a></li> - <?php endforeach ?> - </ul> - </div> - <?php endif ?> + <?php if (isset($custom_filters_list) && ! empty($custom_filters_list)): ?> + <div class="input-addon-item"> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon" title="<?= t('Custom filters') ?>"><i class="fa fa-bookmark fa-fw"></i><i class="fa fa-caret-down"></i></a> + <ul> + <?php foreach ($custom_filters_list as $filter): ?> + <li><a href="#" class="filter-helper" data-<?php if ($filter['append']): ?><?= 'append-' ?><?php endif ?>filter='<?= $this->text->e($filter['filter']) ?>'><?= $this->text->e($filter['name']) ?></a></li> + <?php endforeach ?> + </ul> + </div> + </div> + <?php endif ?> - <?php if (isset($users_list)): ?> - <div class="dropdown"> - <a href="#" class="dropdown-menu dropdown-menu-link-icon" title="<?= t('User filters') ?>"><i class="fa fa-users fa-fw"></i> <i class="fa fa-caret-down"></i></a> - <ul> - <li><a href="#" class="filter-helper" data-unique-filter="assignee:nobody"><?= t('Not assigned') ?></a></li> - <?php foreach ($users_list as $user): ?> - <li><a href="#" class="filter-helper" data-unique-filter='assignee:"<?= $this->text->e($user) ?>"'><?= $this->text->e($user) ?></a></li> - <?php endforeach ?> - </ul> - </div> - <?php endif ?> + <?php if (isset($users_list)): ?> + <div class="input-addon-item"> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon" title="<?= t('User filters') ?>"><i class="fa fa-users fa-fw"></i> <i class="fa fa-caret-down"></i></a> + <ul> + <li><a href="#" class="filter-helper" data-unique-filter="assignee:nobody"><?= t('Not assigned') ?></a></li> + <?php foreach ($users_list as $user): ?> + <li><a href="#" class="filter-helper" data-unique-filter='assignee:"<?= $this->text->e($user) ?>"'><?= $this->text->e($user) ?></a></li> + <?php endforeach ?> + </ul> + </div> + </div> + <?php endif ?> - <?php if (isset($categories_list) && ! empty($categories_list)): ?> - <div class="dropdown"> - <a href="#" class="dropdown-menu dropdown-menu-link-icon" title="<?= t('Category filters') ?>"><i class="fa fa-tags fa-fw"></i><i class="fa fa-caret-down"></i></a> - <ul> - <li><a href="#" class="filter-helper" data-unique-filter="category:none"><?= t('No category') ?></a></li> - <?php foreach ($categories_list as $category): ?> - <li><a href="#" class="filter-helper" data-unique-filter='category:"<?= $this->text->e($category) ?>"'><?= $this->text->e($category) ?></a></li> - <?php endforeach ?> - </ul> + <?php if (isset($categories_list) && ! empty($categories_list)): ?> + <div class="input-addon-item"> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon" title="<?= t('Category filters') ?>"><i class="fa fa-tags fa-fw"></i><i class="fa fa-caret-down"></i></a> + <ul> + <li><a href="#" class="filter-helper" data-unique-filter="category:none"><?= t('No category') ?></a></li> + <?php foreach ($categories_list as $category): ?> + <li><a href="#" class="filter-helper" data-unique-filter='category:"<?= $this->text->e($category) ?>"'><?= $this->text->e($category) ?></a></li> + <?php endforeach ?> + </ul> + </div> + </div> + <?php endif ?> </div> - <?php endif ?> + </form> </div> diff --git a/app/Template/project_list/show.php b/app/Template/project_list/show.php index 8b9f1396..8e4c3e6a 100644 --- a/app/Template/project_list/show.php +++ b/app/Template/project_list/show.php @@ -12,13 +12,13 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('No project') ?></p> <?php else: ?> - <table class="table-stripped table-small"> + <table class="table-striped table-scrolling"> <tr> - <th class="column-3"><?= $paginator->order(t('Id'), 'id') ?></th> - <th class="column-5"><?= $paginator->order(t('Status'), 'is_active') ?></th> + <th class="column-5"><?= $paginator->order(t('Id'), 'id') ?></th> + <th class="column-8"><?= $paginator->order(t('Status'), 'is_active') ?></th> <th class="column-15"><?= $paginator->order(t('Project'), 'name') ?></th> - <th class="column-8"><?= $paginator->order(t('Start date'), 'start_date') ?></th> - <th class="column-8"><?= $paginator->order(t('End date'), 'end_date') ?></th> + <th class="column-10"><?= $paginator->order(t('Start date'), 'start_date') ?></th> + <th class="column-10"><?= $paginator->order(t('End date'), 'end_date') ?></th> <th class="column-15"><?= $paginator->order(t('Owner'), 'owner_id') ?></th> <?php if ($this->user->hasAccess('ProjectUserOverviewController', 'managers')): ?> <th class="column-10"><?= t('Users') ?></th> @@ -73,7 +73,7 @@ <td class="dashboard-project-stats"> <?php foreach ($project['columns'] as $column): ?> <strong title="<?= t('Task count') ?>"><?= $column['nb_tasks'] ?></strong> - <span><?= $this->text->e($column['title']) ?></span> + <small><?= $this->text->e($column['title']) ?></small> <?php endforeach ?> </td> </tr> diff --git a/app/Template/project_overview/columns.php b/app/Template/project_overview/columns.php index cc5782bd..daae9ca7 100644 --- a/app/Template/project_overview/columns.php +++ b/app/Template/project_overview/columns.php @@ -1,8 +1,8 @@ <div class="project-overview-columns"> <?php foreach ($project['columns'] as $column): ?> <div class="project-overview-column"> - <strong title="<?= t('Task count') ?>"><?= $column['nb_tasks'] ?></strong><br> - <span><?= $this->text->e($column['title']) ?></span> + <strong title="<?= t('Task count') ?>"><?= $column['nb_tasks'] ?></strong> + <small><?= $this->text->e($column['title']) ?></small> </div> <?php endforeach ?> </div> diff --git a/app/Template/project_overview/files.php b/app/Template/project_overview/files.php index fa870938..826e6325 100644 --- a/app/Template/project_overview/files.php +++ b/app/Template/project_overview/files.php @@ -1,5 +1,5 @@ <?php if (! empty($files)): ?> - <table class="table-stripped"> + <table class="table-striped table-scrolling"> <tr> <th><?= t('Filename') ?></th> <th><?= t('Creator') ?></th> diff --git a/app/Template/project_permission/index.php b/app/Template/project_permission/index.php index d850ec50..c7b17782 100644 --- a/app/Template/project_permission/index.php +++ b/app/Template/project_permission/index.php @@ -9,7 +9,7 @@ <?php if (empty($users)): ?> <div class="alert"><?= t('No user have been allowed specifically.') ?></div> <?php else: ?> - <table> + <table class="table-scrolling"> <tr> <th class="column-50"><?= t('User') ?></th> <th><?= t('Role') ?></th> @@ -69,7 +69,7 @@ <?php if (empty($groups)): ?> <div class="alert"><?= t('No group have been allowed specifically.') ?></div> <?php else: ?> - <table> + <table class="table-scrolling"> <tr> <th class="column-50"><?= t('Group') ?></th> <th><?= t('Role') ?></th> diff --git a/app/Template/project_tag/index.php b/app/Template/project_tag/index.php index 8e8dd96c..f77e21ee 100644 --- a/app/Template/project_tag/index.php +++ b/app/Template/project_tag/index.php @@ -11,7 +11,7 @@ <?php if (empty($tags)): ?> <p class="alert"><?= t('There is no specific tag for this project at the moment.') ?></p> <?php else: ?> - <table class="table-striped"> + <table class="table-striped table-scrolling"> <tr> <th class="column-80"><?= t('Tag') ?></th> <th><?= t('Action') ?></th> diff --git a/app/Template/project_user_overview/roles.php b/app/Template/project_user_overview/roles.php index 87c8df85..011714d4 100644 --- a/app/Template/project_user_overview/roles.php +++ b/app/Template/project_user_overview/roles.php @@ -1,7 +1,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('No project') ?></p> <?php else: ?> - <table class="table-fixed"> + <table class="table-fixed table-scrolling"> <tr> <th class="column-20"><?= $paginator->order(t('User'), 'users.username') ?></th> <th class="column-25"><?= $paginator->order(t('Project'), 'projects.name') ?></th> diff --git a/app/Template/project_user_overview/tasks.php b/app/Template/project_user_overview/tasks.php index af0a3d97..8d682170 100644 --- a/app/Template/project_user_overview/tasks.php +++ b/app/Template/project_user_overview/tasks.php @@ -1,7 +1,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('No tasks found.') ?></p> <?php elseif (! $paginator->isEmpty()): ?> - <table class="table-small"> + <table class="table-small table-striped table-scrolling"> <tr> <th class="column-5"><?= $paginator->order(t('Id'), 'tasks.id') ?></th> <th class="column-10"><?= $paginator->order(t('Project'), 'projects.name') ?></th> diff --git a/app/Template/project_user_overview/tooltip_users.php b/app/Template/project_user_overview/tooltip_users.php index 7117a87f..99b00030 100644 --- a/app/Template/project_user_overview/tooltip_users.php +++ b/app/Template/project_user_overview/tooltip_users.php @@ -1,7 +1,7 @@ <?php if (empty($users)): ?> <p><?= t('There is no project member.') ?></p> <?php else: ?> - <table> + <table class="table-small"> <?php foreach ($roles as $role => $role_name): ?> <?php if (isset($users[$role])): ?> <tr><th><?= $role_name ?></th></tr> diff --git a/app/Template/project_view/show.php b/app/Template/project_view/show.php index 667a576c..afe60384 100644 --- a/app/Template/project_view/show.php +++ b/app/Template/project_view/show.php @@ -52,7 +52,7 @@ <div class="page-header"> <h2><?= t('Board') ?></h2> </div> -<table class="table-stripped"> +<table class="table-striped table-scrolling"> <tr> <th class="column-40"><?= t('Column') ?></th> <th class="column-20"><?= t('Task limit') ?></th> diff --git a/app/Template/search/activity.php b/app/Template/search/activity.php index 9abc7d7e..1dfd9234 100644 --- a/app/Template/search/activity.php +++ b/app/Template/search/activity.php @@ -12,8 +12,13 @@ <form method="get" action="<?= $this->url->dir() ?>" class="search"> <?= $this->form->hidden('controller', $values) ?> <?= $this->form->hidden('action', $values) ?> - <?= $this->form->text('search', $values, array(), array(empty($values['search']) ? 'autofocus' : '', 'placeholder="'.t('Search').'"'), 'form-input-large') ?> - <?= $this->render('activity/filter_dropdown') ?> + + <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> </form> </div> diff --git a/app/Template/search/index.php b/app/Template/search/index.php index bc528af7..c59a5c99 100644 --- a/app/Template/search/index.php +++ b/app/Template/search/index.php @@ -12,8 +12,13 @@ <form method="get" action="<?= $this->url->dir() ?>" class="search"> <?= $this->form->hidden('controller', $values) ?> <?= $this->form->hidden('action', $values) ?> - <?= $this->form->text('search', $values, array(), array(empty($values['search']) ? 'autofocus' : '', 'placeholder="'.t('Search').'"'), 'form-input-large') ?> - <?= $this->render('app/filters_helper') ?> + + <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> </form> </div> diff --git a/app/Template/search/results.php b/app/Template/search/results.php index 8376b9e8..8c439a8a 100644 --- a/app/Template/search/results.php +++ b/app/Template/search/results.php @@ -1,4 +1,4 @@ -<table class="table-fixed table-small"> +<table class="table-small table-scrolling"> <tr> <th class="column-8"><?= $paginator->order(t('Project'), 'tasks.project_id') ?></th> <th class="column-5"><?= $paginator->order(t('Id'), 'tasks.id') ?></th> diff --git a/app/Template/subtask/table.php b/app/Template/subtask/table.php index 4c6484ef..5c60df44 100644 --- a/app/Template/subtask/table.php +++ b/app/Template/subtask/table.php @@ -1,6 +1,6 @@ <?php if (! empty($subtasks)): ?> <table - class="subtasks-table table-stripped" + class="subtasks-table table-striped table-scrolling" data-save-position-url="<?= $this->url->href('SubtaskController', 'movePosition', array('project_id' => $task['project_id'], 'task_id' => $task['id'])) ?>" > <thead> diff --git a/app/Template/swimlane/table.php b/app/Template/swimlane/table.php index be123b08..cefef9de 100644 --- a/app/Template/swimlane/table.php +++ b/app/Template/swimlane/table.php @@ -1,5 +1,5 @@ <table - class="swimlanes-table table-stripped" + class="swimlanes-table table-striped table-scrolling" data-save-position-url="<?= $this->url->href('SwimlaneController', 'move', array('project_id' => $project['id'])) ?>"> <thead> <tr> diff --git a/app/Template/tag/index.php b/app/Template/tag/index.php index 2a495eb3..8e0c9a06 100644 --- a/app/Template/tag/index.php +++ b/app/Template/tag/index.php @@ -11,7 +11,7 @@ <?php if (empty($tags)): ?> <p class="alert"><?= t('There is no global tag at the moment.') ?></p> <?php else: ?> - <table class="table-striped"> + <table class="table-striped table-scrolling"> <tr> <th class="column-80"><?= t('Tag') ?></th> <th><?= t('Action') ?></th> diff --git a/app/Template/task/analytics.php b/app/Template/task/analytics.php index db2d0cef..071f24a7 100644 --- a/app/Template/task/analytics.php +++ b/app/Template/task/analytics.php @@ -1,6 +1,10 @@ -<div class="task-show-title color-<?= $task['color_id'] ?>"> - <h2><?= $this->text->e($task['title']) ?></h2> -</div> +<?= $this->render('task/details', array( + 'task' => $task, + 'tags' => $tags, + 'project' => $project, + 'editable' => false, +)) ?> + <div class="page-header"> <h2><?= t('Analytics') ?></h2> </div> @@ -14,7 +18,7 @@ <h3 id="analytic-task-time-column"><?= t('Time spent into each column') ?></h3> <div id="chart" data-metrics='<?= json_encode($time_spent_columns, JSON_HEX_APOS) ?>' data-label="<?= t('Time spent') ?>"></div> -<table class="table-stripped"> +<table class="table-striped"> <tr> <th><?= t('Column') ?></th> <th><?= t('Time spent') ?></th> diff --git a/app/Template/task/details.php b/app/Template/task/details.php index 695957f9..a39c1bab 100644 --- a/app/Template/task/details.php +++ b/app/Template/task/details.php @@ -31,18 +31,21 @@ </li> <?php endif ?> <?php if ($project['is_public']): ?> - <li class="smaller"> - <i class="fa fa-external-link fa-fw"></i> - <?= $this->url->link(t('Public link'), 'TaskViewController', 'readonly', array('task_id' => $task['id'], 'token' => $project['token']), false, '', '', true) ?> + <li> + <small> + <i class="fa fa-external-link fa-fw"></i> + <?= $this->url->link(t('Public link'), 'TaskViewController', 'readonly', array('task_id' => $task['id'], 'token' => $project['token']), false, '', '', true) ?> + </small> </li> <?php endif ?> <?php if ($project['is_public'] && !$editable): ?> - <li class="smaller"> - <i class="fa fa-th fa-fw"></i> - <?= $this->url->link(t('Back to the board'), 'BoardViewController', 'readonly', array('token' => $project['token'])) ?> + <li> + <small> + <i class="fa fa-th fa-fw"></i> + <?= $this->url->link(t('Back to the board'), 'BoardViewController', 'readonly', array('token' => $project['token'])) ?> + </small> </li> <?php endif ?> - <li class="smaller"> <?= $this->hook->render('template:task:details:first-column', array('task' => $task)) ?> </ul> @@ -158,7 +161,7 @@ </div> <?php if ($editable && empty($task['date_started'])): ?> - <div class="task-summary-buttons"> + <div class="buttons-header"> <?= $this->url->button('fa-play', t('Set start date'), 'TaskModificationController', 'start', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> </div> <?php endif ?> diff --git a/app/Template/task/show.php b/app/Template/task/show.php index b18c2bca..a5c2d5a7 100644 --- a/app/Template/task/show.php +++ b/app/Template/task/show.php @@ -8,58 +8,58 @@ )) ?> <?php if (!empty($task['description'])): ?> -<?= $this->hook->render('template:task:show:before-description', array('task' => $task, 'project' => $project)) ?> -<?= $this->render('task/description', array('task' => $task)) ?> + <?= $this->hook->render('template:task:show:before-description', array('task' => $task, 'project' => $project)) ?> + <?= $this->render('task/description', array('task' => $task)) ?> <?php endif ?> <?php if(!empty($subtasks)): ?> -<?= $this->hook->render('template:task:show:before-subtasks', array('task' => $task, 'project' => $project)) ?> -<?= $this->render('subtask/show', array( - 'task' => $task, - 'subtasks' => $subtasks, - 'project' => $project, - 'editable' => true, -)) ?> + <?= $this->hook->render('template:task:show:before-subtasks', array('task' => $task, 'project' => $project)) ?> + <?= $this->render('subtask/show', array( + 'task' => $task, + 'subtasks' => $subtasks, + 'project' => $project, + 'editable' => true, + )) ?> <?php endif ?> <?php if (!empty($internal_links)): ?> -<?= $this->hook->render('template:task:show:before-internal-links', array('task' => $task, 'project' => $project)) ?> -<?= $this->render('task_internal_link/show', array( - 'task' => $task, - 'links' => $internal_links, - 'project' => $project, - 'link_label_list' => $link_label_list, - 'editable' => true, - 'is_public' => false, -)) ?> + <?= $this->hook->render('template:task:show:before-internal-links', array('task' => $task, 'project' => $project)) ?> + <?= $this->render('task_internal_link/show', array( + 'task' => $task, + 'links' => $internal_links, + 'project' => $project, + 'link_label_list' => $link_label_list, + 'editable' => true, + 'is_public' => false, + )) ?> <?php endif ?> <?php if (!empty($external_links)): ?> -<?= $this->hook->render('template:task:show:before-external-links', array('task' => $task, 'project' => $project)) ?> -<?= $this->render('task_external_link/show', array( - 'task' => $task, - 'links' => $external_links, - 'project' => $project, -)) ?> + <?= $this->hook->render('template:task:show:before-external-links', array('task' => $task, 'project' => $project)) ?> + <?= $this->render('task_external_link/show', array( + 'task' => $task, + 'links' => $external_links, + 'project' => $project, + )) ?> <?php endif ?> <?php if (!empty($files) || !empty($images)): ?> -<?= $this->hook->render('template:task:show:before-attachments', array('task' => $task, 'project' => $project)) ?> -<?= $this->render('task_file/show', array( - 'task' => $task, - 'files' => $files, - 'images' => $images -)) ?> + <?= $this->hook->render('template:task:show:before-attachments', array('task' => $task, 'project' => $project)) ?> + <?= $this->render('task_file/show', array( + 'task' => $task, + 'files' => $files, + 'images' => $images + )) ?> <?php endif ?> <?php if (!empty($comments)): ?> -<?= $this->hook->render('template:task:show:before-comments', array('task' => $task, 'project' => $project)) ?> -<?= $this->render('comments/show', array( - 'task' => $task, - 'comments' => $comments, - 'project' => $project, - 'editable' => $this->user->hasProjectAccess('CommentController', 'edit', $project['id']), -)) ?> + <?= $this->hook->render('template:task:show:before-comments', array('task' => $task, 'project' => $project)) ?> + <?= $this->render('comments/show', array( + 'task' => $task, + 'comments' => $comments, + 'project' => $project, + 'editable' => $this->user->hasProjectAccess('CommentController', 'edit', $project['id']), + )) ?> <?php endif ?> <?= $this->hook->render('template:task:show:bottom', array('task' => $task, 'project' => $project)) ?> diff --git a/app/Template/task/time_tracking_details.php b/app/Template/task/time_tracking_details.php index 1a179522..7cb419e0 100644 --- a/app/Template/task/time_tracking_details.php +++ b/app/Template/task/time_tracking_details.php @@ -1,6 +1,9 @@ -<div class="task-show-title color-<?= $task['color_id'] ?>"> - <h2><?= $this->text->e($task['title']) ?></h2> -</div> +<?= $this->render('task/details', array( + 'task' => $task, + 'tags' => $tags, + 'project' => $project, + 'editable' => false, +)) ?> <?= $this->render('task/time_tracking_summary', array('task' => $task)) ?> @@ -8,7 +11,7 @@ <?php if ($subtask_paginator->isEmpty()): ?> <p class="alert"><?= t('There is nothing to show.') ?></p> <?php else: ?> - <table class="table-fixed"> + <table class="table-fixed table-scrolling"> <tr> <th class="column-15"><?= $subtask_paginator->order(t('User'), 'username') ?></th> <th><?= $subtask_paginator->order(t('Subtask'), 'subtask_title') ?></th> diff --git a/app/Template/task/transitions.php b/app/Template/task/transitions.php index 9e04c4e1..4a9f22ce 100644 --- a/app/Template/task/transitions.php +++ b/app/Template/task/transitions.php @@ -1,6 +1,9 @@ -<div class="task-show-title color-<?= $task['color_id'] ?>"> - <h2><?= $this->text->e($task['title']) ?></h2> -</div> +<?= $this->render('task/details', array( + 'task' => $task, + 'tags' => $tags, + 'project' => $project, + 'editable' => false, +)) ?> <div class="page-header"> <h2><?= t('Transitions') ?></h2> @@ -9,7 +12,7 @@ <?php if (empty($transitions)): ?> <p class="alert"><?= t('There is nothing to show.') ?></p> <?php else: ?> - <table class="table-stripped"> + <table class="table-striped table-scrolling"> <tr> <th><?= t('Date') ?></th> <th><?= t('Source column') ?></th> diff --git a/app/Template/task_bulk/show.php b/app/Template/task_bulk/show.php index e9b138d5..11ddea31 100644 --- a/app/Template/task_bulk/show.php +++ b/app/Template/task_bulk/show.php @@ -1,5 +1,5 @@ <div class="page-header"> - <h2><?= t('Create tasks in bulk') ?></h2> + <h2><?= $this->text->e($project['name']) ?> > <?= t('Create tasks in bulk') ?></h2> </div> <form class="popover-form" method="post" action="<?= $this->url->href('TaskBulkController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> diff --git a/app/Template/task_creation/show.php b/app/Template/task_creation/show.php index 57e77f37..1a8a17d5 100644 --- a/app/Template/task_creation/show.php +++ b/app/Template/task_creation/show.php @@ -1,5 +1,5 @@ <div class="page-header"> - <h2><?= t('New task') ?></h2> + <h2><?= $this->text->e($project['name']) ?> > <?= t('New task') ?></h2> </div> <form class="popover-form" method="post" action="<?= $this->url->href('TaskCreationController', 'save', array('project_id' => $values['project_id'])) ?>" autocomplete="off"> diff --git a/app/Template/task_external_link/table.php b/app/Template/task_external_link/table.php index 56ef0363..cdfe0028 100644 --- a/app/Template/task_external_link/table.php +++ b/app/Template/task_external_link/table.php @@ -1,5 +1,5 @@ <?php if (! empty($links)): ?> -<table class="table-stripped table-small"> +<table class="table-striped table-scrolling"> <tr> <th class="column-10"><?= t('Type') ?></th> <th><?= t('Title') ?></th> diff --git a/app/Template/task_file/files.php b/app/Template/task_file/files.php index 7ca59b1c..94c26f73 100644 --- a/app/Template/task_file/files.php +++ b/app/Template/task_file/files.php @@ -1,5 +1,5 @@ <?php if (! empty($files)): ?> - <table class="table-stripped table-small"> + <table class="table-striped table-scrolling"> <tr> <th><?= t('Filename') ?></th> <th><?= t('Creator') ?></th> diff --git a/app/Template/task_gantt_creation/show.php b/app/Template/task_gantt_creation/show.php index 7521d805..7906c39a 100644 --- a/app/Template/task_gantt_creation/show.php +++ b/app/Template/task_gantt_creation/show.php @@ -1,7 +1,7 @@ <div class="page-header"> - <h2><?= t('New task') ?></h2> + <h2><?= $this->text->e($project['name']) ?> > <?= t('New task') ?></h2> </div> -<form method="post" action="<?= $this->url->href('TaskGanttCreationController', 'save', array('project_id' => $values['project_id'])) ?>" autocomplete="off"> +<form class="popover-form" method="post" action="<?= $this->url->href('TaskGanttCreationController', 'save', array('project_id' => $values['project_id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->hidden('column_id', $values) ?> diff --git a/app/Template/task_internal_link/table.php b/app/Template/task_internal_link/table.php index 424d4791..6584a33a 100644 --- a/app/Template/task_internal_link/table.php +++ b/app/Template/task_internal_link/table.php @@ -1,5 +1,5 @@ <?php if (! empty($links)): ?> -<table class="task-links-table table-stripped"> +<table class="task-links-table table-striped table-scrolling"> <?php foreach ($links as $label => $grouped_links): ?> <?php $hide_td = false ?> <?php foreach ($grouped_links as $link): ?> diff --git a/app/Template/task_list/show.php b/app/Template/task_list/show.php index bb95b6a3..0518e4c3 100644 --- a/app/Template/task_list/show.php +++ b/app/Template/task_list/show.php @@ -4,7 +4,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('No tasks found.') ?></p> <?php elseif (! $paginator->isEmpty()): ?> - <table class="table-fixed table-small"> + <table class="table-striped table-scrolling table-small"> <tr> <th class="column-5"><?= $paginator->order(t('Id'), 'tasks.id') ?></th> <th class="column-10"><?= $paginator->order(t('Swimlane'), 'tasks.swimlane_id') ?></th> diff --git a/app/Template/task_modification/show.php b/app/Template/task_modification/show.php index cc38582c..734b247a 100644 --- a/app/Template/task_modification/show.php +++ b/app/Template/task_modification/show.php @@ -1,5 +1,5 @@ <div class="page-header"> - <h2><?= t('Edit a task') ?></h2> + <h2><?= $this->text->e($project['name']) ?> > <?= $this->text->e($task['title']) ?></h2> </div> <form class="popover-form" method="post" action="<?= $this->url->href('TaskModificationController', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> diff --git a/app/Template/user_list/show.php b/app/Template/user_list/show.php index b2bd9377..5e285c89 100644 --- a/app/Template/user_list/show.php +++ b/app/Template/user_list/show.php @@ -12,7 +12,7 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('No user') ?></p> <?php else: ?> - <table class="table-stripped"> + <table class="table-scrolling table-striped"> <tr> <th class="column-5"><?= $paginator->order(t('Id'), 'id') ?></th> <th class="column-18"><?= $paginator->order(t('Username'), 'username') ?></th> diff --git a/app/Template/user_view/last.php b/app/Template/user_view/last.php index 3de4d5e2..72f59bf6 100644 --- a/app/Template/user_view/last.php +++ b/app/Template/user_view/last.php @@ -5,7 +5,7 @@ <?php if (empty($last_logins)): ?> <p class="alert"><?= t('Never connected.') ?></p> <?php else: ?> - <table class="table-small table-fixed"> + <table class="table-small table-fixed table-scrolling table-striped"> <tr> <th class="column-20"><?= t('Login date') ?></th> <th class="column-15"><?= t('Authentication method') ?></th> @@ -21,4 +21,4 @@ </tr> <?php endforeach ?> </table> -<?php endif ?>
\ No newline at end of file +<?php endif ?> diff --git a/app/Template/user_view/password_reset.php b/app/Template/user_view/password_reset.php index 1371ce11..de7047e0 100644 --- a/app/Template/user_view/password_reset.php +++ b/app/Template/user_view/password_reset.php @@ -5,7 +5,7 @@ <?php if (empty($tokens)): ?> <p class="alert"><?= t('The password has never been reinitialized.') ?></p> <?php else: ?> - <table class="table-small table-fixed"> + <table class="table-small table-fixed table-scrolling table-striped"> <tr> <th class="column-20"><?= t('Creation') ?></th> <th class="column-20"><?= t('Expiration') ?></th> @@ -23,4 +23,4 @@ </tr> <?php endforeach ?> </table> -<?php endif ?>
\ No newline at end of file +<?php endif ?> diff --git a/app/Template/user_view/sessions.php b/app/Template/user_view/sessions.php index eda3ef7f..10497e4f 100644 --- a/app/Template/user_view/sessions.php +++ b/app/Template/user_view/sessions.php @@ -5,7 +5,7 @@ <?php if (empty($sessions)): ?> <p class="alert"><?= t('No session.') ?></p> <?php else: ?> - <table class="table-small table-fixed"> + <table class="table-small table-fixed table-scrolling table-striped"> <tr> <th class="column-20"><?= t('Creation date') ?></th> <th class="column-20"><?= t('Expiration date') ?></th> diff --git a/app/Template/user_view/timesheet.php b/app/Template/user_view/timesheet.php index 3df57492..aeffd2f4 100644 --- a/app/Template/user_view/timesheet.php +++ b/app/Template/user_view/timesheet.php @@ -6,7 +6,7 @@ <?php if ($subtask_paginator->isEmpty()): ?> <p class="alert"><?= t('There is nothing to show.') ?></p> <?php else: ?> - <table class="table-fixed"> + <table class="table-fixed table-scrolling table-striped"> <tr> <th class="column-25"><?= $subtask_paginator->order(t('Task'), 'task_title') ?></th> <th class="column-25"><?= $subtask_paginator->order(t('Subtask'), 'subtask_title') ?></th> |
