Completed
Push — master ( 1af8b6...90bc50 )
by Laurent
03:35
created

UserController::getRoles()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
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 GIT: <git_id>
12
 *
13
 * @link      https://github.com/Dev-Int/glsr
14
 */
15
namespace AppBundle\Controller\Staff;
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\Staff\User;
24
use AppBundle\Form\Type\Staff\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('Staff\User', '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\Staff\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
            'Staff\User',
82
            'AppBundle\Entity\Staff\User',
83
            UserType::class,
84
            'user'
85
        );
86
87
        return $return;
88
    }
89
90
    /**
91
     * Creates a new User entity.
92
     *
93
     * @Route("/create", name="user_create")
94
     * @Method("POST")
95
     * @Template("AppBundle:Staff/User:new.html.twig")
96
     *
97
     * @param \Symfony\Component\HttpFoundation\Request $request
98
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
99
     */
100
    public function createAction(Request $request)
101
    {
102
        $user = new User();
103
        $form = $this->createForm(UserType::class, $user, ['action' => $this->generateUrl('user_create'),]);
104
        $form->handleRequest($request);
105
        $return = ['user' => $user, 'form'   => $form->createView(),];
106
107
        if ($form->isValid()) {
108
            $return = $this->validUser($user, 'create');
109
        }
110
111
        return $return;
112
    }
113
114
    /**
115
     * Displays a form to edit an existing User entity.
116
     *
117
     * @Route("/{id}/edit", name="user_edit", requirements={"id"="\d+"})
118
     * @Method("GET")
119
     * @Template()
120
     *
121
     * @param \AppBundle\Entity\Staff\User $user User item to edit
122
     * @return array
123
     */
124
    public function editAction(User $user)
125
    {
126
        $editForm = $this->createForm(UserType::class, $user, array(
127
            'action' => $this->generateUrl('user_update', array('id' => $user->getId())),
128
            'method' => 'PUT',
129
            'passwordRequired' => false,
130
            'lockedRequired' => true
131
        ));
132
        $deleteForm = $this->createDeleteForm($user->getId(), 'user_delete');
133
 
134
        return array(
135
            'user' => $user,
136
            'edit_form'   => $editForm->createView(),
137
            'delete_form' => $deleteForm->createView(),
138
        );
139
    }
140
141
    /**
142
     * Edits an existing User entity.
143
     *
144
     * @Route("/{id}/update", name="user_update", requirements={"id"="\d+"})
145
     * @Method("PUT")
146
     * @Template("AppBundle:Staff/User:edit.html.twig")
147
     *
148
     * @param \AppBundle\Entity\Staff\User              $user    User item to update
149
     * @param \Symfony\Component\HttpFoundation\Request $request Form request
150
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
151
     */
152
    public function updateAction(User $user, Request $request)
153
    {
154
        $editForm = $this->createForm(UserType::class, $user, array(
155
            'action' => $this->generateUrl('user_update', array('id' => $user->getId())),
156
            'method' => 'PUT',
157
            'passwordRequired' => false,
158
            'lockedRequired' => true
159
        ));
160
        $deleteForm = $this->createDeleteForm($user->getId(), 'user_delete');
161
162
        $editForm->handleRequest($request);
163
        $return = ['user' => $user,
164
            'edit_form' => $editForm->createView(),
165
            'delete_form' => $deleteForm->createView(),];
166
167
        if ($editForm->isValid()) {
168
            $return = $this->validUser($user, 'edit');
169
        }
170
171
        return $return;
172
    }
173
174
    /**
175
     * Save order.
176
     *
177
     * @Route("/order/{entity}/{field}/{type}", name="user_sort")
178
     *
179
     * @param string $entity Entity of the field to sort
180
     * @param string $field  Field to sort
181
     * @param string $type   type of sort
182
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
183
     */
184
    public function sortAction($entity, $field, $type)
185
    {
186
        $this->get('app.helper.controller')->setOrder('article', $entity, $field, $type);
187
188
        return $this->redirectToRoute('user');
189
    }
190
191
    /**
192
     * Deletes a User entity.
193
     *
194
     * @Security("has_role('ROLE_SUPER_ADMIN')")
195
     * @Route("/{id}/delete", name="user_delete", requirements={"id"="\d+"})
196
     * @Method("DELETE")
197
     *
198
     * @param \AppBundle\Entity\Staff\User              $user    User item to delete
199
     * @param \Symfony\Component\HttpFoundation\Request $request Form request
200
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
201
     */
202
    public function deleteAction(User $user, Request $request)
203
    {
204
        $this->abstractDeleteAction($user, $request, 'user');
205
206
        return $this->redirectToRoute('user');
207
    }
208
209
    /**
210
     * Get user roles.
211
     *
212
     * @param \AppBundle\Entity\Staff\User $user
213
     * @return \AppBundle\Entity\Staff\User
214
     */
215
    private function getRoles(User $user)
216
    {
217
        $roles = '';
218
        foreach ($user->getGroups() as $key => $group) {
219
            if ($key === 0) {
220
                $roles = $group->getRoles();
221
            }
222
        }
223
224
        $user->setRoles($roles);
225
        
226
        return $user;
227
    }
228
229
    /**
230
     * Valid the user.
231
     *
232
     * @param \AppBundle\Entity\Staff\User $user
233
     * @param string                       $action
234
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
235
     */
236
    private function validUser(User $user, $action)
237
    {
238
        $return = '';
239
        $user = $this->getRoles($user);
240
        if ($action === 'create') {
241
            $user->setEnabled(true);
242
        }
243
        $userManager = $this->get('fos_user.user_manager');
244
        $userManager->updateUser($user);
245
        $this->addFlash('info', 'gestock.' . $action . '.ok');
246
247
        if ($action === 'create') {
248
            $return = $this->redirectToRoute('user_show', ['id' => $user->getId()]);
249
        }
250
        if ($action === 'edit') {
251
            $return = $this->redirectToRoute('user_edit', ['id' => $user->getId()]);
252
        }
253
254
        return $return;
255
    }
256
}
257