bundles/PfcPublicationBundle/EventListener/PostAdd/WorkflowDispachListener.php line 26

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: javra
  5.  * Date: 9/1/20
  6.  * Time: 2:40 PM
  7.  */
  8. namespace PfcPublicationBundle\EventListener\PostAdd;
  9. use Cocur\Slugify\Slugify;
  10. use phpDocumentor\Reflection\Types\Boolean;
  11. use Pimcore\Model\DataObject;
  12. use Pimcore\Model\DataObject\ClassDefinition\CustomLayout;
  13. use Pimcore\Model\DataObject\Publication;
  14. use Pimcore\Model\DataObject\Service;
  15. use Pimcore\Model\Element\ValidationException;
  16. use Pimcore\Tool;
  17. use Symfony\Component\EventDispatcher\GenericEvent;
  18. use Symfony\Component\Workflow\Event\Event;
  19. use Pimcore\Event\Model\DataObjectEvent;
  20. class WorkflowDispachListener
  21. {
  22.     public function onPostLoad(GenericEvent $event): void
  23.     {
  24.         DataObject\Product::setGetInheritedValues(true);
  25.         $object $event->getArgument("object");
  26.         $user \Pimcore\Tool\Admin::getCurrentUser();
  27.         $data $event->getArgument("data");
  28.         $data['hasPreview'] = false;
  29.         if ($object instanceof Publication) {
  30.             if ($object->isPublished()) {
  31.                 $data $this->getSettingsData($object$data$event);
  32. //                if (($user->getRoles()[0] == 18 and $object->getStatus() == 'close') or ($user->getRoles()[0] == 18 and $object->getStatus() == "")) {
  33. //                    $customLayoutToSelect = 5;
  34. //                    $data = $this->doModifyCustomLayouts($data, $object, $customLayoutToSelect, [0, 1]);
  35. //                    $event->setArgument("data", $data);
  36. //                } else {
  37. //                    $data = $this->getSettingsData($object, $data, $event);
  38. ////                    $event->setArgument("data", $data);
  39. //                }
  40.             }
  41. //            else {
  42. //                DataObject\Product::setGetInheritedValues(true);
  43. //                $customLayoutToSelect = 5;
  44. //                $data = $this->doModifyCustomLayouts($data, $object, $customLayoutToSelect, [0, 1]);
  45. //                $event->setArgument("data", $data);
  46. //            }
  47.         }
  48.     }
  49.     private function doModifyCustomLayouts($data$object$customLayoutToSelect null$layoutsToRemove = []): array
  50.     {
  51.         if ($customLayoutToSelect != null) {
  52.             //set current layout to subcategory layout
  53.             $data['currentLayoutId'] = $customLayoutToSelect;
  54.             $customLayout CustomLayout::getById($customLayoutToSelect);
  55.             $data['layout'] = $customLayout->getLayoutDefinitions();
  56.             Service::enrichLayoutDefinition($data["layout"], $object);
  57.         }
  58.         if (!empty($layoutsToRemove)) {
  59.             $validLayouts $data["validLayouts"];
  60.             foreach ($validLayouts as $key => $validLayout) {
  61.                 if (in_array($validLayout[6], $layoutsToRemove)) {
  62.                     unset($validLayouts[$key]);
  63.                 }
  64.             }
  65.             $data["validLayouts"] = array_values($validLayouts);
  66.         }
  67.         return $data;
  68.     }
  69.     public function strpos_all($layout$key): array
  70.     {
  71.         $offset 0;
  72.         $allpos = array();
  73.         while (($pos strrpos($layout$key$offset)) !== FALSE) {
  74.             $offset $pos 1;
  75.             $allpos[] = $pos;
  76.         }
  77.         return $allpos;
  78.     }
  79.     private function getSettingsData(Publication $object$data$event): void
  80.     {
  81.         if ($object) {
  82.             $publicationSetting DataObject\PublicationSettings::getByCode("publicationSettings"1);
  83.             if ($publicationSetting) {
  84.                 $publicationSettingObject explode(","trim($publicationSetting->getAttributes()));
  85.                 $publicationObject DataObject\Publication::getById($object->getId(), ['force'=>true]);
  86.                 $publicationObjectFieldDefinitions = (array)$publicationObject->getClass();
  87.                 $setInvisibleData = [];
  88.                 foreach ($publicationObjectFieldDefinitions as $key => $publicationObjectFieldDefinition) {
  89.                     if ($key == 'fieldDefinitions') {
  90.                         foreach ($publicationObjectFieldDefinition as $key_field => $field) {
  91.                             $publicationFieldName $field->getName();
  92.                             if ($publicationFieldName == "publicationName" || $publicationFieldName == "description" || $publicationFieldName == "status" || $publicationFieldName == "product" ||
  93.                                 $publicationFieldName == "en" || $publicationFieldName == "de" || $publicationFieldName == "nl" || $publicationFieldName == "it" ||
  94.                                 $publicationFieldName == "fr" || $publicationFieldName == "es" || $publicationFieldName == "cs" || $publicationFieldName == "da" || $publicationFieldName == "fi" ||
  95.                                 $publicationFieldName == "nb" || $publicationFieldName == "pl" || $publicationFieldName == "ru" || $publicationFieldName == "pt" || $publicationFieldName == "sv") {
  96.                                 continue;
  97.                             } else {
  98.                                 if (!in_array($publicationFieldName$publicationSettingObject)) {
  99.                                     $setName 'set' ucfirst(trim($publicationFieldName));
  100.                                     $object->$setName(filter_var(falseFILTER_VALIDATE_BOOLEAN));
  101.                                     $setInvisibleData[] = $publicationFieldName;
  102.                                 }
  103.                             }
  104.                         }
  105.                     }
  106.                 }
  107.                 $object->setPublished(true);
  108.                 $object->save();
  109.                 $systemLanguages Tool::getValidLanguages();
  110.                 $activeLanguage $this->getActiveLanguage($systemLanguages);
  111.                 $setInvisiblepublicationSettingObject $setInvisibleData;
  112.                 //set Visible to invisible
  113.                 $setDataInvisible \GuzzleHttp\json_encode($data["layout"]);
  114.                 if (is_array($setInvisiblepublicationSettingObject)) {
  115.                     $from_property 'invisible":false';
  116.                     $to_property 'invisible":true';
  117.                     foreach ($setInvisiblepublicationSettingObject as $publ) {
  118.                         $key '"name":"' trim($publ) . '"';
  119.                         $poss $this->strpos_all($setDataInvisible$key);
  120.                         foreach ($poss as $pos) {
  121.                             $layout_str1 substr($setDataInvisible0trim($pos));
  122.                             $layout_str2 substr($setDataInvisibletrim($pos));
  123.                             $layout_str2 preg_replace('/' $from_property '/'$to_property$layout_str21);
  124.                             $setDataInvisible $layout_str1 $layout_str2;
  125.                         }
  126.                     }
  127.                 }
  128.                 $finalData \GuzzleHttp\json_decode($setDataInvisible);
  129.                 $data['layout'] = $finalData;
  130.                 $event->setArgument("data"$data);
  131.                 $layout_str1 null;
  132.                 $layout_str2 null;
  133.                 $setDataInvisible null;
  134.                 $pos null;
  135. //                set Invisible to visible
  136.                 $invisibleData \GuzzleHttp\json_encode($data["layout"]);
  137.                 if (is_array($publicationSettingObject)) {
  138.                     $from_property 'invisible":true';
  139.                     $to_property 'invisible":false';
  140.                     foreach (array_merge($publicationSettingObject$activeLanguage) as $publ) {
  141.                         $key '"name":"' trim($publ) . '"';
  142.                         $poss $this->strpos_all($invisibleData$key);
  143.                         foreach ($poss as $pos) {
  144.                             $layout_str1 substr($invisibleData0trim($pos));
  145.                             $layout_str2 substr($invisibleDatatrim($pos));
  146.                             $layout_str2 preg_replace('/' $from_property '/'$to_property$layout_str21);
  147.                             $invisibleData $layout_str1 $layout_str2;
  148.                         }
  149.                     }
  150.                 }
  151.                 $finalData \GuzzleHttp\json_decode($invisibleData);
  152.                 $data['layout'] = $finalData;
  153.                 $event->setArgument("data"$data);
  154. //            return $data;
  155.             }
  156.         }
  157.     }
  158.     /**
  159.      * @param array $languageNames
  160.      * @param $publicationObject
  161.      * @return array
  162.      */
  163.     public
  164.     function getActiveLanguage($systemLanguages): array
  165.     {
  166.         $activeLanguage = [];
  167.         foreach ($systemLanguages as $systemLanguage) {
  168.             $name [] = $systemLanguage;
  169.         }
  170.         return $name;
  171.     }
  172. }