<?php
namespace App\EventDispatcher;
use App\Entity\Main\ChangeLog;
use App\Entity\Main\ChangeLogField;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ChangeLogSubscribe implements EventSubscriberInterface
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public static function getSubscribedEvents(): array
{
return [
ChangeLogEvent::class => 'onChangeLogging'
];
}
public function onChangeLogging(ChangeLogEvent $event)
{
$change_log = new ChangeLog();
$change_log->setSectionTitle($event->getSectionTitle());
$change_log->setProjectId($event->getProject());
$change_log->setIp($event->getIp());
$change_log->setUserAgent($event->getUserAgent());
$change_log->setChangeData($event->getChangeData());
$change_log->setUserId($event->getUser());
$change_log->setChangeDate(new \DateTime());
$change_log->setRevertedDate($event->getRevertedDate());
foreach ($change_log->getChangeData() as $key => $value) {
$change_log_field = new ChangeLogField();
$change_log_field->setAttribute($key);
$change_log_field->setTitle($value['field_name']);
$change_log->addChangeLogField($change_log_field);
$change_log_field->setProject($event->getProject());
}
$this->em->persist($change_log);
$this->em->flush();
}
}