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

CampagneController::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\Campagne;
7
use Starkerxp\CampagneBundle\Form\Type\CampagneType;
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 CampagneController 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 campagnes.",
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.campagne");
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
     * @ApiDoc(
76
     *      resource=true,
77
     *      description="Affiche une campagne.",
78
     *      section="Campagne",
79
	 *      requirements={
80
     *          {
81
     *              "name"="campagne_id",
82
     *              "dataType"="integer",
83
     *              "requirement"="\d+",
84
     *              "description"="Permet d'afficher l'élément choisis"
85
     *          }
86
     *      },
87
     *      parameters={
88
     *          {
89
     *              "name"="fields",
90
     *              "dataType"="string",
91
     *              "requirement"="\w+",
92
     *              "description"="starkerxp_structure.doc.list_field.entity",
93
     *              "required"="false"
94
     *          }
95
     *      }
96
     * )
97
     */
98
    public function getAction(Request $request)
99
    {
100
        $manager = $this->get("starkerxp_campagne.manager.campagne");
101
        try {
102
            $options = $this->resolveParams()->resolve($request->query->all());
103
            $campagne = $manager->findOneBy(['id' => $request->get('campagne_id')]);
104
        } catch (\Exception $e) {
105
            return new JsonResponse(["payload" => $e->getMessage()], 400);
106
        }
107
        if (!$campagne instanceof Campagne) {
108
            return new JsonResponse(["payload" => $this->translate("campagne.entity.not_found", "campagne")], 404);
109
        }
110
        $retour = $manager->toArray($campagne, $this->getFields($options['fields']));
111
112
        return new JsonResponse($retour);
113
    }
114
115
	/**
116
     * @ApiDoc(
117
     *      resource=true,
118
     *      description="Ajoute une campagne.",
119
     *      section="Campagne"
120
     * )
121
     */
122
    public function postAction(Request $request)
123
    {
124
        $manager = $this->get("starkerxp_campagne.manager.campagne");
125
        try {
126
            $campagne = new Campagne();
127
            $form = $this->createForm(CampagneType::class, $campagne, ['method' => 'POST']);
128
            $form->submit($this->getRequestData($request));
129
            if ($form->isValid()) {
130
                $campagne = $form->getData();
131
                $campagne->setUuid($this->getUuid());
132
                $manager->insert($campagne);
133
                return new JsonResponse(["payload" => $this->translate("campagne.entity.created", "campagne")], 201);
134
            }
135
        } catch (\Exception $e) {
136
            $manager->rollback();
137
            return new JsonResponse(["payload" => $e->getMessage()], 400);
138
        }
139
140
        return new JsonResponse(["payload" => $this->getFormErrors($form)], 400);
141
    }
142
143
	/**
144
     * @ApiDoc(
145
     *      resource=true,
146
     *      description="Modifie une campagne.",
147
     *      section="Campagne",
148
	 *      requirements={
149
     *          {
150
     *              "name"="campagne_id",
151
     *              "dataType"="integer",
152
     *              "requirement"="\d+",
153
     *              "description"="Permet de modifier l'élément choisi."
154
     *          }
155
     *      }
156
     * )
157
     */
158
    public function putAction(Request $request)
159
    {
160
        $manager = $this->get("starkerxp_campagne.manager.campagne");
161
        $campagne = $manager->find($request->get('campagne_id'));
162
        if (!$campagne instanceof Campagne) {
163
            return new JsonResponse(["payload" => $this->translate("campagne.entity.not_found", "campagne")], 404);
164
        }
165
        $manager->beginTransaction();
166
        try {
167
            $form = $this->createForm(CampagneType::class, $campagne, ['method' => 'PUT']);
168
            $form->submit($this->getRequestData($request));
169
            if ($form->isValid()) {
170
                $campagne = $form->getData();
171
                $manager->update($campagne);
172
                return new JsonResponse(["payload" => $this->translate("campagne.entity.updated", "campagne")], 204);
173
            }
174
        } catch (\Exception $e) {
175
            $manager->rollback();
176
            return new JsonResponse(["payload" => $e->getMessage()], 400);
177
        }
178
        return new JsonResponse(["payload" => $this->getFormErrors($form)], 400);
179
    }
180
181
	/**
182
     * @ApiDoc(
183
     *      resource=true,
184
     *      description="Supprime une campagne.",
185
     *      section="Campagne",
186
	 *      requirements={
187
     *          {
188
     *              "name"="campagne_id",
189
     *              "dataType"="integer",
190
     *              "requirement"="\d+",
191
     *              "description"="Permet de supprimer l'élément choisi."
192
     *          }
193
     *      }
194
     * )
195
     */
196
    public function deleteAction(Request $request)
197
    {
198
        $manager = $this->get("starkerxp_campagne.manager.campagne");
199
        $campagne = $manager->find($request->get('campagne_id'));
200
        if (!$campagne instanceof Campagne) {
201
            return new JsonResponse(["payload" => $this->translate("campagne.entity.not_found", "campagne")], 404);
202
        }
203
        try {
204
            $manager->delete($campagne);
205
        } catch (\Exception $e) {
206
            $manager->rollback();
207
            return new JsonResponse(["payload" => $e->getMessage()], 400);
208
        }
209
        return new JsonResponse(["payload" => $this->translate("campagne.entity.deleted", "campagne")], 204);
210
    }
211
212
} 
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...
213