Added automated action to change task color based on the priority

This commit is contained in:
Frederic Guillot
2016-05-04 22:52:08 -04:00
parent 1e1c127a85
commit d5c95e8240
29 changed files with 184 additions and 32 deletions

View File

@@ -3,6 +3,7 @@ Version 1.0.28 (unreleased)
New features:
* Added automated action to change task color based on the priority
* Added support for LDAP Posix Groups (OpenLDAP with memberUid)
* Search in activity stream
* Search in comments

View 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');
}
}

View File

@@ -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']),

View File

@@ -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
*

View File

@@ -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));

View File

@@ -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>

View File

@@ -40,7 +40,6 @@ class CommentCreationMoveTaskColumnTest extends Base
public function testWithUserNotLogged()
{
$projectModel = new Project($this->container);
$commentModel = new Comment($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));

View File

@@ -46,7 +46,6 @@ class CommentCreationTest extends Base
{
$userModel = new User($this->container);
$projectModel = new Project($this->container);
$projectUserRoleModel = new ProjectUserRole($this->container);
$commentModel = new Comment($this->container);
$taskCreationModel = new TaskCreation($this->container);
@@ -74,8 +73,6 @@ class CommentCreationTest extends Base
{
$userModel = new User($this->container);
$projectModel = new Project($this->container);
$projectUserRoleModel = new ProjectUserRole($this->container);
$commentModel = new Comment($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));

View File

@@ -42,7 +42,6 @@ class TaskAssignCategoryColorTest extends Base
$categoryModel = new Category($this->container);
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -42,7 +42,6 @@ class TaskAssignCategoryLabelTest extends Base
$categoryModel = new Category($this->container);
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
@@ -64,7 +63,6 @@ class TaskAssignCategoryLabelTest extends Base
$categoryModel = new Category($this->container);
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $categoryModel->create(array('name' => 'c1', 'project_id' => 1)));

View File

@@ -70,7 +70,6 @@ class TaskAssignCategoryLinkTest extends Base
public function testThatExistingCategoryWillNotChange()
{
$tc = new TaskCreation($this->container);
$tf = new TaskFinder($this->container);
$p = new Project($this->container);
$c = new Category($this->container);

View File

@@ -39,10 +39,8 @@ class TaskAssignColorCategoryTest extends Base
public function testWithWrongCategory()
{
$categoryModel = new Category($this->container);
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -38,7 +38,6 @@ class TaskAssignColorColumnTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -38,7 +38,6 @@ class TaskAssignColorLinkTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -0,0 +1,57 @@
<?php
require_once __DIR__.'/../Base.php';
use Kanboard\Event\GenericEvent;
use Kanboard\Model\Category;
use Kanboard\Model\TaskCreation;
use Kanboard\Model\TaskFinder;
use Kanboard\Model\Project;
use Kanboard\Model\Task;
use Kanboard\Action\TaskAssignColorPriority;
class TaskAssignColorPriorityTest extends Base
{
public function testChangeColor()
{
$categoryModel = new Category($this->container);
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
$this->assertEquals(1, $categoryModel->create(array('name' => 'c1', 'project_id' => 1)));
$event = new GenericEvent(array('project_id' => 1, 'task_id' => 1, 'priority' => 1));
$action = new TaskAssignColorPriority($this->container);
$action->setProjectId(1);
$action->setParam('color_id', 'red');
$action->setParam('priority', 1);
$this->assertTrue($action->execute($event, Task::EVENT_CREATE_UPDATE));
$task = $taskFinderModel->getById(1);
$this->assertNotEmpty($task);
$this->assertEquals('red', $task['color_id']);
}
public function testWithWrongPriority()
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
$event = new GenericEvent(array('project_id' => 1, 'task_id' => 1, 'priority' => 2));
$action = new TaskAssignColorPriority($this->container);
$action->setProjectId(1);
$action->setParam('color_id', 'red');
$action->setParam('priority', 1);
$this->assertFalse($action->execute($event, Task::EVENT_CREATE_UPDATE));
}
}

View File

@@ -38,7 +38,6 @@ class TaskAssignColorUserTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -41,7 +41,6 @@ class TaskAssignCurrentUserColumnTest extends Base
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));
@@ -59,7 +58,6 @@ class TaskAssignCurrentUserColumnTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -38,7 +38,6 @@ class TaskAssignCurrentUserTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -38,7 +38,6 @@ class TaskAssignSpecificUserTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -41,11 +41,8 @@ class TaskAssignUserTest extends Base
public function testWithNotAssignableUser()
{
$userModel = new User($this->container);
$projectModel = new Project($this->container);
$projectUserRoleModel = new ProjectUserRole($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -37,7 +37,6 @@ class TaskCloseColumnTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test')));

View File

@@ -34,7 +34,6 @@ class TaskCreationActionTest extends Base
public function testWithNoTitle()
{
$projectModel = new Project($this->container);
$taskFinderModel = new TaskFinder($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));

View File

@@ -39,7 +39,6 @@ class TaskDuplicateAnotherProjectTest extends Base
public function testWithWrongColumn()
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(2, $projectModel->create(array('name' => 'test2')));

View File

@@ -44,7 +44,6 @@ class TaskEmailTest extends Base
public function testWithWrongColumn()
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));

View File

@@ -40,7 +40,6 @@ class TaskMoveAnotherProjectTest extends Base
public function testWithWrongColumn()
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(2, $projectModel->create(array('name' => 'test2')));

View File

@@ -39,7 +39,6 @@ class TaskMoveColumnAssignedTest extends Base
public function testWithWrongColumn()
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(2, $projectModel->create(array('name' => 'test2')));

View File

@@ -43,7 +43,6 @@ class TaskMoveColumnCategoryChangeTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$categoryModel = new Category($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
@@ -65,7 +64,6 @@ class TaskMoveColumnCategoryChangeTest extends Base
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$taskFinderModel = new TaskFinder($this->container);
$categoryModel = new Category($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));

View File

@@ -39,7 +39,6 @@ class TaskMoveColumnUnAssignedTest extends Base
public function testWithWrongColumn()
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(2, $projectModel->create(array('name' => 'test2')));
@@ -57,7 +56,6 @@ class TaskMoveColumnUnAssignedTest extends Base
public function testWithWrongUser()
{
$projectModel = new Project($this->container);
$taskCreationModel = new TaskCreation($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'test1')));
$this->assertEquals(2, $projectModel->create(array('name' => 'test2')));

View File

@@ -315,6 +315,11 @@ class ProjectTest extends Base
$this->assertEquals(0, $project['priority_start']);
$this->assertEquals(3, $project['priority_end']);
$this->assertEquals(
array(0 => 0, 1 => 1, 2 => 2, 3 => 3),
$projectModel->getPriorities($project)
);
$this->assertTrue($projectModel->update(array('id' => 1, 'priority_start' => 2, 'priority_end' => 5, 'priority_default' => 4)));
$project = $projectModel->getById(1);
@@ -322,5 +327,10 @@ class ProjectTest extends Base
$this->assertEquals(4, $project['priority_default']);
$this->assertEquals(2, $project['priority_start']);
$this->assertEquals(5, $project['priority_end']);
$this->assertEquals(
array(2 => 2, 3 => 3, 4 => 4, 5 => 5),
$projectModel->getPriorities($project)
);
}
}