Skip to content
Snippets Groups Projects
Commit 9369dbed authored by Sebastien's avatar Sebastien
Browse files

Remove all capsule within the database

parent 4659d362
No related branches found
No related tags found
2 merge requests!55demo version for Clarisse workshop,!54tuleap-131-filter-my-capsules-by-groups
Pipeline #810 passed
...@@ -13,6 +13,7 @@ use App\Repository\CapsuleRepository; ...@@ -13,6 +13,7 @@ use App\Repository\CapsuleRepository;
use App\Builder\CapsuleBuilder; use App\Builder\CapsuleBuilder;
use App\Form\CreateCapsuleFormType; use App\Form\CreateCapsuleFormType;
use App\Repository\GroupRepository; use App\Repository\GroupRepository;
use ArrayObject;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface; use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
...@@ -28,18 +29,15 @@ class CapsuleController extends AbstractController ...@@ -28,18 +29,15 @@ class CapsuleController extends AbstractController
{ {
private CapsuleRepository $capsule_repository; private CapsuleRepository $capsule_repository;
private TranslatorInterface $translator; private TranslatorInterface $translator;
private GroupRepository $group_repository;
private EntityManagerInterface $entity_manager; private EntityManagerInterface $entity_manager;
public function __construct( public function __construct(
CapsuleRepository $capsule_repository, CapsuleRepository $capsule_repository,
TranslatorInterface $translator, TranslatorInterface $translator,
GroupRepository $group_repository,
EntityManagerInterface $entity_manager EntityManagerInterface $entity_manager
) { ) {
$this->capsule_repository = $capsule_repository; $this->capsule_repository = $capsule_repository;
$this->translator = $translator; $this->translator = $translator;
$this->group_repository = $group_repository;
$this->entity_manager = $entity_manager; $this->entity_manager = $entity_manager;
} }
...@@ -57,14 +55,9 @@ class CapsuleController extends AbstractController ...@@ -57,14 +55,9 @@ class CapsuleController extends AbstractController
return $this->redirectToRoute('app_logout'); return $this->redirectToRoute('app_logout');
} }
$all_capsules = $current_user->getCapsules(); // get all capsules without any filter
$all_capsules = $current_user->getCapsules()->toArray();
$group_all = $this->getGroupAll(); $form = $this->createGroupFilterForm($current_user);
$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); $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
...@@ -74,7 +67,9 @@ class CapsuleController extends AbstractController ...@@ -74,7 +67,9 @@ class CapsuleController extends AbstractController
throw new \Exception('Group not found'); throw new \Exception('Group not found');
} }
$all_capsules = $current_user->getCapsulesFilteredByGroup($group); if ($group->getId() !== Group::$ALL_GROUP_ID) {
$all_capsules = $group->getCapsulesIntersection($all_capsules);
}
} }
$capsules = $paginator->paginate( $capsules = $paginator->paginate(
...@@ -320,7 +315,6 @@ class CapsuleController extends AbstractController ...@@ -320,7 +315,6 @@ class CapsuleController extends AbstractController
->withLinkPath($preview_link) ->withLinkPath($preview_link)
->withUpdateDate($new_date_time) ->withUpdateDate($new_date_time)
->withPassword($password) ->withPassword($password)
->withGroup($this->getGroupAll())
->createCapsule(); ->createCapsule();
$this->entity_manager->persist($capsule); $this->entity_manager->persist($capsule);
...@@ -329,14 +323,24 @@ class CapsuleController extends AbstractController ...@@ -329,14 +323,24 @@ class CapsuleController extends AbstractController
return $capsule; return $capsule;
} }
private function getGroupAll(): Group private function getDefaultGroup(): Group
{ {
$group_all = $this->group_repository->findOneBy(['name' => "All"]); $noGroup = new Group();
if (! $group_all instanceof Group) { // TODO : to be translated
throw new \Exception("Group not found"); $noGroup->setName($this->translator->trans('groups.filter.no_filter'));
$noGroup->setId(Group::$ALL_GROUP_ID);
return $noGroup;
} }
return $group_all; private function createGroupFilterForm(User $current_user): FormInterface
{
$groups = new ArrayObject($current_user->getGroups());
$groups = $groups->getArrayCopy();
array_unshift($groups, self::getDefaultGroup());
return $this->createForm(FilterByGroupFormType::class, ['groups' => $groups]);
} }
} }
...@@ -15,6 +15,7 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; ...@@ -15,6 +15,7 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
*/ */
class Group class Group
{ {
public static int $ALL_GROUP_ID = -1;
/** /**
* @ORM\Id * @ORM\Id
* @ORM\GeneratedValue * @ORM\GeneratedValue
...@@ -43,6 +44,11 @@ class Group ...@@ -43,6 +44,11 @@ class Group
return $this->id; return $this->id;
} }
public function setId(int $id): void
{
$this->id = $id;
}
public function getName(): string public function getName(): string
{ {
return $this->name; return $this->name;
...@@ -91,4 +97,19 @@ class Group ...@@ -91,4 +97,19 @@ class Group
return $this; return $this;
} }
/**
* @param array<Capsule> $capsules
* @return array<Capsule>
*/
public function getCapsulesIntersection(array $capsules): array
{
return array_uintersect(
$capsules,
$this->getCapsules()->toArray(),
function ($obj_a, $obj_b) {
return $obj_a->getId() - $obj_b->getId();
}
);
}
} }
...@@ -316,18 +316,4 @@ class User implements UserInterface, LegacyPasswordAuthenticatedUserInterface ...@@ -316,18 +316,4 @@ class User implements UserInterface, LegacyPasswordAuthenticatedUserInterface
return $existing_groups_for_current_editor; return $existing_groups_for_current_editor;
} }
/**
* @return array<Capsule>
*/
public function getCapsulesFilteredByGroup(Group $group): array
{
return array_uintersect(
$this->getCapsules()->toArray(),
$group->getCapsules()->toArray(),
function ($obj_a, $obj_b) {
return $obj_a->getId() - $obj_b->getId();
}
);
}
} }
...@@ -182,3 +182,4 @@ groups: ...@@ -182,3 +182,4 @@ groups:
success: Group group_name removed successfully success: Group group_name removed successfully
filter: filter:
button: Apply group filter button: Apply group filter
no_filter: Show all
\ No newline at end of file
...@@ -181,3 +181,4 @@ groups: ...@@ -181,3 +181,4 @@ groups:
success: Le groupe group_name a bien été supprimé success: Le groupe group_name a bien été supprimé
filter: filter:
button: Filtrer par groupe button: Filtrer par groupe
no_filter: Tout afficher
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment