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

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.         if (!$e instanceof DataObjectEvent) {
  57.             return;
  58.         }
  59.         $object $e->getObject();
  60.         if ($object instanceof CustomerInterface) {
  61.             \Pimcore::getContainer()->get(CustomerSaveManagerInterface::class)->postUpdate($object);
  62.         } elseif ($object instanceof AbstractObjectActivity) {
  63.             $trackIt true;
  64.             if (!$object->cmfUpdateOnSave()) {
  65.                 if (\Pimcore::getContainer()->get('cmf.activity_store')->getEntryForActivity($object)) {
  66.                     $trackIt false;
  67.                 }
  68.             }
  69.             if ($trackIt) {
  70.                 \Pimcore::getContainer()->get('cmf.activity_manager')->trackActivity($object);
  71.             }
  72.         }
  73.     }
  74.     public function onPreAdd(ElementEventInterface $e)
  75.     {
  76.         if (!$e instanceof DataObjectEvent) {
  77.             return;
  78.         }
  79.         $object $e->getObject();
  80.         if ($object instanceof CustomerInterface) {
  81.             $this->customerSaveManager->preAdd($object);
  82.         } elseif ($object instanceof LinkActivityDefinition) {
  83.             $object->setCode(uniqid());
  84.         }
  85.     }
  86.     public function onPostAdd(ElementEventInterface $e)
  87.     {
  88.         if (!$e instanceof DataObjectEvent) {
  89.             return;
  90.         }
  91.         $object $e->getObject();
  92.         if ($object instanceof CustomerInterface) {
  93.             $this->customerSaveManager->postAdd($object);
  94.         }
  95.     }
  96.     public function onPreDelete(ElementEventInterface $e)
  97.     {
  98.         if (!$e instanceof DataObjectEvent) {
  99.             return;
  100.         }
  101.         $object $e->getObject();
  102.         if ($object instanceof CustomerInterface) {
  103.             $this->customerSaveManager->preDelete($object);
  104.         }
  105.     }
  106.     public function onPostDelete(ElementEventInterface $e)
  107.     {
  108.         if (!$e instanceof DataObjectEvent) {
  109.             return;
  110.         }
  111.         $object $e->getObject();
  112.         if ($object instanceof CustomerInterface) {
  113.             $this->customerSaveManager->postDelete($object);
  114.         } elseif ($object instanceof ActivityInterface) {
  115.             \Pimcore::getContainer()->get('cmf.activity_manager')->deleteActivity($object);
  116.         } elseif ($object instanceof CustomerSegmentInterface) {
  117.             \Pimcore::getContainer()->get(SegmentManagerInterface::class)->postSegmentDelete($object);
  118.         }
  119.     }
  120.     public function onPreSave(DataObjectImportEvent $e)
  121.     {
  122.         $data $e->getAdditionalData();
  123.         $customer $e->getObject();
  124.         if (!$customer instanceof CustomerInterface) {
  125.             return;
  126.         }
  127.         if ($data) {
  128.             /**
  129.              * @var SegmentManagerInterface $segmentManager
  130.              */
  131.             $segmentManager \Pimcore::getContainer()->get(SegmentManagerInterface::class);
  132.             /**
  133.              * check to be compatible with different Pimcore versions
  134.              */
  135.             if (is_array($data)) {
  136.                 $data $data['customerSegmentId'];
  137.             }
  138.             if ($segment $segmentManager->getSegmentById($data)) {
  139.                 $segmentManager->mergeSegments($customer, [$segment], [], 'Customer CSV importer');
  140.             }
  141.         }
  142.     }
  143. }