<?php
namespace App\Controller;
use App\Entity\Contact;
use App\Entity\Formation\Timetable;
use App\Entity\User;
use App\Form\ContactType;
use App\Form\Tutoring\CoursesType;
use App\Repository\ContactRepository;
use App\Repository\Formation\ActivityRepository;
use App\Repository\Formation\CategoryRepository;
use App\Repository\NewsRepository;
use App\Repository\Tutoring\StudentRepository;
use App\Repository\Tutoring\SubjectRepository;
use App\Entity\Tutoring\Student;
use App\Form\Tutoring\StudentType;
use App\Entity\Tutoring\Course;
use App\Repository\UserRepository;
use App\Service\PrintLogService;
use App\Service\SchoolyearService;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Ensepar\Html2pdfBundle\Factory\Html2pdfFactory;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
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 Symfony\Component\Yaml\Yaml;
class DefaultController extends AbstractController
{
Public function __construct(){}
#[Route(path: '/maintenance', name: 'hs_public_maintenance', options: ['expose' => true])]
public function maintenanceAction()
{
return $this->render('default/maintenance.html.twig');
}
#[Route(path: '/', name: 'hs_public_index', options: ['expose' => true])]
public function indexAction(
StudentRepository $studentRepository,
ActivityRepository $activiteRepository,
NewsRepository $newsRepository,
CategoryRepository $categoryRepository,
Request $request)
{
$news=$newsRepository->findBy(['published'=>true, 'featured'=>true], ['createAt' => 'DESC'], 3);
$categories = $categoryRepository->findBy(['published'=>true]);
$featuredActivities=[];
foreach ($categories as $category) {
$activites=$category->getLatestFeaturedActivities(4);
if (!$activites->isEmpty()) {
$featuredActivities[$category->getId()]=[
'category'=>$category,
'activites' => $activites
];}
}
return $this->render('default/index.html.twig', ['categories'=>$categories, 'news'=>$news, 'featuredActivities'=>$featuredActivities, 'current'=>'home']);
}
#[Route(path: '/about-us', name: 'hs_public_about', options: ['expose' => true])]
public function aboutAction()
{
return $this->render('default/about.html.twig', ['current'=>'about']);
}
#[Route(path: '/contact', name: 'hs_public_contact', options: ['expose' => true])]
public function contactAction(Request $request, ContactRepository $contactRepository)
{
$contact = new Contact();
$form = $this->createForm(ContactType::class, $contact);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contactRepository->save($contact, true);
$this->addFlash('success', 'Votre message a bien été envoyé');
return $this->redirectToRoute('hs_public_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('default/contact.html.twig', [
'contact' => $contact,
'form' => $form,
'current'=>'contact'
]);
}
#[Route(path: '/contact-ajax', name: 'hs_public_contact_ajax', options: ['expose' => true])]
public function contactAjaxAction(Request $request, ContactRepository $contactRepository)
{
$nom=$request->request->get("nom");
$phone=$request->request->get("phone");
$contact=new Contact();
$contact->setType('call_me');
$contact->setDocs('Appelez moi s\'il vous plaît');
$contact->setName($nom);
$contact->setPhone($phone);
$contactRepository->save($contact, true);
$message="<p class=\"introduction\">";
$message.="Merci ".$contact->getName()."</p>";
$message.="<p>Votre message a bien été envoyé. Nous prendrons contact avec vous dans les plus brefs délais.</p>";
return new Response($message);
}
public function menuAction($current, CategoryRepository $rep_category)
{
$categorys = $rep_category->findBy(['published' => true]);
$cats = [];
foreach ($categorys as $category) {
$valide = false;
if (!$category->getActivites()->isEmpty()) {
foreach ($category->getActivites() as $activite) {
if ($activite->isPublished()) {
$valide = true;
}
}
}
if ($valide) {
$cats[] = $category;
}
}
return $this->render(
'default/menu.html.twig',
array(
'categorys' => $cats,
'current' => $current
)
);
}
public function footerLinkAction(CategoryRepository $rep_category)
{
$categorys = $rep_category->findBy(['published' => true]);
$cats = [];
foreach ($categorys as $category) {
$valide = false;
if (!$category->getActivites()->isEmpty()) {
/** @var Activite $activite */
foreach ($category->getActivites() as $activite) {
if ($activite->isPublished()) {
$valide = true;
}
}
}
if ($valide) {
$cats[] = $category;
}
}
return $this->render(
'default/footer_link.html.twig',
array(
'categorys' => $cats,
)
);
}
#[Route(path: '/emploi-du-temps/{slug}.pdf', name: 'hs_public_schedule', options: ['expose' => true])]
public function scheduleAction(Timetable $schedule, Html2pdfFactory $html2pdfFactory)
{
$jours= ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"];
$html = $this->renderView('Admin/Training/Schedule/pdf.html.twig', ['groupe'=>$schedule->getGroupe(), 'schedule'=>$schedule, 'days'=>$jours]);
$html2pdf = $html2pdfFactory->create('L', 'A4', 'fr', true, 'UTF-8');
$html2pdf->pdf->SetDisplayMode('real');
$html2pdf->pdf->SetTitle('Emploi du temps de '.$schedule->getGroupe());
$html2pdf->writeHTML($html);
return new Response($html2pdf->Output('emploi_du_temps_'.$schedule->getId().'.pdf'), 200, ['Content-Type' => 'application/pdf']);
}
#[Route('/install', name: 'hs_training_center_system_install', options: ['expose' => true], defaults: ['role' => 'all'])]
public function systemInstall(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $passwordEncoder): Response
{
$user=new User();
$user->addRole('ROLE_WEBMASTER');
$user->setUsername('admin@hssolutions.ma');
$user->setEmail('admin@hssolutions.ma');
$user->setName('DADA Abdelouahab');
$user->setFirstName('Abdelouahab');
$user->setLastName('DADA');
$user->setPublished(true);
$user->setPassword(
$passwordEncoder->hashPassword(
$user,
'Admin@0824'
)
);
$userRepository->save($user, true);
return $this->redirectToRoute('hs_training_center_dashboard');
}
}