From 5bda05779d3fe6f620a970204f14f343a142f4fd Mon Sep 17 00:00:00 2001 From: Camille Simiand <camille.simiand@tetras-libre.fr> Date: Wed, 9 Feb 2022 17:39:19 +0100 Subject: [PATCH] Remove Group --- src/Controller/CapsuleGroupController.php | 55 +++++++++++++++++++++++ src/Form/RemoveGroupFormType.php | 37 +++++++++++++++ templates/capsule/groups/edit.html.twig | 4 ++ templates/capsule/groups/remove.html.twig | 34 ++++++++++++++ translations/messages.en.yaml | 8 +++- translations/messages.fr.yaml | 8 +++- 6 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 src/Form/RemoveGroupFormType.php create mode 100644 templates/capsule/groups/remove.html.twig diff --git a/src/Controller/CapsuleGroupController.php b/src/Controller/CapsuleGroupController.php index a70c8ce..17a92c6 100755 --- a/src/Controller/CapsuleGroupController.php +++ b/src/Controller/CapsuleGroupController.php @@ -6,6 +6,7 @@ use App\Entity\Capsule; use App\Entity\Group; use App\Entity\User; use App\Form\CreateCapsuleGroupsFormType; +use App\Form\RemoveGroupFormType; use App\Form\SelectCapsuleGroupsFormType; use App\Repository\CapsuleRepository; use App\Repository\GroupRepository; @@ -137,6 +138,60 @@ class CapsuleGroupController extends AbstractController ]); } + /** + * @Route("/capsule/{capsule_id}/groups/{group_id}/remove", name="remove_group") + */ + public function remove( + int $capsule_id, + int $group_id, + Request $request + ): Response { + $capsule = $this->capsule_repository->findOneBy(['id' => $capsule_id]); + if (! $capsule instanceof Capsule) { + throw new \Exception('Capsule not found'); + } + + $group = $this->group_repository->findOneBy(['id' => $group_id]); + if (! $group instanceof Group) { + throw new \Exception('Group not found'); + } + + $current_user = $this->getUser(); + if (! $current_user instanceof User) { + return $this->redirectToRoute('app_logout'); + } + + $form = $this->createForm(RemoveGroupFormType::class); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $capsule->removeGroup($group); + $this->entity_manager->persist($capsule); + $this->entity_manager->flush(); + + $this->addFlash( + 'success', + $this->translator->trans( + 'groups.remove.success', + [ + 'group_name' => $group->getName(), + 'capsule_name' => $capsule->getName() + ] + ) + ); + + return $this->redirectToRoute('edit_capsule_groups', [ + 'capsule_id' => $capsule->getId() + ]); + } + + return $this->render('capsule/groups/remove.html.twig', [ + 'removeGroupForm' => $form->createView(), + 'group_name' => $group->getName(), + 'capsule_id' => $capsule_id + ]); + } + /** * @return array<Group> */ diff --git a/src/Form/RemoveGroupFormType.php b/src/Form/RemoveGroupFormType.php new file mode 100644 index 0000000..436405a --- /dev/null +++ b/src/Form/RemoveGroupFormType.php @@ -0,0 +1,37 @@ +<?php + +namespace App\Form; + +use App\Entity\Group; +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 RemoveGroupFormType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add( + 'cancel', + ButtonType::class, + ['label' => 'general.cancel_button', + 'attr' => ['class' => 'button-cancel'] + ] + ) + ->add( + 'remove', + SubmitType::class, + ['label' => 'groups.remove.button'] + ); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Group::class, + ]); + } +} diff --git a/templates/capsule/groups/edit.html.twig b/templates/capsule/groups/edit.html.twig index e1edb6b..35070f4 100644 --- a/templates/capsule/groups/edit.html.twig +++ b/templates/capsule/groups/edit.html.twig @@ -40,6 +40,10 @@ {% for group in groups %} <li class="text-capitalize text-secondary list-unstyled p-1"> {{ group.getName() }} + - + <a href="/capsule/{{ capsule.getId() }}/groups/{{ group.getId() }}/remove" class="remove-link"> + {{ 'groups.remove.link'|trans }} + </a> </li> {% endfor %} </ul> diff --git a/templates/capsule/groups/remove.html.twig b/templates/capsule/groups/remove.html.twig new file mode 100644 index 0000000..9894b62 --- /dev/null +++ b/templates/capsule/groups/remove.html.twig @@ -0,0 +1,34 @@ +{% extends 'layout.html.twig' %} + +{% block title %} + {{ 'groups.remove.title'|trans }} +{% endblock %} + +{% block body %} + + <div> + <div class="row w-100 gx-0"> + <div class="row-title-box"> + <h3 class="row-title"> + {{ 'groups.remove.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"> + {{ 'groups.remove.text'|trans({'%group_name%': group_name}) }} + </p> + + {{ form_start(removeGroupForm, {'attr': {novalidate: 'novalidate', 'class': 'd-flex flex-row justify-content-center'}}) }} + {{ form_row(removeGroupForm.remove, {'row_attr': {'class' : 'm-auto mb-2 me-3'}}) }} + <a href="/capsule/{{ capsule_id }}/editors"> + {{ form_row(removeGroupForm.cancel, {'row_attr': {'class' : 'm-auto mb-2 bg-secondary rounded ms-3'}}) }} + </a> + {{ form_end(removeGroupForm) }} + </div> + + </div> + +{% endblock %} \ No newline at end of file diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 1addbf4..a6d1235 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -173,4 +173,10 @@ groups: add: success: Group(s) groups_names has/have been added successfully to capsule capsule_name validate: Add theses groups to the capsule - choose: Please choose one or more groups \ No newline at end of file + choose: Please choose one or more groups + remove: + button: Remove group + link: Remove group + text: Do you really want to remove group %group_name% ? + title: Remove group + success: Group group_name removed successfully \ No newline at end of file diff --git a/translations/messages.fr.yaml b/translations/messages.fr.yaml index 0301466..81fa761 100644 --- a/translations/messages.fr.yaml +++ b/translations/messages.fr.yaml @@ -172,4 +172,10 @@ groups: add: success: Le(s) groupe(s) groups_names a/ont bien été ajouté(s) à la capsule capsule_name validate: Ajouter ces groupes à la capsule - choose: Veuillez choisir un ou plusieurs groupes \ No newline at end of file + choose: Veuillez choisir un ou plusieurs groupes + remove: + button: Supprimer le groupe + link: Supprimer le groupe + text: Souhaitez-vous vraiment supprimer le groupe %group_name% ? + title: Supprimer le groupe + success: Le groupe group_name a bien été supprimé \ No newline at end of file -- GitLab