From 54a751820f39e8891f775b8d9293349399b3e8c2 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Mon, 22 May 2017 15:33:16 -0400 Subject: Add task and project API formatters --- app/Api/Procedure/BaseProcedure.php | 45 ------------------------------- app/Api/Procedure/MeProcedure.php | 2 +- app/Api/Procedure/ProjectProcedure.php | 15 ++++++----- app/Api/Procedure/TaskProcedure.php | 9 ++++--- app/Core/Base.php | 4 +++ app/Formatter/ProjectApiApiFormatter.php | 39 +++++++++++++++++++++++++++ app/Formatter/ProjectsApiFormatter.php | 38 ++++++++++++++++++++++++++ app/Formatter/TaskApiFormatter.php | 37 +++++++++++++++++++++++++ app/Formatter/TasksApiFormatter.php | 38 ++++++++++++++++++++++++++ app/Formatter/UserMentionFormatter.php | 4 ++- app/ServiceProvider/FormatterProvider.php | 4 +++ 11 files changed, 178 insertions(+), 57 deletions(-) create mode 100644 app/Formatter/ProjectApiApiFormatter.php create mode 100644 app/Formatter/ProjectsApiFormatter.php create mode 100644 app/Formatter/TaskApiFormatter.php create mode 100644 app/Formatter/TasksApiFormatter.php (limited to 'app') diff --git a/app/Api/Procedure/BaseProcedure.php b/app/Api/Procedure/BaseProcedure.php index e31b3027..16ef5e05 100644 --- a/app/Api/Procedure/BaseProcedure.php +++ b/app/Api/Procedure/BaseProcedure.php @@ -21,51 +21,6 @@ abstract class BaseProcedure extends Base 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) { foreach ($values as $key => $value) { diff --git a/app/Api/Procedure/MeProcedure.php b/app/Api/Procedure/MeProcedure.php index 3ba73fdd..5a64cdb3 100644 --- a/app/Api/Procedure/MeProcedure.php +++ b/app/Api/Procedure/MeProcedure.php @@ -62,6 +62,6 @@ class MeProcedure extends BaseProcedure $project_ids = $this->projectPermissionModel->getActiveProjectIds($this->userSession->getId()); $projects = $this->projectModel->getAllByIds($project_ids); - return $this->formatProjects($projects); + return $this->projectsApiFormatter->withProjects($projects)->format(); } } diff --git a/app/Api/Procedure/ProjectProcedure.php b/app/Api/Procedure/ProjectProcedure.php index e8a34cd3..c9ac0ae6 100644 --- a/app/Api/Procedure/ProjectProcedure.php +++ b/app/Api/Procedure/ProjectProcedure.php @@ -15,33 +15,34 @@ class ProjectProcedure extends BaseProcedure public function 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) { $project = $this->projectModel->getByName($name); ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByName', $project['id']); - return $this->formatProject($project); + return $this->projectApiFormatter->withProject($project)->format(); } 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']); - return $this->formatProject($project); + return $this->projectApiFormatter->withProject($project)->format(); } 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']); - return $this->formatProject($project); + return $this->projectApiFormatter->withProject($project)->format(); } public function getAllProjects() { - return $this->formatProjects($this->projectModel->getAll()); + return $this->projectsApiFormatter->withProjects($this->projectModel->getAll())->format(); } public function removeProject($project_id) diff --git a/app/Api/Procedure/TaskProcedure.php b/app/Api/Procedure/TaskProcedure.php index 847d336f..b1ea0516 100644 --- a/app/Api/Procedure/TaskProcedure.php +++ b/app/Api/Procedure/TaskProcedure.php @@ -24,19 +24,22 @@ class TaskProcedure extends BaseProcedure public function 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) { 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) { 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() diff --git a/app/Core/Base.php b/app/Core/Base.php index c11faee2..bf89c00f 100644 --- a/app/Core/Base.php +++ b/app/Core/Base.php @@ -68,8 +68,12 @@ use Pimple\Container; * @property \Kanboard\Formatter\BoardTaskFormatter $boardTaskFormatter * @property \Kanboard\Formatter\GroupAutoCompleteFormatter $groupAutoCompleteFormatter * @property \Kanboard\Formatter\ProjectActivityEventFormatter $projectActivityEventFormatter + * @property \Kanboard\Formatter\ProjectApiFormatter $projectApiFormatter + * @property \Kanboard\Formatter\ProjectsApiFormatter $projectsApiFormatter * @property \Kanboard\Formatter\SubtaskListFormatter $subtaskListFormatter * @property \Kanboard\Formatter\SubtaskTimeTrackingCalendarFormatter $subtaskTimeTrackingCalendarFormatter + * @property \Kanboard\Formatter\TaskApiFormatter $taskApiFormatter + * @property \Kanboard\Formatter\TasksApiFormatter $tasksApiFormatter * @property \Kanboard\Formatter\TaskAutoCompleteFormatter $taskAutoCompleteFormatter * @property \Kanboard\Formatter\TaskICalFormatter $taskICalFormatter * @property \Kanboard\Formatter\TaskListFormatter $taskListFormatter diff --git a/app/Formatter/ProjectApiApiFormatter.php b/app/Formatter/ProjectApiApiFormatter.php new file mode 100644 index 00000000..5521d57c --- /dev/null +++ b/app/Formatter/ProjectApiApiFormatter.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/app/Formatter/ProjectsApiFormatter.php b/app/Formatter/ProjectsApiFormatter.php new file mode 100644 index 00000000..0bf97da4 --- /dev/null +++ b/app/Formatter/ProjectsApiFormatter.php @@ -0,0 +1,38 @@ +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; + } +} diff --git a/app/Formatter/TaskApiFormatter.php b/app/Formatter/TaskApiFormatter.php new file mode 100644 index 00000000..60840beb --- /dev/null +++ b/app/Formatter/TaskApiFormatter.php @@ -0,0 +1,37 @@ +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; + } +} diff --git a/app/Formatter/TasksApiFormatter.php b/app/Formatter/TasksApiFormatter.php new file mode 100644 index 00000000..95b14095 --- /dev/null +++ b/app/Formatter/TasksApiFormatter.php @@ -0,0 +1,38 @@ +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; + } +} diff --git a/app/Formatter/UserMentionFormatter.php b/app/Formatter/UserMentionFormatter.php index 395fc463..9ea76881 100644 --- a/app/Formatter/UserMentionFormatter.php +++ b/app/Formatter/UserMentionFormatter.php @@ -2,13 +2,15 @@ namespace Kanboard\Formatter; +use Kanboard\Core\Filter\FormatterInterface; + /** * Class UserMentionFormatter * * @package Kanboard\Formatter * @author Frederic Guillot */ -class UserMentionFormatter extends BaseFormatter +class UserMentionFormatter extends BaseFormatter implements FormatterInterface { protected $users = array(); diff --git a/app/ServiceProvider/FormatterProvider.php b/app/ServiceProvider/FormatterProvider.php index a31bf357..efc85d06 100644 --- a/app/ServiceProvider/FormatterProvider.php +++ b/app/ServiceProvider/FormatterProvider.php @@ -22,8 +22,12 @@ class FormatterProvider implements ServiceProviderInterface 'BoardTaskFormatter', 'GroupAutoCompleteFormatter', 'ProjectActivityEventFormatter', + 'ProjectApiFormatter', + 'ProjectsApiFormatter', 'SubtaskListFormatter', 'SubtaskTimeTrackingCalendarFormatter', + 'TaskApiFormatter', + 'TasksApiFormatter', 'TaskAutoCompleteFormatter', 'TaskICalFormatter', 'TaskListFormatter', -- cgit v1.2.3