Add task and project API formatters
This commit is contained in:
parent
f16ac8cd66
commit
54a751820f
|
|
@ -7,6 +7,7 @@ Improvements:
|
||||||
* Add the possibility to pass API token as environment variable for Docker container
|
* Add the possibility to pass API token as environment variable for Docker container
|
||||||
* Add wildcard search for task reference field
|
* Add wildcard search for task reference field
|
||||||
* Improve automated action TaskAssignColorOnDueDate to update task only when necessary
|
* Improve automated action TaskAssignColorOnDueDate to update task only when necessary
|
||||||
|
* Add task and project API formatters
|
||||||
|
|
||||||
Bug fixes:
|
Bug fixes:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,51 +21,6 @@ abstract class BaseProcedure extends Base
|
||||||
UserAuthorization::getInstance($this->container)->check($this->getClassName(), $procedure);
|
UserAuthorization::getInstance($this->container)->check($this->getClassName(), $procedure);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function formatTask($task)
|
|
||||||
{
|
|
||||||
if (! empty($task)) {
|
|
||||||
$task['url'] = $this->helper->url->to('TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), '', true);
|
|
||||||
$task['color'] = $this->colorModel->getColorProperties($task['color_id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $task;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function formatTasks($tasks)
|
|
||||||
{
|
|
||||||
if (! empty($tasks)) {
|
|
||||||
foreach ($tasks as &$task) {
|
|
||||||
$task = $this->formatTask($task);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $tasks;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function formatProject($project)
|
|
||||||
{
|
|
||||||
if (! empty($project)) {
|
|
||||||
$project['url'] = array(
|
|
||||||
'board' => $this->helper->url->to('BoardViewController', 'show', array('project_id' => $project['id']), '', true),
|
|
||||||
'calendar' => $this->helper->url->to('CalendarController', 'show', array('project_id' => $project['id']), '', true),
|
|
||||||
'list' => $this->helper->url->to('TaskListController', 'show', array('project_id' => $project['id']), '', true),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $project;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function formatProjects($projects)
|
|
||||||
{
|
|
||||||
if (! empty($projects)) {
|
|
||||||
foreach ($projects as &$project) {
|
|
||||||
$project = $this->formatProject($project);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $projects;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function filterValues(array $values)
|
protected function filterValues(array $values)
|
||||||
{
|
{
|
||||||
foreach ($values as $key => $value) {
|
foreach ($values as $key => $value) {
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,6 @@ class MeProcedure extends BaseProcedure
|
||||||
$project_ids = $this->projectPermissionModel->getActiveProjectIds($this->userSession->getId());
|
$project_ids = $this->projectPermissionModel->getActiveProjectIds($this->userSession->getId());
|
||||||
$projects = $this->projectModel->getAllByIds($project_ids);
|
$projects = $this->projectModel->getAllByIds($project_ids);
|
||||||
|
|
||||||
return $this->formatProjects($projects);
|
return $this->projectsApiFormatter->withProjects($projects)->format();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,33 +15,34 @@ class ProjectProcedure extends BaseProcedure
|
||||||
public function getProjectById($project_id)
|
public function getProjectById($project_id)
|
||||||
{
|
{
|
||||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectById', $project_id);
|
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectById', $project_id);
|
||||||
return $this->formatProject($this->projectModel->getById($project_id));
|
$project = $this->projectModel->getById($project_id);
|
||||||
|
return $this->projectApiFormatter->withProject($project)->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getProjectByName($name)
|
public function getProjectByName($name)
|
||||||
{
|
{
|
||||||
$project = $this->projectModel->getByName($name);
|
$project = $this->projectModel->getByName($name);
|
||||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByName', $project['id']);
|
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByName', $project['id']);
|
||||||
return $this->formatProject($project);
|
return $this->projectApiFormatter->withProject($project)->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getProjectByIdentifier($identifier)
|
public function getProjectByIdentifier($identifier)
|
||||||
{
|
{
|
||||||
$project = $this->formatProject($this->projectModel->getByIdentifier($identifier));
|
$project = $this->projectModel->getByIdentifier($identifier);
|
||||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByIdentifier', $project['id']);
|
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByIdentifier', $project['id']);
|
||||||
return $this->formatProject($project);
|
return $this->projectApiFormatter->withProject($project)->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getProjectByEmail($email)
|
public function getProjectByEmail($email)
|
||||||
{
|
{
|
||||||
$project = $this->formatProject($this->projectModel->getByEmail($email));
|
$project = $this->projectModel->getByEmail($email);
|
||||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByEmail', $project['id']);
|
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByEmail', $project['id']);
|
||||||
return $this->formatProject($project);
|
return $this->projectApiFormatter->withProject($project)->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllProjects()
|
public function getAllProjects()
|
||||||
{
|
{
|
||||||
return $this->formatProjects($this->projectModel->getAll());
|
return $this->projectsApiFormatter->withProjects($this->projectModel->getAll())->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removeProject($project_id)
|
public function removeProject($project_id)
|
||||||
|
|
|
||||||
|
|
@ -24,19 +24,22 @@ class TaskProcedure extends BaseProcedure
|
||||||
public function getTask($task_id)
|
public function getTask($task_id)
|
||||||
{
|
{
|
||||||
TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTask', $task_id);
|
TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTask', $task_id);
|
||||||
return $this->formatTask($this->taskFinderModel->getById($task_id));
|
$task = $this->taskFinderModel->getById($task_id);
|
||||||
|
return $this->taskApiFormatter->withTask($task)->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTaskByReference($project_id, $reference)
|
public function getTaskByReference($project_id, $reference)
|
||||||
{
|
{
|
||||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTaskByReference', $project_id);
|
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTaskByReference', $project_id);
|
||||||
return $this->formatTask($this->taskFinderModel->getByReference($project_id, $reference));
|
$task = $this->taskFinderModel->getByReference($project_id, $reference);
|
||||||
|
return $this->taskApiFormatter->withTask($task)->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllTasks($project_id, $status_id = TaskModel::STATUS_OPEN)
|
public function getAllTasks($project_id, $status_id = TaskModel::STATUS_OPEN)
|
||||||
{
|
{
|
||||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getAllTasks', $project_id);
|
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getAllTasks', $project_id);
|
||||||
return $this->formatTasks($this->taskFinderModel->getAll($project_id, $status_id));
|
$tasks = $this->taskFinderModel->getAll($project_id, $status_id);
|
||||||
|
return $this->tasksApiFormatter->withTasks($tasks)->format();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getOverdueTasks()
|
public function getOverdueTasks()
|
||||||
|
|
|
||||||
|
|
@ -68,8 +68,12 @@ use Pimple\Container;
|
||||||
* @property \Kanboard\Formatter\BoardTaskFormatter $boardTaskFormatter
|
* @property \Kanboard\Formatter\BoardTaskFormatter $boardTaskFormatter
|
||||||
* @property \Kanboard\Formatter\GroupAutoCompleteFormatter $groupAutoCompleteFormatter
|
* @property \Kanboard\Formatter\GroupAutoCompleteFormatter $groupAutoCompleteFormatter
|
||||||
* @property \Kanboard\Formatter\ProjectActivityEventFormatter $projectActivityEventFormatter
|
* @property \Kanboard\Formatter\ProjectActivityEventFormatter $projectActivityEventFormatter
|
||||||
|
* @property \Kanboard\Formatter\ProjectApiFormatter $projectApiFormatter
|
||||||
|
* @property \Kanboard\Formatter\ProjectsApiFormatter $projectsApiFormatter
|
||||||
* @property \Kanboard\Formatter\SubtaskListFormatter $subtaskListFormatter
|
* @property \Kanboard\Formatter\SubtaskListFormatter $subtaskListFormatter
|
||||||
* @property \Kanboard\Formatter\SubtaskTimeTrackingCalendarFormatter $subtaskTimeTrackingCalendarFormatter
|
* @property \Kanboard\Formatter\SubtaskTimeTrackingCalendarFormatter $subtaskTimeTrackingCalendarFormatter
|
||||||
|
* @property \Kanboard\Formatter\TaskApiFormatter $taskApiFormatter
|
||||||
|
* @property \Kanboard\Formatter\TasksApiFormatter $tasksApiFormatter
|
||||||
* @property \Kanboard\Formatter\TaskAutoCompleteFormatter $taskAutoCompleteFormatter
|
* @property \Kanboard\Formatter\TaskAutoCompleteFormatter $taskAutoCompleteFormatter
|
||||||
* @property \Kanboard\Formatter\TaskICalFormatter $taskICalFormatter
|
* @property \Kanboard\Formatter\TaskICalFormatter $taskICalFormatter
|
||||||
* @property \Kanboard\Formatter\TaskListFormatter $taskListFormatter
|
* @property \Kanboard\Formatter\TaskListFormatter $taskListFormatter
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kanboard\Formatter;
|
||||||
|
|
||||||
|
use Kanboard\Core\Filter\FormatterInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ProjectApiFormatter
|
||||||
|
*
|
||||||
|
* @package Kanboard\Formatter
|
||||||
|
*/
|
||||||
|
class ProjectApiFormatter extends BaseFormatter implements FormatterInterface
|
||||||
|
{
|
||||||
|
protected $project = null;
|
||||||
|
|
||||||
|
public function withProject($project)
|
||||||
|
{
|
||||||
|
$this->project = $project;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply formatter
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function format()
|
||||||
|
{
|
||||||
|
if (! empty($this->project)) {
|
||||||
|
$this->project['url'] = array(
|
||||||
|
'board' => $this->helper->url->to('BoardViewController', 'show', array('project_id' => $this->project['id']), '', true),
|
||||||
|
'list' => $this->helper->url->to('TaskListController', 'show', array('project_id' => $this->project['id']), '', true),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->project;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kanboard\Formatter;
|
||||||
|
|
||||||
|
use Kanboard\Core\Filter\FormatterInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ProjectsApiFormatter
|
||||||
|
*
|
||||||
|
* @package Kanboard\Formatter
|
||||||
|
*/
|
||||||
|
class ProjectsApiFormatter extends BaseFormatter implements FormatterInterface
|
||||||
|
{
|
||||||
|
protected $projects = array();
|
||||||
|
|
||||||
|
public function withProjects($projects)
|
||||||
|
{
|
||||||
|
$this->projects = $projects;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply formatter
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function format()
|
||||||
|
{
|
||||||
|
if (! empty($this->projects)) {
|
||||||
|
foreach ($this->projects as &$project) {
|
||||||
|
$project = $this->projectApiFormatter->withProject($project)->format();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->projects;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kanboard\Formatter;
|
||||||
|
|
||||||
|
use Kanboard\Core\Filter\FormatterInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class TaskApiFormatter
|
||||||
|
*
|
||||||
|
* @package Kanboard\Formatter
|
||||||
|
*/
|
||||||
|
class TaskApiFormatter extends BaseFormatter implements FormatterInterface
|
||||||
|
{
|
||||||
|
protected $task = null;
|
||||||
|
|
||||||
|
public function withTask($task)
|
||||||
|
{
|
||||||
|
$this->task = $task;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply formatter
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function format()
|
||||||
|
{
|
||||||
|
if (! empty($this->task)) {
|
||||||
|
$this->task['url'] = $this->helper->url->to('TaskViewController', 'show', array('task_id' => $this->task['id'], 'project_id' => $this->task['project_id']), '', true);
|
||||||
|
$this->task['color'] = $this->colorModel->getColorProperties($this->task['color_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->task;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kanboard\Formatter;
|
||||||
|
|
||||||
|
use Kanboard\Core\Filter\FormatterInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class TasksApiFormatter
|
||||||
|
*
|
||||||
|
* @package Kanboard\Formatter
|
||||||
|
*/
|
||||||
|
class TasksApiFormatter extends BaseFormatter implements FormatterInterface
|
||||||
|
{
|
||||||
|
protected $tasks = array();
|
||||||
|
|
||||||
|
public function withTasks($tasks)
|
||||||
|
{
|
||||||
|
$this->tasks = $tasks;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply formatter
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function format()
|
||||||
|
{
|
||||||
|
if (! empty($this->tasks)) {
|
||||||
|
foreach ($this->tasks as &$task) {
|
||||||
|
$task = $this->taskApiFormatter->withTask($task)->format();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->tasks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,13 +2,15 @@
|
||||||
|
|
||||||
namespace Kanboard\Formatter;
|
namespace Kanboard\Formatter;
|
||||||
|
|
||||||
|
use Kanboard\Core\Filter\FormatterInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class UserMentionFormatter
|
* Class UserMentionFormatter
|
||||||
*
|
*
|
||||||
* @package Kanboard\Formatter
|
* @package Kanboard\Formatter
|
||||||
* @author Frederic Guillot
|
* @author Frederic Guillot
|
||||||
*/
|
*/
|
||||||
class UserMentionFormatter extends BaseFormatter
|
class UserMentionFormatter extends BaseFormatter implements FormatterInterface
|
||||||
{
|
{
|
||||||
protected $users = array();
|
protected $users = array();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,12 @@ class FormatterProvider implements ServiceProviderInterface
|
||||||
'BoardTaskFormatter',
|
'BoardTaskFormatter',
|
||||||
'GroupAutoCompleteFormatter',
|
'GroupAutoCompleteFormatter',
|
||||||
'ProjectActivityEventFormatter',
|
'ProjectActivityEventFormatter',
|
||||||
|
'ProjectApiFormatter',
|
||||||
|
'ProjectsApiFormatter',
|
||||||
'SubtaskListFormatter',
|
'SubtaskListFormatter',
|
||||||
'SubtaskTimeTrackingCalendarFormatter',
|
'SubtaskTimeTrackingCalendarFormatter',
|
||||||
|
'TaskApiFormatter',
|
||||||
|
'TasksApiFormatter',
|
||||||
'TaskAutoCompleteFormatter',
|
'TaskAutoCompleteFormatter',
|
||||||
'TaskICalFormatter',
|
'TaskICalFormatter',
|
||||||
'TaskListFormatter',
|
'TaskListFormatter',
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ class ProjectProcedureTest extends BaseProcedureTest
|
||||||
$this->assertNotNull($project);
|
$this->assertNotNull($project);
|
||||||
$this->assertEquals($this->projectName, $project['name']);
|
$this->assertEquals($this->projectName, $project['name']);
|
||||||
$this->assertEquals('Description', $project['description']);
|
$this->assertEquals('Description', $project['description']);
|
||||||
|
$this->assertArrayHasKey('board', $project['url']);
|
||||||
|
$this->assertArrayHasKey('list', $project['url']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function assertGetProjectByName()
|
public function assertGetProjectByName()
|
||||||
|
|
@ -43,6 +45,9 @@ class ProjectProcedureTest extends BaseProcedureTest
|
||||||
{
|
{
|
||||||
$projects = $this->app->getAllProjects();
|
$projects = $this->app->getAllProjects();
|
||||||
$this->assertNotEmpty($projects);
|
$this->assertNotEmpty($projects);
|
||||||
|
$this->assertInternalType('array', $projects);
|
||||||
|
$this->assertArrayHasKey('board', $projects[0]['url']);
|
||||||
|
$this->assertArrayHasKey('list', $projects[0]['url']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function assertGetProjectActivity()
|
public function assertGetProjectActivity()
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ class TaskProcedureTest extends BaseProcedureTest
|
||||||
$this->assertNotNull($task);
|
$this->assertNotNull($task);
|
||||||
$this->assertEquals('red', $task['color_id']);
|
$this->assertEquals('red', $task['color_id']);
|
||||||
$this->assertEquals($this->taskTitle, $task['title']);
|
$this->assertEquals($this->taskTitle, $task['title']);
|
||||||
|
$this->assertArrayHasKey('url', $task);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function assertGetTaskByReference()
|
public function assertGetTaskByReference()
|
||||||
|
|
@ -45,6 +46,7 @@ class TaskProcedureTest extends BaseProcedureTest
|
||||||
$tasks = $this->app->getAllTasks($this->projectId);
|
$tasks = $this->app->getAllTasks($this->projectId);
|
||||||
$this->assertInternalType('array', $tasks);
|
$this->assertInternalType('array', $tasks);
|
||||||
$this->assertNotEmpty($tasks);
|
$this->assertNotEmpty($tasks);
|
||||||
|
$this->assertArrayHasKey('url', $tasks[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function assertOpenCloseTask()
|
public function assertOpenCloseTask()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue