impl. tags and fix create bugs

This commit is contained in:
Dennis Eichhorn 2020-10-26 21:56:01 +01:00
parent 50c0da8c93
commit 8b9050cb56
5 changed files with 43 additions and 14 deletions

View File

@ -162,7 +162,8 @@
"task_element_due": { "task_element_due": {
"name": "task_element_due", "name": "task_element_due",
"type": "DATETIME", "type": "DATETIME",
"null": false "null": true,
"default": null
}, },
"task_element_created_at": { "task_element_created_at": {
"name": "task_element_created_at", "name": "task_element_created_at",

View File

@ -27,6 +27,8 @@ use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract; use phpOMS\Message\ResponseAbstract;
use phpOMS\Model\Message\FormValidation; use phpOMS\Model\Message\FormValidation;
use phpOMS\Utils\Parser\Markdown\Markdown; use phpOMS\Utils\Parser\Markdown\Markdown;
use Modules\Tag\Models\NullTag;
use phpOMS\Message\Http\HttpResponse;
/** /**
* Api controller for the tasks module. * Api controller for the tasks module.
@ -69,7 +71,6 @@ final class ApiController extends Controller
$val = []; $val = [];
if (($val['title'] = empty($request->getData('title'))) if (($val['title'] = empty($request->getData('title')))
|| ($val['plain'] = empty($request->getData('plain'))) || ($val['plain'] = empty($request->getData('plain')))
|| ($val['due'] = !((bool) \strtotime((string) $request->getData('due'))))
) { ) {
return $val; return $val;
} }
@ -120,10 +121,30 @@ final class ApiController extends Controller
$task->setDescription(Markdown::parse((string) ($request->getData('plain') ?? ''))); $task->setDescription(Markdown::parse((string) ($request->getData('plain') ?? '')));
$task->setDescriptionRaw((string) ($request->getData('plain') ?? '')); $task->setDescriptionRaw((string) ($request->getData('plain') ?? ''));
$task->setCreatedBy(new NullAccount($request->getHeader()->getAccount())); $task->setCreatedBy(new NullAccount($request->getHeader()->getAccount()));
$task->setDue(new \DateTime($request->getData('due')));
$task->setStatus(TaskStatus::OPEN); $task->setStatus(TaskStatus::OPEN);
$task->setType(TaskType::SINGLE); $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 = new TaskElement();
$element->addTo(new NullAccount((int) ($request->getData('forward') ?? $request->getHeader()->getAccount()))); $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 * Validate that the user is allowed to create a task element for a specific task
*/ */
$element = $this->createTaskElementFromRequest($request); $task = TaskMapper::get((int) ($request->getData('task')));
$task = TaskMapper::get($element->getTask()); $element = $this->createTaskElementFromRequest($request, $task);
$task->setStatus($element->getStatus()); $task->setStatus($element->getStatus());
$task->setPriority($element->getPriority()); $task->setPriority($element->getPriority());
$task->setDue($element->getDue());
$this->createModel($request->getHeader()->getAccount(), $element, TaskElementMapper::class, 'taskelement', $request->getOrigin()); $this->createModel($request->getHeader()->getAccount(), $element, TaskElementMapper::class, 'taskelement', $request->getOrigin());
$this->updateModel($request->getHeader()->getAccount(), $task, $task, TaskMapper::class, 'task', $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. * Method to create task element from request.
* *
* @param RequestAbstract $request Request * @param RequestAbstract $request Request
* @param Task $task Task
* *
* @return TaskElement Returns the task created from the request * @return TaskElement Returns the task created from the request
* *
* @since 1.0.0 * @since 1.0.0
*/ */
private function createTaskElementFromRequest(RequestAbstract $request) : TaskElement private function createTaskElementFromRequest(RequestAbstract $request, Task $task) : TaskElement
{ {
$element = new TaskElement(); $element = new TaskElement();
$element->setCreatedBy(new NullAccount($request->getHeader()->getAccount())); $element->setCreatedBy(new NullAccount($request->getHeader()->getAccount()));
$element->setDue(new \DateTime((string) ($request->getData('due') ?? 'now'))); $element->setDue(!empty($request->getData('due')) ? new \DateTime((string) ($request->getData('due'))) : $task->getDue());
$element->setPriority((int) $request->getData('priority')); $element->setPriority((int) ($request->getData('priority') ?? $task->getPriority()));
$element->setStatus((int) ($request->getData('status'))); $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->setDescription(Markdown::parse((string) ($request->getData('plain') ?? '')));
$element->setDescriptionRaw((string) ($request->getData('plain') ?? '')); $element->setDescriptionRaw((string) ($request->getData('plain') ?? ''));

View File

@ -143,7 +143,7 @@ final class BackendController extends Controller implements DashboardElementInte
$head = $response->get('Content')->getData('head'); $head = $response->get('Content')->getData('head');
$head->addAsset(AssetType::CSS, 'Modules/Tasks/Theme/Backend/css/styles.css'); $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(); $accountId = $request->getHeader()->getAccount();
if (!($task->getCreatedBy()->getId() === $accountId if (!($task->getCreatedBy()->getId() === $accountId

View File

@ -17,6 +17,7 @@ namespace Modules\Tasks\Models;
use Modules\Admin\Models\AccountMapper; use Modules\Admin\Models\AccountMapper;
use Modules\Calendar\Models\ScheduleMapper; use Modules\Calendar\Models\ScheduleMapper;
use Modules\Media\Models\MediaMapper; use Modules\Media\Models\MediaMapper;
use Modules\Tag\Models\TagMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\DataMapperAbstract;
use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\Builder;
use phpOMS\DataStorage\Database\Query\Where; use phpOMS\DataStorage\Database\Query\Where;
@ -76,7 +77,7 @@ final class TaskMapper extends DataMapperAbstract
'self' => 'task_media_src', 'self' => 'task_media_src',
], ],
'tags' => [ 'tags' => [
'mapper' => MediaMapper::class, 'mapper' => TagMapper::class,
'table' => 'task_tag', 'table' => 'task_tag',
'external' => 'task_tag_dst', 'external' => 'task_tag_dst',
'self' => 'task_tag_src', 'self' => 'task_tag_src',

View File

@ -96,6 +96,10 @@ echo $this->getData('nav')->render(); ?>
<?php else : ?> <?php else : ?>
<?= $this->getHtml('Priority'); ?>: <?= $this->getHtml('P' . $task->getPriority()); ?> <?= $this->getHtml('Priority'); ?>: <?= $this->getHtml('P' . $task->getPriority()); ?>
<?php endif; ?> <?php endif; ?>
<?php $tags = $task->getTags(); foreach ($tags as $tag) : ?>
<span class="tag" style="background: <?= $this->printHtml($tag->getColor()); ?>"><?= $this->printHtml($tag->getTitle()); ?></span>
<?php endforeach; ?>
</div> </div>
</div> </div>
<div class="col-xs-0 end-xs plain-grid"> <div class="col-xs-0 end-xs plain-grid">
@ -281,14 +285,14 @@ echo $this->getData('nav')->render(); ?>
<?php <?php
$tos = $element->getTo(); $tos = $element->getTo();
if (\count($tos) > 1 if (\count($tos) > 1
|| (\count($tos) > 0 && $tos[0]->getRelation()->getId() !== $task->getCreatedBy()->getId()) || (!empty($tos) && $tos[0]->getRelation()->getId() !== $element->getCreatedBy()->getId())
) : ?> ) : ?>
<section class="box wf-100"> <section class="box wf-100">
<div class="inner"> <div class="inner">
<?= $this->printHtml($element->getCreatedBy()->getName1()); ?> <?= $this->getHtml('forwarded_to'); ?> <?= $this->printHtml($element->getCreatedBy()->getName1()); ?> <?= $this->getHtml('forwarded_to'); ?>
<?php foreach ($tos as $to) : ?> <?php foreach ($tos as $to) : ?>
<?php if ($to instanceof AccountRelation) : ?> <?php if ($to instanceof AccountRelation) : ?>
<a href="<?= phpOMS\Uri\UriFactory::build('{/prefix}profile/single?{?}&for=' . $to->getRelation()->getId()); ?>"><?= $this->printHtml($to->getRelation()->getName1()); ?></a> <a href="<?= UriFactory::build('{/prefix}profile/single?{?}&for=' . $to->getRelation()->getId()); ?>"><?= $this->printHtml($to->getRelation()->getName1()); ?></a>
<?php elseif ($to instanceof GroupRelation) : ?> <?php elseif ($to instanceof GroupRelation) : ?>
<?= $this->printHtml($to->getRelation()->getName()); ?> <?= $this->printHtml($to->getRelation()->getName()); ?>
<?php endif; ?> <?php endif; ?>