src/AppBundle/EventListeners/EanCalculator.php line 21

Open in your IDE?
  1. <?php
  2. namespace AppBundle\EventListeners;
  3. use Pimcore;
  4. use Pimcore\Db;
  5. use Pimcore\Event\Model\ElementEventInterface;
  6. use Pimcore\Model\DataObject\Product;
  7. class EanCalculator
  8. {
  9.     /**
  10.      * @var array
  11.      */
  12.     protected $acceptedProductTypes = ['STANDARD''SIZEPRODUCT''SERVICE'];
  13.     /**
  14.      * @param ElementEventInterface $e
  15.      * @throws \Exception
  16.      */
  17.     public function handleEvent(ElementEventInterface $e)
  18.     {
  19.         if (!$e instanceof Pimcore\Event\Model\DataObjectEvent) {
  20.             return;
  21.         }
  22.         $object $e->getObject();
  23.         if (!$object instanceof Product) {
  24.             return;
  25.         }
  26.         if (!in_array($object->getProductType(), $this->acceptedProductTypes)) {
  27.             return;
  28.         }
  29.         if (!method_exists($object'getEanCode')) {
  30.             return;
  31.         }
  32.         $inheritedValues Product::getGetInheritedValues();
  33.         Product::setGetInheritedValues(false);
  34.         if ($object->getEanCode()) {
  35.             Product::setGetInheritedValues($inheritedValues);
  36.             return;
  37.         }
  38.         $eanCode $this->generateEanNumber($object);
  39.         if ($eanCode) {
  40.             $object->setEanCode($eanCode)->save();
  41.         }
  42.         Product::setGetInheritedValues($inheritedValues);
  43.     }
  44.     /**
  45.      * @param $target
  46.      * @return string
  47.      */
  48.     protected function generateEanNumber($target)
  49.     {
  50.         $db Db::get();
  51.         $eanCode $db->query("SELECT eanCode FROM object_ean_codes WHERE o_id IS NULL LIMIT 1")->fetchColumn();
  52.         if ($eanCode) {
  53.             $db->query("UPDATE object_ean_codes SET o_id = '" $target->getId() . "' WHERE eanCode = '" $eanCode "'")->execute();
  54.         }
  55.         return $eanCode;
  56.     }
  57. }