diff options
author | Frederic Guillot <fred@kanboard.net> | 2015-06-20 10:48:47 -0400 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2015-06-20 10:48:47 -0400 |
commit | cb0916d10e4a42a62f0ac8c69ecb4b7a15f398b4 (patch) | |
tree | d5344b06ee0b87224ec157f44bf513ca7e353b5b /app | |
parent | 7056d14c95888eebe90d023524d4a63e562a9f64 (diff) |
Add automatic action to send a task by email
Diffstat (limited to 'app')
-rw-r--r-- | app/Action/TaskEmail.php | 97 | ||||
-rw-r--r-- | app/Helper/Url.php | 8 | ||||
-rw-r--r-- | app/Model/Action.php | 4 | ||||
-rw-r--r-- | app/Template/action/index.php | 2 | ||||
-rw-r--r-- | app/Template/action/params.php | 2 |
5 files changed, 104 insertions, 9 deletions
diff --git a/app/Action/TaskEmail.php b/app/Action/TaskEmail.php new file mode 100644 index 00000000..363a01c6 --- /dev/null +++ b/app/Action/TaskEmail.php @@ -0,0 +1,97 @@ +<?php + +namespace Action; + +use Model\Task; + +/** + * Email a task to someone + * + * @package action + * @author Frederic Guillot + */ +class TaskEmail extends Base +{ + /** + * Get the list of compatible events + * + * @access public + * @return array + */ + public function getCompatibleEvents() + { + return array( + Task::EVENT_MOVE_COLUMN, + Task::EVENT_CLOSE, + ); + } + + /** + * Get the required parameter for the action (defined by the user) + * + * @access public + * @return array + */ + public function getActionRequiredParameters() + { + return array( + 'column_id' => t('Column'), + 'user_id' => t('User that will receive the email'), + 'subject' => t('Email subject'), + ); + } + + /** + * Get the required parameter for the event + * + * @access public + * @return string[] + */ + public function getEventRequiredParameters() + { + return array( + 'task_id', + 'column_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) + { + $user = $this->user->getById($this->getParam('user_id')); + + if (! empty($user['email'])) { + + $task = $this->taskFinder->getDetails($data['task_id']); + + $this->emailClient->send( + $user['email'], + $user['name'] ?: $user['username'], + $this->getParam('subject'), + $this->template->render('notification/task_create', array('task' => $task, 'application_url' => $this->config->get('application_url'))) + ); + + return true; + } + + return false; + } + + /** + * 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['column_id'] == $this->getParam('column_id'); + } +} diff --git a/app/Helper/Url.php b/app/Helper/Url.php index 64b2c83f..e133f195 100644 --- a/app/Helper/Url.php +++ b/app/Helper/Url.php @@ -88,13 +88,7 @@ class Url extends \Core\Base */ public function base() { - $application_url = $this->config->get('application_url'); - - if (! empty($application_url)) { - return $application_url; - } - - return $this->server(); + return $this->config->get('application_url') ?: $this->server(); } /** diff --git a/app/Model/Action.php b/app/Model/Action.php index c3bfe017..7547e37e 100644 --- a/app/Model/Action.php +++ b/app/Model/Action.php @@ -58,6 +58,7 @@ class Action extends Base 'TaskAssignCategoryLabel' => t('Change the category based on an external label'), 'TaskUpdateStartDate' => t('Automatically update the start date'), 'TaskMoveColumnCategoryChange' => t('Move the task to another column when the category is changed'), + 'TaskEmail' => t('Send a task by email to someone'), ); asort($values); @@ -351,10 +352,13 @@ class Action extends Base $categoryTemplate = $this->category->getById($param['value']); $categoryFromNewProject = $this->db->table(Category::TABLE)->eq('project_id', $project_to)->eq('name', $categoryTemplate['name'])->findOne(); return $categoryFromNewProject['id']; + case 'src_column_id': + case 'dest_column_id': case 'column_id': $boardTemplate = $this->board->getColumn($param['value']); $boardFromNewProject = $this->db->table(Board::TABLE)->eq('project_id', $project_to)->eq('title', $boardTemplate['title'])->findOne(); return $boardFromNewProject['id']; + // TODO: Add user_id default: return $param['value']; } diff --git a/app/Template/action/index.php b/app/Template/action/index.php index ca9c6543..6898fc26 100644 --- a/app/Template/action/index.php +++ b/app/Template/action/index.php @@ -42,7 +42,7 @@ <?= $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'], 'label')): ?> + <?php else: ?> <?= $this->e($param['value']) ?> <?php endif ?> </strong> diff --git a/app/Template/action/params.php b/app/Template/action/params.php index 685cbcc5..759c5968 100644 --- a/app/Template/action/params.php +++ b/app/Template/action/params.php @@ -28,7 +28,7 @@ <?php elseif ($this->text->contains($param_name, 'category_id')): ?> <?= $this->form->label($param_desc, $param_name) ?> <?= $this->form->select('params['.$param_name.']', $categories_list, $values) ?><br/> - <?php elseif ($this->text->contains($param_name, 'label')): ?> + <?php else: ?> <?= $this->form->label($param_desc, $param_name) ?> <?= $this->form->text('params['.$param_name.']', $values) ?> <?php endif ?> |