vendor/ibexa/admin-ui/src/lib/UniversalDiscovery/Event/Subscriber/SectionAssign.php line 60

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. class SectionAssign implements EventSubscriberInterface
  15. {
  16.     /** @var array */
  17.     private $restrictedContentTypes;
  18.     /** @var \Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface */
  19.     private $permissionChecker;
  20.     /** @var \Ibexa\Contracts\Core\Repository\ContentTypeService */
  21.     private $contentTypeService;
  22.     /**
  23.      * @param \Ibexa\Contracts\Core\Repository\PermissionResolver $permissionResolver
  24.      * @param \Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface $permissionChecker
  25.      * @param \Ibexa\Contracts\Core\Repository\ContentTypeService $contentTypeService
  26.      *
  27.      * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException
  28.      */
  29.     public function __construct(
  30.         PermissionResolver $permissionResolver,
  31.         PermissionCheckerInterface $permissionChecker,
  32.         ContentTypeService $contentTypeService
  33.     ) {
  34.         $this->permissionChecker $permissionChecker;
  35.         $this->contentTypeService $contentTypeService;
  36.         $hasAccess $permissionResolver->hasAccess('section''assign');
  37.         $this->restrictedContentTypes is_array($hasAccess) ? $this->getRestrictedContentTypes($hasAccess) : [];
  38.     }
  39.     /**
  40.      * @return array
  41.      */
  42.     public static function getSubscribedEvents(): array
  43.     {
  44.         return [
  45.             ConfigResolveEvent::NAME => ['onUdwConfigResolve'],
  46.         ];
  47.     }
  48.     /**
  49.      * @param \Ibexa\AdminUi\UniversalDiscovery\Event\ConfigResolveEvent $event
  50.      */
  51.     public function onUdwConfigResolve(ConfigResolveEvent $event): void
  52.     {
  53.         $configName $event->getConfigName();
  54.         if ('multiple' !== $configName) {
  55.             return;
  56.         }
  57.         $context $event->getContext();
  58.         if (
  59.             !isset($context['type'])
  60.             || 'section_assign' !== $context['type']
  61.         ) {
  62.             return;
  63.         }
  64.         if ($this->hasContentTypeRestrictions()) {
  65.             $config $event->getConfig();
  66.             $config['allowed_content_types'] = $this->restrictedContentTypes;
  67.             $event->setConfig($config);
  68.         }
  69.     }
  70.     /**
  71.      * @param array $hasAccess
  72.      *
  73.      * @return array
  74.      */
  75.     private function getRestrictedContentTypes(array $hasAccess): array
  76.     {
  77.         $restrictedContentTypesIds $this->permissionChecker->getRestrictions($hasAccessContentTypeLimitation::class);
  78.         if (empty($restrictedContentTypesIds)) {
  79.             return [];
  80.         }
  81.         $restrictedContentTypesIdentifiers = [];
  82.         $restrictedContentTypes $this->contentTypeService->loadContentTypeList($restrictedContentTypesIds);
  83.         foreach ($restrictedContentTypes as $restrictedContentType) {
  84.             $restrictedContentTypesIdentifiers[] = $restrictedContentType->identifier;
  85.         }
  86.         return $restrictedContentTypesIdentifiers;
  87.     }
  88.     /**
  89.      * @return bool
  90.      */
  91.     private function hasContentTypeRestrictions(): bool
  92.     {
  93.         return !empty($this->restrictedContentTypes);
  94.     }
  95. }
  96. class_alias(SectionAssign::class, 'EzSystems\EzPlatformAdminUi\UniversalDiscovery\Event\Subscriber\SectionAssign');