<?php
namespace App\Controller;
use App\Entity\Division;
use App\Repository\DivisionRepository;
use App\Form\DivisionType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* @Route("/division")
*/
class DivisionController extends AbstractController
{
/**
* @Route("/", name="division_index", methods={"GET"})
*/
public function index(): Response
{
$divisions = $this->getDoctrine()
->getRepository(Division::class)
->findAll();
return $this->render('division/index.html.twig', [
'divisions' => $divisions,
'is_active' => true,
'is_open' => true
]);
}
/**
* @Route("/new", name="division_new", methods={"GET","POST"})
*/
public function new(Request $request, DivisionRepository $divisionRepository): Response
{
$division = new Division();
$form = $this->createForm(DivisionType::class, $division);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$parent = $divisionRepository->find( $request->request->get('parent')); //recuperation du parent
$division->setIntitule(strtoupper($division->getIntitule()));
$division->setLibelle(strtoupper($division->getLibelle()));
$division->setGauche($parent->getDroite()); //definition de la borne gauche du fils
$division->setDroite($parent->getDroite()+1); //definition de la borne droite du fils
$division->setNiveau($parent->getNiveau()+1); //definition du niveau dans la hierachie
//contruction des requestes de mise a jour des nouvelles bornes apres insetion
$query1 = "UPDATE division SET gauche = gauche + 2 WHERE gauche >= :droite";
$query2 = "UPDATE division SET droite = droite + 2 WHERE droite >= :droite";
$conn = $this->getDoctrine()->getManager()->getConnection(); //connection
$stmt1 = $conn->prepare($query1); //preparation de la requete 1
$stmt2 = $conn->prepare($query2);//preparation de la requete2
$stmt1->execute(['droite'=>$parent->getDroite()]); //excution de la requete 1
$stmt2->execute(['droite'=>$parent->getDroite()]);//execution de la requete2
//connection pour l'insertion du nouveau fils
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($division);
$entityManager->flush();
return $this->redirectToRoute('division_index');
}
return $this->render('division/new.html.twig', [
'division' => $division,
'divisions' => $divisionRepository->findAll(),
'form' => $form->createView(),
'is_active' => true,
'is_open' => true
]);
}
/**
* @Route("/{id}", name="division_show", methods={"GET"})
*/
public function show(Division $division): Response
{
return $this->render('division/show.html.twig', [
'division' => $division,
'is_active' => true,
'is_open' => true
]);
}
/**
* @Route("/{id}/edit", name="division_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Division $division): Response
{
$form = $this->createForm(DivisionType::class, $division);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('division_index');
}
return $this->render('division/edit.html.twig', [
'division' => $division,
'form' => $form->createView(),
'is_active' => true,
'is_open' => true
]);
}
/**
* @Route("/{id}", name="division_delete", methods={"DELETE"})
*/
public function delete(Request $request, Division $division): Response
{
if ($this->isCsrfTokenValid('delete'.$division->getId(),
$request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($division);
$entityManager->flush();
}
return $this->redirectToRoute('division_index');
}
/**
* @Route("/{id}/ajax", name="division_ajax", methods={"GET"})
*/
public function ajax(Request $request, Division $division, DivisionRepository $diviR)
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array(
'status' => 'Error',
'message' => 'Error'),
400);
}
if(isset($request->request))
{
$fille = $diviR->getDivisionFille($division->getNiveau());
if ($fille === null)
{
// Looks like something went wrong
return new JsonResponse(array(
'status' => 'Null',
'message' => 'Division not found!'),
200);
}
// Send all this back to client
return new JsonResponse(array(
'status' => 'OK',
'message' => $fille->getLibelle()),
200);
}
// If we reach this point, it means that something went wrong
return new JsonResponse(array(
'status' => 'Error',
'message' => 'Error'),
400);
}
}