src/Service/SessionLogManagement.php line 63

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Planning\User;
  4. use App\Entity\Vetoadom\SessionLog;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class SessionLogManagement
  10. {
  11.     private $vetoadomEntityManager;
  12.     private $params;
  13.     private $requestStack;
  14.     public function __construct(
  15.         EntityManagerInterface $vetoadomEntityManager,
  16.         ParameterBagInterface $params,
  17.         RequestStack $requestStack
  18.     ){
  19.         $this->vetoadomEntityManager $vetoadomEntityManager;
  20.         $this->params $params;
  21.         $this->requestStack $requestStack;
  22.     }
  23.     public function sessionLog(UserInterface $user)
  24.     {
  25.         /** @var User $user */
  26.         $sessionLog $this->vetoadomEntityManager->getRepository(SessionLog::class)->findOneBy(['userId' => $user->getId()],['id' => 'DESC']);
  27.         # continue current session
  28.         if (
  29.             $sessionLog
  30.             && $sessionLog->getSessionId() == $this->requestStack->getSession()->getId()
  31.             && $user->getActive()
  32.         ) {
  33.             $sessionLog->setDateFin(new \DateTime());
  34.         }
  35.         else {
  36.             # close previous session
  37.             if ($sessionLog) {
  38.                 $sessionFileName $this->params->get('session.save_path') . '/sess_' $sessionLog->getSessionId();
  39.                 if (file_exists($sessionFileName)) {
  40.                     unlink($sessionFileName);
  41.                 }
  42.             }
  43.             # create new session
  44.             $sessionLog = new SessionLog();
  45.             $sessionLog->setUserId($user->getId());
  46.             $sessionLog->setLogin($user->getLogin());
  47.             $sessionLog->setSessionId($this->requestStack->getSession()->getId());
  48.             $sessionLog->setDateFin(new \DateTime());
  49.             $this->vetoadomEntityManager->persist($sessionLog);
  50.         }
  51.         $this->vetoadomEntityManager->flush();
  52.         $this->requestStack->getSession()->set('_locale'$user->getLangue()->getCode());
  53.     }
  54. }