<?php
namespace AppBundle\EventListener;
use AppBundle\Actions\LoggerAction;
use AppBundle\Message\Warengruppen\SyncWarengruppenAttributesToArticlesMessage;
use AppBundle\Service\General\EventListenerJobIdentifierService;
use Pimcore\Db;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Model\DataObject\Warengruppe;
use Symfony\Component\Messenger\MessageBusInterface;
class WarengruppenEventListener extends DataObjectEventListener {
/**
* @param MessageBusInterface $messageBus
*/
public function __construct(MessageBusInterface $messageBus) {
parent::__construct($messageBus);
}
const PIMCORE_DATA_OBJECT_CLASS_PATH = Warengruppe::class;
protected $object;
/**
* @param ElementEventInterface $event
* @return void
* @throws \Doctrine\DBAL\DBALException
*/
public function onObjectPreAdd(ElementEventInterface $event): void {
// Not Warengruppe DataObject?
if(!$this->eventBelongsToThisClass($event)){
return;
}
$this->onObjectPrePersist();
}
/**
* @param ElementEventInterface $event
* @return void
* @throws \Doctrine\DBAL\DBALException
* @throws \Doctrine\DBAL\Driver\Exception
* @throws \Doctrine\DBAL\Exception
* @throws \Doctrine\DBAL\Exception\DriverException
*/
public function onObjectPreUpdate(ElementEventInterface $event): void {
// Not Warengruppe DataObject?
if(!$this->eventBelongsToThisClass($event)){
return;
}
$this->onObjectPrePersist();
$this->dispatchAttributesToArticlesAsyncJob($this->object);
}
/**
* @return void
*/
public function onObjectPrePersist(): void {
// If datumStillgelegt field has value, remove Aktiv flag from object
$datumStillgelegt = $this->object->getDatumStillgelegt();
if($datumStillgelegt && $datumStillgelegt != '0') {
$this->object->setAktiv(false);
$this->object->setAktiv_ch(false);
$this->object->setAktiv_de(false);
}
}
/**
* @param Warengruppe $object
* @return void
* @throws \Doctrine\DBAL\DBALException
* @throws \Doctrine\DBAL\Driver\Exception
* @throws \Doctrine\DBAL\Exception
* @throws \Doctrine\DBAL\Exception\DriverException
*/
private function dispatchAttributesToArticlesAsyncJob(Warengruppe $object): void {
// We fetch the necessary variables from this object
$classId = $object->getClassId();
$objectId = $object->getId();
$jobId = EventListenerJobIdentifierService::WARRENGRUPPEN_ATTRIBUTES_TO_ARTICLES_SYNC;
// We generate a unique message id for this job
$umid = $this->generateUmid($classId, $objectId, $jobId);
// If a message with this umid doesn't exist, create it
if(!$this->messageExistsInQueue("general_messages", $umid, "event_listener")){
$this->messageBus->dispatch(new SyncWarengruppenAttributesToArticlesMessage($objectId, $umid));
}
}
}