From 8a6f02735b628033a3284d06a9f633bd260e19ef Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sun, 15 May 2016 20:09:43 -0400 Subject: [PATCH] Added task creation menu for all projects views --- ChangeLog | 2 ++ app/Controller/DashboardController.php | 6 +++--- .../{TaskBulk.php => TaskBulkController.php} | 4 ++-- ...reation.php => TaskCreationController.php} | 14 ++++++------- app/Core/Controller/BaseMiddleware.php | 4 ++-- .../AuthenticationProvider.php | 3 ++- app/Subscriber/BootstrapSubscriber.php | 8 ++++---- app/Template/board/table_column.php | 8 ++++---- app/Template/board/table_container.php | 4 ++-- app/Template/listing/show.php | 2 +- app/Template/project_header/dropdown.php | 20 +++++++++++++------ app/Template/task_bulk/show.php | 2 +- .../task_creation/{form.php => show.php} | 2 +- tests/units/Helper/UserHelperTest.php | 16 +++++++-------- 14 files changed, 53 insertions(+), 42 deletions(-) rename app/Controller/{TaskBulk.php => TaskBulkController.php} (97%) rename app/Controller/{Taskcreation.php => TaskCreationController.php} (90%) rename app/Template/task_creation/{form.php => show.php} (95%) diff --git a/ChangeLog b/ChangeLog index 3477be945..7c6c1f40f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,12 +3,14 @@ Version 1.0.29 (unreleased) New features: +* Added menu entry to add tasks from all project views * Add tasks in bulk from the board * Add dropdown for projects Improvements: * Use Gulp and Bower to manage assets +* Controller and Middleware refactoring Version 1.0.28 -------------- diff --git a/app/Controller/DashboardController.php b/app/Controller/DashboardController.php index b05cd209c..145e0bff8 100644 --- a/app/Controller/DashboardController.php +++ b/app/Controller/DashboardController.php @@ -81,9 +81,9 @@ class DashboardController extends BaseController $this->response->html($this->helper->layout->dashboard('dashboard/show', array( 'title' => t('Dashboard'), - 'project_paginator' => $this->getProjectPaginator($user['id'], 'index', 10), - 'task_paginator' => $this->getTaskPaginator($user['id'], 'index', 10), - 'subtask_paginator' => $this->getSubtaskPaginator($user['id'], 'index', 10), + 'project_paginator' => $this->getProjectPaginator($user['id'], 'show', 10), + 'task_paginator' => $this->getTaskPaginator($user['id'], 'show', 10), + 'subtask_paginator' => $this->getSubtaskPaginator($user['id'], 'show', 10), 'user' => $user, ))); } diff --git a/app/Controller/TaskBulk.php b/app/Controller/TaskBulkController.php similarity index 97% rename from app/Controller/TaskBulk.php rename to app/Controller/TaskBulkController.php index d0a1b2768..4b4a2594f 100644 --- a/app/Controller/TaskBulk.php +++ b/app/Controller/TaskBulkController.php @@ -3,11 +3,11 @@ namespace Kanboard\Controller; /** - * Class TaskBulk + * Class TaskBulkController * * @package Kanboard\Controller */ -class TaskBulk extends BaseController +class TaskBulkController extends BaseController { /** * Show the form diff --git a/app/Controller/Taskcreation.php b/app/Controller/TaskCreationController.php similarity index 90% rename from app/Controller/Taskcreation.php rename to app/Controller/TaskCreationController.php index af7d0c809..2a63ddcc9 100644 --- a/app/Controller/Taskcreation.php +++ b/app/Controller/TaskCreationController.php @@ -3,12 +3,12 @@ namespace Kanboard\Controller; /** - * Task Creation controller + * Task Creation Controller * - * @package controller + * @package Kanboard\Controller * @author Frederic Guillot */ -class Taskcreation extends BaseController +class TaskCreationController extends BaseController { /** * Display a form to create a new task @@ -18,7 +18,7 @@ class Taskcreation extends BaseController * @param array $errors * @throws \Kanboard\Core\Controller\PageNotFoundException */ - public function create(array $values = array(), array $errors = array()) + public function show(array $values = array(), array $errors = array()) { $project = $this->getProject(); $swimlanes_list = $this->swimlane->getList($project['id'], false, true); @@ -35,7 +35,7 @@ class Taskcreation extends BaseController $values = $this->hook->merge('controller:task-creation:form:default', $values, array('default_values' => $values)); } - $this->response->html($this->template->render('task_creation/form', array( + $this->response->html($this->template->render('task_creation/show', array( 'project' => $project, 'errors' => $errors, 'values' => $values + array('project_id' => $project['id']), @@ -66,13 +66,13 @@ class Taskcreation extends BaseController } $this->flash->failure(t('Unable to create your task.')); - return $this->create($values, $errors); + return $this->show($values, $errors); } private function afterSave(array $project, array &$values) { if (isset($values['another_task']) && $values['another_task'] == 1) { - return $this->create(array( + return $this->show(array( 'owner_id' => $values['owner_id'], 'color_id' => $values['color_id'], 'category_id' => isset($values['category_id']) ? $values['category_id'] : 0, diff --git a/app/Core/Controller/BaseMiddleware.php b/app/Core/Controller/BaseMiddleware.php index f2862d13c..233843c9b 100644 --- a/app/Core/Controller/BaseMiddleware.php +++ b/app/Core/Controller/BaseMiddleware.php @@ -25,10 +25,10 @@ abstract class BaseMiddleware extends Base /** * Set next middleware * - * @param BaseMiddleware $nextMiddleware + * @param BaseMiddleware|null $nextMiddleware * @return BaseMiddleware */ - public function setNextMiddleware($nextMiddleware) + public function setNextMiddleware(BaseMiddleware $nextMiddleware) { $this->nextMiddleware = $nextMiddleware; return $this; diff --git a/app/ServiceProvider/AuthenticationProvider.php b/app/ServiceProvider/AuthenticationProvider.php index f9abaf595..b9082c26c 100644 --- a/app/ServiceProvider/AuthenticationProvider.php +++ b/app/ServiceProvider/AuthenticationProvider.php @@ -91,7 +91,8 @@ class AuthenticationProvider implements ServiceProviderInterface $acl->add('SubtaskStatus', '*', Role::PROJECT_MEMBER); $acl->add('Swimlane', '*', Role::PROJECT_MANAGER); $acl->add('Task', 'remove', Role::PROJECT_MEMBER); - $acl->add('Taskcreation', '*', Role::PROJECT_MEMBER); + $acl->add('TaskCreationController', '*', Role::PROJECT_MEMBER); + $acl->add('TaskBulkController', '*', Role::PROJECT_MEMBER); $acl->add('Taskduplication', '*', Role::PROJECT_MEMBER); $acl->add('TaskRecurrence', '*', Role::PROJECT_MEMBER); $acl->add('TaskImport', '*', Role::PROJECT_MANAGER); diff --git a/app/Subscriber/BootstrapSubscriber.php b/app/Subscriber/BootstrapSubscriber.php index b82405f84..e60840f1f 100644 --- a/app/Subscriber/BootstrapSubscriber.php +++ b/app/Subscriber/BootstrapSubscriber.php @@ -32,10 +32,10 @@ class BootstrapSubscriber extends BaseSubscriber implements EventSubscriberInter $this->logger->debug('SQL: ' . $message); } - $this->logger->debug('nb_queries={nb}', array('nb' => $this->db->getStatementHandler()->getNbQueries())); - $this->logger->debug('rendering_time={time}', array('time' => microtime(true) - $this->request->getStartTime())); - $this->logger->debug('memory_usage='.$this->helper->text->bytes(memory_get_usage())); - $this->logger->debug('uri='.$this->request->getUri()); + $this->logger->debug('APP: nb_queries={nb}', array('nb' => $this->db->getStatementHandler()->getNbQueries())); + $this->logger->debug('APP: rendering_time={time}', array('time' => microtime(true) - $this->request->getStartTime())); + $this->logger->debug('APP: memory_usage='.$this->helper->text->bytes(memory_get_usage())); + $this->logger->debug('APP: uri='.$this->request->getUri()); $this->logger->debug('###############################################'); } } diff --git a/app/Template/board/table_column.php b/app/Template/board/table_column.php index e2f690365..a356849c7 100644 --- a/app/Template/board/table_column.php +++ b/app/Template/board/table_column.php @@ -12,9 +12,9 @@
- user->hasProjectAccess('taskcreation', 'create', $column['project_id'])): ?> + user->hasProjectAccess('TaskCreationController', 'show', $column['project_id'])): ?>
- url->link('+', 'taskcreation', 'create', array('project_id' => $column['project_id'], 'column_id' => $column['id'], 'swimlane_id' => $swimlane['id']), false, 'popover', t('Add a new task')) ?> + url->link('+', 'TaskCreationController', 'show', array('project_id' => $column['project_id'], 'column_id' => $column['id'], 'swimlane_id' => $swimlane['id']), false, 'popover', t('Add a new task')) ?>
@@ -35,10 +35,10 @@ - user->hasProjectAccess('Taskcreation', 'create', $column['project_id'])): ?> + user->hasProjectAccess('TaskCreationController', 'show', $column['project_id'])): ?>
  • - url->link(t('Create tasks in bulk'), 'TaskBulk', 'show', array('project_id' => $column['project_id'], 'column_id' => $column['id'], 'swimlane_id' => $swimlane['id']), false, 'popover') ?> + url->link(t('Create tasks in bulk'), 'TaskBulkController', 'show', array('project_id' => $column['project_id'], 'column_id' => $column['id'], 'swimlane_id' => $swimlane['id']), false, 'popover') ?>
  • 0): ?>
  • diff --git a/app/Template/board/table_container.php b/app/Template/board/table_container.php index e30f9ce8c..82bbec933 100644 --- a/app/Template/board/table_container.php +++ b/app/Template/board/table_container.php @@ -13,7 +13,7 @@ data-save-url="url->href('board', 'save', array('project_id' => $project['id'])) ?>" data-reload-url="url->href('board', 'reload', array('project_id' => $project['id'])) ?>" data-check-url="url->href('board', 'check', array('project_id' => $project['id'], 'timestamp' => time())) ?>" - data-task-creation-url="url->href('taskcreation', 'create', array('project_id' => $project['id'])) ?>" + data-task-creation-url="url->href('TaskCreationController', 'show', array('project_id' => $project['id'])) ?>" > @@ -55,4 +55,4 @@ -
  • \ No newline at end of file + diff --git a/app/Template/listing/show.php b/app/Template/listing/show.php index 98b9528aa..a5cba1c4c 100644 --- a/app/Template/listing/show.php +++ b/app/Template/listing/show.php @@ -59,4 +59,4 @@ - \ No newline at end of file + diff --git a/app/Template/project_header/dropdown.php b/app/Template/project_header/dropdown.php index fdfcaf26d..1aa59a8d1 100644 --- a/app/Template/project_header/dropdown.php +++ b/app/Template/project_header/dropdown.php @@ -30,21 +30,29 @@ + user->hasProjectAccess('TaskCreationController', 'show', $project['id'])): ?> +
  • + + url->link(t('Add a new task'), 'TaskCreationController', 'show', array('project_id' => $project['id']), false, 'popover') ?> +
  • + +
  • -   + url->link(t('Activity'), 'activity', 'project', array('project_id' => $project['id'])) ?>
  • user->hasProjectAccess('customfilter', 'index', $project['id'])): ?>
  • -   + url->link(t('Custom filters'), 'customfilter', 'index', array('project_id' => $project['id'])) ?>
  • -  url->link(t('Public link'), 'board', 'readonly', array('token' => $project['token']), false, '', '', true) ?> + + url->link(t('Public link'), 'board', 'readonly', array('token' => $project['token']), false, '', '', true) ?>
  • @@ -52,21 +60,21 @@ user->hasProjectAccess('analytic', 'tasks', $project['id'])): ?>
  • -   + url->link(t('Analytics'), 'analytic', 'tasks', array('project_id' => $project['id'])) ?>
  • user->hasProjectAccess('export', 'tasks', $project['id'])): ?>
  • -   + url->link(t('Exports'), 'export', 'tasks', array('project_id' => $project['id'])) ?>
  • user->hasProjectAccess('ProjectEdit', 'edit', $project['id'])): ?>
  • -   + url->link(t('Settings'), 'project', 'show', array('project_id' => $project['id'])) ?>
  • diff --git a/app/Template/task_bulk/show.php b/app/Template/task_bulk/show.php index 628b2c274..5f76f8086 100644 --- a/app/Template/task_bulk/show.php +++ b/app/Template/task_bulk/show.php @@ -2,7 +2,7 @@

    -
    + form->csrf() ?> form->hidden('column_id', $values) ?> form->hidden('swimlane_id', $values) ?> diff --git a/app/Template/task_creation/form.php b/app/Template/task_creation/show.php similarity index 95% rename from app/Template/task_creation/form.php rename to app/Template/task_creation/show.php index c963bdcff..d39911773 100644 --- a/app/Template/task_creation/form.php +++ b/app/Template/task_creation/show.php @@ -2,7 +2,7 @@

    - + form->csrf() ?> diff --git a/tests/units/Helper/UserHelperTest.php b/tests/units/Helper/UserHelperTest.php index 135f8ca61..c1feafd21 100644 --- a/tests/units/Helper/UserHelperTest.php +++ b/tests/units/Helper/UserHelperTest.php @@ -141,12 +141,12 @@ class UserHelperTest extends Base $this->assertTrue($helper->hasProjectAccess('ProjectEdit', 'edit', 1)); $this->assertTrue($helper->hasProjectAccess('board', 'show', 1)); $this->assertTrue($helper->hasProjectAccess('task', 'show', 1)); - $this->assertTrue($helper->hasProjectAccess('taskcreation', 'save', 1)); + $this->assertTrue($helper->hasProjectAccess('taskcreationcontroller', 'save', 1)); $this->assertFalse($helper->hasProjectAccess('ProjectEdit', 'edit', 2)); $this->assertFalse($helper->hasProjectAccess('board', 'show', 2)); $this->assertFalse($helper->hasProjectAccess('task', 'show', 2)); - $this->assertFalse($helper->hasProjectAccess('taskcreation', 'save', 2)); + $this->assertFalse($helper->hasProjectAccess('TaskCreationController', 'save', 2)); } public function testHasProjectAccessForProjectManagers() @@ -169,12 +169,12 @@ class UserHelperTest extends Base $this->assertTrue($helper->hasProjectAccess('ProjectEdit', 'edit', 1)); $this->assertTrue($helper->hasProjectAccess('board', 'show', 1)); $this->assertTrue($helper->hasProjectAccess('task', 'show', 1)); - $this->assertTrue($helper->hasProjectAccess('taskcreation', 'save', 1)); + $this->assertTrue($helper->hasProjectAccess('TaskCreationController', 'save', 1)); $this->assertFalse($helper->hasProjectAccess('ProjectEdit', 'edit', 2)); $this->assertFalse($helper->hasProjectAccess('board', 'show', 2)); $this->assertFalse($helper->hasProjectAccess('task', 'show', 2)); - $this->assertFalse($helper->hasProjectAccess('taskcreation', 'save', 2)); + $this->assertFalse($helper->hasProjectAccess('TaskCreationController', 'save', 2)); } public function testHasProjectAccessForProjectMembers() @@ -197,12 +197,12 @@ class UserHelperTest extends Base $this->assertFalse($helper->hasProjectAccess('ProjectEdit', 'edit', 1)); $this->assertTrue($helper->hasProjectAccess('board', 'show', 1)); $this->assertTrue($helper->hasProjectAccess('task', 'show', 1)); - $this->assertTrue($helper->hasProjectAccess('taskcreation', 'save', 1)); + $this->assertTrue($helper->hasProjectAccess('TaskCreationController', 'save', 1)); $this->assertFalse($helper->hasProjectAccess('ProjectEdit', 'edit', 2)); $this->assertFalse($helper->hasProjectAccess('board', 'show', 2)); $this->assertFalse($helper->hasProjectAccess('task', 'show', 2)); - $this->assertFalse($helper->hasProjectAccess('taskcreation', 'save', 2)); + $this->assertFalse($helper->hasProjectAccess('TaskCreationController', 'save', 2)); } public function testHasProjectAccessForProjectViewers() @@ -225,12 +225,12 @@ class UserHelperTest extends Base $this->assertFalse($helper->hasProjectAccess('ProjectEdit', 'edit', 1)); $this->assertTrue($helper->hasProjectAccess('board', 'show', 1)); $this->assertTrue($helper->hasProjectAccess('task', 'show', 1)); - $this->assertFalse($helper->hasProjectAccess('taskcreation', 'save', 1)); + $this->assertFalse($helper->hasProjectAccess('TaskCreationController', 'save', 1)); $this->assertFalse($helper->hasProjectAccess('ProjectEdit', 'edit', 2)); $this->assertFalse($helper->hasProjectAccess('board', 'show', 2)); $this->assertFalse($helper->hasProjectAccess('task', 'show', 2)); - $this->assertFalse($helper->hasProjectAccess('taskcreation', 'save', 2)); + $this->assertFalse($helper->hasProjectAccess('TaskCreationController', 'save', 2)); } public function testCanRemoveTask()