<?php
namespace App\EventSubscriber;
use App\Entity\EventLog;
use App\Service\EsCache;
use Psr\Log\LoggerInterface;
use App\Event\EsEventLogEvent;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EsEventLogSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $_em,
private LoggerInterface $esEventLogger,
private EsCache $esCache
) {}
public static function getSubscribedEvents(): array
{
return [
EsEventLogEvent::EVENT_LOGIN => 'addToEventLog',
EsEventLogEvent::EVENT_ONBOARDING => 'addToEventLog',
EsEventLogEvent::EVENT_FORGOT_PASSWORD => 'addToEventLog',
EsEventLogEvent::EVENT_USER_ACTIVE => 'addToEventLog',
EsEventLogEvent::EVENT_USER_INACTIVE => 'addToEventLog',
EsEventLogEvent::EVENT_CHANGE_PROFILE => 'addToEventLog',
EsEventLogEvent::EVENT_USER_CREATE => 'addToEventLog',
EsEventLogEvent::EVENT_USER_DELETE => 'addToEventLog'
];
}
public function addToEventLog(EsEventLogEvent $event)
{
$user = $event->getObject();
$container = $event->getContainer();
if (!$container) {
$container = $this->esCache->getContainer();
}
$isUserLogEnable = $container->getConfiguration('isUserLogEnable');
if ($isUserLogEnable === false) {
return;
}
if ($user) {
/*
$info = [$event->getType(), $user->getId(), $user->getEmail(), $user->getFirstName(), $user->getLastName()];
$this->esEventLogger->info(implode(',', $info));
*/
$now = new \DateTime();
$now = $now->format('Y-m-d H:i:s');
$query = "INSERT INTO event_log(`event_type`, `container_id`, `user_id`, `created_at`, `updated_at`) VALUES ('".$event->getType()."', '".$container->getId()."', '".$user->getId()."', '".$now."', '".$now."')";
$statement = $this->_em->getConnection()->prepare($query);
$statement->execute();
}
}
}