<?php
/**
* Created by Notive.
* Project: wms.p
* User: Henny Krijnen
* Date: 30/09/16
* Time: 08:41
*/
namespace WebserviceBundle\Event;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use WmsBundle\Entity\User;
/**
* Class RequestListener
* @package WebserviceBundle\Event
*/
class RequestListener
{
/**
* @var TokenStorage
*/
protected $tokenStorage;
/**
* @var EntityManager
*/
protected $entityManager;
/**
* RequestListener constructor.
* @param TokenStorage $tokenStorage
* @param EntityManager $entityManager
*/
public function __construct(TokenStorage $tokenStorage, EntityManagerInterface $entityManager)
{
$this->tokenStorage = $tokenStorage;
$this->em = $entityManager;
}
/**
* @param GetResponseEvent $event
*/
public function onRequest(GetResponseEvent $event)
{
$token = $this->tokenStorage->getToken();
if ($token) {
/** @var User $user */
$user = $token->getUser();
if ($user instanceof User) {
if($user->getType() !== User::API_TYPE &&
$user->getLastRequestAt() < (new \DateTime())->sub(new \DateInterval('PT1M'))
){
$date = new \DateTime();
$id = $user->getId();
$sql = "
UPDATE fos_user u
SET u.last_request_at = :request
WHERE u.id = :id";
$stmt = $this->em->getConnection()->prepare($sql);
$stmt->execute([
'id' => $id,
'request' => $date->format('Y-m-d H:i:s')
]);
}
}
}
}
}