vendor/abcpremium/privatsortiment-price-import/src/Event/Subscriber/DataObjectEvents.php line 30

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Abcpremium\PrivatsortimentPriceImportBundle\Event\Subscriber;
  4. use Abcpremium\PrivatsortimentPriceImportBundle\Model\Import\Processor;
  5. use Abcpremium\PrivatsortimentPriceImportBundle\Model\Lock;
  6. use Pimcore\Event\AdminEvents;
  7. use Pimcore\Event\Model\DataObjectEvent;
  8. use Pimcore\Model\DataObject\AbstractObject;
  9. use Pimcore\Model\DataObject\Concrete;
  10. use Pimcore\Model\Element\ValidationException;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\EventDispatcher\GenericEvent;
  13. class DataObjectEvents implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * {@inheritDoc}
  17.      */
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [
  21.             \Pimcore\Event\DataObjectEvents::PRE_UPDATE => 'throwExceptionBeforeSaveIfLocked',
  22.             AdminEvents::OBJECT_GET_PRE_SEND_DATA => 'throwExceptionBeforeOpenIfLocked',
  23.         ];
  24.     }
  25.     public function throwExceptionBeforeSaveIfLocked(DataObjectEvent $dataObjectEvent): void
  26.     {
  27.         $dataObject $dataObjectEvent->getObject();
  28.         if (!$dataObject instanceof Concrete) {
  29.             return;
  30.         }
  31.         if ($dataObjectEvent->hasArgument(Processor::SAVE_ARGUMENT_NAME) && true === $dataObjectEvent->getArgument(Processor::SAVE_ARGUMENT_NAME)) {
  32.             return;
  33.         }
  34.         $this->throwExceptionIfLocked($dataObject);
  35.     }
  36.     public function throwExceptionBeforeOpenIfLocked(GenericEvent $event): void
  37.     {
  38.         /**
  39.          * @var $dataObject Concrete|AbstractObject
  40.          */
  41.         $dataObject $event->getArgument('object');
  42.         if (!$dataObject instanceof Concrete) {
  43.             return;
  44.         }
  45.         $this->throwExceptionIfLocked($dataObject);
  46.     }
  47.     private function throwExceptionIfLocked(Concrete $dataObject): void
  48.     {
  49.         if (false === Lock::isObjectIdLocked($dataObject->getId())) {
  50.             return;
  51.         }
  52.         throw new ValidationException('Object is locked due price update');
  53.     }
  54. }