Skip to content
Snippets Groups Projects
Select Git revision
  • daf1d3dfa69891a07895c2416d75c62edc4aa98b
  • main default protected
  • v0.2.15
  • v0.2.14
  • v0.2.13
  • v0.2.12
  • v0.2.11
  • v0.2.10
  • v0.2.9
  • v0.2.8
  • v0.2.6
  • v0.2.7
  • v0.2.5
  • v0.2.4
  • v0.2.3
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.6
  • v0.1.5
  • v0.1.4
  • v0.1.3
22 results

PersonCollectionDataProvider.php

Blame
  • PersonCollectionDataProvider.php 1.67 KiB
    <?php
    
    declare(strict_types=1);
    
    namespace Dbp\Relay\BasePersonBundle\DataProvider;
    
    use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
    use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
    use Dbp\Relay\BasePersonBundle\API\PersonProviderInterface;
    use Dbp\Relay\BasePersonBundle\Entity\Person;
    use Dbp\Relay\CoreBundle\LocalData\LocalData;
    use Dbp\Relay\CoreBundle\Pagination\Pagination;
    use Dbp\Relay\CoreBundle\Pagination\Paginator;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    
    final class PersonCollectionDataProvider extends AbstractController implements CollectionDataProviderInterface, RestrictedDataProviderInterface
    {
        public const MAX_NUM_ITEMS_PER_PAGE_DEFAULT = 50;
    
        /** @var PersonProviderInterface */
        private $personProvider;
    
        public function __construct(PersonProviderInterface $personProvider)
        {
            $this->personProvider = $personProvider;
        }
    
        public function supports(string $resourceClass, string $operationName = null, array $context = []): bool
        {
            return Person::class === $resourceClass;
        }
    
        public function getCollection(string $resourceClass, string $operationName = null, array $context = []): Paginator
        {
            $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
    
            $filters = $context['filters'] ?? [];
            $options = [];
    
            if ($search = ($filters['search'] ?? null)) {
                $options[Person::SEARCH_PARAMETER_NAME] = $search;
            }
    
            LocalData::addOptions($options, $filters);
            Pagination::addOptions($options, $filters, self::MAX_NUM_ITEMS_PER_PAGE_DEFAULT);
    
            return $this->personProvider->getPersons($options);
        }
    }