From 851489433c0a19fc3fc402eeccc95e44ffd0a2cf Mon Sep 17 00:00:00 2001 From: Camille Simiand <camille.simiand@tetras-libre.fr> Date: Thu, 13 Jan 2022 12:28:27 +0100 Subject: [PATCH] Add cancel button --- assets/styles/app.scss | 39 +++++---------------- src/Controller/CapsuleController.php | 51 ++++++++++++++++++++++++++++ src/Form/DeleteCapsuleFormType.php | 34 +++++++++++++++++++ templates/capsule/delete.html.twig | 34 +++++++++++++++++++ templates/capsule/index.html.twig | 8 ++++- translations/messages.en.yaml | 5 +++ translations/messages.fr.yaml | 6 ++++ 7 files changed, 146 insertions(+), 31 deletions(-) create mode 100644 src/Form/DeleteCapsuleFormType.php create mode 100644 templates/capsule/delete.html.twig diff --git a/assets/styles/app.scss b/assets/styles/app.scss index dfd5c76..9b4fea6 100644 --- a/assets/styles/app.scss +++ b/assets/styles/app.scss @@ -28,7 +28,6 @@ form input[type=checkbox]{ } button[type=submit]{ - box-shadow: 0 2px 0 #3B8C7E; border: none; border-radius: 3px; color: #FFF; @@ -88,35 +87,6 @@ button[type=submit]{ justify-content: center; } -.elements-left { - width: auto; - padding: 20px; - float: left; -} - -.elements-right { - padding: 30px 30px 10px 10px; - float: right; -} - -.capsule-video { - overflow:hidden; - position:relative; - padding-top: 56.25%; - width: 600px; -} - -.responsive-iframe { - padding-top: 10px; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - width: 100%; - height: 100%; -} - .list-item { font-size: 16px; padding: 10px; @@ -162,6 +132,15 @@ button[type=submit]{ -webkit-text-fill-color: transparent; } +.button-cancel { + border: none; + border-radius: 3px; +} + +.button-cancel:hover { + background-color: #4f5050; +} + .row-title:hover { color: rgba(255,255,255,.75); } diff --git a/src/Controller/CapsuleController.php b/src/Controller/CapsuleController.php index d970dff..2926367 100644 --- a/src/Controller/CapsuleController.php +++ b/src/Controller/CapsuleController.php @@ -2,7 +2,9 @@ namespace App\Controller; +use App\Entity\Capsule; use App\Entity\User; +use App\Form\DeleteCapsuleFormType; use App\Helper\StringHelper; use App\Repository\CapsuleRepository; use App\Builder\CapsuleBuilder; @@ -128,4 +130,53 @@ class CapsuleController extends AbstractController [ 'url' => $url ] ); } + + /** + * @Route("/capsule/delete/{id}", name="delete_capsule") + */ + public function delete( + int $id, + Request $request, + TranslatorInterface $translator + ): Response { + $form = $this->createForm(DeleteCapsuleFormType::class); + $form->handleRequest($request); + $current_user = $this->getUser(); + + if (! $current_user instanceof User) { + return $this->redirectToRoute('app_logout'); + } + + $entityManager = $this->getDoctrine()->getManager(); + $capsule = $entityManager->getRepository(Capsule::class)->find($id); + + if (!$capsule) { + throw $this->createNotFoundException( + 'No capsule found for id ' . $id + ); + } + $capsule_name = $capsule->getName(); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->remove($capsule); + $entityManager->flush(); + + $this->addFlash( + 'capsule_deleted_success', + $translator->trans( + 'capsule.delete.success', + [ + 'capsule_name' => $capsule_name + ] + ) + ); + + return $this->redirectToRoute('capsule_list'); + } + + return $this->render('capsule/delete.html.twig', [ + 'deleteCapsuleForm' => $form->createView(), + 'capsule_name' => $capsule_name + ]); + } } diff --git a/src/Form/DeleteCapsuleFormType.php b/src/Form/DeleteCapsuleFormType.php new file mode 100644 index 0000000..efa1fd4 --- /dev/null +++ b/src/Form/DeleteCapsuleFormType.php @@ -0,0 +1,34 @@ +<?php + +namespace App\Form; + +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\ButtonType; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class DeleteCapsuleFormType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add( + 'cancel', + ButtonType::class, + ['label' => 'general.cancel_button', + 'attr' => ['class' => 'button-cancel'] + ] + ) + ->add( + 'delete', + SubmitType::class, + ['label' => 'capsule.delete.button'] + ); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([]); + } +} diff --git a/templates/capsule/delete.html.twig b/templates/capsule/delete.html.twig new file mode 100644 index 0000000..67d6f79 --- /dev/null +++ b/templates/capsule/delete.html.twig @@ -0,0 +1,34 @@ +{% extends 'layout.html.twig' %} + +{% block title %} + {{ 'capsule.delete.title'|trans }} +{% endblock %} + +{% block body %} + + <div> + <div class="row w-100 gx-0"> + <div class="row-title-box"> + <h3 class="row-title"> + {{ 'capsule.delete.title'|trans }} + </h3> + </div> + </div> + + <div class="d-flex flex-column justify-content-center align-items-center"> + + <p class="text-secondary fs-5 mb-5"> + {{ 'capsule.delete.text'|trans({'%capsule_name%': capsule_name}) }} + </p> + + {{ form_start(deleteCapsuleForm, {'attr': {novalidate: 'novalidate', 'class': 'd-flex flex-row justify-content-center'}}) }} + {{ form_row(deleteCapsuleForm.delete, {'row_attr': {'class' : 'm-auto mb-2 me-3'}}) }} + <a href="/"> + {{ form_row(deleteCapsuleForm.cancel, {'row_attr': {'class' : 'm-auto mb-2 bg-secondary rounded ms-3'}}) }} + </a> + {{ form_end(deleteCapsuleForm) }} + </div> + + </div> + +{% endblock %} \ No newline at end of file diff --git a/templates/capsule/index.html.twig b/templates/capsule/index.html.twig index 89941ce..a4bfefa 100644 --- a/templates/capsule/index.html.twig +++ b/templates/capsule/index.html.twig @@ -32,6 +32,12 @@ {{ flashSuccess }} </div> {% endfor %} + + {% for flashSuccess in app.flashes('capsule_deleted_success') %} + <div class="text-center alert alert-success col-5 mx-auto my-5" role="alert"> + {{ flashSuccess }} + </div> + {% endfor %} </div> <div class="capsules-list d-flex flex-column m-6"> @@ -73,7 +79,7 @@ </a> </div> <div class="list-item text-nowrap"> - <a href="/delete_capsule" class="links text-decoration-none"> + <a href="/capsule/delete/{{ capsule.getId() }}" class="links text-decoration-none"> <i class="fas fa-trash m-2"></i> {{ 'capsule.delete.link'|trans }} </a> diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 01a7291..54613c7 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -4,6 +4,7 @@ general: sign_in: Sign in log_out: Log out go_back_to_home_page: Home page + cancel_button: Cancel link_expire: This link will expire in %expirationDuration% greeting: Cheers! @@ -71,6 +72,10 @@ capsule: link: Duplicate capsule delete: link: Delete capsule + button: Delete + title: Delete capsule + text: Do you really want to delete the capsule %capsule_name%? + success: Capsule capsule_name was deleted successfully project: already_exists: Project capsule_name already exists so the capsule could not be created diff --git a/translations/messages.fr.yaml b/translations/messages.fr.yaml index 369fb58..79e2cc1 100644 --- a/translations/messages.fr.yaml +++ b/translations/messages.fr.yaml @@ -5,6 +5,8 @@ general: log_out: Se déconnecter link_expire: Le lien expirera dans greeting: Salutation ! + go_back_to_home_page: Page d'accueil + cancel_button: Annuler login: account_disabled_feedback: Le compte utilisateur a été désactivé. Veuillez cliquer sur le lien pour recevoir un courriel de validation @@ -68,6 +70,10 @@ capsule: delete: link: Supprimer la capsule not_found: Le projet n'existe pas + button: Supprimer + title: Supprimer la capsule + text: Souhaitez-vous vraiment supprimer la capsule %capsule_name% ? + success: La capsule capsule_name a bien été supprimée project: already_exists: Le projet capsule_name existe déjà. La capsule n'a pas pu être créée -- GitLab