diff --git a/Admin/Install/Search.php b/Admin/Install/Search.php new file mode 100644 index 0000000..3d91e39 --- /dev/null +++ b/Admin/Install/Search.php @@ -0,0 +1,43 @@ + __DIR__ . '/SearchCommands.php']); + } +} diff --git a/Admin/Install/SearchCommands.php b/Admin/Install/SearchCommands.php new file mode 100644 index 0000000..ad0ab4c --- /dev/null +++ b/Admin/Install/SearchCommands.php @@ -0,0 +1,30 @@ + [ + [ + 'dest' => '\Modules\Tasks\Controller\SearchController:searchTags', + 'verb' => RouteVerb::ANY, + 'permission' => [ + 'module' => SearchController::MODULE_NAME, + 'type' => PermissionType::READ, + ], + ], + ], +]; diff --git a/Admin/Install/db.json b/Admin/Install/db.json index cb6e981..dbefd49 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -34,6 +34,11 @@ "type": "TINYINT", "null": false }, + "task_completion": { + "name": "task_completion", + "type": "TINYINT", + "null": false + }, "task_closable": { "name": "task_closable", "type": "TINYINT", diff --git a/Controller/ApiController.php b/Controller/ApiController.php index c18e4a0..fe64152 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -201,6 +201,7 @@ final class ApiController extends Controller $task->setStatus((int) ($request->getData('status') ?? $task->getStatus())); $task->setType((int) ($request->getData('type') ?? $task->getType())); $task->setPriority((int) ($request->getData('priority') ?? $task->getPriority())); + $task->completion = (int) ($request->getData('completion') ?? $task->completion); return $task; } @@ -255,6 +256,11 @@ final class ApiController extends Controller $task->setStatus($element->getStatus()); $task->setPriority($element->getPriority()); $task->due = $element->due; + $task->completion = (int) ($request->getData('completion') ?? $task->completion); + + if ($task->getStatus() === TaskStatus::DONE) { + $task->completion = 100; + } $this->createModel($request->header->account, $element, TaskElementMapper::class, 'taskelement', $request->getOrigin()); $this->updateModel($request->header->account, $task, $task, TaskMapper::class, 'task', $request->getOrigin()); diff --git a/Controller/SearchController.php b/Controller/SearchController.php new file mode 100644 index 0000000..b700003 --- /dev/null +++ b/Controller/SearchController.php @@ -0,0 +1,62 @@ +header->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); + + $response->set($request->uri->__toString(), $tags); + } +} diff --git a/Models/Task.php b/Models/Task.php index 3fdcf1a..3250be8 100755 --- a/Models/Task.php +++ b/Models/Task.php @@ -96,6 +96,13 @@ class Task implements \JsonSerializable */ protected int $status = TaskStatus::OPEN; + /** + * Completion status + * @var int + * @since 1.0.0 + */ + public int $completion = -1; + /** * Task can be closed by user. * @@ -149,7 +156,7 @@ class Task implements \JsonSerializable protected array $taskElements = []; /** - * Task elements. + * Tags. * * @var Tag[] * @since 1.0.0 @@ -522,6 +529,11 @@ class Task implements \JsonSerializable return $this->taskElements; } + public function invertTaskElements() : array + { + return \array_reverse($this->taskElements); + } + /** * Get task elements. * diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php index 1696c8a..a73a321 100755 --- a/Models/TaskMapper.php +++ b/Models/TaskMapper.php @@ -46,6 +46,7 @@ final class TaskMapper extends DataMapperAbstract 'task_desc_raw' => ['name' => 'task_desc_raw', 'type' => 'string', 'internal' => 'descriptionRaw'], 'task_type' => ['name' => 'task_type', 'type' => 'int', 'internal' => 'type'], 'task_status' => ['name' => 'task_status', 'type' => 'int', 'internal' => 'status'], + 'task_completion' => ['name' => 'task_completion', 'type' => 'int', 'internal' => 'completion'], 'task_closable' => ['name' => 'task_closable', 'type' => 'bool', 'internal' => 'isClosable'], 'task_editable' => ['name' => 'task_editable', 'type' => 'bool', 'internal' => 'isEditable'], 'task_priority' => ['name' => 'task_priority', 'type' => 'int', 'internal' => 'priority'], diff --git a/Theme/Backend/Components/Tasks/status.tpl.php b/Theme/Backend/Components/Tasks/status.tpl.php index dae3ca1..4e79d71 100755 --- a/Theme/Backend/Components/Tasks/status.tpl.php +++ b/Theme/Backend/Components/Tasks/status.tpl.php @@ -7,7 +7,7 @@ data-src="api/admin/find/accgrp?search={!#i= $this->getId(); ?>}"> -