<?php
namespace App\EventListener;
use App\Entity\ActionLog;
use App\Manager\DesignationManager;
use App\Service\ActionLogService;
use App\Service\ControlService;
use Doctrine\Persistence\ManagerRegistry;
use Pimcore\Event\Model\DataObjectEvent;
use Psr\Log\LoggerInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class DesignationListener
{
private HttpClientInterface $client;
private DesignationManager $designationManager;
private LoggerInterface $logger;
private $shercoNetworkSync;
private ActionLogService $actionLogService;
private ControlService $controlService;
private $managerRegistry;
public function __construct($shercoNetworkSync, HttpClientInterface $client, DesignationManager $designationManager,
LoggerInterface $logger, ActionLogService $actionLogService, ControlService $controlService, ManagerRegistry $managerRegistry)
{
$this->shercoNetworkSync = $shercoNetworkSync;
$this->client = $client;
$this->designationManager = $designationManager;
$this->logger = $logger;
$this->actionLogService = $actionLogService;
$this->controlService = $controlService;
$this->managerRegistry = $managerRegistry;
}
public function onDesignationPostAdd(DataObjectEvent $o)
{
$designation = $o->getObject();
if ($this->designationManager->objectIsDesignation($designation)) {
$type = 'designation';
if ($designation->getType() != 'folder') {
if ($designation->get("o_className") == "Designation") {
$statut = $designation->isPublished() ? 'valide' : 'en-cours';
$this->actionLogService->logActionDesignation($o, 'add', $type, $statut);
}
}
}
}
public function onDesignationPostUpdate(DataObjectEvent $o)
{
$designation = $o->getObject();
if ($designation->getType() != 'folder') {
if ($designation->get("o_className") == "Designation") {
if ($designation->isPublished()) {
$this->actionLogService->logActionDesignation($o, 'update', 'designation', "valide");
} else {
$repository = $this->managerRegistry->getRepository(ActionLog::class);
$actionLog = $repository->findOneBy(['objectId' => $designation->getId(), 'status' => "valide"], ['date' => 'desc']);
if (isset($actionLog) && $actionLog->getAction() != 'delete') {
$this->actionLogService->logActionDesignation($o, 'delete', 'designation', "valide");
} else {
$this->actionLogService->logActionDesignation($o, 'update', 'designation', "en-cours");
}
}
}
}
}
public function onDesignationPostDelete(DataObjectEvent $o)
{
$designation = $o->getObject();
if ($this->designationManager->objectIsDesignation($designation)) {
$type = 'designation';
if ($designation->getType() != 'folder') {
if ($designation->get("o_className") == "Designation") {
if ($designation->isPublished()) {
$repository = $this->managerRegistry->getRepository(ActionLog::class);
$actionLog = $repository->findOneBy(['objectId' => $designation->getId(), 'status' => "valide"], ['date' => 'desc']);
if (isset($actionLog) && $actionLog->getAction() != 'delete') {
$this->actionLogService->logActionDesignation($o, 'delete', $type, "valide");
}
} else {
$this->actionLogService->logActionDesignation($o, 'delete', 'designation', "en-cours");
}
}
}
}
}
}