<?php
namespace App\Controller;
use App\Entity\Document;
use App\Entity\Evenement;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Groupe;
use App\Entity\sletter;
use App\Entity\Ptf;
use App\Entity\Pays;
use App\Entity\Troika;
use App\Entity\Photo;
use App\Entity\TypeEvenement;
use App\Entity\User;
use App\Service\AdminService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use App\Service\MailerService;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class FrontendController extends AbstractController
{
#[Route('/', name: 'index')]
public function index(ManagerRegistry $doctrine): Response
{
$groupes = $doctrine->getRepository(Groupe::class)->findAll();
$ptfs = $doctrine->getRepository(Ptf::class)->findAll();
$pays = $doctrine->getRepository(Pays::class)->findAll();
$unes = $doctrine->getRepository(Evenement::class)->findBy(['une'=>true], ['date' => 'DESC', 'created_at' => 'DESC'], 3);
$photos = $doctrine->getRepository(Photo::class)->findAll();
shuffle($ptfs);
shuffle($pays);
shuffle($photos);
shuffle($unes);
$evenements = $doctrine->getRepository(Evenement::class)->findBy([], ['id' => 'DESC'], 3);
return $this->render('frontend/index.html.twig', [
'groupes' => $groupes, 'ptfs' => $ptfs, 'pays' => $pays, 'evenements' => $evenements, 'photos' => $photos, 'unes' => $unes
]);
}
#[Route('/cooperation/chefs-de-cooperation', name: 'cooperation.cdc')]
public function cdc(ManagerRegistry $doctrine): Response
{
$groups = $doctrine->getRepository(Groupe::class)->findAll();
$troika = $doctrine->getRepository(Troika::class)->findAll();
shuffle($groups);
shuffle($troika);
return $this->render('frontend/cdc.html.twig', [
'groups' => $groups, 'troika' => $troika,
]);
}
#[Route('/cooperation/chefs-de-mission', name: 'cooperation.cdm')]
public function cdm(ManagerRegistry $doctrine): Response
{
$groups = $doctrine->getRepository(Groupe::class)->findAll();
shuffle($groups);
return $this->render('frontend/cdm.html.twig', [
'groups' => $groups,
]);
}
#[Route('/troika', name: 'troika')]
public function troika(ManagerRegistry $doctrine): Response
{
$ptfs[] = $doctrine->getRepository(Pays::class)->find(3);
$ptfs[] = $doctrine->getRepository(Pays::class)->find(5);
$ptfs[] = $doctrine->getRepository(Ptf::class)->find(6);
return $this->render('frontend/troika.html.twig', [
'ptfs' => $ptfs,
]);
}
#[Route('/matrice-groupes-ptf', name: 'matrice')]
public function matrice(ManagerRegistry $doctrine): Response
{
return $this->render('frontend/matrice.html.twig', [
]);
}
#[Route('/groupes-ptf', name: 'groupes')]
public function groups(ManagerRegistry $doctrine): Response
{
$groups = $doctrine->getRepository(Groupe::class)->findBy([], ['nom' => 'ASC']);
return $this->render('frontend/groupes.html.twig', [
'groups' => $groups,
]);
}
#[Route('/groupe-ptf/{id}', name: 'groupe', requirements: ['id'=>'.+'])]
public function group(ManagerRegistry $doctrine, AdminService $adminService, $id): Response
{
$id = $id ? $adminService->decryptid($id) : $id;
if (!$id) return $this->redirectToRoute('index');
$groupe = $doctrine->getRepository(Groupe::class)->find($id);
$ptfs = $groupe->getPtfs();
$chef=$groupe->getChef();
return $this->render('frontend/groupe.html.twig', [
'groupe' => $groupe,
'ptfs' => $ptfs,
'chef' => $chef,
]);
}
#[Route('/ptfs/bilateraux', name: 'ptfs.bilateral')]
public function bilateral(ManagerRegistry $doctrine): Response
{
$pays = $doctrine->getRepository(Pays::class)->findAll();
$others = $doctrine->getRepository(Ptf::class)->findBy(['type'=>'BILATERAL']);
shuffle($pays);
shuffle($others);
return $this->render('frontend/bilateral.html.twig', [
'pays' => $pays,
'others' => $others,
]);
}
#[Route('/ptfs/multilateraux', name: 'ptfs.multilateral')]
public function multilateral(ManagerRegistry $doctrine): Response
{
$multilateraux = $doctrine->getRepository(Ptf::class)->findBy(['type'=>'MULTILATERAL']);
shuffle($multilateraux);
return $this->render('frontend/multilateral.html.twig', [
'multilateraux' => $multilateraux,
]);
}
#[Route('/ptfs/ong-fondations', name: 'ptfs.ong')]
public function ong(ManagerRegistry $doctrine): Response
{
$ongs = $doctrine->getRepository(Ptf::class)->findBy(['type'=>'ONG']);
shuffle($ongs);
return $this->render('frontend/ong.html.twig', [
'ongs' => $ongs,
]);
}
#[Route('/actualites', name: 'actualites')]
public function s(ManagerRegistry $doctrine): Response
{
$types = $doctrine->getRepository(TypeEvenement::class)->findAll();
$groupes = $doctrine->getRepository(Groupe::class)->findAll();
$events = $doctrine->getRepository(Evenement::class)->findAll();
return $this->render('frontend/news.html.twig', [
'types' => $types,
'groupes' => $groupes,
'events' => $events,
]);
}
#[Route('/actualites/post/{id}', name: 'actualite', requirements: ['id' => '.+'])]
public function post(ManagerRegistry $doctrine, Request $request, AdminService $adminService,$id): Response
{
$id = $id ? $adminService->decryptid($id) : $id;
if (!$id) return $this->redirect($request->headers->get('referer'));
$item = $doctrine->getRepository(Evenement::class)->find($id);
return $this->render('frontend/post.html.twig', [
'item' => $item,
]);
}
#[Route('/cooperation/projets', name: 'projets')]
public function projets(): Response
{
return $this->render('frontend/projets.html.twig', [
]);
}
#[Route('/ressources', name: 'ressources')]
public function ressources(ManagerRegistry $doctrine): Response
{
$ressources = $doctrine->getRepository(Document::class)->getDocumentPublic();
return $this->render('frontend/ressources.html.twig', [
'ressources' => $ressources,
]);
}
#[Route('/contact', name: 'contact')]
public function contact(): Response
{
return $this->render('frontend/contact.html.twig', [
]);
}
#[Route('/cooperation/a-propos', name: 'about')]
public function cadre(): Response
{
return $this->render('frontend/about.html.twig', [
]);
}
#[Route('/change-password/{id}', name: 'changepassword', requirements: ['id'=>'.+'])]
public function changepassword(ManagerRegistry $doctrine, AdminService $adminService, $id): Response
{
$id = $id ? $adminService->decryptid($id) : $id;
$item = $doctrine->getRepository(User::class)->find($id);
return $this->render('admin/utilisateurs/change-password.html.twig', [
'item' => $item
]);
}
#[Route('/postchangepwd', name: 'postchangepwd')]
public function postchangepwd(ManagerRegistry $doctrine, UserPasswordHasherInterface $passwordHasher, Request $request): Response
{
if(empty($request->request->all())){
return $this->render('admin/utilisateurs/error-reset-password.html.twig', [
]);
}else{
$id=$request->request->all()['id'];
$pwd=$request->request->all()['password'];
$pwd2=$request->request->all()['password2'];
$item = $doctrine->getRepository(User::class)->find($id);
if($item && $pwd==$pwd2){
$hashedPassword = $passwordHasher->hashPassword($item,$pwd);
$item->setPassword($hashedPassword);
$item->setPassword($hashedPassword);
$item->setEnabled(true);
$item->setChangepwd(true);
$item->setResetpwd(true);
$doctrine->getManager()->persist($item);
$doctrine->getManager()->flush();
return $this->redirectToRoute('app_login');
}else{
return $this->redirectToRoute('postchangepwd');
}
}
}
#[Route('/reset-password', name: 'resetpassword')]
public function resetpassword(): Response
{
return $this->render('admin/utilisateurs/reset-password.html.twig', [
]);
}
#[Route('/confirm-reset', name: 'confirmreset')]
public function confirmreset(ManagerRegistry $doctrine, Request $request, MailerService $mailer, AdminService $adminService): Response
{
$email = $request->request->all()['email'];
$item = $doctrine->getRepository(User::class)->findBy(array('email' => $email),array(),1 ,0);
if($item){
$item = $item[0];
//Send Mail
$link = $this->generateUrl(
'changepassword', [
'id'=>$adminService->encryptid($item->getId())
],
UrlGeneratorInterface::ABSOLUTE_URL
);
$content='
<h3>Coopération Bénin</h3>
<p>Votre mot de passe a été réinitialisé avec succès. Utilisez le lien suivant pour créer un nouveau mot de passe.</p>
<a href=" '.$link.' ">Réinitialiser votre mot de passe.</a>';
$mailer->sendEmail($email, 'Réinitialisation de mot de passe', $content);
$item->setResetpwd(false);
$doctrine->getManager()->persist($item);
$doctrine->getManager()->flush();
}
return $this->render('admin/utilisateurs/confirm-reset.html.twig', [
]);
}
#[Route('sletter/{id}', name: 'sletter', requirements: ['id'=>'.+'])]
public function sletter(ManagerRegistry $doctrine, Request $request, MailerService $mailer, AdminService $adminService, $id=0): Response
{
if($id==0){
$email=$request->request->all()['email'];
$item = sletter();
$item->setEmail($email);
$doctrine->getManager()->persist($item);
$doctrine->getManager()->flush();
$link = $this->generateUrl(
'sletter', [
'id'=>$adminService->encryptid($item->getId())
],
UrlGeneratorInterface::ABSOLUTE_URL
);
$content='
<h3>Coopération Bénin</h3>
<p>Vous avez demandé une une inscription à la sletter de la Coopération internationale au Bénin. Veuillez utiliser le lien suivant pour confirmer votre email.</p>
<a href=" '.$link.' ">Confirmez votre email.</a>';
$mailer->sendEmail($email, 'Confirmez votre email', $content);
$etat=false;
}else{
$id = $id ? $adminService->decryptid($id) : $id;
$item = $doctrine->getRepository(sletter::class)->find($id);
$item->setConfirm(true);
$doctrine->getManager()->persist($item);
$doctrine->getManager()->flush();
$etat=false;
}
return $this->render('frontendsletter.html.twig', [
'etat' => $etat
]);
}
}