vendor/ibexa/personalization/src/lib/Event/Listener/ModifyModelEditRightSidebarMenuListener.php line 40

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\Personalization\Event\Listener;
  8. use Ibexa\AdminUi\Menu\Event\ConfigureMenuEvent;
  9. use Ibexa\Personalization\Menu\ModelEditRightSidebarBuilder;
  10. use Ibexa\Personalization\Service\ModelBuild\ModelBuildServiceInterface;
  11. use Ibexa\Personalization\Value\ModelBuild\State;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. final class ModifyModelEditRightSidebarMenuListener
  14. {
  15.     private const DISABLE_BUTTONS = [
  16.         ModelEditRightSidebarBuilder::ITEM__SAVE,
  17.         ModelEditRightSidebarBuilder::ITEM__SAVE_AND_CLOSE,
  18.         ModelEditRightSidebarBuilder::ITEM__TRIGGER_MODEL_BUILD,
  19.     ];
  20.     private ModelBuildServiceInterface $modelBuildService;
  21.     private RequestStack $requestStack;
  22.     public function __construct(
  23.         ModelBuildServiceInterface $modelBuildService,
  24.         RequestStack $requestStack
  25.     ) {
  26.         $this->modelBuildService $modelBuildService;
  27.         $this->requestStack $requestStack;
  28.     }
  29.     /**
  30.      * @param \Ibexa\AdminUi\Menu\Event\ConfigureMenuEvent $event
  31.      */
  32.     public function renderMenu(ConfigureMenuEvent $event): void
  33.     {
  34.         $menu $event->getMenu();
  35.         $request $this->requestStack->getCurrentRequest();
  36.         if (null === $request) {
  37.             return;
  38.         }
  39.         $requestAttributes $request->attributes;
  40.         if (
  41.             !$requestAttributes->has('customerId')
  42.             && !$requestAttributes->has('referenceCode')
  43.         ) {
  44.             return;
  45.         }
  46.         $customerId = (int) $requestAttributes->get('customerId');
  47.         $referenceCode $requestAttributes->get('referenceCode');
  48.         $modelBuildStatus $this->modelBuildService->getModelBuildStatus($customerId$referenceCode);
  49.         if (null === $modelBuildStatus) {
  50.             return;
  51.         }
  52.         $lastBuildReport $modelBuildStatus->getBuildReports()->getLastBuildReport();
  53.         if (
  54.             null === $lastBuildReport
  55.             || !in_array($lastBuildReport->getState(), State::BUILD_IN_PROGRESS_STATEStrue)) {
  56.             return;
  57.         }
  58.         foreach ($menu->getChildren() as $identifier => $child) {
  59.             if (in_array($identifierself::DISABLE_BUTTONStrue)) {
  60.                 $child->setAttribute('disabled'true);
  61.             }
  62.         }
  63.     }
  64. }