UserController::new()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 26
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 4
eloc 17
nc 3
nop 3
dl 0
loc 26
rs 9.7
c 2
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Controller\Admin;
6
7
use App\Controller\BaseController;
8
use App\Entity\User;
9
use App\Form\Type\UserType;
10
use App\Repository\UserRepository;
11
use App\Service\Admin\UserService;
12
use App\Utils\UserFormDataSelector;
13
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
14
use Symfony\Component\Form\ClickableInterface;
15
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
16
use Symfony\Component\HttpFoundation\Request;
17
use Symfony\Component\HttpFoundation\Response;
18
use Symfony\Component\Routing\Annotation\Route;
19
20
final class UserController extends BaseController
21
{
22
    /**
23
     * @Route("/admin/user", name="admin_user")
24
     */
25
    public function index(Request $request, UserRepository $repository): Response
26
    {
27
        $users = $repository->findAll();
28
29
        return $this->render('admin/user/index.html.twig', [
30
            'site' => $this->site($request),
31
            'users' => $users,
32
        ]);
33
    }
34
35
    /**
36
     * @Route("/admin/user/new", name="admin_user_new")
37
     */
38
    public function new(Request $request, UserService $service, UserFormDataSelector $selector): Response
39
    {
40
        $user = new User();
41
42
        $form = $this->createForm(UserType::class, $user)
43
            ->add('saveAndCreateNew', SubmitType::class);
44
        $form->handleRequest($request);
45
46
        if ($form->isSubmitted() && $form->isValid()) {
47
            $emailVerifiedAt = $selector->getEmailVerifiedAt($form);
48
            $user->setEmailVerifiedAt($emailVerifiedAt);
49
            $service->create($user);
50
51
            /** @var ClickableInterface $button */
52
            $button = $form->get('saveAndCreateNew');
53
            if ($button->isClicked()) {
54
                return $this->redirectToRoute('admin_user_new');
55
            }
56
57
            return $this->redirectToRoute('admin_user');
58
        }
59
60
        return $this->render('admin/user/new.html.twig', [
61
            'site' => $this->site($request),
62
            'user' => $user,
63
            'form' => $form->createView(),
64
        ]);
65
    }
66
67
    /**
68
     * Displays a form to edit an existing User entity.
69
     *
70
     * @Route("/admin/user/{id<\d+>}/edit",methods={"GET", "POST"}, name="admin_user_edit")
71
     */
72
    public function edit(Request $request, User $user, UserService $service, UserFormDataSelector $selector): Response
73
    {
74
        $form = $this->createForm(UserType::class, $user);
75
        $form->handleRequest($request);
76
        if ($form->isSubmitted() && $form->isValid()) {
77
            if ($user->isVerified() !== $selector->getEmailVerified($form)) {
78
                $emailVerifiedAt = $selector->getEmailVerifiedAt($form);
79
                $user->setEmailVerifiedAt($emailVerifiedAt);
80
            }
81
82
            $service->update($user);
83
84
            return $this->redirectToRoute('admin_user');
85
        }
86
87
        return $this->render('admin/user/edit.html.twig', [
88
            'site' => $this->site($request),
89
            'form' => $form->createView(),
90
        ]);
91
    }
92
93
    /**
94
     * Deletes an User entity.
95
     *
96
     * @Route("/user/{id<\d+>}/delete", methods={"POST"}, name="admin_user_delete")
97
     * @IsGranted("ROLE_ADMIN")
98
     */
99
    public function delete(Request $request, User $user, UserService $service): Response
100
    {
101
        if (!$this->isCsrfTokenValid('delete', $request->request->get('token'))) {
102
            return $this->redirectToRoute('admin_user');
103
        }
104
105
        $service->remove($user);
106
107
        return $this->redirectToRoute('admin_user');
108
    }
109
}
110