vendor/ibexa/admin-ui/src/lib/UniversalDiscovery/Event/Subscriber/ReadAllowedContentTypes.php line 78

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\AdminUi\UniversalDiscovery\Event\Subscriber;
  8. use Ibexa\AdminUi\UniversalDiscovery\Event\ConfigResolveEvent;
  9. use Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface;
  10. use Ibexa\Contracts\Core\Repository\ContentTypeService;
  11. use Ibexa\Contracts\Core\Repository\PermissionResolver;
  12. use Ibexa\Contracts\Core\Repository\Values\User\Limitation\ContentTypeLimitation;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. final class ReadAllowedContentTypes implements EventSubscriberInterface
  15. {
  16.     /** @var \Ibexa\Contracts\Core\Repository\PermissionResolver */
  17.     private $permissionResolver;
  18.     /** @var \Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface */
  19.     private $permissionChecker;
  20.     /** @var \Ibexa\Contracts\Core\Repository\ContentTypeService */
  21.     private $contentTypeService;
  22.     /** @var string[]|null */
  23.     private $allowedContentTypesIdentifiers null;
  24.     public function __construct(
  25.         PermissionResolver $permissionResolver,
  26.         PermissionCheckerInterface $permissionChecker,
  27.         ContentTypeService $contentTypeService
  28.     ) {
  29.         $this->permissionResolver $permissionResolver;
  30.         $this->permissionChecker $permissionChecker;
  31.         $this->contentTypeService $contentTypeService;
  32.     }
  33.     /**
  34.      * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException
  35.      */
  36.     private function getAllowedContentTypesIdentifiers(array $contentTypesAllowedViaConfig): ?array
  37.     {
  38.         $access $this->permissionResolver->hasAccess('content''read');
  39.         if (!\is_array($access)) {
  40.             return $access ? ($contentTypesAllowedViaConfig ?: null) : [null];
  41.         }
  42.         $restrictedContentTypesIds $this->permissionChecker->getRestrictions($accessContentTypeLimitation::class);
  43.         if (empty($restrictedContentTypesIds)) {
  44.             return $contentTypesAllowedViaConfig ?: null;
  45.         }
  46.         $allowedContentTypesIdentifiers = [];
  47.         $restrictedContentTypes $this->contentTypeService->loadContentTypeList($restrictedContentTypesIds);
  48.         foreach ($restrictedContentTypes as $contentType) {
  49.             $allowedContentTypesIdentifiers[] = $contentType->identifier;
  50.         }
  51.         $allowedContentTypesIdentifiers count($contentTypesAllowedViaConfig)
  52.             ? array_intersect($contentTypesAllowedViaConfig$allowedContentTypesIdentifiers)
  53.             : $allowedContentTypesIdentifiers;
  54.         return empty($allowedContentTypesIdentifiers) ? [null] : array_values($allowedContentTypesIdentifiers);
  55.     }
  56.     public static function getSubscribedEvents(): array
  57.     {
  58.         return [
  59.             ConfigResolveEvent::NAME => ['onUdwConfigResolve', -10],
  60.         ];
  61.     }
  62.     public function onUdwConfigResolve(ConfigResolveEvent $event): void
  63.     {
  64.         $config $event->getConfig();
  65.         $this->allowedContentTypesIdentifiers $this->getAllowedContentTypesIdentifiers(
  66.             $config['allowed_content_types'] ?? []
  67.         );
  68.         $config['allowed_content_types'] = $this->allowedContentTypesIdentifiers;
  69.         $event->setConfig($config);
  70.     }
  71. }
  72. class_alias(ReadAllowedContentTypes::class, 'EzSystems\EzPlatformAdminUi\UniversalDiscovery\Event\Subscriber\ReadAllowedContentTypes');