Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
37 / 37
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
GuestController
100.00% covered (success)
100.00%
37 / 37
100.00% covered (success)
100.00%
5 / 5
8
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 index
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
1
 add
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
3
 update
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 delete
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace App\Controller\Admin;
4
5use App\Entity\User;
6use App\Form\GuestType;
7use App\Repository\UserRepository;
8use App\Service\MediaStorage;
9use Doctrine\ORM\EntityManagerInterface;
10use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11use Symfony\Component\HttpFoundation\Request;
12use Symfony\Component\HttpFoundation\Response;
13use Symfony\Component\Routing\Attribute\Route;
14
15#[Route("/admin/guest")]
16final class GuestController extends AbstractController
17{
18    public function __construct(
19        private UserRepository $userRepository,
20        private EntityManagerInterface $entityManager,
21        private MediaStorage $mediaStorage,
22    ) {}
23
24    #[Route("", name: 'admin_guest_index')]
25    public function index(Request $request): Response
26    {
27        $page = $request->query->getInt('page', 1);
28
29        $criteria = ['super_admin' => false];
30
31        $guests = $this->userRepository->findBy(
32            $criteria,
33            ['id' => 'ASC'],
34            25,
35            25 * ($page - 1)
36        );
37        $total = $this->userRepository->count($criteria);
38
39        return $this->render('admin/guest/index.html.twig', [
40            'guests' => $guests,
41            'total' => $total,
42            'page' => $page,
43        ]);
44    }
45
46    #[Route("/add", name: "admin_guest_add")]
47    public function add(Request $request): Response
48    {
49        $guest = new User();
50        $form = $this->createForm(GuestType::class, $guest);
51        $form->handleRequest($request);
52
53        if ($form->isSubmitted() && $form->isValid()) {
54            $guest->setPassword(password_hash($form->get('plainPassword')->getData(), PASSWORD_BCRYPT));
55            $guest->setSuperAdmin(false);
56            $this->entityManager->persist($guest);
57            $this->entityManager->flush();
58
59            return $this->redirectToRoute('admin_guest_index');
60        }
61
62        return $this->render('admin/guest/add.html.twig', ['form' => $form->createView()]);
63    }
64
65    #[Route("/update/{id}", name: "admin_guest_update")]
66    public function update(int $id): Response
67    {
68        $guest = $this->userRepository->find($id);
69        $guest->setAdmin(!$guest->isAdmin());
70        $this->entityManager->persist($guest);
71        $this->entityManager->flush();
72
73        return $this->redirectToRoute('admin_guest_index');
74    }
75
76    #[Route("/delete/{id}", name: "admin_guest_delete")]
77    public function delete(int $id): Response
78    {
79        $guest = $this->userRepository->find($id);
80        $guestsMedias = $guest->getMedias();
81
82        foreach ($guestsMedias as $media) {
83            $this->mediaStorage->delete($media->getPath());
84        }
85
86        $this->entityManager->remove($guest);
87        $this->entityManager->flush();
88
89        return $this->redirectToRoute('admin_guest_index');
90    }
91}