src/AppBundle/EventListener/TestListener.php line 23

Open in your IDE?
  1. <?php
  2. namespace AppBundle\EventListener;
  3. use Pimcore\Event\DataObjectEvents;
  4. use Pimcore\Event\Model\DataObjectEvent;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. class TestListener implements EventSubscriberInterface
  7. {
  8.     /**
  9.      * @inheritDoc
  10.      */
  11.     public static function getSubscribedEvents()
  12.     {
  13.         return [
  14.             DataObjectEvents::PRE_UPDATE => 'onObjectPreUpdate',
  15.             \Pimcore\Event\AdminEvents::RESOLVE_ELEMENT_ADMIN_STYLE => 'onMyUIChange',
  16.             \Pimcore\Event\AdminEvents::OBJECT_GET_PRE_SEND_DATA => 'onCustomLayout'
  17.         ];
  18.     }
  19.     public function onObjectPreUpdate(DataObjectEvent $event)
  20.     {
  21.         // do with the object whatever you want ;-)
  22.         $object $event->getObject();
  23.     }
  24.     public function onMyUIChange(\Pimcore\Event\Admin\ElementAdminStyleEvent $event)
  25.     {
  26.         $element $event->getElement();
  27.         // decide which default styles you want to override
  28.         if ($element instanceof \Pimcore\Model\DataObject\Design) {
  29.             $event->setAdminStyle(new \AppBundle\Model\AdminStyle\Design($element));
  30.         } else if ($element instanceof \Pimcore\Model\DataObject\Variante) {
  31.             $event->setAdminStyle(new \AppBundle\Model\AdminStyle\Variante($element));
  32.         } else if ($element instanceof \Pimcore\Model\DataObject\Prova) {
  33.             $event->setAdminStyle(new \AppBundle\Model\AdminStyle\Prova($element));
  34.         } else if ($element instanceof \Pimcore\Model\DataObject\Provael) {
  35.             $event->setAdminStyle(new \AppBundle\Model\AdminStyle\Provael($element));
  36.         } else if ($element instanceof \Pimcore\Model\DataObject\Prodotto) {
  37.             $event->setAdminStyle(new \AppBundle\Model\AdminStyle\Prodotto($element));
  38.         } else if ($element instanceof \Pimcore\Model\DataObject\Doccommerciale) {
  39.             $event->setAdminStyle(new \AppBundle\Model\AdminStyle\DocCommerciale($element));
  40.         }
  41.     }
  42.     public function onCustomLayout(\Symfony\Component\EventDispatcher\GenericEvent $event)
  43.     {
  44.         $object $event->getArgument("object"); //= $event->getElement();
  45.         $data $event->getArgument("data");
  46.         // decide which default styles you want to override
  47.         
  48.         /*if ($object instanceof \Pimcore\Model\DataObject\Variante) {
  49.             if (is_null($object->getVirtual())) {
  50.                 $data = $this->doModifyCustomLayouts($data, $object, 3, [5,4]);
  51.             } else if ($object->getVirtual()==1) {
  52.                 $data = $this->doModifyCustomLayouts($data, $object, 5, [3,4]);
  53.             }else if ($object->getType()==\Pimcore\Model\DataObject\AbstractObject::OBJECT_TYPE_VARIANT) {
  54.                 $data = $this->doModifyCustomLayouts($data, $object, 4, [3,5]);
  55.             }
  56.         }
  57.             
  58.         $event->setArgument("data", $data);*/
  59.     }
  60.     /*
  61.     *   Helper 
  62.     */
  63.     private function doModifyCustomLayouts($data$object$customLayoutToSelect null$layoutsToRemove = []) {
  64.         
  65.         if($customLayoutToSelect != null) {
  66.             //set current layout to subcategory layout
  67.             $data['currentLayoutId'] = $customLayoutToSelect;
  68.             $customLayout = \Pimcore\Model\DataObject\ClassDefinition\CustomLayout::getById($customLayoutToSelect);
  69.             $data['layout'] = $customLayout->getLayoutDefinitions();
  70.             \Pimcore\Model\DataObject\Service::enrichLayoutDefinition($data["layout"], $object);            
  71.         }
  72.         
  73.         if(!empty($layoutsToRemove)) {
  74.             //remove master layout from valid layouts
  75.             $validLayouts $data["validLayouts"];
  76.             foreach($validLayouts as $key => $validLayout) {
  77.                 if(in_array($validLayout['id'], $layoutsToRemove)) {
  78.                     unset($validLayouts[$key]);
  79.                 }
  80.             }
  81.             $data["validLayouts"] = array_values($validLayouts);            
  82.         }
  83.         return $data
  84.     }
  85. }