<?php
namespace AppBundle\EventListeners;
use Pimcore;
use Pimcore\Db;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Model\DataObject\Product;
class EanCalculator
{
/**
* @var array
*/
protected $acceptedProductTypes = ['STANDARD', 'SIZEPRODUCT', 'SERVICE'];
/**
* @param ElementEventInterface $e
* @throws \Exception
*/
public function handleEvent(ElementEventInterface $e)
{
if (!$e instanceof Pimcore\Event\Model\DataObjectEvent) {
return;
}
$object = $e->getObject();
if (!$object instanceof Product) {
return;
}
if (!in_array($object->getProductType(), $this->acceptedProductTypes)) {
return;
}
if (!method_exists($object, 'getEanCode')) {
return;
}
$inheritedValues = Product::getGetInheritedValues();
Product::setGetInheritedValues(false);
if ($object->getEanCode()) {
Product::setGetInheritedValues($inheritedValues);
return;
}
$eanCode = $this->generateEanNumber($object);
if ($eanCode) {
$object->setEanCode($eanCode)->save();
}
Product::setGetInheritedValues($inheritedValues);
}
/**
* @param $target
* @return string
*/
protected function generateEanNumber($target)
{
$db = Db::get();
$eanCode = $db->query("SELECT eanCode FROM object_ean_codes WHERE o_id IS NULL LIMIT 1")->fetchColumn();
if ($eanCode) {
$db->query("UPDATE object_ean_codes SET o_id = '" . $target->getId() . "' WHERE eanCode = '" . $eanCode . "'")->execute();
}
return $eanCode;
}
}