src/Controller/RegistrationsController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\Mailer\MailerInterface;
  9. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  10. use Symfony\Component\Mime\Email;
  11. use Symfony\Component\Mime\Address;
  12. use OlaSoft\Common;
  13. use App\Entity\Registrations;
  14. use App\Form\RegistrationsEditStatusType;
  15. /**
  16.  * @Route("/os-admin/registrations", name="registrations-")
  17.  */
  18. class RegistrationsController extends AbstractController
  19. {
  20.     public $title "Gestion des pré-inscriptions reçues";
  21.     public $listTitle "Liste de toutes les pré-inscriptions";
  22.     public $editTitle "";
  23.     public $viewTitle "Aperçu d'une pré-inscription";
  24.     /**
  25.      * @Route("/", name="admin")
  26.      */
  27.     public function admin(Request $request)
  28.     {
  29.         $offset $request->get('offset') ?? 1;
  30.         $keyword $request->get('q');
  31.         $offset--;
  32.         $limit 100;
  33.         $of $offset*$limit;
  34.         $em $this->getDoctrine()->getManager();
  35.         $query =  $em->getRepository(Registrations::class)->createQueryBuilder('o');
  36.         if($keyword$query $query->andWhere('(o.fname like :k or o.lname like :k)')
  37.             ->setParameter('k','%'.$keyword.'%');
  38.         $count $query->select('count(o.id)')->getQuery()->getResult()[0][1];
  39.         $list $query->select('o')->setMaxResults($limit)->setFirstResult($of)->orderBy('o.id','desc')->getQuery()->getResult();
  40.         $ajax $request->isXmlHttpRequest();
  41.         $response $this->render('Admin\index.html.twig',[
  42.             'list' => $list,
  43.             'ajax'=>$ajax,
  44.             'count'=>$count,
  45.             'table_limit'=>$limit,
  46.             'offset'=>$offset,
  47.             'title'=>$this->title,
  48.             'subtitle'=>$this->listTitle,
  49.             'noAddBtn'=>true
  50.         ]);
  51.         return $ajax ?
  52.             new Response(\json_encode([
  53.                 'content'=>$response->getContent(),
  54.                 'title'=>$this->title,
  55.                 'subtitle'=>$this->listTitle
  56.             ]))
  57.         : $response;
  58.     }
  59.     /**
  60.      * @Route("/{id}/edit", name="edit")
  61.      */
  62.     public function edit(Registrations $itemMailerInterface $mailerRequest $request)
  63.     {
  64.         $ajax $request->isXmlHttpRequest();
  65.         $status $item->getStatus();
  66.         if($status && $status->getIsFinalStatus()){
  67.             $this->addFlash("error","Vous ne pouvez pas éditer le statut d'une pré-inscription clôturée.");
  68.             return $ajax ? new Response(false) : $this->redirectToRoute('registrations-admin');
  69.         }
  70.         $em $this->getDoctrine()->getManager();
  71.         $form $this->createForm(RegistrationsEditStatusType::class, $item);
  72.         $form->handleRequest($request);
  73.         if ($form->isSubmitted() && $form->isValid()){
  74.             $em->persist($item);
  75.             $em->flush();
  76.             $this->addFlash("notice","Enregistrement effectué avec succès.");
  77.             if($item->getStatus()->getIsFinalStatus()){
  78.                 $item->setClosingDate(new \DateTime);
  79.                 $em->persist($item);
  80.                 $em->flush();
  81.                 $msg $item->getStatus()->getOutgoingMessage();
  82.                 $params = [
  83.                     "{{date}}" => Common::FrDate($item->getDate()),
  84.                     "{{name}}" => $item->getName(),
  85.                     "{{code}}" => $item->getCode(),
  86.                 ];
  87.                 if($msg){
  88.                     $email = (new TemplatedEmail())
  89.                         ->to(new Address($item->getEmail(),$item->getName()))
  90.                         ->priority(Email::PRIORITY_HIGH)
  91.                         ->subject($this->get('parameter_bag')->get('sitename')." - Inscription validée")
  92.                         ->htmlTemplate('Mails/registration.html.twig')
  93.                         ->context(['item' => $item'msg'=>$msg'params'=>$params]);
  94.                     $mailer->send($email);
  95.                     $this->addFlash("notice","Notification envoyée avec succès.");
  96.                 }
  97.             }
  98.             return $this->redirectToRoute('registrations-admin');
  99.         }
  100.         $response $this->render('Admin\edit.html.twig',[
  101.             'form'=>$form->createView(),
  102.             'ajax'=>$ajax,
  103.             "title"=> $this->title,
  104.             "subtitle"=>$this->editTitle
  105.         ]);
  106.         return $ajax ?
  107.             new Response(\json_encode([
  108.                 'content'=>$response->getContent(),
  109.                 "title"=> $this->title,
  110.                 "subtitle"=>$this->editTitle
  111.             ]))
  112.         : $response;
  113.      }
  114.     /**
  115.      * @Route("/view/{id}", name="view")
  116.      */
  117.     public function view(Request $requestRegistrations $item)
  118.     {
  119.         $request $this->get('request_stack')->getCurrentRequest();
  120.         $ajax $request->isXmlHttpRequest();
  121.         $response $this->render('Admin\view.html.twig',[
  122.             'item' => $item,
  123.             'ajax'=>$ajax,
  124.             'title'=>$this->title,
  125.             'subtitle'=>'Pré-inscription de '.$item->getFName().' '.$item->getLName()
  126.         ]);
  127.         return $ajax ?
  128.             new Response(\json_encode([
  129.                 'content'=>$response->getContent(),
  130.                 'title'=>$this->title,
  131.                 'subtitle'=>'Pré-inscription de '.$item->getFName().' '.$item->getLName()
  132.             ]))
  133.         : $response;
  134.     }
  135. }