diff options
author | renothing <cncaiker+git@gmail.com> | 2019-06-15 17:48:53 +0800 |
---|---|---|
committer | fguillot <fred@kanboard.net> | 2019-06-15 20:03:41 -0700 |
commit | 0d8fbc85d8c0c4dc718c44b93381dab28ed348a7 (patch) | |
tree | 6e0f2bfee683468ed2388b8883f3c39596f6ba8e /app/Action | |
parent | 68b00004d20c565dc65fb38f47c147c231907330 (diff) |
Add automatic action to move task between columns based on due date
Diffstat (limited to 'app/Action')
-rw-r--r-- | app/Action/TaskMoveColumnOnDueDate.php | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/app/Action/TaskMoveColumnOnDueDate.php b/app/Action/TaskMoveColumnOnDueDate.php new file mode 100644 index 00000000..a1c099c9 --- /dev/null +++ b/app/Action/TaskMoveColumnOnDueDate.php @@ -0,0 +1,104 @@ +<?php + +namespace Kanboard\Action; + +use Kanboard\Model\TaskModel; + +/** + * Move the task from one to another column when due date is LESS than a certain number of days + * + * @package Kanboard\Action + * @author Frederic Guillot + */ +class TaskMoveColumnOnDueDate extends Base +{ + /** + * Get automatic action description + * + * @access public + * @return string + */ + public function getDescription() + { + return t('Move the task from one to another column when due date is LESS than a certain number of days'); + } + + /** + * Get the list of compatible events + * + * @access public + * @return array + */ + public function getCompatibleEvents() + { + return array(TaskModel::EVENT_DAILY_CRONJOB); + } + + /** + * Get the required parameter for the action (defined by the user) + * + * @access public + * @return array + */ + public function getActionRequiredParameters() + { + return array( + 'duration' => t('Duration in days'), + 'src_column_id' => t('Source column'), + 'dest_column_id' => t('Destination column'), + ); + } + + /** + * Get the required parameter for the event + * + * @access public + * @return string[] + */ + public function getEventRequiredParameters() + { + return array('tasks'); + } + + /** + * Execute the action (close the task) + * + * @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) + { + $results = array(); + $min = $this->getParam('duration') * 86400; + + foreach ($data['tasks'] as $task) { + $duration = $task['date_due'] - time(); + + if ($task['date_due'] > 0 && $duration < $min && $task['column_id'] == $this->getParam('src_column_id')) { + $results[] = $this->taskPositionModel->movePosition( + $task['project_id'], + $task['id'], + $this->getParam('dest_column_id'), + 1, + $task['swimlane_id'], + false + ); + } + } + + return in_array(true, $results, 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 count($data['tasks']) > 0; + } +} |