<?php
namespace App\Controller;
use App\Entity\History;
use App\Repository\HistoryRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Request;
class SecurityController extends AbstractController
{
/**
* @Route("/", name="app_login")
*/
public function login(Request $request, SessionInterface $session, AuthenticationUtils $authenticationUtils, HistoryRepository $historyRepository): Response
{
$user = $this->getUser();
$history = new History();
if ($user) {
$sessionDateTime = new \DateTime('now', new \DateTimeZone('Europe/Paris'));
$connexion = $sessionDateTime;
// Récupérer la dernière connexion depuis la base de données
$lastHistory = $historyRepository->findOneBy(['User' => $user], ['createdAt' => 'desc']);
$history = new History();
//dd($lastHistory);
if ($lastHistory) {
// Extraire les dates de la dernière connexion et la nouvelle connexion
$lastConnexion = $lastHistory->getConnexion();
// Vérifier si les dates sont définies
if ($lastConnexion && $connexion) {
// Calculer la durée entre les deux dates
$duree = $lastConnexion->diff($connexion);
$dureeString = $duree->format('%Y-%M-%D %H:%I:%S');
$history
->setUser($user)
->setIpAdresse($request->server->get("REMOTE_ADDR"))
->setConnexion($connexion)
->setDuree($dureeString)
->setLastConnexion($lastConnexion)
->setAction('Connexion')
->setDescription('L\'utilisateur ' . $user->getUsername() . ' s\'est connecté.');
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($history);
$entityManager->flush();
}
else {
$history
->setUser($user)
->setIpAdresse($request->server->get("REMOTE_ADDR"))
->setConnexion($connexion)
->setDuree(null)
->setLastConnexion($connexion)
->setAction('Connexion')
->setDescription('L\'utilisateur ' . $user->getUsername() . ' s\'est connecté.');
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($history);
$entityManager->flush();
}
}
else {
$history
->setUser($user)
->setIpAdresse($request->server->get("REMOTE_ADDR"))
->setConnexion($connexion)
->setDuree(null)
->setLastConnexion($connexion)
->setAction('Connexion')
->setDescription('L\'utilisateur ' . $user->getUsername() . ' s\'est connecté.');
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($history);
$entityManager->flush();
}
if ($user->getRoles()[0]=="ROLE_ADMIN") {
return $this->redirectToRoute('admin');
}
elseif ($user->getRoles()[0]=="ROLE_USER") {
return $this->redirectToRoute('account');
}
}
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
/**
* @Route("/deconnexion", name="app_logout")
*/
public function logout()
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
public function calculateDuration($lastLogin , $currentLogin ): ?\DateInterval
{
// $lastLogin = $this->getUser()->getLastLogin();
// $currentLogin = $this->getCreatedAt();
// if ($lastLogin && $currentLogin) {
// return $lastLogin->diff($currentLogin);
// }
return null;
}
}