diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 1e233ce..a4d688d 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -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'))); diff --git a/Models/NullTask.php b/Models/NullTask.php index ff72358..e57ca77 100644 --- a/Models/NullTask.php +++ b/Models/NullTask.php @@ -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; + } } diff --git a/Models/Task.php b/Models/Task.php index b7d523e..8b145c0 100644 --- a/Models/Task.php +++ b/Models/Task.php @@ -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 + * @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); } /** diff --git a/Models/TaskElement.php b/Models/TaskElement.php index 1907292..ba4dc25 100644 --- a/Models/TaskElement.php +++ b/Models/TaskElement.php @@ -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 + * @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 + * @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(); diff --git a/Models/TaskElementMapper.php b/Models/TaskElementMapper.php index 0481a1e..5f22ad5 100644 --- a/Models/TaskElementMapper.php +++ b/Models/TaskElementMapper.php @@ -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], ]; diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php index f72aa63..8e13139 100644 --- a/Models/TaskMapper.php +++ b/Models/TaskMapper.php @@ -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();