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

CampagneController   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 200
Duplicated Lines 100 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 16
lcom 1
cbo 7
dl 200
loc 200
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A cgetAction() 21 21 3
A getAction() 16 16 3
A postAction() 20 20 3
B putAction() 22 22 4
A deleteAction() 15 15 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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