From d4f3bbca029cd51d1e794f8f6503f66bf44868a3 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Wed, 22 May 2019 07:47:03 +0200 Subject: [PATCH] Improved tag module and media virtual paths --- Models/Task.php | 77 +++++++++++++++++++++++++++++++++++++++++++ Models/TaskMapper.php | 6 ++++ info.json | 3 +- 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/Models/Task.php b/Models/Task.php index 4f2e78c..dd98e85 100644 --- a/Models/Task.php +++ b/Models/Task.php @@ -15,6 +15,8 @@ declare(strict_types=1); namespace Modules\Tasks\Models; use Modules\Calendar\Models\Schedule; +use Modules\Tag\Models\Tag; +use Modules\Tag\Models\NullTag; use phpOMS\Stdlib\Base\Exception\InvalidEnumValue; /** @@ -140,6 +142,14 @@ class Task implements \JsonSerializable */ protected $taskElements = []; + /** + * Task elements. + * + * @var Tag[] + * @since 1.0.0 + */ + protected $tags = []; + /** * Schedule * @@ -266,6 +276,26 @@ class Task implements \JsonSerializable return $key; } + /** + * Adding new tag. + * + * @param Tag $tag Tag + * + * @return int + * + * @since 1.0.0 + */ + public function addTag(Tag $tag) : int + { + $this->tags[] = $tag; + + \end($this->tags); + $key = (int) \key($this->tags); + \reset($this->tags); + + return $key; + } + /** * Get all media * @@ -647,6 +677,52 @@ class Task implements \JsonSerializable return false; } + /** + * Remove Tag from list. + * + * @param int $id Tag + * + * @return bool + * + * @since 1.0.0 + */ + public function removeTag($id) : bool + { + if (isset($this->tags[$id])) { + unset($this->tags[$id]); + + return true; + } + + return false; + } + + /** + * Get task elements. + * + * @return Tag[] + * + * @since 1.0.0 + */ + public function getTags() : array + { + return $this->tags; + } + + /** + * Get task elements. + * + * @param int $id Element id + * + * @return Tag + * + * @since 1.0.0 + */ + public function getTag(int $id) : Tag + { + return $this->tags[$id] ?? new NullTag(); + } + /** * Get task elements. * @@ -728,6 +804,7 @@ class Task implements \JsonSerializable 'due' => $this->due->format('Y-m-d H:i:s'), 'done' => (!isset($this->done) ? null : $this->done->format('Y-m-d H:i:s')), 'elements' => $this->taskElements, + 'tags' => $this->tags, ]; } diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php index 81bda66..cf59f3a 100644 --- a/Models/TaskMapper.php +++ b/Models/TaskMapper.php @@ -74,6 +74,12 @@ final class TaskMapper extends DataMapperAbstract 'dst' => 'task_media_src', 'src' => 'task_media_dst', ], + 'tags' => [ + 'mapper' => MediaMapper::class, + 'table' => 'task_tag', + 'dst' => 'task_tag_src', + 'src' => 'task_tag_dst', + ], ]; /** diff --git a/info.json b/info.json index 428d4fd..37ba503 100644 --- a/info.json +++ b/info.json @@ -20,7 +20,8 @@ "Admin": "1.0.0", "Calendar": "1.0.0", "Media": "1.0.0", - "Editor": "1.0.0" + "Editor": "1.0.0", + "Tag": "1.0.0" }, "providing": { "Navigation": "*"