src/EventListener/ValidationListener.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Pimcore\Event\DataObjectEvents;
  4. use Pimcore\Event\Model\DataObjectEvent;
  5. use Pimcore\Model\DataObject\AbstractObject;
  6. use Pimcore\Model\Element\ValidationException;
  7. use Pimcore\Model\Translation;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. /**
  10.  * Class ValidationListener
  11.  *
  12.  * @package App\EventListener
  13.  */
  14. class ValidationListener implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @{inheritDoc}
  18.      */
  19.     public static function getSubscribedEvents()
  20.     {
  21.         return [
  22.             DataObjectEvents::PRE_UPDATE => 'onObjectPreUpdate'
  23.         ];
  24.     }
  25.     /**
  26.      * @param DataObjectEvent $event
  27.      * @throws ValidationException
  28.      */
  29.     public function onObjectPreUpdate(DataObjectEvent $event)
  30.     {
  31.         $object $event->getObject();
  32.         // Nur validieren, wenn Objekt gespeichert und veröffentlicht wird
  33.         if (
  34.             ($event->hasArgument('saveVersionOnly') && $event->getArgument('saveVersionOnly') === true)
  35.             || $object === null
  36.             || $object->getType() !== 'object'
  37.         ) {
  38.             return;
  39.         }
  40.         if ($object->getClassName() == 'kikProduct') {
  41.             $this->validateProduct($object);
  42.         }
  43.         // Validierungsmethode für Objektklasse finden
  44.         if ($object->getClassName() == 'Fair') {
  45.             $this->validateFair($object);
  46.         } elseif ($object->getClassName() == 'OtherClass') {
  47.             $this->validateOtherClass($object);
  48.         }
  49.         return;
  50.     }
  51.     /**
  52.      * @param AbstractObject $object
  53.      * @throws ValidationException
  54.      */
  55.     public function validateFair(AbstractObject $object)
  56.     {
  57.         // Beispiel-Validierung eines Messezeitraumes
  58.         $availabilityTimeStart $object->getAvailabilityTimeStart()->getTimestamp();
  59.         $availabilityTimeEnd $object->getAvailabilityTimeEnd()->getTimestamp();
  60.         $fairTimeStart $object->getFairTimeStart()->getTimestamp();
  61.         $fairTimeEnd $object->getFairTimeEnd()->getTimestamp();
  62.         if ($availabilityTimeStart $availabilityTimeEnd) {
  63.             throw new ValidationException(Admin::getByKeyLocalized('app.exception_fair_begin'true));
  64.         } elseif ($fairTimeStart $fairTimeEnd) {
  65.             throw new ValidationException(Admin::getByKeyLocalized('app.exception_fair_end'true));
  66.         } elseif ($availabilityTimeStart $fairTimeStart) {
  67.             throw new ValidationException(Admin::getByKeyLocalized('app.exception_fair_from'true));
  68.         }
  69.     }
  70.     /**
  71.      * @param AbstractObject $object
  72.      * @throws ValidationException
  73.      */
  74.     public function validateProduct(AbstractObject $object)
  75.     {
  76.         $materials $object->getMaterial();
  77.         $percentage 0;
  78.         foreach ($materials as $material) {
  79.             $percentage += $material->getPercentage();
  80.         }
  81.         if ($percentage !== 100 && $percentage !== 0) {
  82.             throw new ValidationException('Die Anteile des Materials ergeben nicht 100%.');
  83.         }
  84.     }
  85.     /**
  86.      * @param AbstractObject $object
  87.      * @throws ValidationException
  88.      */
  89.     public function validateOtherClass(AbstractObject $object)
  90.     {
  91.         // benutzerdefinierte Validierung
  92.         throw new ValidationException(Admin::getByKeyLocalized('app.validation_failed'true));
  93.     }
  94. }