summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-03-05 17:40:49 -0500
committerFrederic Guillot <fred@kanboard.net>2016-03-05 17:40:49 -0500
commit22c5e32def94560881ad9ec032158cd570be44f4 (patch)
tree7cfe346a2b7d384c9cdcd143693bc8189ac18259 /app
parenta19dc88567e6869b9082064e70db380f84032cef (diff)
Improve automatic action creation
Diffstat (limited to 'app')
-rw-r--r--app/Controller/Action.php94
-rw-r--r--app/Controller/ActionCreation.php121
-rw-r--r--app/Controller/ActionProject.php4
-rw-r--r--app/ServiceProvider/AuthenticationProvider.php1
-rw-r--r--app/Template/action/index.php130
-rw-r--r--app/Template/action_creation/create.php16
-rw-r--r--app/Template/action_creation/event.php (renamed from app/Template/action/event.php)10
-rw-r--r--app/Template/action_creation/params.php (renamed from app/Template/action/params.php)15
-rw-r--r--app/Template/action_project/project.php36
9 files changed, 233 insertions, 194 deletions
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
@@ -38,98 +38,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
*
* @access public
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 @@
+<?php
+
+namespace Kanboard\Controller;
+
+/**
+ * Action Creation
+ *
+ * @package controller
+ * @author Frederic Guillot
+ */
+class ActionCreation extends Base
+{
+ /**
+ * Show the form (step 1)
+ *
+ * @access public
+ */
+ public function create()
+ {
+ $project = $this->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/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 @@
<ul>
<li>
<i class="fa fa-plus fa-fw"></i>
+ <?= $this->url->link(t('Add a new action'), 'ActionCreation', 'create', array('project_id' => $project['id']), false, 'popover') ?>
+ </li>
+ <li>
+ <i class="fa fa-copy fa-fw"></i>
<?= $this->url->link(t('Import from another project'), 'ActionProject', 'project', array('project_id' => $project['id']), false, 'popover') ?>
</li>
</ul>
</div>
-<?php if (! empty($actions)): ?>
-
-<h3><?= t('Defined actions') ?></h3>
-<table>
- <tr>
- <th><?= t('Automatic actions') ?></th>
- <th><?= t('Action parameters') ?></th>
- <th><?= t('Action') ?></th>
- </tr>
-
- <?php foreach ($actions as $action): ?>
- <tr>
- <td>
- <ul>
- <li>
- <?= t('Event name') ?> =
- <strong><?= $this->text->in($action['event_name'], $available_events) ?></strong>
- </li>
- <li>
- <?= t('Action name') ?> =
- <strong><?= $this->text->in($action['action_name'], $available_actions) ?></strong>
- </li>
- <ul>
- </td>
- <td>
- <ul>
- <?php foreach ($action['params'] as $param_name => $param_value): ?>
- <li>
- <?= $this->text->in($param_name, $available_params[$action['action_name']]) ?> =
- <strong>
- <?php if ($this->text->contains($param_name, 'column_id')): ?>
- <?= $this->text->in($param_value, $columns_list) ?>
- <?php elseif ($this->text->contains($param_name, 'user_id')): ?>
- <?= $this->text->in($param_value, $users_list) ?>
- <?php elseif ($this->text->contains($param_name, 'project_id')): ?>
- <?= $this->text->in($param_value, $projects_list) ?>
- <?php elseif ($this->text->contains($param_name, 'color_id')): ?>
- <?= $this->text->in($param_value, $colors_list) ?>
- <?php elseif ($this->text->contains($param_name, 'category_id')): ?>
- <?= $this->text->in($param_value, $categories_list) ?>
- <?php elseif ($this->text->contains($param_name, 'link_id')): ?>
- <?= $this->text->in($param_value, $links_list) ?>
- <?php else: ?>
- <?= $this->text->e($param_value) ?>
- <?php endif ?>
- </strong>
- </li>
- <?php endforeach ?>
- </ul>
- </td>
- <td>
- <?= $this->url->link(t('Remove'), 'action', 'confirm', array('project_id' => $project['id'], 'action_id' => $action['id']), false, 'popover') ?>
- </td>
- </tr>
- <?php endforeach ?>
-</table>
-
-<?php endif ?>
-
-<h3><?= t('Add an action') ?></h3>
-<form method="post" action="<?= $this->url->href('action', 'event', array('project_id' => $project['id'])) ?>" class="listing">
- <?= $this->form->csrf() ?>
- <?= $this->form->hidden('project_id', $values) ?>
-
- <?= $this->form->label(t('Action'), 'action_name') ?>
- <?= $this->form->select('action_name', $available_actions, $values) ?>
+<?php if (empty($actions)): ?>
+ <p class="alert"><?= t('There is no action at the moment.') ?></p>
+<?php else: ?>
+ <table>
+ <tr>
+ <th><?= t('Automatic actions') ?></th>
+ <th><?= t('Action parameters') ?></th>
+ <th><?= t('Action') ?></th>
+ </tr>
- <div class="form-actions">
- <button type="submit" class="btn btn-blue"><?= t('Next step') ?></button>
- </div>
-</form> \ No newline at end of file
+ <?php foreach ($actions as $action): ?>
+ <tr>
+ <td>
+ <ul>
+ <li>
+ <?= t('Event name') ?> =
+ <strong><?= $this->text->in($action['event_name'], $available_events) ?></strong>
+ </li>
+ <li>
+ <?= t('Action name') ?> =
+ <strong><?= $this->text->in($action['action_name'], $available_actions) ?></strong>
+ </li>
+ <ul>
+ </td>
+ <td>
+ <ul>
+ <?php foreach ($action['params'] as $param_name => $param_value): ?>
+ <li>
+ <?= $this->text->in($param_name, $available_params[$action['action_name']]) ?> =
+ <strong>
+ <?php if ($this->text->contains($param_name, 'column_id')): ?>
+ <?= $this->text->in($param_value, $columns_list) ?>
+ <?php elseif ($this->text->contains($param_name, 'user_id')): ?>
+ <?= $this->text->in($param_value, $users_list) ?>
+ <?php elseif ($this->text->contains($param_name, 'project_id')): ?>
+ <?= $this->text->in($param_value, $projects_list) ?>
+ <?php elseif ($this->text->contains($param_name, 'color_id')): ?>
+ <?= $this->text->in($param_value, $colors_list) ?>
+ <?php elseif ($this->text->contains($param_name, 'category_id')): ?>
+ <?= $this->text->in($param_value, $categories_list) ?>
+ <?php elseif ($this->text->contains($param_name, 'link_id')): ?>
+ <?= $this->text->in($param_value, $links_list) ?>
+ <?php else: ?>
+ <?= $this->text->e($param_value) ?>
+ <?php endif ?>
+ </strong>
+ </li>
+ <?php endforeach ?>
+ </ul>
+ </td>
+ <td>
+ <?= $this->url->link(t('Remove'), 'action', 'confirm', array('project_id' => $project['id'], 'action_id' => $action['id']), false, 'popover') ?>
+ </td>
+ </tr>
+ <?php endforeach ?>
+ </table>
+<?php endif ?> \ 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 @@
+<div class="page-header">
+ <h2><?= t('Add an action') ?></h2>
+</div>
+<form class="popover-form" method="post" action="<?= $this->url->href('ActionCreation', 'event', array('project_id' => $project['id'])) ?>">
+ <?= $this->form->csrf() ?>
+ <?= $this->form->hidden('project_id', $values) ?>
+
+ <?= $this->form->label(t('Action'), 'action_name') ?>
+ <?= $this->form->select('action_name', $available_actions, $values) ?>
+
+ <div class="form-actions">
+ <button type="submit" class="btn btn-blue"><?= t('Next step') ?></button>
+ <?= t('or') ?>
+ <?= $this->url->link(t('cancel'), 'Action', 'index', array(), false, 'close-popover') ?>
+ </div>
+</form> \ No newline at end of file
diff --git a/app/Template/action/event.php b/app/Template/action_creation/event.php
index f4f12db3..e7e5aaf9 100644
--- a/app/Template/action/event.php
+++ b/app/Template/action_creation/event.php
@@ -1,15 +1,17 @@
<div class="page-header">
- <h2><?= t('Automatic actions for the project "%s"', $project['name']) ?></h2>
+ <h2><?= t('Choose an event') ?></h2>
</div>
-<h3><?= t('Choose an event') ?></h3>
-<form method="post" action="<?= $this->url->href('action', 'params', array('project_id' => $project['id'])) ?>">
+<form class="popover-form" method="post" action="<?= $this->url->href('ActionCreation', 'params', array('project_id' => $project['id'])) ?>">
<?= $this->form->csrf() ?>
<?= $this->form->hidden('project_id', $values) ?>
<?= $this->form->hidden('action_name', $values) ?>
+ <?= $this->form->label(t('Action'), 'action_name') ?>
+ <?= $this->form->select('action_name', $available_actions, $values, array(), array('disabled')) ?>
+
<?= $this->form->label(t('Event'), 'event_name') ?>
<?= $this->form->select('event_name', $events, $values) ?>
@@ -20,6 +22,6 @@
<div class="form-actions">
<button type="submit" class="btn btn-blue"><?= t('Next step') ?></button>
<?= t('or') ?>
- <?= $this->url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id'])) ?>
+ <?= $this->url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id']), false, 'close-popover') ?>
</div>
</form> \ No newline at end of file
diff --git a/app/Template/action/params.php b/app/Template/action_creation/params.php
index 99e9206f..59ff6ce9 100644
--- a/app/Template/action/params.php
+++ b/app/Template/action_creation/params.php
@@ -1,9 +1,8 @@
<div class="page-header">
- <h2><?= t('Automatic actions for the project "%s"', $project['name']) ?></h2>
+ <h2><?= t('Define action parameters') ?></h2>
</div>
-<h3><?= t('Define action parameters') ?></h3>
-<form method="post" action="<?= $this->url->href('action', 'create', array('project_id' => $project['id'])) ?>" autocomplete="off">
+<form class="popover-form" method="post" action="<?= $this->url->href('ActionCreation', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off">
<?= $this->form->csrf() ?>
@@ -11,8 +10,13 @@
<?= $this->form->hidden('event_name', $values) ?>
<?= $this->form->hidden('action_name', $values) ?>
- <?php foreach ($action_params as $param_name => $param_desc): ?>
+ <?= $this->form->label(t('Action'), 'action_name') ?>
+ <?= $this->form->select('action_name', $available_actions, $values, array(), array('disabled')) ?>
+
+ <?= $this->form->label(t('Event'), 'event_name') ?>
+ <?= $this->form->select('event_name', $events, $values, array(), array('disabled')) ?>
+ <?php foreach ($action_params as $param_name => $param_desc): ?>
<?php if ($this->text->contains($param_name, 'column_id')): ?>
<?= $this->form->label($param_desc, $param_name) ?>
<?= $this->form->select('params['.$param_name.']', $columns_list, $values) ?>
@@ -38,12 +42,11 @@
<?= $this->form->label($param_desc, $param_name) ?>
<?= $this->form->text('params['.$param_name.']', $values) ?>
<?php endif ?>
-
<?php endforeach ?>
<div class="form-actions">
<button type="submit" class="btn btn-blue"><?= t('Save') ?></button>
<?= t('or') ?>
- <?= $this->url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id'])) ?>
+ <?= $this->url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id']), false, 'close-popover') ?>
</div>
</form> \ 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 @@
-<section id="main">
- <div class="page-header">
- <h2><?= t('Import actions from another project') ?></h2>
- </div>
- <?php if (empty($projects_list)): ?>
- <p class="alert"><?= t('There is no available project.') ?></p>
- <?php else: ?>
- <form class="popover-form" method="post" action="<?= $this->url->href('ActionProject', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off">
+<div class="page-header">
+ <h2><?= t('Import actions from another project') ?></h2>
+</div>
+<?php if (empty($projects_list)): ?>
+ <p class="alert"><?= t('There is no available project.') ?></p>
+<?php else: ?>
+ <form class="popover-form" method="post" action="<?= $this->url->href('ActionProject', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off">
- <?= $this->form->csrf() ?>
+ <?= $this->form->csrf() ?>
- <?= $this->form->label(t('Create from another project'), 'src_project_id') ?>
- <?= $this->form->select('src_project_id', $projects_list) ?>
+ <?= $this->form->label(t('Create from another project'), 'src_project_id') ?>
+ <?= $this->form->select('src_project_id', $projects_list) ?>
- <div class="form-actions">
- <button type="submit" class="btn btn-blue"><?= t('Save') ?></button>
- <?= t('or') ?>
- <?= $this->url->link(t('cancel'), 'Action', 'index', array(), false, 'close-popover') ?>
- </div>
- </form>
- <?php endif ?>
-</section> \ No newline at end of file
+ <div class="form-actions">
+ <button type="submit" class="btn btn-blue"><?= t('Save') ?></button>
+ <?= t('or') ?>
+ <?= $this->url->link(t('cancel'), 'Action', 'index', array(), false, 'close-popover') ?>
+ </div>
+ </form>
+<?php endif ?> \ No newline at end of file