From 41283abb86da49c18cfe50d528f5cad0d1c51648 Mon Sep 17 00:00:00 2001 From: Antoine B Date: Sun, 9 Jul 2017 10:45:14 +0200 Subject: [PATCH] Fix on document upload (#124) * Fix error on view to upload a document for an Etude * Improve UI for Etude and Member selection on Upload Doctype view * Fix reference selection for Doctypes * Improve code style and quality --- .styleci.yml | 0 .../Controller/DocumentController.php | 49 +++++++++-------- .../PubliBundle/Form/Type/DocTypeType.php | 2 +- .../Form/Type/RelatedDocumentType.php | 52 ++++++++++--------- .../PubliBundle/Resources/config/routing.yml | 4 +- .../Resources/views/DocType/upload.html.twig | 4 +- .../Resources/views/Document/upload.html.twig | 19 +++++-- .../views/Etude/TabVoir/Documents.html.twig | 2 +- src/Mgate/TresoBundle/Form/Type/BVType.php | 2 +- 9 files changed, 75 insertions(+), 59 deletions(-) create mode 100644 .styleci.yml diff --git a/.styleci.yml b/.styleci.yml new file mode 100644 index 000000000..e69de29bb diff --git a/src/Mgate/PubliBundle/Controller/DocumentController.php b/src/Mgate/PubliBundle/Controller/DocumentController.php index 6e335f0d3..d3fde6ab0 100644 --- a/src/Mgate/PubliBundle/Controller/DocumentController.php +++ b/src/Mgate/PubliBundle/Controller/DocumentController.php @@ -14,9 +14,11 @@ use Mgate\PubliBundle\Entity\Document; use Mgate\PubliBundle\Entity\RelatedDocument; use Mgate\PubliBundle\Form\Type\DocumentType; +use Mgate\SuiviBundle\Entity\Etude; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\BinaryFileResponse; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Exception\AccessDeniedException; @@ -46,13 +48,15 @@ public function indexAction() /** * @Security("has_role('ROLE_CA')") + * * @param Document $documentType (ParamConverter) The document to be downloaded. * @return BinaryFileResponse + * * @throws \Exception */ public function voirAction(Document $documentType) { - $documentStoragePath = $this->get('kernel')->getRootDir(). '' . Document::DOCUMENT_STORAGE_ROOT; + $documentStoragePath = $this->get('kernel')->getRootDir() . '' . Document::DOCUMENT_STORAGE_ROOT; if (file_exists($documentStoragePath . '/' . $documentType->getPath())) { $response = new BinaryFileResponse($documentStoragePath . '/' . $documentType->getPath()); $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); @@ -65,28 +69,23 @@ public function voirAction(Document $documentType) /** * @Security("has_role('ROLE_SUIVEUR')") + * + * @param Request $request + * @param Etude $etude + * + * @return Response */ - public function uploadEtudeAction(Request $request, $etude_id) + public function uploadEtudeAction(Request $request, Etude $etude) { - $em = $this->getDoctrine()->getManager(); - $etude = $em->getRepository('MgateSuiviBundle:Etude')->getByNom($etude_id); - - if (!$etude) { - throw $this->createNotFoundException('Le document ne peut être lié à une étude qui n\'existe pas!'); - } - if ($this->get('Mgate.etude_manager')->confidentielRefus($etude, $this->getUser(), $this->get('security.authorization_checker'))) { throw new AccessDeniedException('Cette étude est confidentielle !'); } - $options['etude'] = $etude; - - if (!$response = $this->upload($request, false, $options)) { - // Si tout est ok + if (!$response = $this->upload($request, false, ['etude' => $etude])) { + $this->addFlash('success', 'Document mis en ligne'); return $this->redirect($this->generateUrl('MgateSuivi_etude_voir', array('nom' => $etude->getNom()))); - } else { - return $response; } + return $response; } /** @@ -104,7 +103,7 @@ public function uploadEtudiantAction(Request $request, $membre_id) $options['etudiant'] = $membre; if (!$response = $this->upload($request, false, $options)) { - $this->addFlash('success','Document mis en ligne'); + $this->addFlash('success', 'Document mis en ligne'); return $this->redirect($this->generateUrl('MgatePersonne_membre_voir', array('id' => $membre_id))); } else { return $response; @@ -120,6 +119,10 @@ public function uploadFormationAction($id) /** * @Security("has_role('ROLE_ADMIN')") + * + * @param Request $request + * + * @return Response */ public function uploadDoctypeAction(Request $request) { @@ -133,23 +136,23 @@ public function uploadDoctypeAction(Request $request) /** * @Security("has_role('ROLE_CA')") + * + * @param Document $doc + * + * @return Response */ - public function deleteAction($id, Request $request) + public function deleteAction(Document $doc) { $em = $this->getDoctrine()->getManager(); - - if (!$doc = $em->getRepository('MgatePubliBundle:Document')->find($id)) { - throw $this->createNotFoundException('Le Document n\'existe pas !'); - } $doc->setRootDir($this->get('kernel')->getRootDir()); if ($doc->getRelation()) { // Cascade sucks $relation = $doc->getRelation()->setDocument(); - $doc->setRelation(); + $doc->setRelation(null); $em->remove($relation); $em->flush(); } - $request->getSession()->getFlashBag()->add('success', 'Document supprimé'); + $this->addFlash('success', 'Document supprimé'); $em->remove($doc); $em->flush(); diff --git a/src/Mgate/PubliBundle/Form/Type/DocTypeType.php b/src/Mgate/PubliBundle/Form/Type/DocTypeType.php index 323d501a4..c25405abb 100644 --- a/src/Mgate/PubliBundle/Form/Type/DocTypeType.php +++ b/src/Mgate/PubliBundle/Form/Type/DocTypeType.php @@ -63,7 +63,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('etude', Select2EntityType::class, array( 'label' => 'Etude pour vérifier le template', 'class' => 'Mgate\\SuiviBundle\\Entity\\Etude', - 'choice_label' => 'reference', + 'choice_label' => 'nom', 'required' => false, )) ->add('verification', CheckboxType::class, array('label' => 'Activer la vérification', 'required' => false)); } diff --git a/src/Mgate/PubliBundle/Form/Type/RelatedDocumentType.php b/src/Mgate/PubliBundle/Form/Type/RelatedDocumentType.php index f26730033..6447d992a 100644 --- a/src/Mgate/PubliBundle/Form/Type/RelatedDocumentType.php +++ b/src/Mgate/PubliBundle/Form/Type/RelatedDocumentType.php @@ -22,39 +22,43 @@ public function buildForm(FormBuilderInterface $builder, array $options) { if ($options['etude']) { $builder->add('etude', Select2EntityType::class, array( - 'class' => 'Mgate\SuiviBundle\Entity\Etude', - 'choice_label' => 'reference', - 'required' => false, - 'label' => 'Document lié à l\'étude', - 'configs' => array('placeholder' => 'Sélectionnez une étude', 'allowClear' => true), - )); + 'class' => 'Mgate\SuiviBundle\Entity\Etude', + 'choice_label' => 'nom', + 'required' => false, + 'label' => 'Document lié à l\'étude', + 'data' => $options['etude'], + 'attr' => array('style' => 'min-width: 300px'), + 'configs' => array('placeholder' => 'Sélectionnez une étude', 'allowClear' => true), + )); } if ($options['prospect']) { $builder->add('prospect', Select2EntityType::class, array( - 'class' => 'Mgate\PersonneBundle\Entity\Prospect', - 'choice_label' => 'nom', - 'required' => false, - 'label' => 'Document lié au prospect', - 'configs' => array('placeholder' => 'Sélectionnez un prospect', 'allowClear' => true), - )); + 'class' => 'Mgate\PersonneBundle\Entity\Prospect', + 'choice_label' => 'nom', + 'required' => false, + 'label' => 'Document lié au prospect', + 'attr' => array('style' => 'min-width: 300px'), + 'configs' => array('placeholder' => 'Sélectionnez un prospect', 'allowClear' => true), + )); } if ($options['formation']) { $builder->add('formation', Select2EntityType::class, array( - 'class' => 'Mgate\FormationBundle\Entity\Formation', - 'choice_label' => 'titre', - 'required' => false, - 'label' => 'Document lié à la formation', - 'configs' => array('placeholder' => 'Sélectionnez une formation', 'allowClear' => true), - )); + 'class' => 'Mgate\FormationBundle\Entity\Formation', + 'choice_label' => 'titre', + 'required' => false, + 'label' => 'Document lié à la formation', + 'attr' => array('style' => 'min-width: 300px'), + 'configs' => array('placeholder' => 'Sélectionnez une formation', 'allowClear' => true), + )); } if ($options['etudiant'] || $options['etude']) { $builder->add('membre', Select2EntityType::class, array( - 'label' => 'Document lié à l\'étudiant', - 'class' => 'Mgate\\PersonneBundle\\Entity\\Membre', - 'choice_label' => 'personne.prenomNom', - 'required' => false, - 'configs' => array('placeholder' => 'Sélectionnez un étudiant', 'allowClear' => true), )) - ; + 'label' => 'Document lié à l\'étudiant (optionnel)', + 'class' => 'Mgate\\PersonneBundle\\Entity\\Membre', + 'choice_label' => 'personne.prenomNom', + 'required' => false, + 'attr' => array('style' => 'min-width: 300px'), + 'configs' => array('placeholder' => 'Sélectionnez un étudiant', 'allowClear' => true),)); } } diff --git a/src/Mgate/PubliBundle/Resources/config/routing.yml b/src/Mgate/PubliBundle/Resources/config/routing.yml index eb5cdb537..d5064c369 100644 --- a/src/Mgate/PubliBundle/Resources/config/routing.yml +++ b/src/Mgate/PubliBundle/Resources/config/routing.yml @@ -40,10 +40,8 @@ Mgate_publi_document_voir: methods: [GET, HEAD] Mgate_publi_document_uploadEtude: - path: /Documents/Upload/Etude/{etude_id} + path: /Documents/Upload/Etude/{nom} defaults: {_controller: MgatePubliBundle:Document:uploadEtude} - requirements: - etude_id: \d+ methods: [GET, HEAD, POST] Mgate_publi_document_uploadEtudiant: diff --git a/src/Mgate/PubliBundle/Resources/views/DocType/upload.html.twig b/src/Mgate/PubliBundle/Resources/views/DocType/upload.html.twig index d5ecdba92..a6e7ef00b 100644 --- a/src/Mgate/PubliBundle/Resources/views/DocType/upload.html.twig +++ b/src/Mgate/PubliBundle/Resources/views/DocType/upload.html.twig @@ -28,11 +28,11 @@ {{ form_label(form.etude) }} - {{ form_widget(form.etude) }} + {{ form_widget(form.etude, {'attr': {'style': 'min-width: 300px'}}) }} {{ form_label(form.etudiant) }} - {{ form_widget(form.etudiant) }} + {{ form_widget(form.etudiant, {'attr': {'style': 'min-width: 300px'}}) }} {{ form_label(form.verification) }} diff --git a/src/Mgate/PubliBundle/Resources/views/Document/upload.html.twig b/src/Mgate/PubliBundle/Resources/views/Document/upload.html.twig index eb038bb5a..2787b8d8d 100644 --- a/src/Mgate/PubliBundle/Resources/views/Document/upload.html.twig +++ b/src/Mgate/PubliBundle/Resources/views/Document/upload.html.twig @@ -5,14 +5,25 @@ {% endblock %} {% block content_title %} - Uploader un document + Uploader un document {% endblock %} {% block content_bundle %} - {{ form_start(form) }} - {{ form_widget(form) }} - + {{ form_start(form, {'attr': {'class': 'form-horizontal'}}) }} + {% for field in form.children if field.vars.name != "_token" %} +
+
+ {{ form_label(field) }} + {{ form_errors(field) }} +
+
+ {{ form_widget(field, {'attr': {'class': (field is not iterable ? 'form-control': '')}}) }} +
+
+ {% endfor %} + + {{ form_end(form) }} {% endblock %} diff --git a/src/Mgate/SuiviBundle/Resources/views/Etude/TabVoir/Documents.html.twig b/src/Mgate/SuiviBundle/Resources/views/Etude/TabVoir/Documents.html.twig index 24c7c1506..ca843dcfd 100644 --- a/src/Mgate/SuiviBundle/Resources/views/Etude/TabVoir/Documents.html.twig +++ b/src/Mgate/SuiviBundle/Resources/views/Etude/TabVoir/Documents.html.twig @@ -10,7 +10,7 @@ diff --git a/src/Mgate/TresoBundle/Form/Type/BVType.php b/src/Mgate/TresoBundle/Form/Type/BVType.php index 733dee1c6..46e4a0e68 100644 --- a/src/Mgate/TresoBundle/Form/Type/BVType.php +++ b/src/Mgate/TresoBundle/Form/Type/BVType.php @@ -35,7 +35,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('mission', Select2EntityType::class, array( 'label' => 'Mission', 'class' => 'Mgate\\SuiviBundle\\Entity\\Mission', - 'choice_label' => 'reference', + 'choice_label' => 'nom', 'required' => true, )) ->add('numeroVirement', TextType::class, array('label' => 'Numéro de Virement', 'required' => true)); }