<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Address;
use OlaSoft\Common;
use App\Entity\Registrations;
use App\Form\RegistrationsEditStatusType;
/**
* @Route("/os-admin/registrations", name="registrations-")
*/
class RegistrationsController extends AbstractController
{
public $title = "Gestion des pré-inscriptions reçues";
public $listTitle = "Liste de toutes les pré-inscriptions";
public $editTitle = "";
public $viewTitle = "Aperçu d'une pré-inscription";
/**
* @Route("/", name="admin")
*/
public function admin(Request $request)
{
$offset = $request->get('offset') ?? 1;
$keyword = $request->get('q');
$offset--;
$limit = 100;
$of = $offset*$limit;
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository(Registrations::class)->createQueryBuilder('o');
if($keyword) $query = $query->andWhere('(o.fname like :k or o.lname like :k)')
->setParameter('k','%'.$keyword.'%');
$count = $query->select('count(o.id)')->getQuery()->getResult()[0][1];
$list = $query->select('o')->setMaxResults($limit)->setFirstResult($of)->orderBy('o.id','desc')->getQuery()->getResult();
$ajax = $request->isXmlHttpRequest();
$response = $this->render('Admin\index.html.twig',[
'list' => $list,
'ajax'=>$ajax,
'count'=>$count,
'table_limit'=>$limit,
'offset'=>$offset,
'title'=>$this->title,
'subtitle'=>$this->listTitle,
'noAddBtn'=>true
]);
return $ajax ?
new Response(\json_encode([
'content'=>$response->getContent(),
'title'=>$this->title,
'subtitle'=>$this->listTitle
]))
: $response;
}
/**
* @Route("/{id}/edit", name="edit")
*/
public function edit(Registrations $item, MailerInterface $mailer, Request $request)
{
$ajax = $request->isXmlHttpRequest();
$status = $item->getStatus();
if($status && $status->getIsFinalStatus()){
$this->addFlash("error","Vous ne pouvez pas éditer le statut d'une pré-inscription clôturée.");
return $ajax ? new Response(false) : $this->redirectToRoute('registrations-admin');
}
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(RegistrationsEditStatusType::class, $item);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$em->persist($item);
$em->flush();
$this->addFlash("notice","Enregistrement effectué avec succès.");
if($item->getStatus()->getIsFinalStatus()){
$item->setClosingDate(new \DateTime);
$em->persist($item);
$em->flush();
$msg = $item->getStatus()->getOutgoingMessage();
$params = [
"{{date}}" => Common::FrDate($item->getDate()),
"{{name}}" => $item->getName(),
"{{code}}" => $item->getCode(),
];
if($msg){
$email = (new TemplatedEmail())
->to(new Address($item->getEmail(),$item->getName()))
->priority(Email::PRIORITY_HIGH)
->subject($this->get('parameter_bag')->get('sitename')." - Inscription validée")
->htmlTemplate('Mails/registration.html.twig')
->context(['item' => $item, 'msg'=>$msg, 'params'=>$params]);
$mailer->send($email);
$this->addFlash("notice","Notification envoyée avec succès.");
}
}
return $this->redirectToRoute('registrations-admin');
}
$response = $this->render('Admin\edit.html.twig',[
'form'=>$form->createView(),
'ajax'=>$ajax,
"title"=> $this->title,
"subtitle"=>$this->editTitle
]);
return $ajax ?
new Response(\json_encode([
'content'=>$response->getContent(),
"title"=> $this->title,
"subtitle"=>$this->editTitle
]))
: $response;
}
/**
* @Route("/view/{id}", name="view")
*/
public function view(Request $request, Registrations $item)
{
$request = $this->get('request_stack')->getCurrentRequest();
$ajax = $request->isXmlHttpRequest();
$response = $this->render('Admin\view.html.twig',[
'item' => $item,
'ajax'=>$ajax,
'title'=>$this->title,
'subtitle'=>'Pré-inscription de '.$item->getFName().' '.$item->getLName()
]);
return $ajax ?
new Response(\json_encode([
'content'=>$response->getContent(),
'title'=>$this->title,
'subtitle'=>'Pré-inscription de '.$item->getFName().' '.$item->getLName()
]))
: $response;
}
}