<?php
namespace AppBundle\EventListener;
use Pimcore\Event\DataObjectEvents;
use Pimcore\Event\Model\DataObjectEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class TestListener implements EventSubscriberInterface
{
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
DataObjectEvents::PRE_UPDATE => 'onObjectPreUpdate',
\Pimcore\Event\AdminEvents::RESOLVE_ELEMENT_ADMIN_STYLE => 'onMyUIChange',
\Pimcore\Event\AdminEvents::OBJECT_GET_PRE_SEND_DATA => 'onCustomLayout'
];
}
public function onObjectPreUpdate(DataObjectEvent $event)
{
// do with the object whatever you want ;-)
$object = $event->getObject();
}
public function onMyUIChange(\Pimcore\Event\Admin\ElementAdminStyleEvent $event)
{
$element = $event->getElement();
// decide which default styles you want to override
if ($element instanceof \Pimcore\Model\DataObject\Design) {
$event->setAdminStyle(new \AppBundle\Model\AdminStyle\Design($element));
} else if ($element instanceof \Pimcore\Model\DataObject\Variante) {
$event->setAdminStyle(new \AppBundle\Model\AdminStyle\Variante($element));
} else if ($element instanceof \Pimcore\Model\DataObject\Prova) {
$event->setAdminStyle(new \AppBundle\Model\AdminStyle\Prova($element));
} else if ($element instanceof \Pimcore\Model\DataObject\Provael) {
$event->setAdminStyle(new \AppBundle\Model\AdminStyle\Provael($element));
} else if ($element instanceof \Pimcore\Model\DataObject\Prodotto) {
$event->setAdminStyle(new \AppBundle\Model\AdminStyle\Prodotto($element));
} else if ($element instanceof \Pimcore\Model\DataObject\Doccommerciale) {
$event->setAdminStyle(new \AppBundle\Model\AdminStyle\DocCommerciale($element));
}
}
public function onCustomLayout(\Symfony\Component\EventDispatcher\GenericEvent $event)
{
$object = $event->getArgument("object"); //= $event->getElement();
$data = $event->getArgument("data");
// decide which default styles you want to override
/*if ($object instanceof \Pimcore\Model\DataObject\Variante) {
if (is_null($object->getVirtual())) {
$data = $this->doModifyCustomLayouts($data, $object, 3, [5,4]);
} else if ($object->getVirtual()==1) {
$data = $this->doModifyCustomLayouts($data, $object, 5, [3,4]);
}else if ($object->getType()==\Pimcore\Model\DataObject\AbstractObject::OBJECT_TYPE_VARIANT) {
$data = $this->doModifyCustomLayouts($data, $object, 4, [3,5]);
}
}
$event->setArgument("data", $data);*/
}
/*
* Helper
*/
private function doModifyCustomLayouts($data, $object, $customLayoutToSelect = null, $layoutsToRemove = []) {
if($customLayoutToSelect != null) {
//set current layout to subcategory layout
$data['currentLayoutId'] = $customLayoutToSelect;
$customLayout = \Pimcore\Model\DataObject\ClassDefinition\CustomLayout::getById($customLayoutToSelect);
$data['layout'] = $customLayout->getLayoutDefinitions();
\Pimcore\Model\DataObject\Service::enrichLayoutDefinition($data["layout"], $object);
}
if(!empty($layoutsToRemove)) {
//remove master layout from valid layouts
$validLayouts = $data["validLayouts"];
foreach($validLayouts as $key => $validLayout) {
if(in_array($validLayout['id'], $layoutsToRemove)) {
unset($validLayouts[$key]);
}
}
$data["validLayouts"] = array_values($validLayouts);
}
return $data;
}
}