vendor/pimcore/portal-engine/src/EventSubscriber/AdminSettingsSubscriber.php line 111

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under following license:
  6.  * - Pimcore Commercial License (PCL)
  7.  *
  8.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  9.  *  @license    http://www.pimcore.org/license     PCL
  10.  */
  11. namespace Pimcore\Bundle\PortalEngineBundle\EventSubscriber;
  12. use Pimcore\Bundle\AdminBundle\Event\AdminEvents;
  13. use Pimcore\Bundle\AdminBundle\Event\IndexActionSettingsEvent;
  14. use Pimcore\Bundle\PortalEngineBundle\Service\Collection\AdminCollectionService;
  15. use Pimcore\Bundle\PortalEngineBundle\Service\SearchIndex\IndexUpdateService;
  16. use Pimcore\Bundle\PortalEngineBundle\Service\SearchIndex\LanguageService;
  17. use Pimcore\Localization\LocaleServiceInterface;
  18. use Pimcore\Security\User\TokenStorageUserResolver;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Symfony\Component\EventDispatcher\GenericEvent;
  21. class AdminSettingsSubscriber implements EventSubscriberInterface
  22. {
  23.     /**
  24.      * @var array
  25.      */
  26.     protected $possiblePortalDomains = [];
  27.     protected IndexUpdateService $indexUpdateService;
  28.     protected LanguageService $languageService;
  29.     protected LocaleServiceInterface $localeService;
  30.     protected AdminCollectionService $adminCollectionService;
  31.     protected TokenStorageUserResolver $userResolver;
  32.     public function __construct(
  33.         array $possiblePortalDomains,
  34.         IndexUpdateService $indexUpdateService,
  35.         LanguageService $languageService,
  36.         LocaleServiceInterface $localeService,
  37.         AdminCollectionService $adminCollectionService,
  38.         TokenStorageUserResolver $userResolver
  39.     ) {
  40.         $explodedDomains = [];
  41.         foreach ($possiblePortalDomains as $domain) {
  42.             $explodedDomains array_merge($explodedDomainsexplode(','$domain));
  43.         }
  44.         $this->possiblePortalDomains $explodedDomains;
  45.         $this->indexUpdateService $indexUpdateService;
  46.         $this->languageService $languageService;
  47.         $this->localeService $localeService;
  48.         $this->adminCollectionService $adminCollectionService;
  49.         $this->userResolver $userResolver;
  50.     }
  51.     /**
  52.      * @return array
  53.      */
  54.     public static function getSubscribedEvents()
  55.     {
  56.         return [
  57.             //TODO replace with AdminEvents constant when support for Pimcore 10.6 will be finished
  58.             'pimcore.system.settings.saveAction' => 'updateSearchIndex',
  59.             AdminEvents::INDEX_ACTION_SETTINGS => [['getSettings'], ['checkAdminUserAssignment']]
  60.         ];
  61.     }
  62.     public function getSettings(IndexActionSettingsEvent $event)
  63.     {
  64.         if (!empty($this->possiblePortalDomains)) {
  65.             $event->addSetting('portalEngine', ['possiblePortalDomains' => $this->possiblePortalDomains]);
  66.         }
  67.     }
  68.     public function updateSearchIndex(GenericEvent $event)
  69.     {
  70.         $arguments $event->getArguments();
  71.         $currentLanguages $arguments['existingValues']['general']['valid_languages'];
  72.         $newLanguageValues explode(','$arguments['values']['general.validLanguages']);
  73.         $newLanguages = [];
  74.         foreach ($newLanguageValues as $language) {
  75.             if ($this->localeService->isLocale($language)) {
  76.                 $newLanguages[] = $language;
  77.             }
  78.         }
  79.         if (empty($currentLanguages) && !empty($newLanguages)) {
  80.             $this->languageService->setValidLanguages($newLanguages);
  81.             $this->indexUpdateService->updateAll();
  82.             return;
  83.         }
  84.         sort($currentLanguages);
  85.         sort($newLanguages);
  86.         if ($currentLanguages !== $newLanguages) {
  87.             $this->languageService->setValidLanguages($newLanguages);
  88.             $this->indexUpdateService->updateAll();
  89.         }
  90.     }
  91.     public function checkAdminUserAssignment(IndexActionSettingsEvent $event)
  92.     {
  93.         $settings $event->getSettings()['portalEngine'] ?? [];
  94.         try {
  95.             $this->adminCollectionService->applyPortalUserToSecurityService($this->userResolver->getUserProxy()->getUser());
  96.             $settings['canAddNewCollection'] = true;
  97.         } catch (\Exception $e) {
  98.             if ($this->userResolver->getUser()->isAdmin()) {
  99.                 $settings['canAddNewCollection'] = false;
  100.             }
  101.         }
  102.         $event->addSetting('portalEngine'$settings);
  103.     }
  104. }