From b65a4d34a1b8b1e0a4d4fb7caaf4852d30e008cd Mon Sep 17 00:00:00 2001 From: Cyril L'Orphelin <cyril.lorphelin@cc.in2p3.fr> Date: Mon, 10 Feb 2020 15:08:44 +0100 Subject: [PATCH] MAJ doecker file --- Dockerfile | 2 +- tms/src/Controller/LibrairieController.php | 6 +- tms/src/Controller/TapeController.php | 150 +++++++++- tms/templates/librairie/main.html.twig | 2 +- tms/templates/tapes/main.html.twig | 320 +++++++++++++++++++++ 5 files changed, 470 insertions(+), 10 deletions(-) create mode 100644 tms/templates/tapes/main.html.twig diff --git a/Dockerfile b/Dockerfile index d1545088..a3e2f5ec 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,7 +61,7 @@ RUN adduser nginx RUN addgroup nginx root RUN mkdir /var/cache/nginx RUN mkdir -p /var/lib/nginx/fastcgi -RUN chmod 777 -r /var/cache/nginx /var/log/nginx /var/lib/nginx +RUN chmod ugo+w /var/cache/nginx /var/log/nginx /var/lib/nginx USER nginx # support running as arbitrary user which belongs to the root group diff --git a/tms/src/Controller/LibrairieController.php b/tms/src/Controller/LibrairieController.php index 9c1930a4..38041ae7 100644 --- a/tms/src/Controller/LibrairieController.php +++ b/tms/src/Controller/LibrairieController.php @@ -17,15 +17,13 @@ class LibrairieController extends AbstractController */ public function listLibraries(Request $request) { - $message=$request->request->get('message'); + $librairies = $this->getDoctrine() ->getRepository(Librairie::class) ->findAll(); - - return $this->render('librairie/main.html.twig', array('librairies' => $librairies, 'message'=>$message)); - + return $this->render('librairie/main.html.twig', array('librairies' => $librairies)); } diff --git a/tms/src/Controller/TapeController.php b/tms/src/Controller/TapeController.php index 89434ed7..99087dbf 100644 --- a/tms/src/Controller/TapeController.php +++ b/tms/src/Controller/TapeController.php @@ -2,18 +2,160 @@ namespace App\Controller; +use App\Entity\TapeModele; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Response; class TapeController extends AbstractController { - /** - * @Route("/listTapes") + /** + * @Route("/listModel",name="show_models") */ - public function listTapes() + public function listModel(Request $request) { - // this looks exactly the same + + $models = $this->getDoctrine() + ->getRepository(TapeModele::class) + ->findAll(); + + + + return $this->render('tapes/main.html.twig', array('models' => $models)); + + + } + + + + /** + * @Route("/addModel", name="add_Model") + */ + public function addModel(Request $request){ + $nom=$request->request->get('nom'); + $fabricant=$request->request->get('fabricant'); + $capacite=$request->request->get('capacite'); + $longueur=$request->request->get('longueur'); + + $em = $this->getDoctrine()->getManager(); + + /** @var TYPE_NAME $exception */ + try { + + $entityManager = $this->getDoctrine()->getManager(); + + $model=new TapeModele(); + $model->setNom($nom); + $model->setFabricant($fabricant); + $model->setCapacite($capacite); + $model->setLongueur($longueur); + $model->setDatecreation(new \DateTime()); + $entityManager->persist($model); + $entityManager->flush(); + + $response = new Response(json_encode(array( + 'status' => '200', + 'message' => 'Base de données mise à jour' + ))); + + } + catch (DBALException $e) { + + $response = new Response(json_encode(array( + 'status' => '500', + 'message' => $e + ))); + } + + + $response->headers->set('Content-Type', 'application/json'); + return $response; + + } + + /** + * @Route("/editModel", name="edit_Model") + */ + public function editModel(Request $request){ + + $id=$request->request->get('id'); + $nom=$request->request->get('nom'); + $fabricant=$request->request->get('fabricant'); + $capacite=$request->request->get('capacite'); + $longueur=$request->request->get('longueur'); + + $em = $this->getDoctrine()->getManager(); + + /** @var TYPE_NAME $exception */ + try { + + $id=$request->request->get('id'); + $em = $this->getDoctrine()->getManager(); + + $model=$this->getDoctrine() + ->getRepository(TapeModele::class)->find($id); + $model->setNom($nom); + $model->setFabricant($fabricant); + $model->setCapacite($capacite); + $model->setLongueur($longueur); + + $em->persist($model); + $em->flush(); + + $response = new Response(json_encode(array( + 'status' => '200', + 'message' => 'Base de données mise à jour' + ))); + + } + catch (DBALException $e) { + + $response = new Response(json_encode(array( + 'status' => '500', + 'message' => $e + ))); + } + + + $response->headers->set('Content-Type', 'application/json'); + return $response; + + } + + /** + * @Route("/removeModel", name="remove_Model") + */ + public function removeModel(Request $request){ + $id=$request->request->get('id'); + $em = $this->getDoctrine()->getManager(); + + /** @var TYPE_NAME $exception */ + try { + $model=$this->getDoctrine() + ->getRepository(TapeModele::class)->find($id); + + $em->remove($model); + $em->flush($model); + + + $response = new Response(json_encode(array( + 'status' => '200', + 'message' => 'Base de données mise à jour' + ))); + + } + catch (DBALException $e) { + + $response = new Response(json_encode(array( + 'status' => '500', + 'message' => $e + ))); + } + + + $response->headers->set('Content-Type', 'application/json'); + return $response; + } } \ No newline at end of file diff --git a/tms/templates/librairie/main.html.twig b/tms/templates/librairie/main.html.twig index 928b5ed1..23cb9a64 100644 --- a/tms/templates/librairie/main.html.twig +++ b/tms/templates/librairie/main.html.twig @@ -54,7 +54,7 @@ <input type="text" id="type" class="form-control" required/> </div> <div class="form-group"> - <label for="type">Fabricant</label> + <label for="fabricant">Fabricant</label> <input type="text" id="fabricant" class="form-control" required/> </div> <div class="form-group"> diff --git a/tms/templates/tapes/main.html.twig b/tms/templates/tapes/main.html.twig new file mode 100644 index 00000000..2d9a9060 --- /dev/null +++ b/tms/templates/tapes/main.html.twig @@ -0,0 +1,320 @@ +{% extends 'base.html.twig' %} + + + + +{% block container %} + + <div class="container"> + + + + + <div class="row m-4 p-4" > + + + + <div class="col-9 p-4"> + <h2 class="m-2">BANDES</h2><hr/> + <div class="row"> + <a class="btn btn-primary text-white" data-toggle="modal" data-target="#addModal"><i class="fas fa-plus-circle"></i> Ajouter un modèle de bande</a> + + </div> + <div class="row m-2 p-2"> + <div class="messageSuccess m-2 d-none spinner-border text-success" role="status"></div> + <div class="messageSuccess ml-2 d-none alert alert-success">Base de données - Mise à jour en cours ...</div> + + <div id="messageError" class="ml-2 alert alert-danger d-none">Problème de mise à jour</div> + + + </div> + + <!-- Modal associé au bouton d'ajout --> + + <div class="modal fade" id="addModal"> + <div class="modal-dialog"> + <div class="modal-content"> + <form class="needs-validation" novalidate> + <div class="modal-header"> + <h5 class="modal-title">Ajout d'une bande</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + + <div class="form-group"> + <label for="nom">Nom</label> + <input type="text" id="nom" class="form-control" required/> + </div> + + <div class="form-group"> + <label for="fabricant">Fabricant</label> + <input type="text" id="fabricant" class="form-control" required/> + </div> + <div class="form-group"> + <label for="capacite">Capacite</label> + <input type="number" id="capacite" class="form-control" required/> + </div> + <div class="form-group"> + <label for="longueur">Longueur</label> + <input type="number" id="longueur" class="form-control" required/> + </div> + + + + + </div> + <div class="modal-footer"> + <a id="addModel" class="btn btn-primary text-white" data-toggle="modal"><i class="fas fa-plus-circle"></i> Ajouter une librairie</a> + + </div> + </form> + + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> + </div><!-- /.modal --> + + + </div> + + <div class="col-10 text-left border-primary p-4" style="border-left : 4px solid;"> + + <table id="tableLibraries" class="dataTable m-4 table table-bordered" > + + <thead> + <tr> + <th>Nom</th> + <th>Description</th> + <th>Fabricant</th> + <th>Nombre de Slots</th> + <th>Date de creation</th> + <th></th> + + </tr> + </thead> + <tbody> + {% for librairy in librairies %} + <tr> + <td>{{ librairy.nom }}</td> + <td>{{ librairy.type }}</td> + <td>{{ librairy.fabricant }}</td> + <td>{{ librairy.nbslots }}</td> + <td class="small">{{ librairy.datecreation |date('Y-m-d h:m') }}</td> + <td> + <a title="Remove Model" id="remove_{{ librairy.librairieid }}" class="removeModel" href="#"><i class="fas fa-trash-alt m-2"></i></a> + <a title="Edit Model" data-toggle="modal" data-target="#editModal_{{ librairy.librairieid }}" href="edit_{{ librairy.librairieid }}" > <i class="fas fa-edit m-2"></i></a> + + + <!-- Modal associé au bouton d'édition --> + + <div class="modal fade" id="editModal_{{ librairy.librairieid }}"> + <div class="modal-dialog"> + <div class="modal-content"> + <form class="needs-validation" novalidate> + <div class="modal-header"> + <h5 class="modal-title">Edition d'une librairie</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + + <div class="form-group"> + <label for="nom">Nom</label> + <input type="text" id="nom_{{ librairy.librairieid }}" class="form-control" value="{{ librairy.nom }}" required /> + </div> + <div class="form-group"> + <label for="type">Description</label> + <input type="text" id="type_{{ librairy.librairieid }}" class="form-control" value="{{ librairy.type }}" required/> + </div> + <div class="form-group"> + <label for="type">Fabricant</label> + <input type="text" id="fabricant_{{ librairy.librairieid }}" class="form-control" value="{{ librairy.fabricant }}" required/> + </div> + <div class="form-group"> + <label for="nbslots">Nombre de Slots</label> + <input type="number" id="nbslots_{{ librairy.librairieid }}" class="form-control" value="{{ librairy.nbslots }}" required/> + </div> + + + + + + </div> + <div class="modal-footer"> + <a id="edit_{{ librairy.librairieid }}" class="editModel btn btn-primary text-white" data-toggle="modal"><i class="fas fa-plus-circle"></i> Modifier la librairie</a> + + </div> + </form> + + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> + </div> + </td> + + </tr> + {% endfor %} + + </tbody> + + + </table> + + </div> + + + </div> + + + + + </div> + + + +{% endblock %} +{% block javascripts%} + <script> + $(document).ready(function() { + + 'use strict'; + window.addEventListener('load', function() { + // Fetch all the forms we want to apply custom Bootstrap validation styles to + var forms = document.getElementsByClassName('needs-validation'); + // Loop over them and prevent submission + var validation = Array.prototype.filter.call(forms, function(form) { + form.addEventListener('submit', function(event) { + if (form.checkValidity() === false) { + event.preventDefault(); + event.stopPropagation(); + } + form.classList.add('was-validated'); + }, false); + }); + }, false); + + + $('#addModel').click(function () { + + + + var nom=$("#nom").val(); + var type=$("#type").val(); + var fabricant=$("#fabricant").val(); + var nbslots=$("#nbslots").val(); + + + $.ajax({ + url:'/addModel', + type: "POST", + dataType: "json", + data: { + "nom": nom, + "fabricant": fabricant, + "type": type, + "nbslots": nbslots + }, + async: false, + success: function (data) + { + $("#addModal").hide(); + $(".messageSuccess").removeClass('d-none'); + $(".messageSuccess").fadeOut(5000); + + setInterval(function () { + location.reload(); + }, 5000); + + + + }, + error : function(xhr, textStatus, errorThrown) { + + $("#messageError").removeClass('d-none'); + $("#messageError").fadeOut(5000); + + } + }); + }); + + $('.editModel').click(function () { + + + var id = $(this).attr('id').split("edit_").pop(); + var nom=$("#nom_"+id).val(); + var type=$("#type_"+id).val(); + var fabricant=$("#fabricant_"+id).val(); + var nbslots=$("#nbslots_"+id).val(); + + + $.ajax({ + url:'/editModel', + type: "POST", + dataType: "json", + data: { + "id": id, + "nom": nom, + "fabricant": fabricant, + "type": type, + "nbslots": nbslots + }, + async: false, + success: function (data) + { + $("#editModal_"+id).hide(); + $(".messageSuccess").removeClass('d-none'); + $(".messageSuccess").fadeOut(5000); + + setInterval(function () { + location.reload(); + }, 5000); + + + + }, + error : function(xhr, textStatus, errorThrown) { + + $("#messageError").removeClass('d-none'); + $("#messageError").fadeOut(5000); + + } + }); + }); + $('.removeModel').click(function () { + var id = $(this).attr('id').split("remove_").pop(); + + $.ajax({ + url:'/removeModel', + type: "POST", + dataType: "json", + data: { + "id": id + }, + async: false, + success: function (data) + { + $(".messageSuccess").removeClass('d-none'); + $(".messageSuccess").fadeOut(5000); + + setInterval(function () { + location.reload(); + }, 5000); + + + + }, + error : function(xhr, textStatus, errorThrown) { + + $("#messageError").removeClass('d-none'); + $("#messageError").fadeOut(5000); + + } + }); + }); + + + }); + + </script> +{% endblock %} -- GitLab