Added automated action to change task color based on the priority
This commit is contained in:
95
app/Action/TaskAssignColorPriority.php
Normal file
95
app/Action/TaskAssignColorPriority.php
Normal file
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
namespace Kanboard\Action;
|
||||
|
||||
use Kanboard\Model\Task;
|
||||
|
||||
/**
|
||||
* Assign a color to a priority
|
||||
*
|
||||
* @package action
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class TaskAssignColorPriority extends Base
|
||||
{
|
||||
/**
|
||||
* Get automatic action description
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription()
|
||||
{
|
||||
return t('Assign automatically a color based on a priority');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of compatible events
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getCompatibleEvents()
|
||||
{
|
||||
return array(
|
||||
Task::EVENT_CREATE_UPDATE,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the required parameter for the action (defined by the user)
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getActionRequiredParameters()
|
||||
{
|
||||
return array(
|
||||
'color_id' => t('Color'),
|
||||
'priority' => t('Priority'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the required parameter for the event
|
||||
*
|
||||
* @access public
|
||||
* @return string[]
|
||||
*/
|
||||
public function getEventRequiredParameters()
|
||||
{
|
||||
return array(
|
||||
'task_id',
|
||||
'priority',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the action (change the task color)
|
||||
*
|
||||
* @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)
|
||||
{
|
||||
$values = array(
|
||||
'id' => $data['task_id'],
|
||||
'color_id' => $this->getParam('color_id'),
|
||||
);
|
||||
|
||||
return $this->taskModification->update($values, 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['priority'] == $this->getParam('priority');
|
||||
}
|
||||
}
|
||||
@@ -81,6 +81,7 @@ class ActionCreation extends Base
|
||||
'colors_list' => $this->color->getList(),
|
||||
'categories_list' => $this->category->getList($project['id']),
|
||||
'links_list' => $this->link->getList(0, false),
|
||||
'priorities_list' => $this->project->getPriorities($project),
|
||||
'project' => $project,
|
||||
'available_actions' => $this->actionManager->getAvailableActions(),
|
||||
'events' => $this->actionManager->getCompatibleEvents($values['action_name']),
|
||||
|
||||
@@ -201,7 +201,7 @@ class Project extends Base
|
||||
* Get all projects with all its data for a given status
|
||||
*
|
||||
* @access public
|
||||
* @param integer $status Proejct status: self::ACTIVE or self:INACTIVE
|
||||
* @param integer $status Project status: self::ACTIVE or self:INACTIVE
|
||||
* @return array
|
||||
*/
|
||||
public function getAllByStatus($status)
|
||||
@@ -244,6 +244,19 @@ class Project extends Base
|
||||
->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Priority range from a project
|
||||
*
|
||||
* @access public
|
||||
* @param array $project
|
||||
* @return array
|
||||
*/
|
||||
public function getPriorities(array $project)
|
||||
{
|
||||
$range = range($project['priority_start'], $project['priority_end']);
|
||||
return array_combine($range, $range);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gather some task metrics for a given project
|
||||
*
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Kanboard\ServiceProvider;
|
||||
|
||||
use Kanboard\Action\TaskAssignColorPriority;
|
||||
use Pimple\Container;
|
||||
use Pimple\ServiceProviderInterface;
|
||||
use Kanboard\Core\Action\ActionManager;
|
||||
@@ -59,6 +60,7 @@ class ActionProvider implements ServiceProviderInterface
|
||||
$container['actionManager']->register(new TaskAssignColorColumn($container));
|
||||
$container['actionManager']->register(new TaskAssignColorLink($container));
|
||||
$container['actionManager']->register(new TaskAssignColorUser($container));
|
||||
$container['actionManager']->register(new TaskAssignColorPriority($container));
|
||||
$container['actionManager']->register(new TaskAssignCurrentUser($container));
|
||||
$container['actionManager']->register(new TaskAssignCurrentUserColumn($container));
|
||||
$container['actionManager']->register(new TaskAssignSpecificUser($container));
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
<?php elseif ($this->text->contains($param_name, 'link_id')): ?>
|
||||
<?= $this->form->label($param_desc, $param_name) ?>
|
||||
<?= $this->form->select('params['.$param_name.']', $links_list, $values) ?>
|
||||
<?php elseif ($param_name === 'priority'): ?>
|
||||
<?= $this->form->label($param_desc, $param_name) ?>
|
||||
<?= $this->form->select('params['.$param_name.']', $priorities_list, $values) ?>
|
||||
<?php elseif ($this->text->contains($param_name, 'duration')): ?>
|
||||
<?= $this->form->label($param_desc, $param_name) ?>
|
||||
<?= $this->form->number('params['.$param_name.']', $values) ?>
|
||||
@@ -49,4 +52,4 @@
|
||||
<?= t('or') ?>
|
||||
<?= $this->url->link(t('cancel'), 'action', 'index', array('project_id' => $project['id']), false, 'close-popover') ?>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user