Completed
Push — master ( 0963ed...28cb44 )
by Laurent
02:59
created

UserController::getRoles()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 13
rs 9.4285
cc 3
eloc 7
nc 3
nop 1
1
<?php
2
/**
3
 * UserController controller des utilisateurs.
4
 *
5
 * PHP Version 5
6
 *
7
 * @author    Quétier Laurent <[email protected]>
8
 * @copyright 2014 Dev-Int GLSR
9
 * @license   http://opensource.org/licenses/gpl-license.php GNU Public License
10
 *
11
 * @version   since 1.0.0
12
 *
13
 * @link      https://github.com/Dev-Int/glsr
14
 */
15
namespace AppBundle\Controller;
16
17
use Symfony\Component\HttpFoundation\Request;
18
use AppBundle\Controller\AbstractController;
19
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
20
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
21
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
22
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
23
use AppBundle\Entity\User;
24
use AppBundle\Form\Type\UserType;
25
26
/**
27
 * User controller.
28
 *
29
 * @category Controller
30
 *
31
 * @Route("/admin/user")
32
 */
33
class UserController extends AbstractController
34
{
35
    /**
36
     * Lists all User entities.
37
     *
38
     * @Route("/", name="user")
39
     * @Method("GET")
40
     * @Template()
41
     *
42
     * @param \Symfony\Component\HttpFoundation\Request $request Paginate|Sort request
43
     * @return array
44
     */
45
    public function indexAction(Request $request)
46
    {
47
        $return = $this->abstractIndexAction('User', $request);
48
        
49
        return $return;
50
    }
51
52
    /**
53
     * Finds and displays a User entity.
54
     *
55
     * @Route("/{id}/show", name="user_show", requirements={"id"="\d+"})
56
     * @Method("GET")
57
     * @Template()
58
     *
59
     * @param \AppBundle\Entity\User $user User item to display
60
     * @return array
61
     */
62
    public function showAction(User $user)
63
    {
64
        $return = $this->abstractShowAction($user, 'user');
65
66
        return $return;
67
    }
68
69
    /**
70
     * Displays a form to create a new User entity.
71
     *
72
     * @Route("/new", name="user_new")
73
     * @Method("GET")
74
     * @Template()
75
     *
76
     * @return array
77
     */
78
    public function newAction()
79
    {
80
        $return = $this->abstractNewAction(
81
            'User',
82
            'AppBundle\Entity\User',
83
            UserType::class
84
        );
85
86
        return $return;
87
    }
88
89
    /**
90
     * Creates a new User entity.
91
     *
92
     * @Route("/create", name="user_create")
93
     * @Method("POST")
94
     * @Template("AppBundle:User:new.html.twig")
95
     *
96
     * @param \Symfony\Component\HttpFoundation\Request $request
97
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
98
     */
99
    public function createAction(Request $request)
100
    {
101
        $user = new User();
102
        $form = $this->createForm(UserType::class, $user, ['action' => $this->generateUrl('user_create'),]);
103
        $form->handleRequest($request);
104
        $return = ['user' => $user, 'form'   => $form->createView(),];
105
106
        if ($form->isValid()) {
107
            $user = $this->getRoles($user);
108
            $user->setEnabled(true);
109
            $userManager = $this->get('fos_user.user_manager');
110
            $userManager->updateUser($user);
111
            $this->addFlash('info', 'gestock.create.ok');
112
113
            $return = $this->redirectToRoute('user_show', ['id' => $user->getId()]);
114
        }
115
116
        return $return;
117
    }
118
119
    /**
120
     * Displays a form to edit an existing User entity.
121
     *
122
     * @Route("/{id}/edit", name="user_edit", requirements={"id"="\d+"})
123
     * @Method("GET")
124
     * @Template()
125
     *
126
     * @param \AppBundle\Entity\User $user User item to edit
127
     * @return array
128
     */
129
    public function editAction(User $user)
130
    {
131
        $editForm = $this->createForm(UserType::class, $user, array(
132
            'action' => $this->generateUrl('user_update', array('id' => $user->getId())),
133
            'method' => 'PUT',
134
            'passwordRequired' => false,
135
            'lockedRequired' => true
136
        ));
137
        $deleteForm = $this->createDeleteForm($user->getId(), 'user_delete');
138
 
139
        return array(
140
            'user' => $user,
141
            'edit_form'   => $editForm->createView(),
142
            'delete_form' => $deleteForm->createView(),
143
        );
144
    }
145
146
    /**
147
     * Edits an existing User entity.
148
     *
149
     * @Route("/{id}/update", name="user_update", requirements={"id"="\d+"})
150
     * @Method("PUT")
151
     * @Template("AppBundle:User:edit.html.twig")
152
     *
153
     * @param \AppBundle\Entity\User                    $user    User item to update
154
     * @param \Symfony\Component\HttpFoundation\Request $request Form request
155
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
156
     */
157
    public function updateAction(User $user, Request $request)
158
    {
159
        $editForm = $this->createForm(UserType::class, $user, array(
160
            'action' => $this->generateUrl('user_update', array('id' => $user->getId())),
161
            'method' => 'PUT',
162
            'passwordRequired' => false,
163
            'lockedRequired' => true
164
        ));
165
        $deleteForm = $this->createDeleteForm($user->getId(), 'user_delete');
166
167
        $editForm->handleRequest($request);
168
        $return = ['user' => $user,
169
            'edit_form' => $editForm->createView(),
170
            'delete_form' => $deleteForm->createView(),];
171
172
        if ($editForm->isValid()) {
173
            $user = $this->getRoles($user);
174
            $userManager = $this->get('fos_user.user_manager');
175
            $userManager->updateUser($user);
176
            $this->addFlash('info', 'gestock.edit.ok');
177
178
            $return = $this->redirectToRoute('user_edit', array('id' => $user->getId()));
179
        }
180
181
        return $return;
182
    }
183
184
    /**
185
     * Save order.
186
     *
187
     * @Route("/order/{entity}/{field}/{type}", name="user_sort")
188
     *
189
     * @param string $entity Entity of the field to sort
190
     * @param string $field  Field to sort
191
     * @param string $type   type of sort
192
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
193
     */
194
    public function sortAction($entity, $field, $type)
195
    {
196
        $this->setOrder('user', $entity, $field, $type);
197
198
        return $this->redirectToRoute('user');
199
    }
200
201
    /**
202
     * Deletes a User entity.
203
     *
204
     * @Security("has_role('ROLE_SUPER_ADMIN')")
205
     * @Route("/{id}/delete", name="user_delete", requirements={"id"="\d+"})
206
     * @Method("DELETE")
207
     *
208
     * @param \AppBundle\Entity\User                    $user    User item to delete
209
     * @param \Symfony\Component\HttpFoundation\Request $request Form request
210
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
211
     */
212
    public function deleteAction(User $user, Request $request)
213
    {
214
        $this->abstractDeleteAction($user, $request, 'user');
215
216
        return $this->redirectToRoute('user');
217
    }
218
219
    private function getRoles(User $user)
220
    {
221
        $roles = '';
222
        foreach ($user->getGroups() as $key => $group) {
223
            if ($key === 0) {
224
                $roles = $group->getRoles();
225
            }
226
        }
227
228
        $user->setRoles($roles);
229
        
230
        return $user;
231
    }
232
}
233