Skip to content
Snippets Groups Projects
Select Git revision
  • 541b81afc24f1a2b67ef7a1e8378d417345b82b3
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

File.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    File.php 2.20 KiB
    <?php
    
    namespace JsonApi\Schemas;
    
    use JsonApi\Routes\Files\Authority as FilesAuthority;
    use Neomerx\JsonApi\Contracts\Schema\ContextInterface;
    use Neomerx\JsonApi\Schema\Link;
    
    class File extends SchemaProvider
    {
        const TYPE = 'files';
    
        const REL_FILE_REFS = 'file-refs';
        const REL_OWNER = 'owner';
    
        public function getId($resource): ?string
        {
            return $resource->getId();
        }
    
        public function getAttributes($resource, ContextInterface $context): iterable
        {
            $attributes = [
                'name' => $resource['name'],
                'mime-type' => $resource['mime_type'],
                'filesize' => (int) $resource['size'],
    
                'mkdate' => date('c', $resource['mkdate']),
                'chdate' => date('c', $resource['chdate']),
            ];
    
            if (!empty($resource['metadata']['url'])) {
                if (FilesAuthority::canUpdateFile($this->currentUser, $resource)) {
                    $attributes['url'] = $resource['metadata']['url'];
                }
            }
    
            return $attributes;
        }
    
        /**
         * @SuppressWarnings(PHPMD.UnusedFormalParameter)
         */
        public function getRelationships($resource, ContextInterface $context): iterable
        {
            $isPrimary = $context->getPosition()->getLevel() === 0;
    
            $relationships = [];
    
            if ($isPrimary) {
                $relationships = $this->addOwnerRelationship($relationships, $resource);
                $relationships = $this->addFileRefsRelationship($relationships, $resource);
            }
    
            return $relationships;
        }
    
        private function addFileRefsRelationship(array $relationships, \File $resource)
        {
            $refs = $resource->refs;
    
            $relationships[self::REL_FILE_REFS] = [
                self::RELATIONSHIP_LINKS_SELF => true,
                self::RELATIONSHIP_DATA => $refs,
            ];
    
            return $relationships;
        }
    
        private function addOwnerRelationship(array $relationships, \File $resource)
        {
            if ($resource->user_id) {
                $relationships[self::REL_OWNER] = [
                    self::RELATIONSHIP_LINKS => [
                        Link::RELATED => $this->createLinkToResource($resource->owner),
                    ],
                ];
            }
    
            return $relationships;
        }
    }