RegistrationController   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 102
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 15

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 15
dl 0
loc 102
rs 9.1666
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
B registerAction() 0 64 4
A updateUserAndForm() 0 11 2
A isAllreadyExists() 0 4 1
A createMoney() 0 7 1
1
<?php
2
3
namespace Rottenwood\UserBundle\Controller;
4
5
use FOS\UserBundle\FOSUserEvents;
6
use FOS\UserBundle\Event\FormEvent;
7
use FOS\UserBundle\Event\GetResponseUserEvent;
8
use FOS\UserBundle\Event\FilterUserResponseEvent;
9
use Rottenwood\KingdomBundle\Entity\Money;
10
use Rottenwood\KingdomBundle\Entity\Human as User;
11
use Rottenwood\KingdomBundle\Service\UserService;
12
use Rottenwood\UserBundle\Loggers\RegistrationLogger;
13
use Symfony\Component\Form\FormError;
14
use Symfony\Component\Form\FormInterface;
15
use Symfony\Component\HttpFoundation\Request;
16
use Symfony\Component\HttpFoundation\RedirectResponse;
17
use FOS\UserBundle\Controller\RegistrationController as FOSURegistrationController;
18
19
/** {@inheritDoc} */
20
class RegistrationController extends FOSURegistrationController
21
{
22
23
    public function registerAction(Request $request)
24
    {
25
        /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
26
        $formFactory = $this->get('fos_user.registration.form.factory');
27
        /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
28
        $userManager = $this->get('fos_user.user_manager');
29
        /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
30
        $dispatcher = $this->get('event_dispatcher');
31
32
        /** @var User $user */
33
        $user = $userManager->createUser();
34
        $user->setEnabled(true);
35
36
        $event = new GetResponseUserEvent($user, $request);
37
        $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);
38
39
        if (null !== $event->getResponse()) {
40
            return $event->getResponse();
41
        }
42
43
        $form = $formFactory->createForm();
44
        $form->setData($user);
45
46
        $userService = $this->get('kingdom.user_service');
47
48
        $form->handleRequest($request);
49
        $this->updateUserAndForm($user, $form, $userService);
50
51
        if ($form->isValid()) {
52
            $event = new FormEvent($form, $request);
53
            $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
54
55
            $user->setAvatar($userService->pickAvatar());
56
            $user->setRoom($userService->getStartRoom());
57
58
            $userManager->updateUser($user);
59
60
            if (null === $response = $event->getResponse()) {
0 ignored issues
show
Bug introduced by
Are you sure the assignment to $response is correct as $event->getResponse() (which targets FOS\UserBundle\Event\FormEvent::getResponse()) seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
61
                $url = $this->generateUrl('game_page');
62
                $response = new RedirectResponse($url);
63
            }
64
65
            $dispatcher->dispatch(
66
                FOSUserEvents::REGISTRATION_COMPLETED,
67
                new FilterUserResponseEvent($user, $request, $response)
68
            );
69
70
            $this->createMoney($user);
71
            $userService->giveStarterItems($user);
72
73
            /** @var RegistrationLogger $logger */
74
            $logger = $this->container->get('user.logger.registration');
75
            $logger->logRegistration($user);
76
77
            return $response;
78
        }
79
80
        return $this->render(
81
            'FOSUserBundle:Registration:register.html.twig',
82
            [
83
                'form' => $form->createView(),
84
            ]
85
        );
86
    }
87
88
    private function updateUserAndForm(User &$user, FormInterface &$form, UserService $userService)
89
    {
90
        $cyrillicName = $userService->transliterate($user->getLiteralUsername());
91
92
        if ($this->isAllreadyExists($cyrillicName)) {
93
            $errorMessage = $this->get('translator')->trans('fos_user.username.already_used', [], 'validators');
94
            $form->addError(new FormError($errorMessage));
95
        } else {
96
            $user->setName($cyrillicName);
97
        }
98
    }
99
100
    /**
101
     * Определение уникальности имени персонажа
102
     * @param string $name
103
     * @return bool
104
     */
105
    private function isAllreadyExists($name)
106
    {
107
        return (bool) ($this->get('kingdom.human_repository')->findByName($name));
108
    }
109
110
    /**
111
     * Создание денег игрока
112
     * @param User $user
113
     */
114
    private function createMoney(User $user)
115
    {
116
        $money = new Money($user);
117
        $moneyRepository = $this->get('kingdom.money_repository');
118
        $moneyRepository->persist($money);
119
        $moneyRepository->flush($money);
120
    }
121
}
122