diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 1af3dea..cb6e981 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -162,7 +162,8 @@ "task_element_due": { "name": "task_element_due", "type": "DATETIME", - "null": false + "null": true, + "default": null }, "task_element_created_at": { "name": "task_element_created_at", diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 687c41d..a6fae29 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -27,6 +27,8 @@ use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; use phpOMS\Model\Message\FormValidation; use phpOMS\Utils\Parser\Markdown\Markdown; +use Modules\Tag\Models\NullTag; +use phpOMS\Message\Http\HttpResponse; /** * Api controller for the tasks module. @@ -69,7 +71,6 @@ final class ApiController extends Controller $val = []; if (($val['title'] = empty($request->getData('title'))) || ($val['plain'] = empty($request->getData('plain'))) - || ($val['due'] = !((bool) \strtotime((string) $request->getData('due')))) ) { return $val; } @@ -120,10 +121,30 @@ final class ApiController extends Controller $task->setDescription(Markdown::parse((string) ($request->getData('plain') ?? ''))); $task->setDescriptionRaw((string) ($request->getData('plain') ?? '')); $task->setCreatedBy(new NullAccount($request->getHeader()->getAccount())); - $task->setDue(new \DateTime($request->getData('due'))); $task->setStatus(TaskStatus::OPEN); $task->setType(TaskType::SINGLE); - $task->setPriority((int) $request->getData('priority')); + + if (empty($request->getData('priority'))) { + $task->setDue(empty($request->getData('due')) ? null : new \DateTime($request->getData('due'))); + } else { + $task->setPriority((int) $request->getData('priority')); + } + + if (!empty($tags = $request->getDataJson('tags'))) { + foreach ($tags as $tag) { + if (!isset($tag['id'])) { + $request->setData('title', $tag['title'], true); + $request->setData('color', $tag['color'], true); + $request->setData('language', $tag['language'], true); + + $internalResponse = new HttpResponse(); + $this->app->moduleManager->get('Tag')->apiTagCreate($request, $internalResponse, null); + $task->addTag($internalResponse->get($request->getUri()->__toString())['response']); + } else { + $task->addTag(new NullTag((int) $tag['id'])); + } + } + } $element = new TaskElement(); $element->addTo(new NullAccount((int) ($request->getData('forward') ?? $request->getHeader()->getAccount()))); @@ -250,10 +271,11 @@ final class ApiController extends Controller * Validate that the user is allowed to create a task element for a specific task */ - $element = $this->createTaskElementFromRequest($request); - $task = TaskMapper::get($element->getTask()); + $task = TaskMapper::get((int) ($request->getData('task'))); + $element = $this->createTaskElementFromRequest($request, $task); $task->setStatus($element->getStatus()); $task->setPriority($element->getPriority()); + $task->setDue($element->getDue()); $this->createModel($request->getHeader()->getAccount(), $element, TaskElementMapper::class, 'taskelement', $request->getOrigin()); $this->updateModel($request->getHeader()->getAccount(), $task, $task, TaskMapper::class, 'task', $request->getOrigin()); @@ -264,19 +286,20 @@ final class ApiController extends Controller * Method to create task element from request. * * @param RequestAbstract $request Request + * @param Task $task Task * * @return TaskElement Returns the task created from the request * * @since 1.0.0 */ - private function createTaskElementFromRequest(RequestAbstract $request) : TaskElement + private function createTaskElementFromRequest(RequestAbstract $request, Task $task) : TaskElement { $element = new TaskElement(); $element->setCreatedBy(new NullAccount($request->getHeader()->getAccount())); - $element->setDue(new \DateTime((string) ($request->getData('due') ?? 'now'))); - $element->setPriority((int) $request->getData('priority')); + $element->setDue(!empty($request->getData('due')) ? new \DateTime((string) ($request->getData('due'))) : $task->getDue()); + $element->setPriority((int) ($request->getData('priority') ?? $task->getPriority())); $element->setStatus((int) ($request->getData('status'))); - $element->setTask((int) ($request->getData('task'))); + $element->setTask($task->getId()); $element->setDescription(Markdown::parse((string) ($request->getData('plain') ?? ''))); $element->setDescriptionRaw((string) ($request->getData('plain') ?? '')); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 11b0b9b..97e5818 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -143,7 +143,7 @@ final class BackendController extends Controller implements DashboardElementInte $head = $response->get('Content')->getData('head'); $head->addAsset(AssetType::CSS, 'Modules/Tasks/Theme/Backend/css/styles.css'); - $task = TaskMapper::get((int) $request->getData('id'), RelationType::ALL, 4); + $task = TaskMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())::get((int) $request->getData('id'), RelationType::ALL, 4); $accountId = $request->getHeader()->getAccount(); if (!($task->getCreatedBy()->getId() === $accountId diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php index 7623f1d..7a00231 100755 --- a/Models/TaskMapper.php +++ b/Models/TaskMapper.php @@ -17,6 +17,7 @@ namespace Modules\Tasks\Models; use Modules\Admin\Models\AccountMapper; use Modules\Calendar\Models\ScheduleMapper; use Modules\Media\Models\MediaMapper; +use Modules\Tag\Models\TagMapper; use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\Where; @@ -76,7 +77,7 @@ final class TaskMapper extends DataMapperAbstract 'self' => 'task_media_src', ], 'tags' => [ - 'mapper' => MediaMapper::class, + 'mapper' => TagMapper::class, 'table' => 'task_tag', 'external' => 'task_tag_dst', 'self' => 'task_tag_src', diff --git a/Theme/Backend/task-single.tpl.php b/Theme/Backend/task-single.tpl.php index 713c466..2775994 100755 --- a/Theme/Backend/task-single.tpl.php +++ b/Theme/Backend/task-single.tpl.php @@ -96,6 +96,10 @@ echo $this->getData('nav')->render(); ?> getHtml('Priority'); ?>: getHtml('P' . $task->getPriority()); ?> + + getTags(); foreach ($tags as $tag) : ?> + printHtml($tag->getTitle()); ?> +
@@ -281,14 +285,14 @@ echo $this->getData('nav')->render(); ?> getTo(); if (\count($tos) > 1 - || (\count($tos) > 0 && $tos[0]->getRelation()->getId() !== $task->getCreatedBy()->getId()) + || (!empty($tos) && $tos[0]->getRelation()->getId() !== $element->getCreatedBy()->getId()) ) : ?>
printHtml($element->getCreatedBy()->getName1()); ?> getHtml('forwarded_to'); ?> - printHtml($to->getRelation()->getName1()); ?> + printHtml($to->getRelation()->getName1()); ?> printHtml($to->getRelation()->getName()); ?>