<?php
namespace App\EventListener;
use App\Model\DataObject\Address;
use App\Model\DataObject\Place;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Event\Model\DataObjectEvent;
//use Pimcore\Model\DataObject\Books;
use Pimcore\Log\Simple;
use Pimcore\Model\DataObject;
use App\Twig\Extension\Apik;
class ObjectListener
{
private static $processing = [];
public function sanitizeTitle($title) {
return trim($title);
}
public function onPreUpdate(ElementEventInterface $e)
{
if ($e instanceof DataObjectEvent) {
$obj = $e->getObject();
if($obj instanceof DataObject\SpecialEvent) {
$slug = Apik::toUrl($obj->getTitle());
$obj->setSlug(Apik::toUrl($obj->getTitle()));
$languages = \Pimcore\Tool::getValidLanguages();
$abseUrl = \Pimcore\Tool::getHostUrl();
foreach($languages as $lang) {
$obj->setLinkUrl($abseUrl.'/'.$lang.'/special-event/'.$slug, $lang);
}
}else if($obj instanceof DataObject\Studio){
/*$languages = \Pimcore\Tool::getValidLanguages();
foreach($languages as $lang) {
$obj->setSlug(Apik::toUrl($obj->getTitle($lang)), $lang);
}
*/
$obj->setSlug(Apik::toUrl($obj->getTitle()));
}
if($obj instanceof Place) {
$obj->geocode();
}
}
}
public function onPostUpdate(ElementEventInterface $e){
if($e instanceof DataObjectEvent){
$obj = $e->getObject();
if($obj instanceof DataObject\SpecialEventInscription){
if (!is_null($obj->getIsCanceled())) {
$objId = $obj->getId();
if (isset(self::$processing[$objId]) && self::$processing[$objId]) {
return;
}
self::$processing[$objId] = true;
try {
if ($obj->getIsCanceled()) {
$email = $obj->getEmail();
$studio = $obj->getStudio();
$event = $obj->getSpecialEvent();
$slotList = DataObject\SpecialEventSlot::getList();
$slotList->setCondition('user = ? AND studio__id = ? AND specialEvent__id = ?',[$email,$studio->getId(),$event->getId()]);
$slots = $slotList->load();
// Si au moins un créneau est trouvé, mettre à jour le premier créneau trouvé
if (count($slots) > 0) {
$slot = $slots[0];
$slot->setIsReserved(false);
$slot->setUser('');
$slot->save();
}
}
} catch (\Exception $ex) {
Simple::log('apk_error_objectListener', $ex->getMessage());
} finally {
self::$processing[$objId] = false;
}
}
}
}
}
}