summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorFrédéric Guillot <fred@kanboard.net>2014-09-01 18:14:40 -0800
committerFrédéric Guillot <fred@kanboard.net>2014-09-01 18:14:40 -0800
commite4965546543be040da29dc341900fa9511a158be (patch)
treea17cc50c942331204061f220af43df9cce583198 /app
parent52f9c82e303189b873dc21142cdcf7f9334ea78c (diff)
Add an automated action to move a task to another project
Diffstat (limited to 'app')
-rw-r--r--app/Action/TaskMoveAnotherProject.php84
-rw-r--r--app/Model/Action.php33
2 files changed, 92 insertions, 25 deletions
diff --git a/app/Action/TaskMoveAnotherProject.php b/app/Action/TaskMoveAnotherProject.php
new file mode 100644
index 00000000..8091053e
--- /dev/null
+++ b/app/Action/TaskMoveAnotherProject.php
@@ -0,0 +1,84 @@
+<?php
+
+namespace Action;
+
+use Model\Task;
+
+/**
+ * Move a task to another project
+ *
+ * @package action
+ * @author Frederic Guillot
+ */
+class TaskMoveAnotherProject extends Base
+{
+ /**
+ * Task model
+ *
+ * @accesss private
+ * @var \Model\Task
+ */
+ private $task;
+
+ /**
+ * Constructor
+ *
+ * @access public
+ * @param integer $project_id Project id
+ * @param \Model\Task $task Task model instance
+ */
+ public function __construct($project_id, Task $task)
+ {
+ parent::__construct($project_id);
+ $this->task = $task;
+ }
+
+ /**
+ * Get the required parameter for the action (defined by the user)
+ *
+ * @access public
+ * @return array
+ */
+ public function getActionRequiredParameters()
+ {
+ return array(
+ 'column_id' => t('Column'),
+ 'project_id' => t('Project'),
+ );
+ }
+
+ /**
+ * Get the required parameter for the event
+ *
+ * @access public
+ * @return string[]
+ */
+ public function getEventRequiredParameters()
+ {
+ return array(
+ 'task_id',
+ 'column_id',
+ 'project_id',
+ );
+ }
+
+ /**
+ * Execute the action
+ *
+ * @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)
+ {
+ if ($data['column_id'] == $this->getParam('column_id') && $data['project_id'] != $this->getParam('project_id')) {
+
+ $task = $this->task->getById($data['task_id']);
+ $this->task->moveToAnotherProject($this->getParam('project_id'), $task);
+
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/app/Model/Action.php b/app/Model/Action.php
index f296a58f..ad995991 100644
--- a/app/Model/Action.php
+++ b/app/Model/Action.php
@@ -41,6 +41,7 @@ class Action extends Base
'TaskAssignSpecificUser' => t('Assign the task to a specific user'),
'TaskAssignCurrentUser' => t('Assign the task to the person who does the action'),
'TaskDuplicateAnotherProject' => t('Duplicate the task to another project'),
+ 'TaskMoveAnotherProject' => t('Move the task to another project'),
'TaskAssignColorUser' => t('Assign a color to a specific user'),
'TaskAssignColorCategory' => t('Assign automatically a color based on a category'),
'TaskAssignCategoryColor' => t('Assign automatically a category based on a color'),
@@ -217,34 +218,16 @@ class Action extends Base
* @param integer $project_id Project id
* @throws \LogicException
* @return \Core\Listener Action Instance
- * @throw LogicException
*/
public function load($name, $project_id)
{
- switch ($name) {
- case 'TaskClose':
- $className = '\Action\TaskClose';
- return new $className($project_id, new Task($this->registry));
- case 'TaskAssignCurrentUser':
- $className = '\Action\TaskAssignCurrentUser';
- return new $className($project_id, new Task($this->registry), new Acl($this->registry));
- case 'TaskAssignSpecificUser':
- $className = '\Action\TaskAssignSpecificUser';
- return new $className($project_id, new Task($this->registry));
- case 'TaskDuplicateAnotherProject':
- $className = '\Action\TaskDuplicateAnotherProject';
- return new $className($project_id, new Task($this->registry));
- case 'TaskAssignColorUser':
- $className = '\Action\TaskAssignColorUser';
- return new $className($project_id, new Task($this->registry));
- case 'TaskAssignColorCategory':
- $className = '\Action\TaskAssignColorCategory';
- return new $className($project_id, new Task($this->registry));
- case 'TaskAssignCategoryColor':
- $className = '\Action\TaskAssignCategoryColor';
- return new $className($project_id, new Task($this->registry));
- default:
- throw new LogicException('Action not found: '.$name);
+ $className = '\Action\\'.$name;
+
+ if ($name === 'TaskAssignCurrentUser') {
+ return new $className($project_id, new Task($this->registry), new Acl($this->registry));
+ }
+ else {
+ return new $className($project_id, new Task($this->registry));
}
}