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": {
"name": "task_element_due",
"type": "DATETIME",
"null": false
"null": true,
"default": null
},
"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\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') ?? ''));

View File

@ -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

View File

@ -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',

View File

@ -96,6 +96,10 @@ echo $this->getData('nav')->render(); ?>
<?php else : ?>
<?= $this->getHtml('Priority'); ?>: <?= $this->getHtml('P' . $task->getPriority()); ?>
<?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 class="col-xs-0 end-xs plain-grid">
@ -281,14 +285,14 @@ echo $this->getData('nav')->render(); ?>
<?php
$tos = $element->getTo();
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">
<div class="inner">
<?= $this->printHtml($element->getCreatedBy()->getName1()); ?> <?= $this->getHtml('forwarded_to'); ?>
<?php foreach ($tos as $to) : ?>
<?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) : ?>
<?= $this->printHtml($to->getRelation()->getName()); ?>
<?php endif; ?>