vendor/pimcore/customer-management-framework-bundle/src/Event/PimcoreObjectEventListener.php line 149

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace CustomerManagementFrameworkBundle\Event;
  15. use CustomerManagementFrameworkBundle\CustomerSaveManager\CustomerSaveManagerInterface;
  16. use CustomerManagementFrameworkBundle\Model\AbstractObjectActivity;
  17. use CustomerManagementFrameworkBundle\Model\ActivityInterface;
  18. use CustomerManagementFrameworkBundle\Model\CustomerInterface;
  19. use CustomerManagementFrameworkBundle\Model\CustomerSegmentInterface;
  20. use CustomerManagementFrameworkBundle\SegmentManager\SegmentManagerInterface;
  21. use Pimcore\Event\Model\DataObjectEvent;
  22. use Pimcore\Event\Model\DataObjectImportEvent;
  23. use Pimcore\Event\Model\ElementEventInterface;
  24. use Pimcore\Model\DataObject\LinkActivityDefinition;
  25. class PimcoreObjectEventListener
  26. {
  27.     /**
  28.      * @var CustomerSaveManagerInterface
  29.      */
  30.     protected $customerSaveManager;
  31.     public function __construct(CustomerSaveManagerInterface $customerSaveManager)
  32.     {
  33.         $this->customerSaveManager $customerSaveManager;
  34.     }
  35.     public function onPreUpdate(ElementEventInterface $e)
  36.     {
  37.         //do not update index when auto save or only saving version or when $e not DataObjectEvent
  38.         if (($e->hasArgument('isAutoSave') && $e->getArgument('isAutoSave')) ||
  39.             ($e->hasArgument('saveVersionOnly') && $e->getArgument('saveVersionOnly')) ||
  40.             !$e instanceof DataObjectEvent) {
  41.             return;
  42.         }
  43.         //do not call customerSaveManager on recyclebin restore
  44.         if ($e->hasArgument('isRecycleBinRestore') && $e->getArgument('isRecycleBinRestore')) {
  45.             return;
  46.         }
  47.         $object $e->getObject();
  48.         if ($object instanceof CustomerInterface) {
  49.             $this->customerSaveManager->preUpdate($object);
  50.         } elseif ($object instanceof CustomerSegmentInterface) {
  51.             \Pimcore::getContainer()->get(SegmentManagerInterface::class)->preSegmentUpdate($object);
  52.         }
  53.     }
  54.     public function onPostUpdate(ElementEventInterface $e)
  55.     {
  56.         // Do not process the event any further in either cases of autoSave, save version only or the event not being an instance of DataObject
  57.         if (($e->hasArgument('isAutoSave') && $e->getArgument('isAutoSave')) ||
  58.             ($e->hasArgument('saveVersionOnly') && $e->getArgument('saveVersionOnly')) ||
  59.             !$e instanceof DataObjectEvent) {
  60.             return;
  61.         }
  62.         $object $e->getObject();
  63.         if ($object instanceof CustomerInterface) {
  64.             \Pimcore::getContainer()->get(CustomerSaveManagerInterface::class)->postUpdate($object);
  65.         } elseif ($object instanceof AbstractObjectActivity) {
  66.             $trackIt true;
  67.             if (!$object->cmfUpdateOnSave()) {
  68.                 if (\Pimcore::getContainer()->get('cmf.activity_store')->getEntryForActivity($object)) {
  69.                     $trackIt false;
  70.                 }
  71.             }
  72.             if ($trackIt) {
  73.                 \Pimcore::getContainer()->get('cmf.activity_manager')->trackActivity($object);
  74.             }
  75.         }
  76.     }
  77.     public function onPreAdd(ElementEventInterface $e)
  78.     {
  79.         if (!$e instanceof DataObjectEvent) {
  80.             return;
  81.         }
  82.         $object $e->getObject();
  83.         if ($object instanceof CustomerInterface) {
  84.             $this->customerSaveManager->preAdd($object);
  85.         } elseif ($object instanceof LinkActivityDefinition) {
  86.             $object->setCode(uniqid());
  87.         }
  88.     }
  89.     public function onPostAdd(ElementEventInterface $e)
  90.     {
  91.         if (!$e instanceof DataObjectEvent) {
  92.             return;
  93.         }
  94.         $object $e->getObject();
  95.         if ($object instanceof CustomerInterface) {
  96.             $this->customerSaveManager->postAdd($object);
  97.         }
  98.     }
  99.     public function onPreDelete(ElementEventInterface $e)
  100.     {
  101.         if (!$e instanceof DataObjectEvent) {
  102.             return;
  103.         }
  104.         $object $e->getObject();
  105.         if ($object instanceof CustomerInterface) {
  106.             $this->customerSaveManager->preDelete($object);
  107.         }
  108.     }
  109.     public function onPostDelete(ElementEventInterface $e)
  110.     {
  111.         if (!$e instanceof DataObjectEvent) {
  112.             return;
  113.         }
  114.         $object $e->getObject();
  115.         if ($object instanceof CustomerInterface) {
  116.             $this->customerSaveManager->postDelete($object);
  117.         } elseif ($object instanceof ActivityInterface) {
  118.             \Pimcore::getContainer()->get('cmf.activity_manager')->deleteActivity($object);
  119.         } elseif ($object instanceof CustomerSegmentInterface) {
  120.             \Pimcore::getContainer()->get(SegmentManagerInterface::class)->postSegmentDelete($object);
  121.         }
  122.     }
  123.     public function onPreSave(DataObjectImportEvent $e)
  124.     {
  125.         $data $e->getAdditionalData();
  126.         $customer $e->getObject();
  127.         if (!$customer instanceof CustomerInterface) {
  128.             return;
  129.         }
  130.         if ($data) {
  131.             /**
  132.              * @var SegmentManagerInterface $segmentManager
  133.              */
  134.             $segmentManager \Pimcore::getContainer()->get(SegmentManagerInterface::class);
  135.             /**
  136.              * check to be compatible with different Pimcore versions
  137.              */
  138.             if (is_array($data)) {
  139.                 $data $data['customerSegmentId'];
  140.             }
  141.             if ($segment $segmentManager->getSegmentById($data)) {
  142.                 $segmentManager->mergeSegments($customer, [$segment], [], 'Customer CSV importer');
  143.             }
  144.         }
  145.     }
  146. }