<?php
namespace App\EventListener;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
use App\Entity\UserLog;
class UserLogListener
{
protected $authChecker;
protected $tokenStorage;
protected $entityManager;
public function __construct(TokenStorageInterface $tokenStorage, AuthorizationChecker $authChecker, EntityManager $entityManager)
{
$this->authChecker = $authChecker;
$this->tokenStorage = $tokenStorage;
$this->entityManager = $entityManager;
}
public function onKernelRequest(RequestEvent $event)
{
if( $this->tokenStorage->getToken() != null){
$user = $this->tokenStorage->getToken()->getUser();
if (is_object($user) && is_a($user, 'App\Entity\User')) {
$ip = $event->getRequest()->getClientIp();
$action = $event->getRequest()->attributes->get('_controller');
$method = $event->getRequest()->getMethod();
$url = $event->getRequest()->getPathInfo();
if (($event->getRequest()->request) && (($method=='POST') || ($method=='PUT') || ($method=='DELETE'))) {
$data = $event->getRequest()->request->all();
} else {
$data = $event->getRequest()->query->all();
}
if ($url == "/_fragment") {
return;
}
$userLog = new UserLog();
$userLog->setUser($user);
$userLog->setIp($ip);
$userLog->setAction($action);
$userLog->setMethode($method);
$userLog->setUrl($url);
$userLog->setData(json_encode($data));
$userLog->setDate(new \Datetime());
$this->entityManager->persist($userLog);
$this->entityManager->flush();
}
}
}
}