<?php
namespace Acl\Koe\ObjectUpdatePathBundle\EventListener;
use Acl\Koe\ImportBundle\Service\ArtikelonlineService;
use AppBundle\Model\DataObject\Marke;
use Carbon\Carbon;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\Folder;
use Psr\Log\LoggerInterface;
class ObjectListener
{
/**
* check if articles should be put on the update queue. by default we dont want to do that on cli
* processes (i.e. batch updates), but it can be enabled with setUpdateOnCli
* @return bool
*/
protected function isManualRequest(): bool
{
return empty($_REQUEST) ? false : true;
}
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function anyImageChanges($currentVersion, $lastVersion)
{
//no object found return true to be sure
if (!$currentVersion) {
return true;
}
for ($i = 1; $i <= 20; $i++) {
$currentImage = $currentVersion->{"getBild" . $i}();
if ($lastVersion) {
$lastImage = $lastVersion->{"getBild" . $i}();
}
if ($lastImage && $currentImage && ($lastImage->getId() != $currentImage->getId())) {
return true;
} elseif ((!$lastImage || !$currentImage) && ($lastImage != $currentImage)) {
return true;
}
}
return false;
}
/**
* Pre-Save Event
* @param ElementEventInterface $e
*/
public function onObjectPreSave(ElementEventInterface $e)
{
$ob = $e->getElement();
if ($ob instanceof DataObject\Artikelonline) {
$id = $ob->getId();
if (!$id) return;
$versions = $ob->getVersions();
if ($versions) {
if (!$this->isManualRequest()) {
return;
}
$lastKey = array_key_last($versions);
if ($lastKey && array_key_exists($lastKey, $versions)) {
$latestVersionData = $versions[$lastKey];
if ($latestVersionData) {
$latestVersion = $latestVersionData->getData();
if ($this->anyImageChanges($ob, $latestVersion)) {
$ob->setBildUpdate(Carbon::now());
}
}
}
}
$parent = $ob->getParent();
if ($parent instanceof Folder) {
$currentPath = $parent->getFullPath() . "/";
if ($currentPath == ArtikelonlineService::DEFAULT_PATH_ARTIKELONLINE . ArtikelonlineService::SUB_PATH_INACTIVE_ARTIKELONLINE) {
$ob->setAktiv(false);
$ob->setAktiv_ch(false);
$ob->setAktiv_de(false);
} else if (in_array($currentPath, ArtikelonlineService::PARENT_ACTIVE_LIST)) {
if (!$this->isManualRequest()) {
return;
}
if (!$ob->getArtikelok() || !$ob->getBild1()) {
return;
}
$sourcePath = \Pimcore\Db::get()->fetchCol("SELECT o_path FROM _pimcore_koe2.objects WHERE o_id=" . $id);
if (!$sourcePath[0] || $sourcePath[0] != "/artikelonline/inaktiv/") return;
$brandNumber = $ob->getMarkennummer();
$brand = DataObject\Marke::getByMARKENNUMMER($brandNumber, 1);
//no brand found dont update?
if (!$brand) {
return;
}
if ($brand->getAktiv()) {
$ob->setAktiv(true);
}
if ($brand->getAktiv_ch()) {
$ob->setAktiv_ch(true);
}
if ($brand->getAktiv_de()) {
$ob->setAktiv_de(true);
}
}
}
}
}
}