Completed
Push — master ( 4be93f...79933c )
by Guillaume
11:24
created

UtilisateurController::putAction()   B

Complexity

Conditions 4
Paths 9

Size

Total Lines 22
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 8.9197
c 0
b 0
f 0
cc 4
eloc 17
nc 9
nop 1
1
<?php
2
3
namespace Starkerxp\UtilisateurBundle\Controller;
4
5
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
6
use Starkerxp\UtilisateurBundle\Entity\Utilisateur;
7
use Starkerxp\UtilisateurBundle\Form\Type\UtilisateurType;
8
use Starkerxp\StructureBundle\Controller\StructureController;
9
use Symfony\Component\HttpFoundation\JsonResponse;
10
use Symfony\Component\HttpFoundation\Request;
11
12
13
class UtilisateurController extends StructureController
14
{
15
	/**
16
     * @ApiDoc(
17
     *      resource=true,
18
     *      description="Liste les utilisateurs.",
19
     *      section="Utilisateur",
20
     *      parameters={
21
     *          {
22
     *              "name"="offset",
23
     *              "dataType"="integer",
24
     *              "requirement"="\d+",
25
     *              "description"="starkerxp_structure.doc.offset.result",
26
     *              "required"="false"
27
     *          },
28
     *          {
29
     *              "name"="limit",
30
     *              "dataType"="integer",
31
     *              "requirement"="\d+",
32
     *              "description"="starkerxp_structure.doc.limit.result",
33
     *              "required"="false"
34
     *          },
35
     *          {
36
     *              "name"="fields",
37
     *              "dataType"="string",
38
     *              "requirement"="\w+",
39
     *              "description"="starkerxp_structure.doc.list_field.entity",
40
     *              "required"="false"
41
     *          },
42
     *          {
43
     *              "name"="sort",
44
     *              "dataType"="string",
45
     *              "requirement"="\w+",
46
     *              "description"="starkerxp_structure.doc.sort.result",
47
     *              "required"="false"
48
     *          }
49
     *      }
50
     * )
51
     * )
52
     */
53
    public function cgetAction(Request $request)
54
    {
55
        $manager = $this->get("starkerxp_utilisateur.manager.utilisateur");
56
        try {
57
            $options = $this->resolveParams()->resolve($request->query->all());
58
            $orderBy = $this->getOrderBy($options['sort']);
59
            $resultSets = $manager->findBy([], $orderBy, $options['limit'], $options['offset']);
60
        } catch (\Exception $e) {
61
            return new JsonResponse(["payload" => $e->getMessage()], 400);
62
        }
63
        if (empty($resultSets)) {
64
            return new JsonResponse([]);
65
        }
66
        $retour = array_map(
67
            function ($element) use ($manager, $options) {
68
                return $manager->toArray($element, $this->getFields($options['fields']));
69
            },
70
            $resultSets
71
        );
72
        return new JsonResponse($retour);
73
    }
74
75
	
76
	/**
77
     * @ApiDoc(
78
     *      resource=true,
79
     *      description="Affiche un utilisateur.",
80
     *      section="Utilisateur",
81
	 *      requirements={
82
     *          {
83
     *              "name"="utilisateur_id",
84
     *              "dataType"="integer",
85
     *              "requirement"="\d+",
86
     *              "description"="Permet d'afficher l'élément choisis"
87
     *          }
88
     *      },
89
     *      parameters={
90
     *          {
91
     *              "name"="fields",
92
     *              "dataType"="string",
93
     *              "requirement"="\w+",
94
     *              "description"="starkerxp_structure.doc.list_field.entity",
95
     *              "required"="false"
96
     *          }
97
     *      }
98
     * )
99
     */
100
    public function getAction(Request $request)
101
    {
102
        $manager = $this->get("starkerxp_utilisateur.manager.utilisateur");
103
        try {
104
            $options = $this->resolveParams()->resolve($request->query->all());
105
            $utilisateur = $manager->findOneBy(['id' => $request->get('utilisateur_id')]);
106
        } catch (\Exception $e) {
107
            return new JsonResponse(["payload" => $e->getMessage()], 400);
108
        }
109
        if (!$utilisateur instanceof Utilisateur) {
110
            return new JsonResponse(["payload" => $this->translate("utilisateur.entity.not_found", "utilisateur")], 404);
111
        }
112
        $retour = $manager->toArray($utilisateur, $this->getFields($options['fields']));
113
114
        return new JsonResponse($retour);
115
    }
116
117
	/**
118
     * @ApiDoc(
119
     *      resource=true,
120
     *      description="Ajoute un utilisateur.",
121
     *      section="Utilisateur"
122
     * )
123
     */
124
    public function postAction(Request $request)
125
    {
126
        $manager = $this->get("starkerxp_utilisateur.manager.utilisateur");
127
        try {
128
            $utilisateur = new Utilisateur();
129
            $form = $this->createForm(UtilisateurType::class, $utilisateur, ['method' => 'POST']);
130
            $form->submit($this->getRequestData($request));
131
            if ($form->isValid()) {
132
                $utilisateur = $form->getData();
133
                $utilisateur->setUuid($this->getUuid());
134
                $manager->insert($utilisateur);
135
                return new JsonResponse(["payload" => $this->translate("utilisateur.entity.created", "utilisateur")], 201);
136
            }
137
        } catch (\Exception $e) {
138
            $manager->rollback();
139
            return new JsonResponse(["payload" => $e->getMessage()], 400);
140
        }
141
142
        return new JsonResponse(["payload" => $this->getFormErrors($form)], 400);
143
    }
144
145
	/**
146
     * @ApiDoc(
147
     *      resource=true,
148
     *      description="Modifie un utilisateur.",
149
     *      section="Utilisateur",
150
	 *      requirements={
151
     *          {
152
     *              "name"="utilisateur_id",
153
     *              "dataType"="integer",
154
     *              "requirement"="\d+",
155
     *              "description"="Permet de modifier l'élément choisi."
156
     *          }
157
     *      }
158
     * )
159
     */
160
    public function putAction(Request $request)
161
    {
162
        $manager = $this->get("starkerxp_utilisateur.manager.utilisateur");
163
        $utilisateur = $manager->find($request->get('utilisateur_id'));
164
        if (!$utilisateur instanceof Utilisateur) {
165
            return new JsonResponse(["payload" => $this->translate("utilisateur.entity.not_found", "utilisateur")], 404);
166
        }
167
        $manager->beginTransaction();
168
        try {
169
            $form = $this->createForm(UtilisateurType::class, $utilisateur, ['method' => 'PUT']);
170
            $form->submit($this->getRequestData($request));
171
            if ($form->isValid()) {
172
                $utilisateur = $form->getData();
173
                $manager->update($utilisateur);
174
                return new JsonResponse(["payload" => $this->translate("utilisateur.entity.updated", "utilisateur")], 204);
175
            }
176
        } catch (\Exception $e) {
177
            $manager->rollback();
178
            return new JsonResponse(["payload" => $e->getMessage()], 400);
179
        }
180
        return new JsonResponse(["payload" => $this->getFormErrors($form)], 400);
181
    }
182
183
	/**
184
     * @ApiDoc(
185
     *      resource=true,
186
     *      description="Supprime un utilisateur.",
187
     *      section="Utilisateur",
188
	 *      requirements={
189
     *          {
190
     *              "name"="utilisateur_id",
191
     *              "dataType"="integer",
192
     *              "requirement"="\d+",
193
     *              "description"="Permet de supprimer l'élément choisi."
194
     *          }
195
     *      }
196
     * )
197
     */
198
    public function deleteAction(Request $request)
199
    {
200
        $manager = $this->get("starkerxp_utilisateur.manager.utilisateur");
201
        $utilisateur = $manager->find($request->get('utilisateur_id'));
202
        if (!$utilisateur instanceof Utilisateur) {
203
            return new JsonResponse(["payload" => $this->translate("utilisateur.entity.not_found", "utilisateur")], 404);
204
        }
205
        return new JsonResponse(["payload" => $this->translate("utilisateur.entity.deleted", "utilisateur")], 204);
206
    }
207
208
} 
0 ignored issues
show
Coding Style introduced by
As per coding style, files should not end with a newline character.

This check marks files that end in a newline character, i.e. an empy line.

Loading history...
209