src/AppBundle/EventListener/AdminCustomLayoutDisplayListener.php line 22

Open in your IDE?
  1. <?php
  2. namespace AppBundle\EventListener;
  3. use Pimcore\Model\DataObject\ClassDefinition\CustomLayout;
  4. use Pimcore\Model\DataObject\Pattern;
  5. use Pimcore\Model\DataObject\Service;
  6. use Symfony\Component\EventDispatcher\GenericEvent;
  7. class AdminCustomLayoutDisplayListener
  8. {
  9.     const DEFAULT_LAYOUT_ID 0;
  10.     const HER_LAYOUT_ID 'LV_HerLayout';
  11.     const WT_LAYOUT_ID 'LV_WtLayout';
  12.     const SNK_LAYOUT_ID 'LV_SnkLayout';
  13.     /**
  14.      * @param GenericEvent $event
  15.      */
  16.     public function selectCustomLayout(GenericEvent $event)
  17.     {
  18.         $object $event->getArgument("object");
  19.         if ($object instanceof Pattern && in_array($object->getTwistProcess(), ['Heritage''World-Tour''Sneaker'])) {
  20.             //data element that is send to Pimcore backend UI
  21.             $data $event->getArgument("data");
  22.             switch ($object->getTwistProcess()) {
  23.                 case "Heritage":
  24.                     $data $this->doModifyCustomLayouts($data$objectself::HER_LAYOUT_ID, [self::DEFAULT_LAYOUT_IDself::WT_LAYOUT_IDself::SNK_LAYOUT_ID]);
  25.                     break;
  26.                 case "World-Tour":
  27.                     $data $this->doModifyCustomLayouts($data$objectself::WT_LAYOUT_ID, [self::DEFAULT_LAYOUT_IDself::HER_LAYOUT_IDself::SNK_LAYOUT_ID]);
  28.                     break;
  29.                 case "Sneaker":
  30.                     $data $this->doModifyCustomLayouts($data$objectself::SNK_LAYOUT_ID, [self::DEFAULT_LAYOUT_IDself::HER_LAYOUT_IDself::WT_LAYOUT_ID]);
  31.                     break;
  32.                 default:
  33.                     $data $this->doModifyCustomLayouts($data$objectself::DEFAULT_LAYOUT_ID, [self::WT_LAYOUT_IDself::HER_LAYOUT_IDself::SNK_LAYOUT_ID]);
  34.                     break;
  35.             }
  36.             $event->setArgument("data"$data);
  37.         }
  38.     }
  39.     /**
  40.      * @param $data
  41.      * @param $object
  42.      * @param null $customLayoutToSelect
  43.      * @param array $layoutsToRemove
  44.      * @return mixed
  45.      */
  46.     private function doModifyCustomLayouts($data$object$customLayoutToSelect null$layoutsToRemove = [])
  47.     {
  48.         if ($customLayoutToSelect != null) {
  49.             //set current layout to subcategory layout
  50.             $data['currentLayoutId'] = $customLayoutToSelect;
  51.             $customLayout CustomLayout::getById($customLayoutToSelect);
  52.             $data['layout'] = $customLayout->getLayoutDefinitions();
  53.             Service::enrichLayoutDefinition($data["layout"], $object);
  54.         }
  55.         if (!empty($layoutsToRemove)) {
  56.             //remove master layout from valid layouts
  57.             $validLayouts $data["validLayouts"];
  58.             foreach ($validLayouts as $key => $validLayout) {
  59.                 if (in_array($validLayout['id'], $layoutsToRemove)) {
  60.                     unset($validLayouts[$key]);
  61.                 }
  62.             }
  63.             $data["validLayouts"] = array_values($validLayouts);
  64.         }
  65.         return $data;
  66.     }
  67. }