<?php
namespace App\Service;
use App\Entity\Planning\User;
use App\Entity\Vetoadom\SessionLog;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\User\UserInterface;
class SessionLogManagement
{
private $vetoadomEntityManager;
private $params;
private $requestStack;
public function __construct(
EntityManagerInterface $vetoadomEntityManager,
ParameterBagInterface $params,
RequestStack $requestStack
){
$this->vetoadomEntityManager = $vetoadomEntityManager;
$this->params = $params;
$this->requestStack = $requestStack;
}
public function sessionLog(UserInterface $user)
{
/** @var User $user */
$sessionLog = $this->vetoadomEntityManager->getRepository(SessionLog::class)->findOneBy(['userId' => $user->getId()],['id' => 'DESC']);
# continue current session
if (
$sessionLog
&& $sessionLog->getSessionId() == $this->requestStack->getSession()->getId()
&& $user->getActive()
) {
$sessionLog->setDateFin(new \DateTime());
}
else {
# close previous session
if ($sessionLog) {
$sessionFileName = $this->params->get('session.save_path') . '/sess_' . $sessionLog->getSessionId();
if (file_exists($sessionFileName)) {
unlink($sessionFileName);
}
}
# create new session
$sessionLog = new SessionLog();
$sessionLog->setUserId($user->getId());
$sessionLog->setLogin($user->getLogin());
$sessionLog->setSessionId($this->requestStack->getSession()->getId());
$sessionLog->setDateFin(new \DateTime());
$this->vetoadomEntityManager->persist($sessionLog);
}
$this->vetoadomEntityManager->flush();
$this->requestStack->getSession()->set('_locale', $user->getLangue()->getCode());
}
}