This commit is contained in:
Dennis Eichhorn 2020-03-05 20:35:58 +01:00
parent 047f348569
commit d21ebb526d
6 changed files with 71 additions and 51 deletions

View File

@ -14,13 +14,14 @@ declare(strict_types=1);
namespace Modules\Tasks\Controller;
use Modules\Admin\Models\NullAccount;
use Modules\Tasks\Models\Task;
use Modules\Tasks\Models\TaskElement;
use Modules\Tasks\Models\TaskElementMapper;
use Modules\Tasks\Models\TaskMapper;
use Modules\Tasks\Models\TaskStatus;
use Modules\Tasks\Models\TaskType;
use Modules\Tasks\Models\TaskType;
use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
@ -117,7 +118,7 @@ final class ApiController extends Controller
$task->setTitle((string) ($request->getData('title') ?? ''));
$task->setDescription(Markdown::parse((string) ($request->getData('plain') ?? '')));
$task->setDescriptionRaw((string) ($request->getData('plain') ?? ''));
$task->setCreatedBy($request->getHeader()->getAccount());
$task->setCreatedBy(new NullAccount($request->getHeader()->getAccount()));
$task->setDue(new \DateTime($request->getData('due')));
$task->setStatus(TaskStatus::OPEN);
$task->setType(TaskType::SINGLE);
@ -269,7 +270,7 @@ final class ApiController extends Controller
private function createTaskElementFromRequest(RequestAbstract $request) : TaskElement
{
$element = new TaskElement();
$element->setCreatedBy($request->getHeader()->getAccount());
$element->setCreatedBy(new NullAccount($request->getHeader()->getAccount()));
$element->setDue(new \DateTime((string) ($request->getData('due') ?? 'now')));
$element->setPriority((int) $request->getData('priority'));
$element->setStatus((int) ($request->getData('status')));

View File

@ -24,4 +24,15 @@ namespace Modules\Tasks\Models;
*/
final class NullTask extends Task
{
/**
* Constructor
*
* @param int $id Model id
*
* @since 1.0.0
*/
public function __construct(int $id = 0)
{
$this->id = $id;
}
}

View File

@ -14,7 +14,10 @@ declare(strict_types=1);
namespace Modules\Tasks\Models;
use Modules\Admin\Models\Account;
use Modules\Admin\Models\NullAccount;
use Modules\Calendar\Models\Schedule;
use Modules\Media\Models\Media;
use Modules\Tag\Models\NullTag;
use Modules\Tag\Models\Tag;
use phpOMS\Stdlib\Base\Exception\InvalidEnumValue;
@ -51,7 +54,7 @@ class Task implements \JsonSerializable
* @var int
* @since 1.0.0
*/
protected $createdBy = 0;
protected Account $createdBy;
/**
* Created.
@ -115,7 +118,7 @@ class Task implements \JsonSerializable
* @var null|\DateTime
* @since 1.0.0
*/
protected $start = null;
protected ?\DateTime $start = null;
/**
* Due.
@ -123,7 +126,7 @@ class Task implements \JsonSerializable
* @var null|\DateTime
* @since 1.0.0
*/
protected $due = null;
protected ?\DateTime $due = null;
/**
* Done.
@ -131,7 +134,7 @@ class Task implements \JsonSerializable
* @var null|\DateTime
* @since 1.0.0
*/
protected $done = null;
protected ?\DateTime $done = null;
/**
* Task elements.
@ -155,7 +158,7 @@ class Task implements \JsonSerializable
* @var Schedule
* @since 1.0.0
*/
protected $schedule = null;
protected Schedule $schedule;
/**
* Priority
@ -180,6 +183,7 @@ class Task implements \JsonSerializable
*/
public function __construct()
{
$this->createdBy = new NullAccount();
$this->createdAt = new \DateTime('now');
$this->schedule = new Schedule();
$this->start = new \DateTime('now');
@ -298,7 +302,7 @@ class Task implements \JsonSerializable
/**
* Get all media
*
* @return array<int|\Modules\Media\Models\Media>
* @return Media[]
*
* @since 1.0.0
*/
@ -310,13 +314,13 @@ class Task implements \JsonSerializable
/**
* Add media
*
* @param mixed $media Media to add
* @param Media $media Media to add
*
* @return void
*
* @since 1.0.0
*/
public function addMedia($media) : void
public function addMedia(Media $media) : void
{
$this->media[] = $media;
}
@ -408,7 +412,7 @@ class Task implements \JsonSerializable
*/
public function getCreatedAt() : \DateTime
{
return $this->createdAt ?? new \DateTime();
return $this->createdAt;
}
/**
@ -438,11 +442,11 @@ class Task implements \JsonSerializable
/**
* Get created by
*
* @return int|\phpOMS\Account\Account
* @return Account
*
* @since 1.0.0
*/
public function getCreatedBy()
public function getCreatedBy() : Account
{
return $this->createdBy;
}
@ -450,16 +454,16 @@ class Task implements \JsonSerializable
/**
* Set created by
*
* @param mixed $id Created by
* @param Account $account Created by
*
* @return void
*
* @since 1.0.0
*/
public function setCreatedBy($id) : void
public function setCreatedBy(Account $account) : void
{
$this->createdBy = $id;
$this->schedule->setCreatedBy($id);
$this->createdBy = $account;
$this->schedule->setCreatedBy($account);
}
/**

View File

@ -16,7 +16,8 @@ namespace Modules\Tasks\Models;
use Modules\Admin\Models\Account;
use Modules\Admin\Models\Group;
use Modules\Admin\Models\NullAccount;
use Modules\Media\Models\Media;
use phpOMS\Stdlib\Base\Exception\InvalidEnumValue;
/**
@ -64,10 +65,10 @@ class TaskElement implements \JsonSerializable
/**
* Creator.
*
* @var int|\Modules\Admin\Models\Account
* @var Account
* @since 1.0.0
*/
private $createdBy = 0;
private Account $createdBy;
/**
* Created.
@ -104,7 +105,7 @@ class TaskElement implements \JsonSerializable
/**
* Media.
*
* @var array
* @var Media[]
* @since 1.0.0
*/
private array $media = [];
@ -112,7 +113,7 @@ class TaskElement implements \JsonSerializable
/**
* Accounts who received this task element.
*
* @var array
* @var AccountRelation[]
* @since 1.0.0
*/
protected array $accRelation = [];
@ -120,7 +121,7 @@ class TaskElement implements \JsonSerializable
/**
* Groups who received this task element.
*
* @var array
* @var GroupRelaction[]
* @since 1.0.0
*/
protected array $grpRelation = [];
@ -135,6 +136,7 @@ class TaskElement implements \JsonSerializable
$this->due = new \DateTime('now');
$this->due->modify('+1 day');
$this->createdAt = new \DateTime('now');
$this->createdBy = new NullAccount();
}
/**
@ -160,11 +162,11 @@ class TaskElement implements \JsonSerializable
}
/**
* @return int|\phpOMS\Account\Account
* @return Account
*
* @since 1.0.0
*/
public function getCreatedBy()
public function getCreatedBy() : Account
{
return $this->createdBy;
}
@ -172,13 +174,13 @@ class TaskElement implements \JsonSerializable
/**
* Set created by
*
* @param mixed $creator Creator
* @param Account $creator Creator
*
* @return void
*
* @since 1.0.0
*/
public function setCreatedBy($creator) : void
public function setCreatedBy(Account $creator) : void
{
$this->createdBy = $creator;
}
@ -186,7 +188,7 @@ class TaskElement implements \JsonSerializable
/**
* Get all media
*
* @return array
* @return Media[]
*
* @since 1.0.0
*/
@ -198,13 +200,13 @@ class TaskElement implements \JsonSerializable
/**
* Add media
*
* @param mixed $media Media to add
* @param Media $media Media to add
*
* @return void
*
* @since 1.0.0
*/
public function addMedia($media) : void
public function addMedia(Media $media) : void
{
$this->media[] = $media;
}
@ -321,7 +323,7 @@ class TaskElement implements \JsonSerializable
/**
* Get to
*
* @return array<RelationAbstract>
* @return RelationAbstract[]
*
* @since 1.0.0
*/
@ -443,7 +445,7 @@ class TaskElement implements \JsonSerializable
/**
* Add to
*
* @param mixed $to To
* @param Group|Account $to To
*
* @return void
*
@ -453,7 +455,7 @@ class TaskElement implements \JsonSerializable
{
if ($to instanceof Group) {
$this->addGroupTo($to);
} elseif (($to instanceof Account) || \is_int($to)) {
} elseif (($to instanceof Account)) {
$this->addAccountTo($to);
}
}
@ -461,15 +463,15 @@ class TaskElement implements \JsonSerializable
/**
* Add group as to
*
* @param int|Group $group Group
* @param Group $group Group
*
* @return void
*
* @since 1.0.0
*/
public function addGroupTo($group) : void
public function addGroupTo(Group $group) : void
{
$groupId = \is_int($group) ? $group : $group->getId();
$groupId = $group->getId();
foreach ($this->grpRelation as $grp) {
$grpId = !\is_int($grp->getRelation()) ? $grp->getRelation()->getId() : $grp->getRelation();
@ -485,15 +487,15 @@ class TaskElement implements \JsonSerializable
/**
* Add account as to
*
* @param int|Account $account Account
* @param Account $account Account
*
* @return void
*
* @since 1.0.0
*/
public function addAccountTo($account) : void
public function addAccountTo(Account $account) : void
{
$accountId = \is_int($account) ? $account : $account->getId();
$accountId = $account->getId();
foreach ($this->accRelation as $acc) {
$accId = !\is_int($acc->getRelation()) ? $acc->getRelation()->getId() : $acc->getRelation();
@ -509,7 +511,7 @@ class TaskElement implements \JsonSerializable
/**
* Get cc
*
* @return array<RelationAbstract>
* @return RelationAbstract[]
*
* @since 1.0.0
*/
@ -535,7 +537,7 @@ class TaskElement implements \JsonSerializable
/**
* Add cc
*
* @param mixed $cc CC
* @param Group|Account $cc CC
*
* @return void
*
@ -545,7 +547,7 @@ class TaskElement implements \JsonSerializable
{
if ($cc instanceof Group) {
$this->addGroupCC($cc);
} elseif (($cc instanceof Account) || \is_int($cc)) {
} elseif (($cc instanceof Account)) {
$this->addAccountCC($cc);
}
}
@ -553,15 +555,15 @@ class TaskElement implements \JsonSerializable
/**
* Add group as cc
*
* @param int|Group $group Group
* @param Group $group Group
*
* @return void
*
* @since 1.0.0
*/
public function addGroupCC($group) : void
public function addGroupCC(Group $group) : void
{
$groupId = \is_int($group) ? $group : $group->getId();
$groupId = $group->getId();
foreach ($this->grpRelation as $grp) {
$grpId = !\is_int($grp->getRelation()) ? $grp->getRelation()->getId() : $grp->getRelation();
@ -577,15 +579,15 @@ class TaskElement implements \JsonSerializable
/**
* Add account as cc
*
* @param int|Account $account Account
* @param Account $account Account
*
* @return void
*
* @since 1.0.0
*/
public function addAccountCC($account) : void
public function addAccountCC(Account $account) : void
{
$accountId = \is_int($account) ? $account : $account->getId();
$accountId = $account->getId();
foreach ($this->accRelation as $acc) {
$accId = !\is_int($acc->getRelation()) ? $acc->getRelation()->getId() : $acc->getRelation();

View File

@ -42,7 +42,7 @@ final class TaskElementMapper extends DataMapperAbstract
'task_element_priority' => ['name' => 'task_element_priority', 'type' => 'int', 'internal' => 'priority'],
'task_element_due' => ['name' => 'task_element_due', 'type' => 'DateTime', 'internal' => 'due'],
'task_element_task' => ['name' => 'task_element_task', 'type' => 'int', 'internal' => 'task'],
'task_element_created_by' => ['name' => 'task_element_created_by', 'type' => 'int', 'internal' => 'createdBy'],
'task_element_created_by' => ['name' => 'task_element_created_by', 'type' => 'int', 'internal' => 'createdBy', 'readonly' => true],
'task_element_created_at' => ['name' => 'task_element_created_at', 'type' => 'DateTime', 'internal' => 'createdAt', 'readonly' => true],
];

View File

@ -50,7 +50,7 @@ final class TaskMapper extends DataMapperAbstract
'task_done' => ['name' => 'task_done', 'type' => 'DateTime', 'internal' => 'done'],
'task_schedule' => ['name' => 'task_schedule', 'type' => 'int', 'internal' => 'schedule'],
'task_start' => ['name' => 'task_start', 'type' => 'DateTime', 'internal' => 'start'],
'task_created_by' => ['name' => 'task_created_by', 'type' => 'int', 'internal' => 'createdBy'],
'task_created_by' => ['name' => 'task_created_by', 'type' => 'int', 'internal' => 'createdBy', 'readonly' => true],
'task_created_at' => ['name' => 'task_created_at', 'type' => 'DateTime', 'internal' => 'createdAt', 'readonly' => true],
];
@ -325,6 +325,8 @@ final class TaskMapper extends DataMapperAbstract
->where(self::$table . '.task_status', '=', TaskStatus::OPEN)
->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user);
$t = $query->toSql();
$sth = self::$db->con->prepare($query->toSql());
$sth->execute();