mirror of
https://github.com/Karaka-Management/oms-Tasks.git
synced 2026-02-16 06:38:40 +00:00
impl. tags and fix create bugs
This commit is contained in:
parent
50c0da8c93
commit
8b9050cb56
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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') ?? ''));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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; ?>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user