src/EventSubscriber/KernelSubscriber.php line 54

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Eleve;
  4. use App\Entity\Evaluation;
  5. use App\Repository\EvaluationRepository;
  6. use App\Repository\EvaluationResultatRepository;
  7. use App\Repository\PersonneRepository;
  8. use App\Repository\SiteSettingRepository;
  9. use App\Repository\SocialSettingRepository;
  10. use App\Repository\UserRepository;
  11. use DateTime;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\RequestStack;
  15. use Symfony\Component\HttpKernel\Event\RequestEvent;
  16. use Symfony\Component\HttpKernel\KernelEvents;
  17. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  18. class KernelSubscriber implements EventSubscriberInterface
  19. {
  20.     private $requestStack;
  21.     private $siteSettingRepository;
  22.     private $urlGeneratorInterface;
  23.     private $userRepo;
  24.     private $personneRepo;
  25.     public function __construct(PersonneRepository $personneRepo
  26.         SiteSettingRepository $siteSettingRepository
  27.         private SocialSettingRepository $socialSettingRepository,
  28.         UserRepository $userRepo
  29.         UrlGeneratorInterface $urlGeneratorInterface
  30.         RequestStack $requestStack,
  31.         private EvaluationRepository $evaluationRepository,
  32.         private EvaluationResultatRepository $evaluationResultatRepository
  33.         )
  34.     {
  35.         $this->siteSettingRepository $siteSettingRepository;
  36.         $this->requestStack $requestStack;
  37.         $this->urlGeneratorInterface $urlGeneratorInterface;
  38.         $this->userRepo $userRepo;
  39.         $this->personneRepo $personneRepo;
  40.     }
  41.     public function onKernelRequest(RequestEvent $event): void
  42.     {
  43.         if (!in_array('application/json'$event->getRequest()->getAcceptableContentTypes())) {
  44.             $session $this->requestStack->getSession();
  45.             $personne $session->get('personne');
  46.             $siteSettings $session->get('siteSettings'$this->siteSettingRepository->findOneBy([]));
  47.             $socialsSettings $session->get('socialsSettings'$this->socialSettingRepository->findAll());
  48.             $session->set('siteSettings'$siteSettings);
  49.             $session->set('showAnnonces'true);
  50.             $session->set('hasAnnonces'false);
  51.             // $session->set('hideAnnonces', []);
  52.             // dd($personne);
  53.             if ($personne) {
  54.                 $personne $this->personneRepo->findOneBy(['id' => $personne->getId()]);
  55.                 $user $personne->getUtilisateur();
  56.                 if ($user->isIsBlocked() || !$user->isVerified()) {
  57.                     $session->remove('personne');
  58.                     $event->setResponse(new RedirectResponse($this->urlGeneratorInterface->generate('app_logout')));
  59.                 }
  60.                 $eleve $user->getEleve();
  61.                 $hideAnnonces $session->get('hideAnnonces', []);
  62.                 $sessionContainsAnnonces  $session->get('hasAnnonces'false);
  63.                 $showAnnonces $session->get('showAnnonces'true);
  64.                 // dump($sessionContainsAnnonces); dump($showAnnonces);dump($hideAnnonces);die;
  65.                 if ($eleve !== null && $eleve->getClasse() !== null) {
  66.                     $classe $eleve->getClasse();
  67.                     $annonces null;
  68.                     if ((!$sessionContainsAnnonces && $showAnnonces)) {
  69.                         // die("cici");
  70.                         $evaluations $this->evaluationRepository->findByClass($classe);
  71.                         foreach ($evaluations as $evaluation) {
  72.                             // die("ici");
  73.                             $currentDateTime = new DateTime();
  74.                             $diff $evaluation->getStartAt()->diff($currentDateTime);
  75.                             $h $diff->h;
  76.                             $d $diff->days;
  77.                             $m $diff->m;
  78.                             $y $diff->y;
  79.                             $nbHeures $h $d*24 $m*30*24 8760*$y;
  80.                             // dump($nbHeures, 24*6, $evaluation->getStartAt()->diff($currentDateTime));die;
  81.                             if (!$eleve->getEvaluations()->contains($evaluation) && $nbHeures <= 7*24 && $nbHeures && !in_array($evaluation->getId(), $hideAnnonces)) {
  82.                             //    die;
  83.                                 $annonces = [
  84.                                     'evaluation' => [
  85.                                         'titre' => $evaluation->getTitre(),
  86.                                         'description' => $evaluation->getDescription(),
  87.                                         'slug' => $evaluation->getSlug(),
  88.                                         'startAt' => $evaluation->getStartAt(),
  89.                                         'endAt' => $evaluation->getEndAt(),
  90.                                         'duree' => $evaluation->getDuree(),
  91.                                     ],
  92.                                     'nombreInscris' => $evaluation->getEleves()->count(),
  93.                                     'matiere' => $evaluation->getMatiere()->getName(),
  94.                                 ];
  95.                                 $cmp 1;
  96.                                 $annonces['eleves'] = [];
  97.                                 foreach ($evaluation->getEleves() as $e) {
  98.                                     $annonces['eleves'][] = $e->getUtilisateur()->getPersonne()->getAvatarPath(); 
  99.                                     $cmp++;
  100.                                     if ($cmp 4) {
  101.                                         break;
  102.                                     }
  103.                                 }
  104.                                 break;
  105.                             }
  106.                         }
  107.                         if (empty($annonces)) {
  108.                             $session->set('showAnnonces'false);
  109.                             $session->set('hasAnnonces'true);
  110.                             $session->set('annonce'null);
  111.                         } else {
  112.                             $session->set('showAnnonces'true);
  113.                             $session->set('hasAnnonces'true);
  114.                             $session->set('annonce'$annonces);
  115.                         }
  116.                     }
  117.                     $this->showAnnonceEvaluationEncours($eleve);
  118.                 }
  119.             }
  120.             // On verifie si le site est en mode maintenance
  121.             $session->set('siteSettings'$siteSettings);
  122.             $session->set('socialsSettings'$socialsSettings);
  123.             $request $event->getRequest();
  124.             if ($locale $request->attributes->get('_locale')) {
  125.                 $request->getSession()->set('_locale'$locale);
  126.             }
  127.             else {
  128.                 $request->setLocale($request->getSession()->get('_locale''fr'));
  129.             }
  130.         }
  131.     } 
  132.     
  133.     /**
  134.      * Undocumented function
  135.      *
  136.      * @param Evaluation[] $evaluations
  137.      * @param Eleve $eleve
  138.      * @return Evaluation|null
  139.      */
  140.     private function showAnnonceEvaluationEncours(Eleve $eleve): void
  141.     {
  142.         $currentEvaluation null;
  143.         $evaluations $eleve->getEvaluations();
  144.         foreach ($evaluations as $evaluation) {
  145.             $currentDateTime = new DateTime();
  146.             $r $this->evaluationResultatRepository->findOneBy(['eleve' => $eleve'evaluation' => $evaluation]);
  147.             if (!$r && $evaluation->getStartAt() <= $currentDateTime && $evaluation->getEndAt() > $currentDateTime->modify('+1 hour')) {
  148.                 $currentEvaluation = [
  149.                     'evaluation' => [
  150.                         'titre' => $evaluation->getTitre(),
  151.                         'description' => $evaluation->getDescription(),
  152.                         'slug' => $evaluation->getSlug(),
  153.                         'startAt' => $evaluation->getStartAt(),
  154.                         'endAt' => $evaluation->getEndAt(),
  155.                         'duree' => $evaluation->getDuree(),
  156.                     ],
  157.                     'nombreInscris' => $evaluation->getEleves()->count(),
  158.                     'matiere' => $evaluation->getMatiere()->getName(),
  159.                 ];
  160.                 break;
  161.             }
  162.         }
  163.         $session $this->requestStack->getSession();
  164.         $session->set('currentEvaluation', []);
  165.         if ($currentEvaluation !== null && !empty($currentEvaluation)) {
  166.             $session->set('currentEvaluation'$currentEvaluation);
  167.         }
  168.     }
  169.     public static function getSubscribedEvents(): array
  170.     {
  171.         return [
  172.             KernelEvents::REQUEST => 'onKernelRequest',
  173.         ];
  174.     }
  175. }