<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\Image;
use App\Entity\Channel;
use App\Entity\Campagne;
use App\Entity\Category;
use App\Entity\Candidature;
use App\Entity\EnablePhase;
use App\Questionary\QuestionaryService;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class HomeController extends AbstractController
{
/*****************************************************************************************************************************************
*
* section des vues du visiteur
*
* ******************************************************************************************************************************************/
// vu de la page d'accueil
#[Route('/', name: 'app_home')]
public function index(EntityManagerInterface $entityManager): Response{
// recuperation de la liste des chaine TV
$Channel = $entityManager->getRepository(Channel::class)->findAll();
// tableau de l'ordre de filtrage
$Filtre_Tab = [
'CRTV','Crtv sports and entertainment','Crtv News','Canal 2 international',
'Canal 2 Movies','DBS TV','Balafon TV','Dash sports and entertainment',
'Dash News','LTM TV','STV TV','Info TV','My Media Prime TV','Cam 10 TV',
'Vision4 TV','Galaxie TV','Equinoxe TV'
];
$Ordre_Channel = [];
for ($i=0; $i < count($Filtre_Tab) ; $i++) {
// organisation
for ($a=0; $a < count($Channel); $a++) {
// verification
if( $Filtre_Tab[$i] === $Channel[$a]->getName() ) array_push($Ordre_Channel,$Channel[$a]);
}
}
// recuperation de la liste des Candidature
$Candidature = $entityManager->getRepository(Candidature::class)->findAll();
// recuperation des donnees d'affichage
$Data = [
['icon'=>'bi bi-play-btn','number'=>16,'name'=>'CHAINES ELIGIBLES'],
['icon'=>'bi bi-award','number'=>05 ,'name'=>'PRIX SPECIAUX'],
['icon'=>'bi bi-fast-forward-circle','number'=>32,'name'=>'CATEGORIES'],
['icon'=>'bi bi-person-video3','number'=>count($Candidature),'name'=>'NOMMES'],
];
// renvois de la vue
return $this->render('home/home.html.twig', [
'title'=>'Liste des Categories',
'data'=>$Data,
'Channel'=>$Ordre_Channel
]);
}
// vu de la liste des chaines
#[Route('/get/channel', name: 'get_channel')]
public function Channel(EntityManagerInterface $entityManager): Response{
// recuperation de la liste des chaine TV
$Channel = $entityManager->getRepository(Channel::class)->findAll();
// tableau de l'ordre de filtrage
$Filtre_Tab = [
'CRTV','Crtv sports and entertainment','Crtv News','Canal 2 international',
'Canal 2 Movies','DBS TV','Balafon TV','Dash sports and entertainment',
'Dash News','LTM TV','STV TV','Info TV','My Media Prime TV','Cam 10 TV',
'Vision4 TV','Galaxie TV','Equinoxe TV'
];
$Ordre_Channel = [];
for ($i=0; $i < count($Filtre_Tab) ; $i++) {
// organisation
for ($a=0; $a < count($Channel); $a++) {
// verification
if( $Filtre_Tab[$i] === $Channel[$a]->getName() ) array_push($Ordre_Channel,$Channel[$a]);
}
}
// renvois de la vue
return $this->render('home/channel.html.twig', [
'title'=>'Chaines Eligibles',
'element'=>$Ordre_Channel
]);
}
// recuperation de toute les sous caterogies
#[Route('/all/sub-category', name: 'all_sub_category')]
public function GetAllSubCategorie(EntityManagerInterface $entityManager): Response{
// recuperaton de la compagne active
$SubCategory = $entityManager->getRepository(Category::class)->findAll();
// renvois de la vue
return $this->render('home/sub_category.html.twig', [
'element' => $SubCategory,
'link'=>'Listcanditure_form_id',
'title'=> ['les CTA','Liste des Categories']
]);
}
// recuperation de toute les caterogies
#[Route('/story_tv', name: 'story_tv')]
public function GetStoryTV(): Response{
// renvois de la vue
return $this->render('home/story_tv.html.twig', [
'title'=> ['les CTA','L’AUBE DE LA TÉLÉVISION CAMEROUNAISE']
]);
}
// vu de la page about
#[Route('/about', name: 'about')]
public function Page_About(): Response{
// recuperation des donnees d'affichage
$Data = [
['icon'=>'bi bi-play-btn','number'=>13,'name'=>'CHAINES ELIGIBLES'],
['icon'=>'bi bi-tv','number'=>14,'name'=>'CATEGORIES'],
['icon'=>'bi bi-fast-forward-circle','number'=>34,'name'=>'SOUS-CATEGORIES'],
['icon'=>'bi bi-person-video3','number'=>100,'name'=>'CANDIDATURE'],
];
// renvois de la vue
return $this->render('home/about.html.twig', [
'title'=>"A PROPOS DE L'EVENEMENT",
'data'=>$Data
]);
}
// vu de la page du patronage
#[Route('/patronage', name: 'patronage')]
public function Page_MineCom(): Response{
// renvois de la vue
return $this->render('home/mincom.html.twig', ['title'=>"MINISTERE DE LA COMMUNICATION",]);
}
// vu de la page pour le live
#[Route('/live', name: 'live')]
public function Page_CT_live(): Response{
// renvois de la vue
return $this->render('home/live.html.twig', ['title'=>"Live CTA",]);
}
// vu de la page du Cameroon
#[Route('/cameroon', name: 'cameroon')]
public function Page_Cameroon(): Response{
// renvois de la vue
return $this->render('home/cameroun.html.twig', ['title'=>"A Propos du Cameroun",]);
}
// vu de la page du palis des sport de yaounde
#[Route('/palais_sport', name: 'palais_sport')]
public function Page_Palais_sport(): Response{
// renvois de la vue
return $this->render('home/palais_sport.html.twig', [
'title'=>"Le palais des Sport de Yaounde",
'Palais' => ['Palais-1.jpg','Palais-2.jpg','Palais-3.jpg']
]);
}
// vu de la page a Propos de Yaounde
#[Route('/yaounde', name: 'yaounde')]
public function Page_Yaounde(): Response{
// renvois de la vue
return $this->render('home/yaounde.html.twig',
[
'title'=>"A Propos de Yaounde",
'Yde_img'=> ['yde-1.jpg','yde-2.jpg','yde-3.webp']
]
);
}
// vu de la page a Propos de Maraboo
#[Route('/maraboo', name: 'maraboo')]
public function Page_Maraboo(): Response{
// renvois de la vue
return $this->render('home/maraboo.html.twig', ['title'=>"A Propos de Maraboo",]);
}
// recuperation des candidatures du CTA FormA
#[Route('/Listcanditure/form_a/{id}', name: 'Listcanditure_form_id')]
public function List_CandituresFormsA(EntityManagerInterface $entityManager, $id): Response{
// recuperation de la campagne de vote
$Candidature = $entityManager->getRepository(Category::class)->find($id);
// renvois de la vue
return $this->render('home/list_candidature.html.twig', [
'Candidatures' => $Candidature->getCandidatures(),
'Description' =>$Candidature->getCampagne(),
'Enable_vote' => true,
'title'=>['Categorie',"Categorie {$Candidature->getName()}",'Liste des Candidatures']
]);
}
// function des liste des sous categorie vu par un visiteur
#[Route('/SubCategory/{id}', name: 'SubCategory_id')]
public function Home_Consult_SubCategoryOfCategoryVisitor(EntityManagerInterface $entityManager,int $id): Response{
// recuperation des sous categorie de vote
$Sub_Category = $entityManager->getRepository(Campagne::class)->find($id);
// renvois a la vue des sous categorie
return $this->render('home/sub_category.html.twig', [
'element' => $Sub_Category->getCategories(),
'title'=>['Categorie',"Categorie {$Sub_Category->getName()}",'Liste des Categories']
]);
}
// recuperation des informations utils
#[Route('/utils', name: 'utils')]
public function GetInfoUtils(): Response{
// recuperaton de la compagne active
$Utils = [
['hotel'=>'HILTON HOTEL','img'=>'logo_hotel_8.png','link'=>'https://www.hilton.com/'],
['hotel'=>'LA FALAISE HOTEL','img'=>'logo_hotel_7.png','link'=>'https://www.lafalaisebonapriso.com/'],
['hotel'=>'DJEUGA PALACE','img'=>'logo_hotel_4.png','link'=>'https://www.djeuga.com/'],
['hotel'=>'SOMATEL HOTEL','img'=>'logo_hotel_6.png','link'=>'https://somatelhotel.com/'],
['hotel'=>'BOUM’S HOTEL','img'=>'logo_hotel_2.png','link'=>'https://www.bounshotels.com/index.php'],
['hotel'=>'MERINA HOTEL','img'=>'logo_hotel_1.png','link'=>'https://hotel-merina.com/fr'],
['hotel'=>'FRANCO HOTEL','img'=>'logo_hotel_3.png','link'=>'https://www.hotel-franco.com/'],
['hotel'=>'PRODIGES HOTEL','img'=>'logo_hotel_5.png','link'=>'https://prodigeshotel.com/fr/']
];
// renvois de la vue
return $this->render('home/utils.html.twig', [
'element' => $Utils,
'title'=> 'Liste des Information utils'
]);
}
// function des detaille sur une candidature cote visiteur
#[Route('/consult/detail/candidate/{id}', name: 'consult_detail_candidate')]
public function Home_Detail_Candidate(EntityManagerInterface $entityManager,int $id): Response
{
// recuperation de la campagne de vote
$Candidature = $entityManager->getRepository(Candidature::class)->find($id);
// recuperation de la campagne de vote
$AllCandidature = $entityManager->getRepository(Candidature::class)->findBy(["Category"=>$Candidature->getCategory()]);
// recuperation de l'activation des votes de la premiere phase
$Enable_vote = $entityManager->getRepository(EnablePhase::class)->findAll()[0];
// verification si la candidature exite toujours
if( $Candidature === null ){
$this->addFlash('error_user_exist',"cette utilisateur n'existe pas ou viens d'etre supprimer!");
}
// recuperation de la liste de question
$Questionary = new QuestionaryService();
return $this->render('home/detail_candidature.html.twig', [
'Candidature' => $Candidature,
'Questionary' => $Questionary->OnGetQuestionaryVote(),
'AllCandidature' => $AllCandidature,
'Enable_vote' => $Enable_vote->isPhaseOne(),
'AllVote'=>$Enable_vote,
'first_tour'=>true,
'title'=>"Candidature {$Candidature->getName()}"
]);
}
// function des detaille sur une candidature cote visiteur pour la 2e phase
#[Route('/consult/detail/candidate/phase_two/{id}', name: 'consult_detail_candidate_phase_two')]
public function Home_Detail_Candidate_PhaseTwo(EntityManagerInterface $entityManager,int $id): Response
{
// recuperation de la candidature de vote
$Candidature = $entityManager->getRepository(Candidature::class)->find($id);
// recuperation de la category de vote
$Category = $entityManager->getRepository(Category::class)->find($Candidature->getCategory()->getId());
// recuperation de l'activation des votes de la premiere phase
$Enable_vote = $entityManager->getRepository(EnablePhase::class)->findAll()[0];
// verification si la candidature exite toujours
if( $Candidature === null ){
$this->addFlash('error_user_exist',"cette utilisateur n'existe pas ou viens d'etre supprimer!");
}
// liste des vote par candidature
$all_vote = [];
// liste des candidatures definitive
$Def_Candidature = [];
// boucle et ajout des votes
for ($i= 0; $i < count($Category->getCandidatures()) ; $i++) {
count($Category->getCandidatures()[$i]->getVote()) !== 0 ?
array_push($all_vote,count($Category->getCandidatures()[$i]->getVote())) : null;
}
// filtre en decroissance du tableau
rsort($all_vote,SORT_NUMERIC);
// recuperation de la classification
for ($o = 0; $o < count($all_vote); $o++) {
// verification si cela est dasn l'interval permis
for ($a = 0; $a < count($Category->getCandidatures()) ; $a++) {
// verification s'il existe
if( count($Category->getCandidatures()[$a]->getVote()) === $all_vote[$o] ){
// recuperation de la candidature
array_push($Def_Candidature,$Category->getCandidatures()[$a]);
}
}
}
// recuperation de la liste limite
$Limit_Cand = [];
for ($k=0; $k < $Category->getNumber(); $k++) {
if( count($Def_Candidature) >= $k + 1 ) !in_array($Def_Candidature[$k],$Limit_Cand,true) ? array_push($Limit_Cand,$Def_Candidature[$k]):null;
}
// renvois de la vue
return count($Limit_Cand) === 0 ? $this->redirectToRoute('app_home'):
$this->render('home/detail_candidature.html.twig', [
'Candidature' => $Candidature,
'AllCandidature' => $Limit_Cand,
'Enable_vote' => $Enable_vote->isPhaseTwo(),
'AllVote'=>$Enable_vote,
'first_tour'=>false,
'title'=>"Candidature {$Candidature->getName()}"
]);
}
// function recuperation des candidatures du second tour
#[Route('/Listcanditure/second_tour/{id}', name: 'Listcanditure_second_tour_id')]
public function Listcanditure_SecondTour(EntityManagerInterface $entityManager, $id): Response{
// recuperation de la campagne de vote
$Candidature = $entityManager->getRepository(Category::class)->find($id);
// recuperation des candidatures
$Candidature->getCandidatures();
// liste des vote par candidature
$all_vote = [];
// liste des candidatures definitive
$Def_Candidature = [];
// boucle et ajout des votes
for ($i= 0; $i < count($Candidature->getCandidatures()) ; $i++) {
count( $Candidature->getCandidatures()[$i]->getVote()) !== 0 ?
array_push($all_vote,count($Candidature->getCandidatures()[$i]->getVote())) : null;
}
// filtre en decroissance du tableau
rsort($all_vote,SORT_NUMERIC);
// recuperation de la classification
for ($o = 0; $o < count($all_vote); $o++) {
// verification si cela est dasn l'interval permis
for ($a = 0; $a < count($Candidature->getCandidatures()) ; $a++) {
// verification s'il existe
if( count($Candidature->getCandidatures()[$a]->getVote()) === $all_vote[$o] ){
// recuperation de la candidature
array_push($Def_Candidature,$Candidature->getCandidatures()[$a]);
}
}
}
// recuperation de la liste limite
$Limit_Cand = [];
for ($k=0; $k < $Candidature->getNumber(); $k++){
if( count($Def_Candidature) >= $k + 1 ) !in_array($Def_Candidature[$k],$Limit_Cand,true) ? array_push($Limit_Cand,$Def_Candidature[$k]):null;
}
// renvois de la vue
return count($Limit_Cand) === 0 ? $this->redirectToRoute('app_home'):
$this->render('home/list_candidature.html.twig', [
'Candidatures' => $Limit_Cand,
'Description' => $Candidature->getCampagne(),
'Enable_vote' => false,
'title'=>['Categorie',"Categorie {$Candidature->getName()}",'Liste des Candidatures']
]);
}
// function recuperation des categories du second tour
#[Route('/all_category/second_tour', name: 'all_category_second_tour')]
public function Categorie_SecondTour(EntityManagerInterface $entityManager): Response{
// recuperaton de la compagne active
$SubCategory = $entityManager->getRepository(Category::class)->findAll();
// liste des candidatures definitive
$Def_Categorie = [];
// boucle
for ($i=0; $i < count($SubCategory) ; $i++) {
// liste des vote par candidature
$all_vote = $this->GetAllOfNomines($SubCategory[$i]);
// filtre en decroissance du tableau
rsort($all_vote,SORT_NUMERIC);
// verification si cela est dasn l'interval permis
for ($a=0; $a < $SubCategory[$i]->getNumber() ; $a++) {
// verification s'il existe
$number_vote = count($SubCategory[$i]->getCandidatures()[$a]->getVote());
if( in_array($number_vote, $all_vote) && $number_vote > 0){
// recuperation de la categorie
if( !in_array($SubCategory[$i],$Def_Categorie) ) array_push($Def_Categorie,$SubCategory[$i]);
}
}
// renvois des categories lister de la 2e phase
if( count($SubCategory) === ( $i + 1 ) ){
// renvois de la vue
return $this->render('home/sub_category.html.twig', [
'element' => $Def_Categorie,
'link'=>'Listcanditure_second_tour_id',
'title'=> ['les CTA','Suivie des votes']
]);
}
}
// retour vers la home page
return $this->redirectToRoute('app_home');
}
// function de recuperation du nombre des votes par candidatures
private function GetAllOfNomines( Category $Candidature):Array{
$all_vote = [];
// boucle
for ($i= 0; $i < count($Candidature->getCandidatures()) ; $i++) {
// ajout des votes
array_push($all_vote,count($Candidature->getCandidatures()[$i]->getVote()));
}
return $all_vote;
}
// functions access au categorie de vote
#[Route('/get_categorie_vote', name: 'get_categorie_vote')]
public function GetCategoriesVote(EntityManagerInterface $entityManager): Response{
// recuperation de l'activation des votes de la premiere phase
$Enable_vote = $entityManager->getRepository(EnablePhase::class)->findAll()[0];
// redirection vers la categorie respective
return $Enable_vote->isPhaseTwo() ?
$this->redirectToRoute('all_category_second_tour') :
$this->redirectToRoute('all_sub_category');
}
/******************************************************************************************************************************
*
* fin section des vues du visiteur
*
* *****************************************************************************************************************************/
// function recuperation de tout les categorie
#[Route('/admin/consult/campagne', name: 'consult_campagne')]
public function Home_Consult_Categorie(EntityManagerInterface $entityManager): Response
{
$repository = $entityManager->getRepository(Campagne::class);
$categorie = $repository->findAll();
return $this->render('dashboard/home_consult_campagne.html.twig', [
'Campagne' => $categorie,
]);
}
// function activation et desactivation d'une categorie
#[Route('/admin/valid/campagne/{id}', name: 'valid_campagne_id')]
public function CheckedAndUncheck_Categorie(int $id,ManagerRegistry $manager): Response
{
// verification du paramettre
if(!(int)$id){
$this->addFlash('error_not_params',"Oups! une erreur inhabituel s'est produite");
return $this->redirectToRoute('consult_profil');
}
$categorie_check = $manager->getRepository(Campagne::class)->find($id);
// verification de l'identite unique
if( $categorie_check === null ){
$this->addFlash('error_campagne_exist',"cette campagne n'existe pas ou viens d'etre supprimer!");
return $this->redirectToRoute('consult_campagne');
}
// changement du statut de la campagne
$categorie_check->setStatus(!$categorie_check->isStatus());
$manager->getManager()->flush();
return $this->redirectToRoute('consult_campagne');
}
// function recuperation de tout les utilisateurs
#[Route('/admin/consult/profil', name: 'consult_profil')]
public function Home_Consult_Profil(EntityManagerInterface $entityManager): Response
{
$repository = $entityManager->getRepository(User::class);
$Admin = $repository->findAll();
return $this->render('dashboard/home_consult_profil.html.twig', [
'Admin' => $Admin,
]);
}
// function mise a jour des informations d'un utilisateur
#[Route('/admin/valid/profil/{id}', name: 'valid_profil_id')]
public function CheckedAndUncheck_Profil(int $id,ManagerRegistry $manager): Response
{
// verification du paramettre
if(!(int)$id){
$this->addFlash('error_not_params',"Oups! une erreur inhabituel s'est produite");
return $this->redirectToRoute('consult_profil');
}
$repository = $manager->getRepository(User::class);
$user_check = $repository->find($id);
// verification de l'identite unique
if( $user_check === null ){
$this->addFlash('error_user_exist',"cette utilisateur n'existe pas ou viens d'etre supprimer!");
return $this->redirectToRoute('consult_profil');
}
// changement du statut de l'utilisateur
$user_check->setStatut(!$user_check->isStatut());
$manager->getManager()->flush();
return $this->redirectToRoute('consult_profil');
}
// function recuperation de tout les sous categorie
#[Route('/admin/consult/sub-categorie', name: 'consult_subcategorie')]
public function Home_Consult_AllSubCategory(EntityManagerInterface $entityManager): Response
{
$repository = $entityManager->getRepository(Category::class);
$Categorie = $repository->findAll();
return $this->render('dashboard/home_consult_categorie.html.twig', [
'Sub_Category' => $Categorie,
]);
}
// function des liste de candidature cote admin
#[Route('/admin/consult/campagne/candidate/{id}', name: 'consult_campagne_candidate')]
public function Home_Consult_Candidate(EntityManagerInterface $entityManager,int $id): Response
{
// recuperation de la campagne de vote
$Campagne = $entityManager->getRepository(Category::class)->find($id)->getCandidatures();
// renvois de la liste des candidature a la vue
return $this->render('dashboard/home_consult_candidate.html.twig', ['Candidature' => $Campagne]);
}
// function des liste des sous categorie
#[Route('/admin/consult/SubCategory/{id}', name: 'consult_SubCategory_id')]
public function Home_Consult_SubCategoryOfCategoryAdmin(EntityManagerInterface $entityManager,int $id): Response
{
// recuperation des sous categorie de vote
$Sub_Category = $entityManager->getRepository(Campagne::class)->find($id);
// renvois a la vue des sous categorie
return $this->render('dashboard/home_consult_categorie.html.twig', ['Sub_Category' => $Sub_Category->getCategories()]);
}
// function de la page dashbord
#[Route('/admin/dashbord', name: 'home_dashbord')]
public function Home_Consult_Vote(EntityManagerInterface $entityManager): Response
{
// recuperation de l'activation des votes de la premiere phase
$Enable_vote = $entityManager->getRepository(EnablePhase::class)->findAll()[0];
return $this->render('dashboard/index.html.twig', [
'Enable_vote' => $Enable_vote,
]);
}
// function recuperation de tout les Chaines
#[Route('/admin/consult/channel', name: 'consult_channel')]
public function Home_Consult_Channel(EntityManagerInterface $entityManager): Response
{
$repository = $entityManager->getRepository(Channel::class);
$Channel = $repository->findAll();
return $this->render('dashboard/home_consult_channel.html.twig', [
'Channel' => $Channel,
]);
}
// function recuperation de tout les Images
#[Route('/admin/consult/image', name: 'consult_image')]
public function Home_Consult_Images(EntityManagerInterface $entityManager): Response
{
$repository = $entityManager->getRepository(Image::class);
$Images = $repository->findAll();
return $this->render('dashboard/home_consult_image.html.twig', [
'Images' => $Images,
]);
}
// function recuperation de tout les Chaines
#[Route('/test', name: 'test')]
public function PageTest(EntityManagerInterface $entityManager): Response
{
return $this->render('home/detail_candidature.html.twig', [
'title'=>"A propos de l'Evement",
]);
}
}