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

EventController::putAction()   B

Complexity

Conditions 4
Paths 9

Size

Total Lines 22
Code Lines 17

Duplication

Lines 22
Ratio 100 %

Importance

Changes 0
Metric Value
dl 22
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\CampagneBundle\Controller;
4
5
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
6
use Starkerxp\CampagneBundle\Entity\Event;
7
use Starkerxp\CampagneBundle\Form\Type\EventType;
8
use Starkerxp\StructureBundle\Controller\StructureController;
9
use Symfony\Component\HttpFoundation\JsonResponse;
10
use Symfony\Component\HttpFoundation\Request;
11
12
13 View Code Duplication
class EventController extends StructureController
0 ignored issues
show
Duplication introduced by
This class seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
14
{
15
	/**
16
     * @ApiDoc(
17
     *      resource=true,
18
     *      description="Liste les events.",
19
     *      section="Campagne",
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
    public function cgetAction(Request $request)
53
    {
54
        $manager = $this->get("starkerxp_campagne.manager.event");
55
        try {
56
            $options = $this->resolveParams()->resolve($request->query->all());
57
            $orderBy = $this->getOrderBy($options['sort']);
58
            $resultSets = $manager->findBy([], $orderBy, $options['limit'], $options['offset']);
59
        } catch (\Exception $e) {
60
            return new JsonResponse(["payload" => $e->getMessage()], 400);
61
        }
62
        if (empty($resultSets)) {
63
            return new JsonResponse([]);
64
        }
65
        $retour = array_map(
66
            function ($element) use ($manager, $options) {
67
                return $manager->toArray($element, $this->getFields($options['fields']));
68
            },
69
            $resultSets
70
        );
71
        return new JsonResponse($retour);
72
    }
73
74
	
75
	/**
76
     * @ApiDoc(
77
     *      resource=true,
78
     *      description="Affiche un event.",
79
     *      section="Campagne",
80
	 *      requirements={
81
     *          {
82
     *              "name"="campagne_id",
83
     *              "dataType"="integer",
84
     *              "requirement"="\d+",
85
     *              "description"="Permet d'afficher l'élément choisis"
86
     *          },
87
     *          {
88
     *              "name"="event_id",
89
     *              "dataType"="integer",
90
     *              "requirement"="\d+",
91
     *              "description"="Permet d'afficher l'élément choisis"
92
     *          }
93
     *      },
94
     *      parameters={
95
     *          {
96
     *              "name"="fields",
97
     *              "dataType"="string",
98
     *              "requirement"="\w+",
99
     *              "description"="starkerxp_structure.doc.list_field.entity",
100
     *              "required"="false"
101
     *          }
102
     *      }
103
     * )
104
     */
105
    public function getAction(Request $request)
106
    {
107
        $manager = $this->get("starkerxp_campagne.manager.event");
108
        try {
109
            $options = $this->resolveParams()->resolve($request->query->all());
110
            $event = $manager->findOneBy(['id' => $request->get('id')]);
111
        } catch (\Exception $e) {
112
            return new JsonResponse(["payload" => $e->getMessage()], 400);
113
        }
114
        if (!$event instanceof Event) {
115
            return new JsonResponse(["payload" => $this->translate("event.entity.not_found", "event")], 404);
116
        }
117
        $retour = $manager->toArray($event, $this->getFields($options['fields']));
118
119
        return new JsonResponse($retour);
120
    }
121
122
	/**
123
     * @ApiDoc(
124
     *      resource=true,
125
     *      description="Ajoute un event.",
126
     *      section="Campagne"
127
     * )
128
     */
129
    public function postAction(Request $request)
130
    {
131
        $manager = $this->get("starkerxp_campagne.manager.event");
132
        try {
133
            $event = new Event();
134
            $form = $this->createForm(EventType::class, $event, ['method' => 'POST']);
135
            $form->submit($this->getRequestData($request));
136
            if ($form->isValid()) {
137
                $event = $form->getData();
138
                $event->setUuid($this->getUuid());
139
                $manager->insert($event);
140
                return new JsonResponse(["payload" => $this->translate("event.entity.created", "event")], 201);
141
            }
142
        } catch (\Exception $e) {
143
            $manager->rollback();
144
            return new JsonResponse(["payload" => $e->getMessage()], 400);
145
        }
146
147
        return new JsonResponse(["payload" => $this->getFormErrors($form)], 400);
148
    }
149
150
	/**
151
     * @ApiDoc(
152
     *      resource=true,
153
     *      description="Modifie un event.",
154
     *      section="Campagne",
155
	 *      requirements={
156
     *          {
157
     *              "name"="campagne_id",
158
     *              "dataType"="integer",
159
     *              "requirement"="\d+",
160
     *              "description"="Permet de modifier un élément de la campagne"
161
     *          },
162
     *          {
163
     *              "name"="event_id",
164
     *              "dataType"="integer",
165
     *              "requirement"="\d+",
166
     *              "description"="Permet de modifier l'élément choisis"
167
     *          }
168
     *      }
169
     * )
170
     */
171
    public function putAction(Request $request)
172
    {
173
        $manager = $this->get("starkerxp_campagne.manager.event");
174
        $event = $manager->find($request->get('id'));
175
        if (!$event instanceof Event) {
176
            return new JsonResponse(["payload" => $this->translate("event.entity.not_found", "event")], 404);
177
        }
178
        $manager->beginTransaction();
179
        try {
180
            $form = $this->createForm(EventType::class, $event, ['method' => 'PUT']);
181
            $form->submit($this->getRequestData($request));
182
            if ($form->isValid()) {
183
                $event = $form->getData();
184
                $manager->update($event);
185
                return new JsonResponse(["payload" => $this->translate("event.entity.updated", "event")], 204);
186
            }
187
        } catch (\Exception $e) {
188
            $manager->rollback();
189
            return new JsonResponse(["payload" => $e->getMessage()], 400);
190
        }
191
        return new JsonResponse(["payload" => $this->getFormErrors($form)], 400);
192
    }
193
194
	/**
195
     * @ApiDoc(
196
     *      resource=true,
197
     *      description="Supprime un event.",
198
     *      section="Campagne",
199
	 *      requirements={
200
     *          {
201
     *              "name"="campagne_id",
202
     *              "dataType"="integer",
203
     *              "requirement"="\d+",
204
     *              "description"="Permet de supprimer un élément de la campagne"
205
     *          },
206
     *          {
207
     *              "name"="event_id",
208
     *              "dataType"="integer",
209
     *              "requirement"="\d+",
210
     *              "description"="Permet de supprimer l'élément choisis"
211
     *          }
212
     *      }
213
     * )
214
     */
215
    public function deleteAction(Request $request)
216
    {
217
        $manager = $this->get("starkerxp_campagne.manager.event");
218
        $event = $manager->find($request->get('id'));
219
        if (!$event instanceof Event) {
220
            return new JsonResponse(["payload" => $this->translate("event.entity.not_found", "event")], 404);
221
        }
222
        try {
223
            $manager->delete($event);
224
        } catch (\Exception $e) {
225
            $manager->rollback();
226
            return new JsonResponse(["payload" => $e->getMessage()], 400);
227
        }
228
        return new JsonResponse(["payload" => $this->translate("event.entity.deleted", "event")], 204);
229
    }
230
231
} 
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...
232