diff --git a/src/Builder/CapsuleBuilder.php b/src/Builder/CapsuleBuilder.php index b219d3bcab024d36e363d369c50fbf8a9c5f7d95..d3eda494ea0ac71018c4327da6449714a47ebfdd 100755 --- a/src/Builder/CapsuleBuilder.php +++ b/src/Builder/CapsuleBuilder.php @@ -3,6 +3,7 @@ namespace App\Builder; use App\Entity\Capsule; +use App\Entity\Group; use App\Entity\User; use App\Helper\ContractHelper; @@ -90,6 +91,12 @@ class CapsuleBuilder return $this; } + public function withGroup(Group $group): CapsuleBuilder + { + $this->capsule->addGroup($group); + return $this; + } + public function createCapsule(): Capsule { $this->createEditionLink(); diff --git a/src/Controller/CapsuleController.php b/src/Controller/CapsuleController.php index 0bf9c029daa2fb2e7a0d1e3c6bc165d2e000d0a0..a1a85436587dfa8463be51d891477ccd3d97e12b 100755 --- a/src/Controller/CapsuleController.php +++ b/src/Controller/CapsuleController.php @@ -12,6 +12,8 @@ use App\Helper\StringHelper; use App\Repository\CapsuleRepository; use App\Builder\CapsuleBuilder; use App\Form\CreateCapsuleFormType; +use App\Repository\GroupRepository; +use Doctrine\ORM\EntityManagerInterface; use Knp\Component\Pager\PaginatorInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Filesystem\Filesystem; @@ -26,13 +28,19 @@ class CapsuleController extends AbstractController { private CapsuleRepository $capsule_repository; private TranslatorInterface $translator; + private GroupRepository $group_repository; + private EntityManagerInterface $entity_manager; public function __construct( CapsuleRepository $capsule_repository, - TranslatorInterface $translator + TranslatorInterface $translator, + GroupRepository $group_repository, + EntityManagerInterface $entity_manager ) { $this->capsule_repository = $capsule_repository; $this->translator = $translator; + $this->group_repository = $group_repository; + $this->entity_manager = $entity_manager; } /** @@ -51,6 +59,11 @@ class CapsuleController extends AbstractController $all_capsules = $current_user->getCapsules(); + $group_all = $this->getGroupAll(); + $group_all->addCapsules($all_capsules->toArray()); + $this->entity_manager->persist($group_all); + $this->entity_manager->flush(); + $form = $this->createForm(FilterByGroupFormType::class, ['groups' => $current_user->getGroups()]); $form->handleRequest($request); @@ -175,8 +188,7 @@ class CapsuleController extends AbstractController return $this->redirectToRoute('app_logout'); } - $entityManager = $this->getDoctrine()->getManager(); - $capsule = $entityManager->getRepository(Capsule::class)->find($id); + $capsule = $this->capsule_repository->findOneBy(['id' => $id]); if (! $capsule) { throw $this->createNotFoundException( @@ -202,8 +214,8 @@ class CapsuleController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $current_user->removeCapsule($capsule); $capsule->removeEditor($current_user); - $entityManager->remove($capsule); - $entityManager->flush(); + $this->entity_manager->remove($capsule); + $this->entity_manager->flush(); $this->addFlash( 'success', @@ -240,8 +252,7 @@ class CapsuleController extends AbstractController return $this->redirectToRoute('app_logout'); } - $entityManager = $this->getDoctrine()->getManager(); - $parent_capsule = $entityManager->getRepository(Capsule::class)->find($id); + $parent_capsule = $this->capsule_repository->findOneBy(['id' => $id]); if (! $parent_capsule instanceof Capsule) { throw new \Exception('The retrieved capsule is not an instance of Capsule.'); @@ -301,7 +312,6 @@ class CapsuleController extends AbstractController $password = StringHelper::generateRandomHashedString(); $preview_link = Uuid::v4(); - $entityManager = $this->getDoctrine()->getManager(); $capsule_builder = new CapsuleBuilder(); $capsule = $capsule_builder ->withName($capsule_name) @@ -310,11 +320,23 @@ class CapsuleController extends AbstractController ->withLinkPath($preview_link) ->withUpdateDate($new_date_time) ->withPassword($password) + ->withGroup($this->getGroupAll()) ->createCapsule(); - $entityManager->persist($capsule); - $entityManager->flush(); + $this->entity_manager->persist($capsule); + $this->entity_manager->flush(); return $capsule; } + + private function getGroupAll(): Group + { + $group_all = $this->group_repository->findOneBy(['name' => "All"]); + + if (! $group_all instanceof Group) { + throw new \Exception("Group not found"); + } + + return $group_all; + } } diff --git a/src/DataFixtures/GroupFixtures.php b/src/DataFixtures/GroupFixtures.php new file mode 100644 index 0000000000000000000000000000000000000000..82cb6670ce1bb648173cccdbe8d83f4ebed27235 --- /dev/null +++ b/src/DataFixtures/GroupFixtures.php @@ -0,0 +1,26 @@ +<?php + +namespace App\DataFixtures; + +use App\Entity\Group; +use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Persistence\ObjectManager; + +class GroupFixtures extends Fixture +{ + public function load(ObjectManager $manager): void + { + $group_all = new Group(); + $group_all->setName("All"); + $manager->persist($group_all); + $manager->flush(); + } + + /** @phpstan-ignore-next-line */ + public function getDependencies(): array + { + return [ + CapsuleFixtures::class, + ]; + } +} diff --git a/src/Entity/Group.php b/src/Entity/Group.php index dae2d533ec24b6a139b42ab7cf018ddde2aafdfe..a8c2fd3e42298d31b90a6beec293d4357cf3d1c8 100755 --- a/src/Entity/Group.php +++ b/src/Entity/Group.php @@ -67,6 +67,19 @@ class Group { if (!$this->capsules->contains($capsule)) { $this->capsules[] = $capsule; + $capsule->addGroup($this); + } + + return $this; + } + + /** + * @param array<Capsule> $capsules + */ + public function addCapsules(array $capsules): self + { + foreach ($capsules as $capsule) { + $this->addCapsule($capsule); } return $this; diff --git a/templates/capsule/groups/edit.html.twig b/templates/capsule/groups/edit.html.twig index 35070f4628cbfe50b1d83abf81983d8c7424ab7b..6248ac5e488e16f7b67378628dea051165909003 100644 --- a/templates/capsule/groups/edit.html.twig +++ b/templates/capsule/groups/edit.html.twig @@ -38,13 +38,15 @@ </h5> <ul class="ps-0"> {% 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> + {% if group.getName() != 'All' %} + <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> + {% endif %} {% endfor %} </ul> </div> diff --git a/templates/capsule/index.html.twig b/templates/capsule/index.html.twig index f0bf7f272038c1c49ecc4b1d4e01ae16f591f38e..b5413a1606ac2ddfe3760a07bc9cebd8b2ddb280 100644 --- a/templates/capsule/index.html.twig +++ b/templates/capsule/index.html.twig @@ -13,13 +13,14 @@ {{ 'capsule.title'|trans }} </h2> - <div class="mb-3 mb-sm-0"> - {{ form_start(filterByGroupForm, {'attr': {novalidate: 'novalidate', 'class': 'd-flex flex-column flex-sm-row mb-0 align-items-center pt-3'}}) }} - {{ form_row(filterByGroupForm.name, {'attr': {'class': ''}}) }} - {{ form_row(filterByGroupForm.filter, {'attr': {'class': 'ms-2'}}) }} - {{ form_end(filterByGroupForm) }} - </div> - + {% if app.request.query.get('page')|default(1) == 1 %} + <div class="mb-3 mb-sm-0"> + {{ form_start(filterByGroupForm, {'attr': {novalidate: 'novalidate', 'class': 'd-flex flex-column flex-sm-row mb-0 align-items-center pt-3'}}) }} + {{ form_row(filterByGroupForm.name, {'attr': {'class': ''}}) }} + {{ form_row(filterByGroupForm.filter, {'attr': {'class': 'ms-2'}}) }} + {{ form_end(filterByGroupForm) }} + </div> + {% endif %} <form class="d-flex mb-4 mb-lg-0"> <button id="btn-orange" formaction="/create"> diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 58e65a0609fdf62242e707e7d53bb60e3f66e9c6..c41fd1e7589ed9a325d8bec665e18bfc949392f3 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -181,4 +181,4 @@ groups: title: Remove group success: Group group_name removed successfully filter: - button: Filter by group \ No newline at end of file + button: Apply group filter \ No newline at end of file