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

View File

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

View File

@ -16,7 +16,8 @@ namespace Modules\Tasks\Models;
use Modules\Admin\Models\Account; use Modules\Admin\Models\Account;
use Modules\Admin\Models\Group; use Modules\Admin\Models\Group;
use Modules\Admin\Models\NullAccount;
use Modules\Media\Models\Media;
use phpOMS\Stdlib\Base\Exception\InvalidEnumValue; use phpOMS\Stdlib\Base\Exception\InvalidEnumValue;
/** /**
@ -64,10 +65,10 @@ class TaskElement implements \JsonSerializable
/** /**
* Creator. * Creator.
* *
* @var int|\Modules\Admin\Models\Account * @var Account
* @since 1.0.0 * @since 1.0.0
*/ */
private $createdBy = 0; private Account $createdBy;
/** /**
* Created. * Created.
@ -104,7 +105,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Media. * Media.
* *
* @var array * @var Media[]
* @since 1.0.0 * @since 1.0.0
*/ */
private array $media = []; private array $media = [];
@ -112,7 +113,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Accounts who received this task element. * Accounts who received this task element.
* *
* @var array * @var AccountRelation[]
* @since 1.0.0 * @since 1.0.0
*/ */
protected array $accRelation = []; protected array $accRelation = [];
@ -120,7 +121,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Groups who received this task element. * Groups who received this task element.
* *
* @var array * @var GroupRelaction[]
* @since 1.0.0 * @since 1.0.0
*/ */
protected array $grpRelation = []; protected array $grpRelation = [];
@ -135,6 +136,7 @@ class TaskElement implements \JsonSerializable
$this->due = new \DateTime('now'); $this->due = new \DateTime('now');
$this->due->modify('+1 day'); $this->due->modify('+1 day');
$this->createdAt = new \DateTime('now'); $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 * @since 1.0.0
*/ */
public function getCreatedBy() public function getCreatedBy() : Account
{ {
return $this->createdBy; return $this->createdBy;
} }
@ -172,13 +174,13 @@ class TaskElement implements \JsonSerializable
/** /**
* Set created by * Set created by
* *
* @param mixed $creator Creator * @param Account $creator Creator
* *
* @return void * @return void
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public function setCreatedBy($creator) : void public function setCreatedBy(Account $creator) : void
{ {
$this->createdBy = $creator; $this->createdBy = $creator;
} }
@ -186,7 +188,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Get all media * Get all media
* *
* @return array * @return Media[]
* *
* @since 1.0.0 * @since 1.0.0
*/ */
@ -198,13 +200,13 @@ class TaskElement implements \JsonSerializable
/** /**
* Add media * Add media
* *
* @param mixed $media Media to add * @param Media $media Media to add
* *
* @return void * @return void
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public function addMedia($media) : void public function addMedia(Media $media) : void
{ {
$this->media[] = $media; $this->media[] = $media;
} }
@ -321,7 +323,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Get to * Get to
* *
* @return array<RelationAbstract> * @return RelationAbstract[]
* *
* @since 1.0.0 * @since 1.0.0
*/ */
@ -443,7 +445,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Add to * Add to
* *
* @param mixed $to To * @param Group|Account $to To
* *
* @return void * @return void
* *
@ -453,7 +455,7 @@ class TaskElement implements \JsonSerializable
{ {
if ($to instanceof Group) { if ($to instanceof Group) {
$this->addGroupTo($to); $this->addGroupTo($to);
} elseif (($to instanceof Account) || \is_int($to)) { } elseif (($to instanceof Account)) {
$this->addAccountTo($to); $this->addAccountTo($to);
} }
} }
@ -461,15 +463,15 @@ class TaskElement implements \JsonSerializable
/** /**
* Add group as to * Add group as to
* *
* @param int|Group $group Group * @param Group $group Group
* *
* @return void * @return void
* *
* @since 1.0.0 * @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) { foreach ($this->grpRelation as $grp) {
$grpId = !\is_int($grp->getRelation()) ? $grp->getRelation()->getId() : $grp->getRelation(); $grpId = !\is_int($grp->getRelation()) ? $grp->getRelation()->getId() : $grp->getRelation();
@ -485,15 +487,15 @@ class TaskElement implements \JsonSerializable
/** /**
* Add account as to * Add account as to
* *
* @param int|Account $account Account * @param Account $account Account
* *
* @return void * @return void
* *
* @since 1.0.0 * @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) { foreach ($this->accRelation as $acc) {
$accId = !\is_int($acc->getRelation()) ? $acc->getRelation()->getId() : $acc->getRelation(); $accId = !\is_int($acc->getRelation()) ? $acc->getRelation()->getId() : $acc->getRelation();
@ -509,7 +511,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Get cc * Get cc
* *
* @return array<RelationAbstract> * @return RelationAbstract[]
* *
* @since 1.0.0 * @since 1.0.0
*/ */
@ -535,7 +537,7 @@ class TaskElement implements \JsonSerializable
/** /**
* Add cc * Add cc
* *
* @param mixed $cc CC * @param Group|Account $cc CC
* *
* @return void * @return void
* *
@ -545,7 +547,7 @@ class TaskElement implements \JsonSerializable
{ {
if ($cc instanceof Group) { if ($cc instanceof Group) {
$this->addGroupCC($cc); $this->addGroupCC($cc);
} elseif (($cc instanceof Account) || \is_int($cc)) { } elseif (($cc instanceof Account)) {
$this->addAccountCC($cc); $this->addAccountCC($cc);
} }
} }
@ -553,15 +555,15 @@ class TaskElement implements \JsonSerializable
/** /**
* Add group as cc * Add group as cc
* *
* @param int|Group $group Group * @param Group $group Group
* *
* @return void * @return void
* *
* @since 1.0.0 * @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) { foreach ($this->grpRelation as $grp) {
$grpId = !\is_int($grp->getRelation()) ? $grp->getRelation()->getId() : $grp->getRelation(); $grpId = !\is_int($grp->getRelation()) ? $grp->getRelation()->getId() : $grp->getRelation();
@ -577,15 +579,15 @@ class TaskElement implements \JsonSerializable
/** /**
* Add account as cc * Add account as cc
* *
* @param int|Account $account Account * @param Account $account Account
* *
* @return void * @return void
* *
* @since 1.0.0 * @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) { foreach ($this->accRelation as $acc) {
$accId = !\is_int($acc->getRelation()) ? $acc->getRelation()->getId() : $acc->getRelation(); $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_priority' => ['name' => 'task_element_priority', 'type' => 'int', 'internal' => 'priority'],
'task_element_due' => ['name' => 'task_element_due', 'type' => 'DateTime', 'internal' => 'due'], 'task_element_due' => ['name' => 'task_element_due', 'type' => 'DateTime', 'internal' => 'due'],
'task_element_task' => ['name' => 'task_element_task', 'type' => 'int', 'internal' => 'task'], '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], '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_done' => ['name' => 'task_done', 'type' => 'DateTime', 'internal' => 'done'],
'task_schedule' => ['name' => 'task_schedule', 'type' => 'int', 'internal' => 'schedule'], 'task_schedule' => ['name' => 'task_schedule', 'type' => 'int', 'internal' => 'schedule'],
'task_start' => ['name' => 'task_start', 'type' => 'DateTime', 'internal' => 'start'], '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], '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) ->where(self::$table . '.task_status', '=', TaskStatus::OPEN)
->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user); ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user);
$t = $query->toSql();
$sth = self::$db->con->prepare($query->toSql()); $sth = self::$db->con->prepare($query->toSql());
$sth->execute(); $sth->execute();