<?php
namespace App\Controller;
use App\Entity\TTraitatolTra;
use App\Form\TTraitatolTraType;
use App\Entity\TrEspecevaleurEsv;
use App\Filter\Entity\traitSearch;
use App\Form\TTraitatolTraTypeEdit;
use App\Entity\TjTraitatolespeceTre;
use App\Filter\Form\traitFilterType;
use App\Entity\TjTraitatolsynonymeTrs;
use App\Repository\TrEspeceRepository;
use App\Repository\TrSourceRepository;
use App\Repository\TraitatolRepository;
use App\Form\TjTraitatolsynonymeTrsType;
use Knp\Component\Pager\PaginatorInterface;
use App\Repository\TrEspecevaleurRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Repository\TjTraitatolespeceRepository;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\TjTraitatolsynonymeRepository;
use Symfony\Component\HttpFoundation\JsonResponse;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
/**
* @Route("/traitatol")
*/
class TTraitatolTraController extends AbstractController
{
/**
* @Route("/", name="traitatol_index", methods={"GET", "POST"})
*/
public function index(TraitatolRepository $traitatolRepository, Request $request, PaginatorInterface $paginator): Response
{
$search = new traitSearch();
$form = $this->createForm(traitFilterType::class, $search);
$form->handleRequest($request);
$maxItemPerPage = $request->get('maxItemPerPage');
if ($maxItemPerPage == "") $maxItemPerPage = 10;
$entities = $traitatolRepository->findAllVisibleQuery($search);
$nb = count($entities);
$entitiesPaginated = $paginator->paginate(
$entities,
$request->query->getInt('page', 1),
$maxItemPerPage
);
$data = [
'traits' => $entitiesPaginated,
'nb' => $nb,
'maxItemPerPage' => $maxItemPerPage,
'form' => $form->createView()
];
$rep = $this->render("t_traitatol_tra/index.html.twig", $data);
return $rep;
}
//création d'un trait atol
/**
* @Route("/new", name="traitatol_new", methods={"GET","POST"})
*/
public function new(Request $request, TjTraitatolespeceRepository $traitEspeceRepository, TjTraitatolespeceRepository $especeRepository, TrEspecevaleurRepository $especeValeurRep, TrSourceRepository $sourceRepository): Response
{
$traitatol = new TTraitatolTra();
$source = $sourceRepository->findOneBySourceLibelle('INRAE');
$traitatol->setSource($source);
$form = $this->createForm(TTraitatolTraType::class, $traitatol);
$especes = $especeRepository->findAllByTypeEspece();
$form->handleRequest($request);
$em = $this->getDoctrine()->getManager();
if ($form->isSubmitted() && $form->isValid()) {
foreach ($especes as $espece) {
$idEspece = $espece->getEspeceId();
if (isset($_POST["espece-" . $idEspece])) {
$valeur = $_POST["espece-" . $idEspece];
$especeValeur = $especeValeurRep->findOneBy(array("valeurLibelle" => $valeur));
$traitATOLEspeces = $traitEspeceRepository->findBy(array("espece" => $espece, "especeTrait" => $traitatol));
if (count($traitATOLEspeces) > 0) {
foreach ($traitATOLEspeces as $traitATOLEspece) {
$em->remove($traitATOLEspece);
$em->flush();
}
}
$traitATOLEspece = new TjTraitatolespeceTre();
$traitATOLEspece->setEspeceValeur($especeValeur);
$traitATOLEspece->setEspece($espece);
$traitATOLEspece->setEspeceTrait($traitatol);
$em->persist($traitATOLEspece);
}
}
$em->persist($traitatol);
$em->flush();
//redirection route selon bouton cliqué
if ($form->getClickedButton() === $form->get('saveAndAdd')) {
return $this->redirectToRoute('traitatolsynonyme_new', ['atolId' => $traitatol->getTraitId()]);
} elseif ($form->getClickedButton() === $form->get('saveAndSee')) {
return $this->redirectToRoute('traitatol_index');
}
}
return $this->render('t_traitatol_tra/new.html.twig', [
'traitatol' => $traitatol,
'especes' => $especes,
'form' => $form->createView()
]);
}
//ajout d'un trait fils
/**
* @Route("/ajouter/{atolId}", name="traitatol_new2", methods={"GET","POST"})
* @Entity("TTraitatolTra", expr="repository.find(atolId)")
* @ParamConverter("TTraitatolTra", options={"id"="atolId"})
*/
public function new2(Request $request, $atolId = null, TraitatolRepository $traitatolRepository, TjTraitatolespeceRepository $especeRepository, TrEspecevaleurRepository $especeValeurRep, TrSourceRepository $sourceRepository, TjTraitatolespeceRepository $traitEspeceRepository): Response
{
$traitatol = new TTraitatolTra();
$em = $this->getDoctrine()->getManager();
$atolId = $request->attributes->get('atolId');
$traitId = $traitatolRepository->getTraitId($atolId);
$entityATOL = $traitatolRepository->find($traitId->getTraitId());
$traitatol->addParent($entityATOL);
$source = $sourceRepository->findOneBySourceLibelle('INRAE');
$traitatol->setSource($source);
$especes = $especeRepository->findAllByTypeEspece();
$form = $this->createForm(TTraitatolTraType::class, $traitatol);;
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
foreach ($especes as $espece) {
$idEspece = $espece->getEspeceId();
if (isset($_POST["espece-" . $idEspece])) {
$valeur = $_POST["espece-" . $idEspece];
$especeValeur = $especeValeurRep->findOneBy(array("valeurLibelle" => $valeur));
$traitATOLEspeces = $traitEspeceRepository->findBy(array("espece" => $espece, "especeTrait" => $traitatol));
if (count($traitATOLEspeces) > 0) {
foreach ($traitATOLEspeces as $traitATOLEspece) {
$em->remove($traitATOLEspece);
$em->flush();
}
}
$traitATOLEspece = new TjTraitatolespeceTre();
$traitATOLEspece->setEspeceValeur($especeValeur);
$traitATOLEspece->setEspece($espece);
$traitATOLEspece->setEspeceTrait($traitatol);
$em->persist($traitATOLEspece);
}
}
$em->persist($traitatol);
$em->flush();
if ($form->getClickedButton() === $form->get('saveAndAdd')) {
return $this->redirectToRoute('traitatolsynonyme_new', ['atolId' => $traitatol->getTraitId()]);
} elseif ($form->getClickedButton() === $form->get('saveAndSee')) {
return $this->redirectToRoute('traitatol_index');
}
}
return $this->render('t_traitatol_tra/new.html.twig', [
'entity' => $traitatol,
'especes' => $especes,
'form' => $form->createView(),
]);
}
/**
* @Route("/{atolId}", name="traitatol_show", methods={"GET"}, options={ "expose": "true"})
*/
public function show(TTraitatolTra $tTraitatolTra): Response
{
return $this->render('t_traitatol_tra/show.html.twig', [
't_traitatol_tra' => $tTraitatolTra,
]);
}
/**
* @Route("/{atolId}/edit", name="traitatol_edit", methods={"GET","POST"})
* @ParamConverter("TTraitatolTra", options={"id"="atolId"})
*/
public function edit(Request $request, TTraitatolTra $traitatol, TrEspecevaleurRepository $especeValeurRep, TjTraitatolespeceRepository $traitEspeceRepository, TrEspeceRepository $especeRep): Response
{
$form = $this->createForm(TTraitatolTraTypeEdit::class, $traitatol);
$form->handleRequest($request);
$especes = $especeRep->findAll();
$traitsEspece = $traitEspeceRepository->findBy(array("especeTrait" => $traitatol));
$em = $this->getDoctrine()->getManager();
if ($form->isSubmitted() && $form->isValid()) {
foreach ($especes as $espece) {
$idEspece = $espece->getEspeceId();
if (isset($_POST["espece-" . $idEspece])) {
$valeur = $_POST["espece-" . $idEspece];
$especeValeur = $especeValeurRep->findOneBy(array("valeurLibelle" => $valeur));
$traitATOLEspeces = $traitEspeceRepository->findBy(array("espece" => $espece, "especeTrait" => $traitatol));
if (count($traitATOLEspeces) > 0) {
foreach ($traitATOLEspeces as $traitATOLEspece) {
$em->remove($traitATOLEspece);
$em->flush();
}
}
$traitATOLEspece = new TjTraitatolespeceTre();
$traitATOLEspece->setEspeceValeur($especeValeur);
$traitATOLEspece->setEspece($espece);
$traitATOLEspece->setEspeceTrait($traitatol);
$em->persist($traitATOLEspece);
}
}
$em->persist($traitatol);
$em->flush();
$this->addFlash('message', 'Trait ' . $traitatol->getTraitNom() . ' modifié avec succès.');
return $this->redirectToRoute('traitatol_index');
}
return $this->render('t_traitatol_tra/edit.html.twig', [
'traitatol' => $traitatol,
"traitsEspece" => $traitsEspece,
'especes' => $especes,
'form' => $form->createView(),
]);
}
/**
* @Route("/{atolId}", name="traitatol_delete", methods={"POST"})
*/
public function delete(Request $request, TTraitatolTra $traitatol): Response
{
if ($this->isCsrfTokenValid('delete' . $traitatol->getAtolId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($traitatol);
$entityManager->flush();
}
return $this->redirectToRoute('traitatol_index');
}
/**
* Find the next AtolID
*
* @Route("/selectAtolId/",name="traitatol_selectid", options={"expose"=true}, methods={"POST"})
*/
public function selectAtolIdAction(Request $request, TraitatolRepository $traitatolRepository)
{
$em = $this->getDoctrine()->getManager();
$entities = $traitatolRepository->getLast();
// if (!$entity) {
// throw $this->createNotFoundException('Unable to find Maladie entity.');
// }
$value = "";
foreach ($entities as $entity)
$val = $entity->getAtolId();
list($atol, $idAtol) = explode('_', $val);
$idAtol2 = intval($idAtol) + 1;
$zero = "";
for ($i = strlen($idAtol2); $i < strlen($idAtol); $i++) $zero .= "0";
$value = 'ATOL_' . $zero . $idAtol2;
$data['value'] = $value;
$response = new JsonResponse();
$response->setData($data);
return $response;
}
}