vendor/pimcore/pimcore/bundles/CoreBundle/EventListener/SearchBackendListener.php line 62

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 Pimcore\Bundle\CoreBundle\EventListener;
  15. use Pimcore\Event\AssetEvents;
  16. use Pimcore\Event\DataObjectEvents;
  17. use Pimcore\Event\DocumentEvents;
  18. use Pimcore\Event\Model\AssetEvent;
  19. use Pimcore\Event\Model\ElementEventInterface;
  20. use Pimcore\Messenger\SearchBackendMessage;
  21. use Pimcore\Model\Element\Service;
  22. use Pimcore\Model\Search\Backend\Data;
  23. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  24. use Symfony\Component\Messenger\MessageBusInterface;
  25. /**
  26.  * @internal
  27.  */
  28. class SearchBackendListener implements EventSubscriberInterface
  29. {
  30.     public function __construct(
  31.         private MessageBusInterface $messengerBusPimcoreCore
  32.     ) {
  33.     }
  34.     /**
  35.      * {@inheritdoc}
  36.      */
  37.     public static function getSubscribedEvents()
  38.     {
  39.         return [
  40.             DataObjectEvents::POST_ADD => 'onPostAddUpdateElement',
  41.             DocumentEvents::POST_ADD => 'onPostAddUpdateElement',
  42.             AssetEvents::POST_ADD => 'onPostAddUpdateElement',
  43.             DataObjectEvents::PRE_DELETE => 'onPreDeleteElement',
  44.             DocumentEvents::PRE_DELETE => 'onPreDeleteElement',
  45.             AssetEvents::PRE_DELETE => 'onPreDeleteElement',
  46.             DataObjectEvents::POST_UPDATE => 'onPostAddUpdateElement',
  47.             DocumentEvents::POST_UPDATE => 'onPostAddUpdateElement',
  48.             AssetEvents::POST_UPDATE => 'onPostAddUpdateElement',
  49.         ];
  50.     }
  51.     /**
  52.      * @param ElementEventInterface $e
  53.      */
  54.     public function onPostAddUpdateElement(ElementEventInterface $e)
  55.     {
  56.         //do not update index when auto save or only saving version
  57.         if (
  58.             !$e instanceof AssetEvent &&
  59.             (($e->hasArgument('isAutoSave') && $e->getArgument('isAutoSave')) ||
  60.             ($e->hasArgument('saveVersionOnly') && $e->getArgument('saveVersionOnly')))
  61.         ) {
  62.             return;
  63.         }
  64.         $element $e->getElement();
  65.         $this->messengerBusPimcoreCore->dispatch(
  66.             new SearchBackendMessage(Service::getElementType($element), $element->getId())
  67.         );
  68.     }
  69.     /**
  70.      * @param ElementEventInterface $e
  71.      */
  72.     public function onPreDeleteElement(ElementEventInterface $e)
  73.     {
  74.         $searchEntry Data::getForElement($e->getElement());
  75.         if ($searchEntry instanceof Data && $searchEntry->getId() instanceof Data\Id) {
  76.             $searchEntry->delete();
  77.         }
  78.     }
  79. }