summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin <stolarek.marcin@gmail.com>2018-11-09 05:48:47 +0100
committerfguillot <fred@kanboard.net>2018-11-08 20:48:47 -0800
commitb4a19059e35b7bf7d9ef142b87d6feb15ba008d7 (patch)
tree4cac14d79a37642d01df06485f2ed723d411998d
parent2674def351e6fd9847376ca069783601c7db45cd (diff)
New automatic action: move the task to another swimlane when assigned to a user
-rw-r--r--app/Action/TaskMoveSwimlaneAssigned.php107
-rw-r--r--app/ServiceProvider/ActionProvider.php2
2 files changed, 109 insertions, 0 deletions
diff --git a/app/Action/TaskMoveSwimlaneAssigned.php b/app/Action/TaskMoveSwimlaneAssigned.php
new file mode 100644
index 00000000..eea720ae
--- /dev/null
+++ b/app/Action/TaskMoveSwimlaneAssigned.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace Kanboard\Action;
+
+use Kanboard\Model\TaskModel;
+
+/**
+ * Move a task to another column when an assignee is set
+ *
+ * @package Kanboard\Action
+ * @author Francois Ferrand
+ */
+class TaskMoveSwimlaneAssigned extends Base
+{
+ /**
+ * Get automatic action description
+ *
+ * @access public
+ * @return string
+ */
+ public function getDescription()
+ {
+ return t('Move the task to another swimlane when assigned to a user');
+ }
+
+ /**
+ * Get the list of compatible events
+ *
+ * @access public
+ * @return array
+ */
+ public function getCompatibleEvents()
+ {
+ return array(
+
+ TaskModel::EVENT_CREATE_UPDATE,
+ TaskModel::EVENT_ASSIGNEE_CHANGE,
+ TaskModel::EVENT_UPDATE,
+ );
+ }
+
+ /**
+ * Get the required parameter for the action (defined by the user)
+ *
+ * @access public
+ * @return array
+ */
+ public function getActionRequiredParameters()
+ {
+ return array(
+ 'user_id' => t('Assignee'),
+ 'dest_swimlane_id' => t('Destination swimlane'),
+
+ );
+ }
+
+ /**
+ * Get the required parameter for the event
+ *
+ * @access public
+ * @return string[]
+ */
+ public function getEventRequiredParameters()
+ {
+ return array(
+ 'task_id',
+ 'task' => array(
+ 'project_id',
+ 'column_id',
+ 'owner_id',
+ 'position',
+ 'swimlane_id',
+ )
+ );
+ }
+
+ /**
+ * Execute the action (move the task to another column)
+ *
+ * @access public
+ * @param array $data Event data dictionary
+ * @return bool True if the action was executed or false when not executed
+ */
+ public function doAction(array $data)
+ {
+ return $this->taskPositionModel->movePosition(
+ $data['task']['project_id'],
+ $data['task_id'],
+ $data['task']['column_id'],
+ $data['task']['position'],
+ $this->getParam('dest_swimlane_id'),
+ true
+ );
+ }
+
+ /**
+ * Check if the event data meet the action condition
+ *
+ * @access public
+ * @param array $data Event data dictionary
+ * @return bool
+ **/
+ public function hasRequiredCondition(array $data)
+ {
+ return $data['task']['swimlane_id'] != $this->getParam('dest_swimlane_id') && $data['task']['owner_id'] == $this->getParam("user_id");
+ }
+}
diff --git a/app/ServiceProvider/ActionProvider.php b/app/ServiceProvider/ActionProvider.php
index 3e4ff251..2679346d 100644
--- a/app/ServiceProvider/ActionProvider.php
+++ b/app/ServiceProvider/ActionProvider.php
@@ -34,6 +34,7 @@ use Kanboard\Action\TaskEmail;
use Kanboard\Action\TaskEmailNoActivity;
use Kanboard\Action\TaskMoveAnotherProject;
use Kanboard\Action\TaskMoveColumnAssigned;
+use Kanboard\Action\TaskMoveSwimlaneAssigned;
use Kanboard\Action\TaskMoveColumnCategoryChange;
use Kanboard\Action\TaskMoveColumnUnAssigned;
use Kanboard\Action\TaskMoveSwimlaneCategoryChange;
@@ -93,6 +94,7 @@ class ActionProvider implements ServiceProviderInterface
$container['actionManager']->register(new TaskEmailNoActivity($container));
$container['actionManager']->register(new TaskMoveAnotherProject($container));
$container['actionManager']->register(new TaskMoveColumnAssigned($container));
+ $container['actionManager']->register(new TaskMoveSwimlaneAssigned($container));
$container['actionManager']->register(new TaskMoveColumnCategoryChange($container));
$container['actionManager']->register(new TaskMoveColumnClosed($container));
$container['actionManager']->register(new TaskMoveColumnNotMovedPeriod($container));