src/EventListener/OnRequestListener.php line 26
<?php
namespace App\EventListener;
use App\Entity\Activity;
use App\Entity\Company;
use App\Repository\ActivityRepository;
use DateTimeImmutable;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class OnRequestListener
{
protected $em;
protected $tokenStorage;
protected $security;
protected $activityRepository;
public function __construct($em, $tokenStorage, Security $security, ActivityRepository $activityRepository)
{
$this->em = $em;
$this->tokenStorage = $tokenStorage;
$this->security = $security;
$this->activityRepository = $activityRepository;
}
public function onKernelRequest(RequestEvent $event)
{
if ($this->tokenStorage->getToken()) {
$user = $this->tokenStorage->getToken()->getUser();
if (!$this->security->isGranted('ROLE_SUPER_ADMIN', $user)) {
$filterCompany = $this->em->getFilters()->enable('owner');
$filterSeason = $this->em->getFilters()->enable('season');
if ($user->getCompany()) {
/** @var Company */
$company = $user->getCompany();
$season = $company->getActiveSeason();
if ($season) {
$filterCompany->setParameter('companyId', $company ? $company->getId() : 0, 'uuid');
$filterSeason->setParameter('seasonId', $company ? $season->getId() : 0, 'uuid');
}
}
}
$activity = new Activity();
$activity->setAction('')
->setIp($event->getRequest()->getClientIp())
->setOwner($user->getCompany())
->setMadeBy($user)
->setPath($event->getRequest()->getPathInfo())
->setMethod($event->getRequest()->getMethod())
->setLocale($event->getRequest()->getLocale())
->setContext(json_encode($event->getRequest()->request->all()))
->setQuery(json_encode($event->getRequest()->query->all()))
->setRoute($event->getRequest()->attributes->get('_route'))
->setCreatedAt(new DateTimeImmutable())
->setUpdatedAt(new DateTimeImmutable())
;
$this->activityRepository->save($activity, true);
}
}
}