<?php
namespace App\Controller;
use App\Entity\Emailsadmin;
use App\Entity\Evenement;
use App\Repository\ActualiteRepository;
use App\Repository\CommandeRepository;
use App\Repository\DemandeprofilRepository;
use App\Repository\DemmandeformationRepository;
use App\Repository\EmailsadminRepository;
use App\Repository\EvaluationElearningRepository;
use App\Repository\EvaluationRepository;
use App\Repository\FormationRepository;
use App\Repository\InscritSessionRepository;
use App\Repository\MessageinscritRepository;
use App\Repository\OffresinscritRepository;
use App\Repository\OffresRepository;
use App\Repository\ReclamationRepository;
use App\Entity\Certificat;
use App\Entity\Diplome;
use App\Form\AdminType;
use App\Form\UserType;
use App\Repository\CertificatRepository;
use App\Repository\DiplomeRepository;
use App\Repository\EvenementRepository;
use App\Repository\ExperienceRepository;
use App\Repository\TemoignageRepository;
use App\Repository\VirtualClassroomRepository;
use DateTimeZone;
use App\Repository\SettingRepository;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use DateTime;
use Doctrine\Common\Collections\Criteria;
class AdminController extends AbstractController
{
#[Route('/verifemail', name: 'verif_email', methods: ['GET'])]
public function verifEmail(Request $request,UserRepository $userRepository,InscritSessionRepository $inscritSessionRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
{
$email=$request->get('email');
$user=$userRepository->findOneBy(['email'=>$email]);
$test=false;
if($user){
$test=true;
}
$output[]=array($user->getNom(),$user->getPrenom(),$user->getAdresse(),$user->getPhone(),$test);
return new JsonResponse($output);
}
#[Route('/notifsSession', name: 'notifsSessons')]
public function notifs(InscritSessionRepository $inscritSessionRepository)
{
$reponses= $inscritSessionRepository->findBy(['vue' => false], ['id' => 'DESC']);
$response = array();
foreach ($reponses as $r) {
$response[] = array(
'id' => $r->getId(),
'nom' => $r-> getNom(),
'session' => $r->getSession()->getTitre(),
'prenom' => $r->getPrenom(),
'datee'=> $r->getDate()->format('d-m-Y H:i')
// other fields
);
}
return new JsonResponse($response);
}
#[Route('/notifsoffre', name: 'notifsoffre')]
public function notifsoff(OffresinscritRepository $offresinscritRepository)
{
$reponses= $offresinscritRepository->findBy(['vu' => "0"], ['id' => 'DESC']);
$response = array();
foreach ($reponses as $r) {
$response[] = array(
'id' => $r->getId(),
'nom' => $r-> getNom(),
'type' => $r->getType(),
'prenom' => $r->getPrenom(),
'datee'=> $r->getDate()->format('d-m-Y H:i')
// other fields
);
}
return new JsonResponse($response);
}
#[Route('/notifcompte', name: 'notifcompte')]
public function notifcompte(UserRepository $userRepository)
{
$reponses= $userRepository->findBy(['vu' => "0"], ['id' => 'DESC']);
$response = array();
foreach ($reponses as $r) {
$response[] = array(
'id' => $r->getId(),
'nom' => $r-> getNom(),
'email'=>$r->getEmail(),
'roles' => $r->getRoles(),
'prenom' => $r->getPrenom(),
'datee'=> $r->getDate()->format('d-m-Y H:i')
// other fields
);
}
return new JsonResponse($response);
}
#[Route('/notifsAvis', name: 'notifsAvis')]
public function notifsAvis(EvaluationElearningRepository $evaluationElearningRepository, CommandeRepository $commandeRepository, InscritSessionRepository $inscritSessionRepository)
{
// Récupérer les évaluations non lues
$reponses = $evaluationElearningRepository->findBy(['isVu' => false], ['id' => 'DESC']);
$response = array();
foreach ($reponses as $r) {
$response[] = array(
'id' => $r->getId(),
'prenom' => $r->getUser()->getPrenom(),
'nom' => $r->getUser()->getNom(),
'note' => $r->getNote(), // Note à afficher sous forme d'étoiles
'avis' => $r->getDescription(),
'formation' => $r->getFormation()->getTitre(), // Ajout du titre de la formation
'datee' => $r->getDate()->format('d-m-Y H:i')
);
}
// Retourner la réponse sous forme de JSON
return new JsonResponse($response);
}
#[Route('/notifsCommandes', name: 'notifsCommandes')]
public function notifsCommandes(CommandeRepository $commandeRepository,InscritSessionRepository $inscritSessionRepository)
{
$reponses= $commandeRepository->findBy(['isVu' => false], ['id' => 'DESC']);
$response = array();
foreach ($reponses as $r) {
$response[] = array(
'id' => $r->getId(),
'nom' => $r-> getUser()->getNom(),
'total' => $r->getTotal(),
'prenom' => $r-> getUser()->getPrenom(),
'facture' => $r-> getFacture(),
'datee'=> $r->getDate()->format('d-m-Y H:i')
// other fields
);
}
return new JsonResponse($response);
}
#[Route('/totalCommandes', name: 'app_commande_total', methods: ['GET'])]
public function totalCommandes(EvaluationElearningRepository $evaluationElearningRepository,CommandeRepository $commandeRepository,InscritSessionRepository $inscritSessionRepository,UserRepository $userRepository,OffresinscritRepository $offresinscritRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
{
$totalinscrit=$commandeRepository->findBy(['isVu'=>false]);
$evaluations=$evaluationElearningRepository->findBy(['isVu'=>false]);
$output[]=array(count($totalinscrit));
$output[]=array(count($evaluations));
$output[]=array(count($evaluations) + count($totalinscrit));
return new JsonResponse($output);
}
#[Route('/totalinscrit', name: 'app_inscrit_total', methods: ['GET'])]
public function totalinscrits(InscritSessionRepository $inscritSessionRepository,UserRepository $userRepository,OffresinscritRepository $offresinscritRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
{
$totalinscrit=$inscritSessionRepository->findBy(['vue'=>false]);
$vuoffre=$offresinscritRepository->findBy(['vu'=>"0"]);
$vucmpt=$userRepository->findBy(['vu'=>"0"]);
$output[]=array(count($totalinscrit));
$output[]=array(count($vuoffre) );
$output[]=array(count($vucmpt) );
$output[]=array(count($vuoffre) + count($totalinscrit)+count($vucmpt) );
return new JsonResponse($output);
}
#[Route('/codev', name: 'codev', methods: ['GET'])]
public function codev(InscritSessionRepository $inscritSessionRepository,Request $request,UserRepository $userRepository,OffresinscritRepository $offresinscritRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
{
$code= $request->getSession()->get('verification_code');
if ($code)
{
$output=1;
}
else
{
$output=0;
}
return new JsonResponse($output);
}
#[Route('/tot', name: 'app_contact_tot', methods: ['GET'])]
public function tott(DemmandeformationRepository $demmandeformationRepository,EvaluationRepository $evaluationRepository,SettingRepository $settingRepository,DemandeprofilRepository $demandeprofilRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
{
$totalmessage=$messageinscritRepository->findBy(['lu'=>0,]);
$totalreclamation=$reclamationRepository->findBy(['lu'=>0,]);
$totaleval=$evaluationRepository->findBy(['lu'=>0,]);
$totalstu=$evaluationRepository->findByRolestudenteval();
$totalfor=$evaluationRepository->findByRolesformateureval();
$totalparrt=$evaluationRepository->findByRolespartnereval();
$lustagiere=$reclamationRepository->findBy(['lustagiaire'=>0,'user'=>$this->getUser()]);
$luusta=$messageinscritRepository->findBy(['lustagiaire'=>0,'user'=>$this->getUser()]);
$statu=$demandeprofilRepository->findBy(['statut'=>0,]);
// $statuforma=$demmandeformationRepository->findBy(['statut'=>0,]);
$totdemandeformation=$demmandeformationRepository->findBy(['vuadmin'=>0]);
$totdemandeformationPartner=$demmandeformationRepository->findBy(['vupartner'=>0,'user'=>$this->getUser()]);
$output[]=array(count($totalmessage));
$output[]=array(count($totalreclamation));
$output[]=array(count($lustagiere));
$output[]=array(count($luusta));
$output[]=array(count($statu));
$output[]=array(count($totdemandeformation));
$output[]=array(count($totdemandeformationPartner));
$output[]=array(count($totaleval));
$output[]=array(count($totalstu));
$output[]=array(count($totalfor));
$output[]=array(count($totalparrt));
return new JsonResponse($output);
}
#[Route('/agendasession', name: 'app_agenda_admin', methods: ['GET' , 'POST'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function agendaSessions(EvenementRepository $evenementRepository,DiplomeRepository $diplomeRepository,ExperienceRepository $experienceRepository,CertificatRepository $certificatRepository,SettingRepository $settingRepository,EntityManagerInterface $entityManager,UserPasswordHasherInterface $userPasswordHasher,Request $request, UserRepository $userRepository): Response
{
$setting=$settingRepository->find(1);
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$eventArray = [];
foreach ($evenementRepository->findAll() as $event) {
$eventArray[] = [
'id' => $event->getId(),
'title' => $event->getTitre(),
'start' => $event->getStarttime()->format('Y-m-d H:i:s'),
'end' => $event->getEndtime()->format('Y-m-d H:i:s'),
'adresse'=>$event->getAdresse()
];
}
$data=json_encode($eventArray);
return $this->render('evenement/agendaAdmin.html.twig', [
'user'=>$user,
'setting'=>$setting,
'evenements'=>$evenementRepository->findAll(),
'data'=>$data
]);
}
#[Route('/deleteEmail/{id}', name: 'app_delete_email', methods: ['GET' , 'POST'])]
public function deleteEmil(Request $request, EmailsadminRepository $emailsadminRepository, Emailsadmin $emailsadmin): Response
{
$emailsadminRepository->remove($emailsadmin, true);
return $this->redirectToRoute('app_user_profile_admin', [], Response::HTTP_SEE_OTHER);
}
#[Route('/editprofileadmin', name: 'app_user_profile_admin', methods: ['GET' , 'POST'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_ASSISTANT')")]
public function editProfileAdmin(EmailsadminRepository $emailsadminRepository,DiplomeRepository $diplomeRepository,ExperienceRepository $experienceRepository,CertificatRepository $certificatRepository,SettingRepository $settingRepository,EntityManagerInterface $entityManager,UserPasswordHasherInterface $userPasswordHasher,Request $request, UserRepository $userRepository): Response
{$nbr= $request->request->get('nbrc_a');
$count= $request->request->get('count');
$setting=$settingRepository->find(1);
$certifs = new Certificat();
$diplomes = new Diplome();
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$emailsadmin=$emailsadminRepository->findBy(['user'=>$user]);
$bbien = $user->getLogo();
$form = $this->createForm(AdminType::class, $user);
$form->handleRequest($request);
$experience=$experienceRepository->findBy(['user'=>$user]);
$certif = $certificatRepository->findBy(['user'=>$user]);
$diplome = $diplomeRepository->findBy(['user'=>$user]);
if ($form->isSubmitted() && $form->isValid()) {
$certifs->setDateobtention(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
$certifs->setDatevalidite(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
$diplomes->setDateobtention(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
// $users = new User();
////ajuter certificat
$phone1= $request->request->get('phone1');
$user->setPhone($phone1);
$phone2= $request->request->get('phone2');
$user->setPhone1($phone2);
$Linkedin= $request->request->get('Linkedin');
$user->setLinkedin($Linkedin);
$facebook= $request->request->get('Facebook');
$user->setFb($facebook);
$adresse= $request->request->get('adresse');
$user->setAdresse($adresse);
//upload pdf
//fin upoad pdf
if( $request->request->get('password') != ""){
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$request->request->get('password')
)
);}
$logo = $form->get('logo')->getData();
if ( $logo) {
$originalLogoname = pathinfo( $logo->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname.'-'.uniqid().'.'.$logo->guessExtension();
// Move the file to the directory where brochures are stored
try {
$logo->move(
$this->getParameter('coach_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$user->setLogo($newLogoname);
}
elseif($logo === null)
{
$user->setLogo($bbien);
}
$userRepository->save($user, true);
if(!$emailsadmin){
if ($nbr == 0)
{
$pr=new Emailsadmin();
$titre= $request->request->get('email0');
$pr->setEmail($titre);
$pr->setUser($user);
$entityManager->persist($pr);}
elseif ( $nbr > 0){
for ($i=0 ; $i <= $nbr ; $i++) {
if ($request->request->get('email'.$i) )
{
$pr=new Emailsadmin();
$titre = $request->request->get('email'.$i);
$pr->setEmail($titre);
$pr->setUser($user);
$entityManager->persist($pr);
}}
}
}
else{
$k=0;
if ($nbr == 0)
{
foreach ($emailsadmin as $item) {
$titre= $request->request->get('email'.$k);
$item->setEmail($titre);
;
$entityManager->persist($item);
$k++;
}
}
elseif ( $nbr >= $count){ $k=0;
foreach ($emailsadmin as $item) {
$titre= $request->request->get('email'.$k);
$item->setEmail($titre);
;
$entityManager->persist($item);
$k++;
}
for ($i=$count+1 ; $i <= ($nbr+$count) ; $i++) {
if ($request->request->get('email'.$i) )
{
$pr=new Emailsadmin();
$titre = $request->request->get('email'.$i);
$pr->setEmail($titre);
$pr->setUser($user);
$entityManager->persist($pr);
}}
}
}
$entityManager->flush();
return $this->redirectToRoute('app_user_profile_admin', ['setting'=>$setting], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('admin/profileAdmin.html.twig', [
'user'=>$user,
'form'=>$form,
'setting'=>$setting,
'certificats'=>$certif,
'diplomes'=>$diplome,
'experiences'=>$experience,'emailsadmin'=>$emailsadmin
// 'experiences' => $experienceRepository->findAll(),
// 'certificats' => $certificatRepository->findAll(),
// 'diplomes' => $diplomeRepository->findAll(),
]);
}
#[Route('/dashboard_stagiaire', name: 'dashboard_stagiaire')]
public function dashboardStagiaire(
InscritSessionRepository $inscritSessionRepository,
VirtualClassroomRepository $virtualClassroomRepository,
EvenementRepository $evenementRepository, // Ajoutez ce repository
SettingRepository $settingRepository,
ActualiteRepository $actualiteRepository,
TemoignageRepository $temoignageRepository,
): Response {
$user = $this->getUser();
$setting = $settingRepository->find(1);
$dateActuelle = new \DateTime('now', new \DateTimeZone('Africa/Tunis'));
$derniereInscription = $inscritSessionRepository->findOneBy(
['stagiaire' => $user],
['id' => 'DESC'] // On prend la dernière ligne insérée en base
);
$maDerniereSession = $derniereInscription ? $derniereInscription->getSession() : null;
// 1. Récupérer les IDs des sessions auxquelles le stagiaire est DÉJÀ inscrit
$inscriptions = $inscritSessionRepository->findBy(['stagiaire' => $user]);
$sessionIdsInscrit = [];
foreach ($inscriptions as $inscrit) {
if ($inscrit->getSession()) {
$sessionIdsInscrit[] = $inscrit->getSession()->getId();
}
}
// 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit)
$dernieresClasses = [];
// 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date
// 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date/heure et dateFin
$dernieresClasses = [];
if (!empty($sessionIdsInscrit)) {
$dernieresClasses = $virtualClassroomRepository->createQueryBuilder('v')
->where('v.session IN (:ids)')
->andWhere('v.date >= :now OR v.heureDebut >= :now OR v.heureFin >= :now') // Filtrer les classes dont la date/heure de fin est >= maintenant
->setParameter('ids', $sessionIdsInscrit)
->setParameter('now', $dateActuelle)
->orderBy('v.date', 'DESC')
->setMaxResults(3)
->getQuery()
->getResult();
}
// 3. Récupérer les 3 prochaines sessions disponibles (toutes ou filtrées)
// Ici on prend les sessions qui commencent bientôt
$prochainsEvenements = $evenementRepository->createQueryBuilder('e')
->where('e.starttime >= :now')
->andWhere('e.isArchive = :false')
->setParameter('now', $dateActuelle)
->setParameter('false', false)
->orderBy('e.starttime', 'ASC')
->getQuery()
->getResult();
$actualitesinternes = $actualiteRepository->findBy(
['type' => ['interne', 'mixte']], // <- IN (...)
['id' => 'DESC']
);
// Récupérer toutes les inscriptions de l'utilisateur
$inscriptionscertif = $inscritSessionRepository->findBy(['stagiaire' => $user]);
// Filtrer uniquement celles avec certif
$certifications = [];
foreach ($inscriptionscertif as $inscription) {
if ($inscription->getCertif() && !empty($inscription->getCertif())) {
$certifications[] = $inscription;
}
}
$inscriptionsParSession = [];
if (!empty($sessionIdsInscrit)) {
// Parcourir les sessions du formateur et récupérer les inscriptions
foreach ($sessionIdsInscrit as $sessionId) {
// Récupérer les inscriptions pour cette session, avec isAffected = true
$inscriptions = $inscritSessionRepository->createQueryBuilder('i')
->where('i.session = :sessionId')
->andWhere('i.isAffected = :isAffected')
->setParameter('sessionId', $sessionId)
->setParameter('isAffected', true)
->getQuery()
->getResult();
// Ajouter le nombre d'inscriptions dans le tableau
$inscriptionsParSession[$sessionId] = count($inscriptions);
}
}
return $this->render('admin/dashboardStagiaire.html.twig', [
'setting' => $setting,
'user' => $user,'maDerniereSession' => $maDerniereSession,
'dateActuelle' => $dateActuelle, 'temoignages' => $temoignageRepository->findAll(),
'dernieresClasses' => $dernieresClasses,'actualitesinternes'=>$actualitesinternes,
'certifications' => $certifications,
'inscriptionsParSession'=>$inscriptionsParSession,
'prochainsEvenements' => $prochainsEvenements, // Nouvelle variable pour la grille
]);
}
#[Route('/dashboard_formateur', name: 'dashboard_formateur')]
public function dashboardFormateur(
InscritSessionRepository $inscritSessionRepository,
VirtualClassroomRepository $virtualClassroomRepository,
EvenementRepository $evenementRepository, // Ajoutez ce repository
SettingRepository $settingRepository,
ActualiteRepository $actualiteRepository,
TemoignageRepository $temoignageRepository,
): Response {
$user = $this->getUser();
$setting = $settingRepository->find(1);
$dateActuelle = new \DateTime('now', new \DateTimeZone('Africa/Tunis'));
$derniereInscription = $inscritSessionRepository->findOneBy(
['stagiaire' => $user],
['id' => 'DESC'] // On prend la dernière ligne insérée en base
);
$maDerniereSession = $derniereInscription ? $derniereInscription->getSession() : null;
// 1. Récupérer les IDs des sessions auxquelles le stagiaire est DÉJÀ inscrit
$inscriptions = $inscritSessionRepository->findBy(['stagiaire' => $user]);
$sessionIdsInscrit = [];
foreach ($inscriptions as $inscrit) {
if ($inscrit->getSession()) {
$sessionIdsInscrit[] = $inscrit->getSession()->getId();
}
}
// 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit)
$dernieresClasses = [];
// 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date
// 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date/heure et dateFin
$SessionsFormateur = $evenementRepository->createQueryBuilder('e')
->where('e.isArchive = :false')
->andWhere('e.formateur = :formateur') // Filtrer les événements pour un formateur spécifique
->setParameter('false', false)
->setParameter('formateur', $user) // Paramètre pour spécifier le formateur
->orderBy('e.starttime', 'ASC')
->getQuery()
->getResult();
// 3. Récupérer les 3 prochaines sessions disponibles (toutes ou filtrées)
// Ici on prend les sessions qui commencent bientôt
// Récupérer les sessions du formateur
$prochainesSessions = $evenementRepository->createQueryBuilder('e')
->where('e.starttime >= :now')
->andWhere('e.isArchive = :false')
->andWhere('e.formateur = :formateur') // Filtrer les événements pour un formateur spécifique
->setParameter('now', $dateActuelle)
->setParameter('false', false)
->setParameter('formateur', $user) // Paramètre pour spécifier le formateur
->orderBy('e.starttime', 'ASC')
->getQuery()
->getResult();
// Extraire les IDs des sessions
$sessionIdsFormateur = [];
foreach ($SessionsFormateur as $session) {
$sessionIdsFormateur[] = $session->getId();
}
// Récupérer les classes virtuelles liées aux sessions du formateur
$dernieresClasses = [];
if (!empty($sessionIdsFormateur)) {
$dernieresClasses = $virtualClassroomRepository->createQueryBuilder('v')
->where('v.session IN (:ids)') // Filtrer les classes liées aux sessions du formateur
->andWhere('v.date >= :now OR v.heureDebut >= :now OR v.heureFin >= :now') // Filtrer par date/heure
->setParameter('ids', $sessionIdsFormateur)
->setParameter('now', $dateActuelle)
->orderBy('v.date', 'DESC')
->setMaxResults(3) // Limiter à 3 classes
->getQuery()
->getResult();
}
$inscriptionsParSession = [];
if (!empty($sessionIdsFormateur)) {
// Parcourir les sessions du formateur et récupérer les inscriptions
foreach ($sessionIdsFormateur as $sessionId) {
// Récupérer les inscriptions pour cette session, avec isAffected = true
$inscriptions = $inscritSessionRepository->createQueryBuilder('i')
->where('i.session = :sessionId')
->andWhere('i.isAffected = :isAffected')
->setParameter('sessionId', $sessionId)
->setParameter('isAffected', true)
->getQuery()
->getResult();
// Ajouter le nombre d'inscriptions dans le tableau
$inscriptionsParSession[$sessionId] = count($inscriptions);
}
}
$actualitesinternes = $actualiteRepository->findBy(
['type' => ['interne', 'mixte']], // <- IN (...)
['id' => 'DESC']
);
// Récupérer toutes les inscriptions de l'utilisateur
$inscriptionscertif = $inscritSessionRepository->findBy(['stagiaire' => $user]);
// Filtrer uniquement celles avec certif
$certifications = [];
foreach ($inscriptionscertif as $inscription) {
if ($inscription->getCertif() && !empty($inscription->getCertif())) {
$certifications[] = $inscription;
}
}
return $this->render('admin/dashboardFormateur.html.twig', [
'setting' => $setting,
'user' => $user,'maDerniereSession' => $maDerniereSession,
'dateActuelle' => $dateActuelle, 'temoignages' => $temoignageRepository->findAll(),
'dernieresClasses' => $dernieresClasses,'actualitesinternes'=>$actualitesinternes,
'certifications' => $certifications,
'inscriptionsParSession' => $inscriptionsParSession,
'prochainsEvenements' => $prochainesSessions, // Nouvelle variable pour la grille
]);
}
#[Route('/dashboard', name: 'app_admin')]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') or is_granted('ROLE_ASSISTANT') ")]
public function index(ActualiteRepository $actualiteRepository,ExperienceRepository $experienceRepository,InscritSessionRepository $inscritSessionRepository,OffresRepository $offresRepository,EntityManagerInterface $entityManager,EvenementRepository $evenementRepository,FormationRepository $formationRepository,UserRepository $userRepository,SettingRepository $settingRepository): Response
{
$countphp=$experienceRepository->countProfilPHP();
$countjava=$experienceRepository->countProfilJava();
$countspring=$experienceRepository->countProfilSpring();
$countspringAng=$experienceRepository->countProfilSpringAngular();
$countdevops=$experienceRepository->countProfilDevops();
// dd($count[0]['total']);
$nbinscritparsession = $inscritSessionRepository->findRegistrationsByCurrentYear();
// dd($nbinscritparsession);
$offre = $offresRepository->findAll();
$now = new DateTime('now', new DateTimeZone('Africa/Tunis'));
$criteria = Criteria::create()
->where(Criteria::expr()->gte('starttime', $now))
->andWhere(Criteria::expr()->eq('isArchive', false))
->orderBy(['starttime' => 'ASC']);
$sessions = $evenementRepository->matching($criteria)->toArray();
// dd($sessions);
$categorie="Certifiante";
$foramtion = $formationRepository->findBy(['categorie'=>$categorie]);
$categories="BootCamp";
$foramtions = $formationRepository->findBy(['categorie'=>$categories]);
$cat="Pratique";
$foramtionsprat = $formationRepository->findBy(['categorie'=>$cat]);
$cate="Cursus";
$foramtioncursus = $formationRepository->findBy(['categorie'=>$cate]);
// dd($foramtioncursus);
$date= new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
$reqActualite="SELECT DATE_FORMAT(date, '%d') as day,slug as slug,titre as titre,id as id, image as image,date as date FROM actualite ORDER by date desc LIMIT 1;";
$actualites=$entityManager->getConnection()->prepare( $reqActualite)->execute()->fetchAll();
$actualitesinternes = $actualiteRepository->findBy(
['type' => ['interne', 'mixte']], // <- IN (...)
['id' => 'DESC']
);
return $this->render('admin/dashboard.html.twig', [
'controller_name' => 'AdminController',
'setting'=>$setting,
'user'=>$user,
'date'=>$date,
'nbcertifiante'=>count($foramtion),
'nbrbootcamp'=>count($foramtions),
'nbrforamtionsprat'=>count($foramtionsprat),
'nbrforamtioncursus'=>count($foramtioncursus),
'sessions'=>$sessions,
'actualites'=>$actualites,
'offre'=>$offre,
'nbinscritparsession'=>$nbinscritparsession,
'countphp'=>$countphp[0]['total'],
'countjava'=>$countjava[0]['total'],
'countspring'=>$countspring[0]['total'],
'countspringAng'=>$countspringAng[0]['total'],
'countdevops'=>$countdevops[0]['total'],'actualitesinternes'=>$actualitesinternes
// 'user'=>$userRepository->findOneBy(['id'=>$user])
]);
}
}