diff options
| author | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
|---|---|---|
| committer | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
| commit | 4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch) | |
| tree | 5c07151ae61276d334e88f6309c30d439a85c12e /lib/classes/JsonApi/Schemas | |
| parent | da0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff) | |
| parent | 97a188592c679890a25c37ab78463add76a52ff7 (diff) | |
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'lib/classes/JsonApi/Schemas')
| -rw-r--r-- | lib/classes/JsonApi/Schemas/Clipboard.php | 81 | ||||
| -rw-r--r-- | lib/classes/JsonApi/Schemas/ClipboardItem.php | 61 | ||||
| -rw-r--r-- | lib/classes/JsonApi/Schemas/File.php | 2 | ||||
| -rw-r--r-- | lib/classes/JsonApi/Schemas/Folder.php | 12 | ||||
| -rw-r--r-- | lib/classes/JsonApi/Schemas/WikiPage.php | 2 |
5 files changed, 155 insertions, 3 deletions
diff --git a/lib/classes/JsonApi/Schemas/Clipboard.php b/lib/classes/JsonApi/Schemas/Clipboard.php new file mode 100644 index 0000000..af90d73 --- /dev/null +++ b/lib/classes/JsonApi/Schemas/Clipboard.php @@ -0,0 +1,81 @@ +<?php +namespace JsonApi\Schemas; + +use Neomerx\JsonApi\Contracts\Schema\ContextInterface; +use Neomerx\JsonApi\Schema\Link; + +final class Clipboard extends SchemaProvider +{ + public const TYPE = 'clipboards'; + public const REL_USER = 'user'; + public const REL_ITEMS = 'clipboard-items'; + + /** + * @param \Clipboard $resource + */ + public function getId($resource): ?string + { + return (string) $resource->id; + } + + /** + * @param \Clipboard $resource + */ + public function getAttributes($resource, ContextInterface $context): iterable + { + return [ + 'name' => $resource->name, + 'handler' => $resource->handler, + 'allows_item_class' => $resource->allowed_item_class, + 'mkdate' => date('c', $resource->mkdate), + 'chdate' => date('c', $resource->chdate), + ]; + } + + /** + * @param \Clipboard $resource + */ + public function getRelationships($resource, ContextInterface $context): iterable + { + $relationships = []; + + $isPrimary = $context->getPosition()->getLevel() === 0; + if ($isPrimary) { + $relationships = $this->getUserRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_USER)); + $relationships = $this->getItemsRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_ITEMS)); + } + + + return $relationships; + } + + private function getUserRelationship(array $relationships, \Clipboard $clipboard, bool $includeData): array + { + $relationships[self::REL_USER] = [ + self::RELATIONSHIP_LINKS => [ + Link::RELATED => $this->createLinkToResource($clipboard->user), + ], + self::RELATIONSHIP_DATA => $includeData ? $clipboard->user : \User::build(['id' => $clipboard->user_id], false), + ]; + + return $relationships; + } + + private function getItemsRelationship(array $relationships, \Clipboard $clipboard, bool $includeData): array + { + if ($includeData) { + $relatedItems = $clipboard->items; + } else { + $relatedItems = $clipboard->items->map(fn($item) => \ClipboardItem::build(['id' => $item->id], false)); + } + + $relationships[self::REL_ITEMS] = [ + self::RELATIONSHIP_LINKS => [ + Link::RELATED => $this->getRelationshipRelatedLink($clipboard, self::REL_ITEMS), + ], + self::RELATIONSHIP_DATA => $relatedItems, + ]; + + return $relationships; + } +} diff --git a/lib/classes/JsonApi/Schemas/ClipboardItem.php b/lib/classes/JsonApi/Schemas/ClipboardItem.php new file mode 100644 index 0000000..9c84823 --- /dev/null +++ b/lib/classes/JsonApi/Schemas/ClipboardItem.php @@ -0,0 +1,61 @@ +<?php +namespace JsonApi\Schemas; + +use Neomerx\JsonApi\Contracts\Schema\ContextInterface; +use Neomerx\JsonApi\Schema\Link; + +final class ClipboardItem extends SchemaProvider +{ + public const TYPE = 'clipboard-items'; + public const REL_CLIPBOARD = 'clipboard'; + + /** + * @param \ClipboardItem $resource + */ + public function getId($resource): ?string + { + return (string) $resource->id; + } + + /** + * @param \ClipboardItem $resource + */ + public function getAttributes($resource, ContextInterface $context): iterable + { + return [ + 'range_id' => $resource->range_id, + 'range_type' => $resource->range_type, + 'name' => $resource->name, + 'mkdate' => date('c', $resource->mkdate), + 'chdate' => date('c', $resource->chdate), + ]; + } + + /** + * @param \ClipboardItem $resource + */ + public function getRelationships($resource, ContextInterface $context): iterable + { + $relationships = []; + + $isPrimary = $context->getPosition()->getLevel() === 0; + if ($isPrimary) { + $relationships = $this->getClipboardRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_CLIPBOARD)); + } + + + return $relationships; + } + + private function getClipboardRelationship(array $relationships, \ClipboardItem $clipboardItem, bool $includeData): array + { + $relationships[self::REL_CLIPBOARD] = [ + self::RELATIONSHIP_LINKS => [ + Link::RELATED => $this->createLinkToResource($clipboardItem->clipboard), + ], + self::RELATIONSHIP_DATA => $includeData ? $clipboardItem->clipboard : \User::build(['id' => $clipboardItem->clipboard_id], false), + ]; + + return $relationships; + } +} diff --git a/lib/classes/JsonApi/Schemas/File.php b/lib/classes/JsonApi/Schemas/File.php index 8eb8046..df0263a 100644 --- a/lib/classes/JsonApi/Schemas/File.php +++ b/lib/classes/JsonApi/Schemas/File.php @@ -29,7 +29,7 @@ class File extends SchemaProvider 'chdate' => date('c', $resource['chdate']), ]; - if ($resource['metadata']['url']) { + if (!empty($resource['metadata']['url'])) { if (FilesAuthority::canUpdateFile($this->currentUser, $resource)) { $attributes['url'] = $resource['metadata']['url']; } diff --git a/lib/classes/JsonApi/Schemas/Folder.php b/lib/classes/JsonApi/Schemas/Folder.php index 2c61cae..4cb277e 100644 --- a/lib/classes/JsonApi/Schemas/Folder.php +++ b/lib/classes/JsonApi/Schemas/Folder.php @@ -169,14 +169,24 @@ class Folder extends SchemaProvider return $relationships; } + /** + * @param \FolderType $resource + */ private function getFilesRelationship(array $relationships, $resource) { + $fileRefs = array_map( + function (\FileType $file): \FileRef { + return $file->getFileRef(); + }, + $resource->getFiles() + ); + $relationships[self::REL_FILE_REFS] = [ self::RELATIONSHIP_LINKS => [ Link::RELATED => $this->getRelationshipRelatedLink($resource, self::REL_FILE_REFS), ], self::RELATIONSHIP_META => [ - 'count' => count($resource->file_refs) + 'count' => count($fileRefs), ], ]; diff --git a/lib/classes/JsonApi/Schemas/WikiPage.php b/lib/classes/JsonApi/Schemas/WikiPage.php index 857666e..f061ecc 100644 --- a/lib/classes/JsonApi/Schemas/WikiPage.php +++ b/lib/classes/JsonApi/Schemas/WikiPage.php @@ -152,7 +152,7 @@ class WikiPage extends SchemaProvider */ private function addAuthorRelationship($relationships, $wiki, $includeList) { - if ($wiki->user_id) { + if ($wiki->user_id && $wiki->user_id !== 'nobody') { $relationships[self::REL_AUTHOR] = [ self::RELATIONSHIP_LINKS => [ Link::RELATED => $this->createLinkToResource($wiki->user), |
