Completed
Pull Request — master (#243)
by
unknown
04:33 queued 02:20
created

DeleteController::deleteAction()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 27
rs 9.488
c 0
b 0
f 0
cc 4
nc 3
nop 2
1
<?php
2
3
namespace SumoCoders\FrameworkUserBundle\Controller;
4
5
use SumoCoders\FrameworkMultiUserBundle\Command\DeleteUserHandler;
6
use SumoCoders\FrameworkMultiUserBundle\DataTransferObject\BaseUserDataTransferObject;
7
use SumoCoders\FrameworkMultiUserBundle\Entity\BaseUser;
8
use SumoCoders\FrameworkMultiUserBundle\Form\DeleteType;
9
use Symfony\Component\Form\FormFactoryInterface;
10
use Symfony\Component\HttpFoundation\RedirectResponse;
11
use Symfony\Component\HttpFoundation\Request;
12
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
13
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
14
use Symfony\Component\Routing\Router;
15
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
16
use Symfony\Component\Translation\TranslatorInterface;
17
18
final class DeleteController
19
{
20
    /** @var FormFactoryInterface */
21
    private $formFactory;
22
23
    /** @var DeleteUserHandler */
24
    private $handler;
25
26
    /** @var FlashBagInterface */
27
    private $flashBag;
28
29
    /** @var TranslatorInterface */
30
    private $translator;
31
32
    /** @var Router */
33
    private $router;
34
35
    /** @var string */
36
    private $redirectRoute;
37
38
    /** @var AuthorizationCheckerInterface */
39
    private $authorizationChecker;
40
41
    public function __construct(
42
        FormFactoryInterface $formFactory,
43
        DeleteUserHandler $handler,
44
        FlashBagInterface $flashBag,
45
        TranslatorInterface $translator,
46
        Router $router,
47
        string $redirectRoute,
48
        AuthorizationCheckerInterface $authorizationChecker
49
    ) {
50
        $this->formFactory = $formFactory;
51
        $this->handler = $handler;
52
        $this->flashBag = $flashBag;
53
        $this->translator = $translator;
54
        $this->router = $router;
55
        $this->redirectRoute = $redirectRoute;
56
        $this->authorizationChecker = $authorizationChecker;
57
    }
58
59
    /**
60
     * @param Request $request
61
     * @param BaseUser $user
62
     *
63
     * @return array|RedirectResponse
64
     */
65
    public function deleteAction(Request $request, BaseUser $user)
66
    {
67
        if (!$this->authorizationChecker->isGranted('ROLE_ADMIN')) {
68
            throw new AccessDeniedHttpException('Access denied.');
69
        }
70
71
        $userDataTransferObject = BaseUserDataTransferObject::fromUser($user);
72
73
        $form = $this->formFactory->create(DeleteType::class, $userDataTransferObject);
74
        $form->handleRequest($request);
75
76
        if ($form->isSubmitted() && $form->isValid()) {
77
            $this->handler->handle($form->getData());
78
79
            $this->flashBag->add(
80
                'success',
81
                $this->translator->trans(
82
                    'sumocoders.multiuserbundle.flash.deleted',
83
                    ['%user%' => $form->getData()->getEntity()->getDisplayName()]
84
                )
85
            );
86
87
            return new RedirectResponse($this->router->generate($this->redirectRoute));
88
        }
89
90
        return ['form' => $form->createView()];
91
    }
92
}
93