From 22c5e32def94560881ad9ec032158cd570be44f4 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sat, 5 Mar 2016 17:40:49 -0500 Subject: Improve automatic action creation --- app/Controller/Action.php | 94 +----------------- app/Controller/ActionCreation.php | 121 +++++++++++++++++++++++ app/Controller/ActionProject.php | 4 +- app/ServiceProvider/AuthenticationProvider.php | 1 + app/Template/action/event.php | 25 ----- app/Template/action/index.php | 130 ++++++++++++------------- app/Template/action/params.php | 49 ---------- app/Template/action_creation/create.php | 16 +++ app/Template/action_creation/event.php | 27 +++++ app/Template/action_creation/params.php | 52 ++++++++++ app/Template/action_project/project.php | 36 ++++--- 11 files changed, 297 insertions(+), 258 deletions(-) create mode 100644 app/Controller/ActionCreation.php delete mode 100644 app/Template/action/event.php delete mode 100644 app/Template/action/params.php create mode 100644 app/Template/action_creation/create.php create mode 100644 app/Template/action_creation/event.php create mode 100644 app/Template/action_creation/params.php (limited to 'app') diff --git a/app/Controller/Action.php b/app/Controller/Action.php index 6c324324..8881e8ec 100644 --- a/app/Controller/Action.php +++ b/app/Controller/Action.php @@ -3,7 +3,7 @@ namespace Kanboard\Controller; /** - * Automatic actions management + * Automatic Actions * * @package controller * @author Frederic Guillot @@ -37,98 +37,6 @@ class Action extends Base ))); } - /** - * Choose the event according to the action (step 2) - * - * @access public - */ - public function event() - { - $project = $this->getProject(); - $values = $this->request->getValues(); - - if (empty($values['action_name']) || empty($values['project_id'])) { - $this->response->redirect($this->helper->url->to('action', 'index', array('project_id' => $project['id']))); - } - - $this->response->html($this->helper->layout->project('action/event', array( - 'values' => $values, - 'project' => $project, - 'events' => $this->actionManager->getCompatibleEvents($values['action_name']), - 'title' => t('Automatic actions') - ))); - } - - /** - * Define action parameters (step 3) - * - * @access public - */ - public function params() - { - $project = $this->getProject(); - $values = $this->request->getValues(); - - if (empty($values['action_name']) || empty($values['project_id']) || empty($values['event_name'])) { - $this->response->redirect($this->helper->url->to('action', 'index', array('project_id' => $project['id']))); - } - - $action = $this->actionManager->getAction($values['action_name']); - $action_params = $action->getActionRequiredParameters(); - - if (empty($action_params)) { - $this->doCreation($project, $values + array('params' => array())); - } - - $projects_list = $this->projectUserRole->getActiveProjectsByUser($this->userSession->getId()); - unset($projects_list[$project['id']]); - - $this->response->html($this->helper->layout->project('action/params', array( - 'values' => $values, - 'action_params' => $action_params, - 'columns_list' => $this->column->getList($project['id']), - 'users_list' => $this->projectUserRole->getAssignableUsersList($project['id']), - 'projects_list' => $projects_list, - 'colors_list' => $this->color->getList(), - 'categories_list' => $this->category->getList($project['id']), - 'links_list' => $this->link->getList(0, false), - 'project' => $project, - 'title' => t('Automatic actions') - ))); - } - - /** - * Create a new action (last step) - * - * @access public - */ - public function create() - { - $this->doCreation($this->getProject(), $this->request->getValues()); - } - - /** - * Save the action - * - * @access private - * @param array $project Project properties - * @param array $values Form values - */ - private function doCreation(array $project, array $values) - { - list($valid, ) = $this->actionValidator->validateCreation($values); - - if ($valid) { - if ($this->action->create($values) !== false) { - $this->flash->success(t('Your automatic action have been created successfully.')); - } else { - $this->flash->failure(t('Unable to create your automatic action.')); - } - } - - $this->response->redirect($this->helper->url->to('action', 'index', array('project_id' => $project['id']))); - } - /** * Confirmation dialog before removing an action * diff --git a/app/Controller/ActionCreation.php b/app/Controller/ActionCreation.php new file mode 100644 index 00000000..24a12d92 --- /dev/null +++ b/app/Controller/ActionCreation.php @@ -0,0 +1,121 @@ +getProject(); + + $this->response->html($this->template->render('action_creation/create', array( + 'project' => $project, + 'values' => array('project_id' => $project['id']), + 'available_actions' => $this->actionManager->getAvailableActions(), + ))); + } + + /** + * Choose the event according to the action (step 2) + * + * @access public + */ + public function event() + { + $project = $this->getProject(); + $values = $this->request->getValues(); + + if (empty($values['action_name']) || empty($values['project_id'])) { + return $this->create(); + } + + $this->response->html($this->template->render('action_creation/event', array( + 'values' => $values, + 'project' => $project, + 'available_actions' => $this->actionManager->getAvailableActions(), + 'events' => $this->actionManager->getCompatibleEvents($values['action_name']), + ))); + } + + /** + * Define action parameters (step 3) + * + * @access public + */ + public function params() + { + $project = $this->getProject(); + $values = $this->request->getValues(); + + if (empty($values['action_name']) || empty($values['project_id']) || empty($values['event_name'])) { + return $this->create(); + } + + $action = $this->actionManager->getAction($values['action_name']); + $action_params = $action->getActionRequiredParameters(); + + if (empty($action_params)) { + $this->doCreation($project, $values + array('params' => array())); + } + + $projects_list = $this->projectUserRole->getActiveProjectsByUser($this->userSession->getId()); + unset($projects_list[$project['id']]); + + $this->response->html($this->template->render('action_creation/params', array( + 'values' => $values, + 'action_params' => $action_params, + 'columns_list' => $this->column->getList($project['id']), + 'users_list' => $this->projectUserRole->getAssignableUsersList($project['id']), + 'projects_list' => $projects_list, + 'colors_list' => $this->color->getList(), + 'categories_list' => $this->category->getList($project['id']), + 'links_list' => $this->link->getList(0, false), + 'project' => $project, + 'available_actions' => $this->actionManager->getAvailableActions(), + 'events' => $this->actionManager->getCompatibleEvents($values['action_name']), + ))); + } + + /** + * Save the action (last step) + * + * @access public + */ + public function save() + { + $this->doCreation($this->getProject(), $this->request->getValues()); + } + + /** + * Common method to save the action + * + * @access private + * @param array $project Project properties + * @param array $values Form values + */ + private function doCreation(array $project, array $values) + { + list($valid, ) = $this->actionValidator->validateCreation($values); + + if ($valid) { + if ($this->action->create($values) !== false) { + $this->flash->success(t('Your automatic action have been created successfully.')); + } else { + $this->flash->failure(t('Unable to create your automatic action.')); + } + } + + $this->response->redirect($this->helper->url->to('action', 'index', array('project_id' => $project['id']))); + } +} diff --git a/app/Controller/ActionProject.php b/app/Controller/ActionProject.php index 6de0fe58..e5063f73 100644 --- a/app/Controller/ActionProject.php +++ b/app/Controller/ActionProject.php @@ -16,7 +16,7 @@ class ActionProject extends Base $projects = $this->projectUserRole->getProjectsByUser($this->userSession->getId()); unset($projects[$project['id']]); - $this->response->html($this->helper->layout->project('action_project/project', array( + $this->response->html($this->template->render('action_project/project', array( 'project' => $project, 'projects_list' => $projects, ))); @@ -33,6 +33,6 @@ class ActionProject extends Base $this->flash->failure(t('Unable to duplicate actions.')); } - $this->response->redirect($this->helper->url->to('Action', 'index', array('project_id' => $project['id']))); + $this->response->redirect($this->helper->url->to('action', 'index', array('project_id' => $project['id']))); } } diff --git a/app/ServiceProvider/AuthenticationProvider.php b/app/ServiceProvider/AuthenticationProvider.php index 6d55a1e1..5ed28fe1 100644 --- a/app/ServiceProvider/AuthenticationProvider.php +++ b/app/ServiceProvider/AuthenticationProvider.php @@ -68,6 +68,7 @@ class AuthenticationProvider implements ServiceProviderInterface $acl->add('Action', '*', Role::PROJECT_MANAGER); $acl->add('ActionProject', '*', Role::PROJECT_MANAGER); + $acl->add('ActionCreation', '*', Role::PROJECT_MANAGER); $acl->add('Analytic', '*', Role::PROJECT_MANAGER); $acl->add('Board', 'save', Role::PROJECT_MEMBER); $acl->add('BoardPopover', '*', Role::PROJECT_MEMBER); diff --git a/app/Template/action/event.php b/app/Template/action/event.php deleted file mode 100644 index f4f12db3..00000000 --- a/app/Template/action/event.php +++ /dev/null @@ -1,25 +0,0 @@ - - -

-
- - form->csrf() ?> - - form->hidden('project_id', $values) ?> - form->hidden('action_name', $values) ?> - - form->label(t('Event'), 'event_name') ?> - form->select('event_name', $events, $values) ?> - -
- -
- -
- - - url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id'])) ?> -
-
\ No newline at end of file diff --git a/app/Template/action/index.php b/app/Template/action/index.php index 1cc14782..63d63887 100644 --- a/app/Template/action/index.php +++ b/app/Template/action/index.php @@ -3,79 +3,69 @@ - - -

- - - - - - - - - - - - - - -
-
    -
  • - = - text->in($action['event_name'], $available_events) ?> -
  • -
  • - = - text->in($action['action_name'], $available_actions) ?> -
  • -
      -
-
    - $param_value): ?> -
  • - text->in($param_name, $available_params[$action['action_name']]) ?> = - - text->contains($param_name, 'column_id')): ?> - text->in($param_value, $columns_list) ?> - text->contains($param_name, 'user_id')): ?> - text->in($param_value, $users_list) ?> - text->contains($param_name, 'project_id')): ?> - text->in($param_value, $projects_list) ?> - text->contains($param_name, 'color_id')): ?> - text->in($param_value, $colors_list) ?> - text->contains($param_name, 'category_id')): ?> - text->in($param_value, $categories_list) ?> - text->contains($param_name, 'link_id')): ?> - text->in($param_value, $links_list) ?> - - text->e($param_value) ?> - - -
  • - -
-
- url->link(t('Remove'), 'action', 'confirm', array('project_id' => $project['id'], 'action_id' => $action['id']), false, 'popover') ?> -
- - - -

-
- form->csrf() ?> - form->hidden('project_id', $values) ?> - - form->label(t('Action'), 'action_name') ?> - form->select('action_name', $available_actions, $values) ?> + +

+ + + + + + + -
- -
- \ No newline at end of file + + + + + + + +
+
    +
  • + = + text->in($action['event_name'], $available_events) ?> +
  • +
  • + = + text->in($action['action_name'], $available_actions) ?> +
  • +
      +
+
    + $param_value): ?> +
  • + text->in($param_name, $available_params[$action['action_name']]) ?> = + + text->contains($param_name, 'column_id')): ?> + text->in($param_value, $columns_list) ?> + text->contains($param_name, 'user_id')): ?> + text->in($param_value, $users_list) ?> + text->contains($param_name, 'project_id')): ?> + text->in($param_value, $projects_list) ?> + text->contains($param_name, 'color_id')): ?> + text->in($param_value, $colors_list) ?> + text->contains($param_name, 'category_id')): ?> + text->in($param_value, $categories_list) ?> + text->contains($param_name, 'link_id')): ?> + text->in($param_value, $links_list) ?> + + text->e($param_value) ?> + + +
  • + +
+
+ url->link(t('Remove'), 'action', 'confirm', array('project_id' => $project['id'], 'action_id' => $action['id']), false, 'popover') ?> +
+ \ No newline at end of file diff --git a/app/Template/action/params.php b/app/Template/action/params.php deleted file mode 100644 index 99e9206f..00000000 --- a/app/Template/action/params.php +++ /dev/null @@ -1,49 +0,0 @@ - - -

-
- - form->csrf() ?> - - form->hidden('project_id', $values) ?> - form->hidden('event_name', $values) ?> - form->hidden('action_name', $values) ?> - - $param_desc): ?> - - text->contains($param_name, 'column_id')): ?> - form->label($param_desc, $param_name) ?> - form->select('params['.$param_name.']', $columns_list, $values) ?> - text->contains($param_name, 'user_id')): ?> - form->label($param_desc, $param_name) ?> - form->select('params['.$param_name.']', $users_list, $values) ?> - text->contains($param_name, 'project_id')): ?> - form->label($param_desc, $param_name) ?> - form->select('params['.$param_name.']', $projects_list, $values) ?> - text->contains($param_name, 'color_id')): ?> - form->label($param_desc, $param_name) ?> - form->select('params['.$param_name.']', $colors_list, $values) ?> - text->contains($param_name, 'category_id')): ?> - form->label($param_desc, $param_name) ?> - form->select('params['.$param_name.']', $categories_list, $values) ?> - text->contains($param_name, 'link_id')): ?> - form->label($param_desc, $param_name) ?> - form->select('params['.$param_name.']', $links_list, $values) ?> - text->contains($param_name, 'duration')): ?> - form->label($param_desc, $param_name) ?> - form->number('params['.$param_name.']', $values) ?> - - form->label($param_desc, $param_name) ?> - form->text('params['.$param_name.']', $values) ?> - - - - -
- - - url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id'])) ?> -
-
\ No newline at end of file diff --git a/app/Template/action_creation/create.php b/app/Template/action_creation/create.php new file mode 100644 index 00000000..bccb19b3 --- /dev/null +++ b/app/Template/action_creation/create.php @@ -0,0 +1,16 @@ + +
+ form->csrf() ?> + form->hidden('project_id', $values) ?> + + form->label(t('Action'), 'action_name') ?> + form->select('action_name', $available_actions, $values) ?> + +
+ + + url->link(t('cancel'), 'Action', 'index', array(), false, 'close-popover') ?> +
+
\ No newline at end of file diff --git a/app/Template/action_creation/event.php b/app/Template/action_creation/event.php new file mode 100644 index 00000000..e7e5aaf9 --- /dev/null +++ b/app/Template/action_creation/event.php @@ -0,0 +1,27 @@ + + +
+ + form->csrf() ?> + + form->hidden('project_id', $values) ?> + form->hidden('action_name', $values) ?> + + form->label(t('Action'), 'action_name') ?> + form->select('action_name', $available_actions, $values, array(), array('disabled')) ?> + + form->label(t('Event'), 'event_name') ?> + form->select('event_name', $events, $values) ?> + +
+ +
+ +
+ + + url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id']), false, 'close-popover') ?> +
+
\ No newline at end of file diff --git a/app/Template/action_creation/params.php b/app/Template/action_creation/params.php new file mode 100644 index 00000000..59ff6ce9 --- /dev/null +++ b/app/Template/action_creation/params.php @@ -0,0 +1,52 @@ + + +
+ + form->csrf() ?> + + form->hidden('project_id', $values) ?> + form->hidden('event_name', $values) ?> + form->hidden('action_name', $values) ?> + + form->label(t('Action'), 'action_name') ?> + form->select('action_name', $available_actions, $values, array(), array('disabled')) ?> + + form->label(t('Event'), 'event_name') ?> + form->select('event_name', $events, $values, array(), array('disabled')) ?> + + $param_desc): ?> + text->contains($param_name, 'column_id')): ?> + form->label($param_desc, $param_name) ?> + form->select('params['.$param_name.']', $columns_list, $values) ?> + text->contains($param_name, 'user_id')): ?> + form->label($param_desc, $param_name) ?> + form->select('params['.$param_name.']', $users_list, $values) ?> + text->contains($param_name, 'project_id')): ?> + form->label($param_desc, $param_name) ?> + form->select('params['.$param_name.']', $projects_list, $values) ?> + text->contains($param_name, 'color_id')): ?> + form->label($param_desc, $param_name) ?> + form->select('params['.$param_name.']', $colors_list, $values) ?> + text->contains($param_name, 'category_id')): ?> + form->label($param_desc, $param_name) ?> + form->select('params['.$param_name.']', $categories_list, $values) ?> + text->contains($param_name, 'link_id')): ?> + form->label($param_desc, $param_name) ?> + form->select('params['.$param_name.']', $links_list, $values) ?> + text->contains($param_name, 'duration')): ?> + form->label($param_desc, $param_name) ?> + form->number('params['.$param_name.']', $values) ?> + + form->label($param_desc, $param_name) ?> + form->text('params['.$param_name.']', $values) ?> + + + +
+ + + url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id']), false, 'close-popover') ?> +
+
\ No newline at end of file diff --git a/app/Template/action_project/project.php b/app/Template/action_project/project.php index d056239b..226f3b19 100644 --- a/app/Template/action_project/project.php +++ b/app/Template/action_project/project.php @@ -1,22 +1,20 @@ -
- - -

- -
+ + +

+ + - form->csrf() ?> + form->csrf() ?> - form->label(t('Create from another project'), 'src_project_id') ?> - form->select('src_project_id', $projects_list) ?> + form->label(t('Create from another project'), 'src_project_id') ?> + form->select('src_project_id', $projects_list) ?> -
- - - url->link(t('cancel'), 'Action', 'index', array(), false, 'close-popover') ?> -
-
- -
\ No newline at end of file +
+ + + url->link(t('cancel'), 'Action', 'index', array(), false, 'close-popover') ?> +
+ + \ No newline at end of file -- cgit v1.2.3