GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( f12c7c...d38d17 )
by Luis Ramón
02:49
created

AdminController::studentDeleteAction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
/*
3
  ÁTICA - Aplicación web para la gestión documental de centros educativos
4
5
  Copyright (C) 2015-2016: Luis Ramón López López
6
7
  This program is free software: you can redistribute it and/or modify
8
  it under the terms of the GNU Affero General Public License as published by
9
  the Free Software Foundation, either version 3 of the License, or
10
  (at your option) any later version.
11
12
  This program is distributed in the hope that it will be useful,
13
  but WITHOUT ANY WARRANTY; without even the implied warranty of
14
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
  GNU Affero General Public License for more details.
16
17
  You should have received a copy of the GNU Affero General Public License
18
  along with this program.  If not, see [http://www.gnu.org/licenses/].
19
*/
20
21
namespace AppBundle\Controller;
22
23
use AppBundle\Entity\Company;
24
use AppBundle\Entity\Department;
25
use AppBundle\Entity\Group;
26
use AppBundle\Entity\NonSchoolDay;
27
use AppBundle\Entity\Person;
28
use AppBundle\Entity\Student;
29
use AppBundle\Entity\Teacher;
30
use AppBundle\Entity\Training;
31
use AppBundle\Entity\Workcenter;
32
use Doctrine\ORM\EntityManager;
33
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
34
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
35
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
36
use Symfony\Component\HttpFoundation\Request;
37
38
/**
39
 * @Route("/admin")
40
 */
41
class AdminController extends Controller
42
{
43
    public static $DEPARTMENT_ENTITY_DATA = [
44
            'entity' => 'department',
45
            'entityClassName' => 'AppBundle\Entity\Department',
46
            'entityFormType' => 'AppBundle\Form\Type\DepartmentType',
47
            'query' => 'SELECT d FROM AppBundle:Department d LEFT JOIN d.head h LEFT JOIN h.person p',
48
            'defaultSortFieldName' => 'd.name',
49
            'columns' => [
50
                ['size' => '5', 'sort_field' => 'd.name', 'name' => 'department.name'],
51
                ['size' => '4', 'sort_field' => 'p.displayName', 'name' => 'department.head'],
52
            ],
53
            'data_columns' => ['name', 'head']
54
        ];
55
56
    public static $COMPANY_ENTITY_DATA = [
57
        'entity' => 'company',
58
        'entityClassName' => 'AppBundle\Entity\Company',
59
        'entityFormType' => 'AppBundle\Form\Type\CompanyType',
60
        'query' => 'SELECT c FROM AppBundle:Company c',
61
        'defaultSortFieldName' => 'c.name',
62
        'columns' => [
63
            ['size' => '2', 'sort_field' => 'c.code', 'name' => 'company.code'],
64
            ['size' => '7', 'sort_field' => 'c.name', 'name' => 'company.name'],
65
        ],
66
        'data_columns' => ['code', 'name']
67
    ];
68
69
    public static $WORKCENTER_ENTITY_DATA = [
70
        'entity' => 'workcenter',
71
        'entityClassName' => 'AppBundle\Entity\Workcenter',
72
        'entityFormType' => 'AppBundle\Form\Type\WorkcenterType',
73
        'query' => 'SELECT w FROM AppBundle:Workcenter w JOIN w.company c',
74
        'defaultSortFieldName' => 'w.company.name',
75
        'columns' => [
76
            ['size' => '4', 'sort_field' => 'w.company.name', 'name' => 'form.company'],
77
            ['size' => '5', 'sort_field' => 'w.name', 'name' => 'form.name'],
78
        ],
79
        'data_columns' => ['company', 'name']
80
    ];
81
82
    public static $GROUP_ENTITY_DATA = [
83
        'entity' => 'group',
84
        'entityClassName' => 'AppBundle\Entity\Group',
85
        'entityFormType' => 'AppBundle\Form\Type\GroupType',
86
        'query' => 'SELECT g FROM AppBundle:Group g JOIN g.training t',
87
        'defaultSortFieldName' => 'g.name',
88
        'columns' => [
89
            ['size' => '4', 'sort_field' => 'g.name', 'name' => 'form.name'],
90
            ['size' => '5', 'sort_field' => 'g.training', 'name' => 'form.training']
91
        ],
92
        'data_columns' => ['name', 'training']
93
    ];
94
95
    public static $TRAINING_ENTITY_DATA = [
96
        'entity' => 'training',
97
        'entityClassName' => 'AppBundle\Entity\Training',
98
        'entityFormType' => 'AppBundle\Form\Type\TrainingType',
99
        'query' => 'SELECT t FROM AppBundle:Training t JOIN t.department d',
100
        'defaultSortFieldName' => 't.name',
101
        'columns' => [
102
            ['size' => '4', 'sort_field' => 't.name', 'name' => 'form.name'],
103
            ['size' => '3', 'sort_field' => 't.department', 'name' => 'form.department'],
104
            ['size' => '2', 'sort_field' => 't.programHours', 'name' => 'form.program_hours']
105
        ],
106
        'data_columns' => ['name', 'department', 'programHours']
107
    ];
108
109
    public static $NON_SCHOOL_DAY_ENTITY_DATA = [
110
        'entity' => 'non_school_day',
111
        'entityClassName' => 'AppBundle\Entity\NonSchoolDay',
112
        'entityFormType' => 'AppBundle\Form\Type\NonSchoolDayType',
113
        'query' => 'SELECT n FROM AppBundle:NonSchoolDay n',
114
        'defaultSortFieldName' => 'n.date',
115
        'columns' => [
116
            ['size' => '2', 'sort_field' => 'n.date', 'name' => 'form.date'],
117
            ['size' => '7', 'sort_field' => 'n.name', 'name' => 'form.name']
118
        ],
119
        'data_columns' => ['date', 'name']
120
    ];
121
122
    public static $TEACHER_ENTITY_DATA = [
123
        'entity' => 'teacher',
124
        'entityClassName' => 'AppBundle\Entity\Teacher',
125
        'entityFormType' => 'AppBundle\Form\Type\TeacherType',
126
        'query' => 'SELECT t FROM AppBundle:Teacher t JOIN t.person p',
127
        'defaultSortFieldName' => 'p.lastName',
128
        'columns' => [
129
            ['size' => '5', 'sort_field' => 'p.lastName', 'name' => 'form.last_name'],
130
            ['size' => '4', 'sort_field' => 'p.firstName', 'name' => 'form.first_name']
131
        ],
132
        'data_columns' => ['lastName', 'firstName']
133
    ];
134
135
    public static $STUDENT_ENTITY_DATA = [
136
        'entity' => 'student',
137
        'entityClassName' => 'AppBundle\Entity\Student',
138
        'entityFormType' => 'AppBundle\Form\Type\StudentType',
139
        'query' => 'SELECT s FROM AppBundle:Student s JOIN s.person p',
140
        'defaultSortFieldName' => 'p.lastName',
141
        'columns' => [
142
            ['size' => '4', 'sort_field' => 'p.lastName', 'name' => 'form.last_name'],
143
            ['size' => '3', 'sort_field' => 'p.firstName', 'name' => 'form.first_name'],
144
            ['size' => '2', 'sort_field' => 's.group', 'name' => 'form.group']
145
        ],
146
        'data_columns' => ['lastName', 'firstName', 'group']
147
    ];
148
149
    /**
150
     * @Route("/", name="admin_menu", methods={"GET"})
151
     * @Security("is_granted('ROLE_ADMIN')")
152
     */
153
    public function indexAction()
154
    {
155
        $menuItem = $this->get('app.menu_builders_chain')->getMenuItemByRouteName('admin_menu');
156
        
157
        return $this->render('admin/menu.html.twig',
158
            [
159
                'menu_item' => $menuItem
160
            ]);
161
    }
162
163
    public function genericIndexAction($entityData, Request $request)
164
    {
165
        /** @var EntityManager $em */
166
        $em = $this->getDoctrine()->getManager();
167
168
        $query = $em->createQuery($entityData['query']);
169
170
        $paginator  = $this->get('knp_paginator');
171
        $pagination = $paginator->paginate(
172
            $query,
173
            $request->query->getInt('page', 1),
174
            $this->getParameter('page.size'),
175
            [
176
                'defaultSortFieldName' => $entityData['defaultSortFieldName'],
177
                'defaultSortDirection' => 'asc'
178
            ]
179
        );
180
181
        return $this->render('admin/manage_generic.html.twig',
182
            [
183
                'menu_item' => $this->get('app.menu_builders_chain')->getMenuItemByRouteName($request->get('_route')),
184
                'title' => null,
185
                'pagination' => $pagination,
186
                'entity' => $entityData['entity'],
187
                'columns' => $entityData['columns'],
188
                'data_columns' => $entityData['data_columns']
189
            ]);
190
    }
191
192
    public function genericFormAction($entityData, $element, Request $request)
193
    {
194
        $em = $this->getDoctrine()->getManager();
195
196
        $new = (null === $element);
197
        if ($new) {
198
            $element = new $entityData['entityClassName'];
199
            if (method_exists($element, 'setPerson')) {
200
                $person = new Person();
201
                $element->setPerson($person);
202
                $em->persist($person);
203
            }
204
            $em->persist($element);
205
        }
206
207
        $form = $this->createForm($entityData['entityFormType'], $element);
208
209
        $form->handleRequest($request);
210
211
        $menuItem = $this->get('app.menu_builders_chain')->getMenuItemByRouteName('admin_' . $entityData['entity']);
212
213
        if ($form->isSubmitted() && $form->isValid()) {
214
215
            // Probar a guardar los cambios
216
            try {
217
                $em->flush();
218
                $this->addFlash('success', $this->get('translator')->trans('alert.saved', [], 'user'));
219
                return $this->redirectToRoute($menuItem->getRouteName(), $menuItem->getRouteParams());
220
            } catch (\Exception $e) {
221
                $this->addFlash('error', $this->get('translator')->trans('alert.not_saved', [], 'user'));
222
            }
223
        }
224
225
        $title = ((string) $element) ?: $this->get('translator')->trans('form.new', [], $entityData['entity']);
226
227
        return $this->render('admin/form_generic.html.twig', [
228
            'form' => $form->createView(),
229
            'new' => $new,
230
            'menu_item' => $menuItem,
231
            'breadcrumb' => [
232
                ['fixed' => $title]
233
            ],
234
            'element' => $element,
235
            'title' => $title,
236
            'entity' => $entityData['entity']
237
        ]);
238
    }
239
240
    public function genericDeleteAction($entityData, $element, Request $request)
241
    {
242
        if ('POST' === $request->getMethod() && $request->request->has('delete')) {
243
244
            // Eliminar el departamento de la base de datos
245
            $this->getDoctrine()->getManager()->remove($element);
246
            try {
247
                $this->getDoctrine()->getManager()->flush();
248
                $this->addFlash('success', $this->get('translator')->trans('alert.deleted', [], $entityData['entity']));
249
            }
250
            catch(\Exception $e) {
251
                $this->addFlash('error', $this->get('translator')->trans('alert.not_deleted', [], $entityData['entity']));
252
            }
253
            return $this->redirectToRoute('admin_' . $entityData['entity']);
254
        }
255
256
        $title = (string) $element;
257
258
        $breadcrumb = [
259
            ['fixed' => $title, 'path' => 'admin_' . $entityData['entity'] . '_form', 'options' => ['id' => $element->getId()]],
260
            ['caption' => 'menu.delete']
261
        ];
262
263
        return $this->render(':admin:delete_generic.html.twig', [
264
            'menu_item' => $this->get('app.menu_builders_chain')->getMenuItemByRouteName('admin_departments'),
265
            'breadcrumb' => $breadcrumb,
266
            'title' => $title,
267
            'element' => $element,
268
            'entity' => $entityData['entity']
269
        ]);
270
    }
271
272
    /**
273
     * @Route("/departamentos", name="admin_department", methods={"GET"})
274
     */
275
    public function departmentsIndexAction(Request $request)
276
    {
277
        return $this->genericIndexAction(self::$DEPARTMENT_ENTITY_DATA, $request);
278
    }
279
280
    /**
281
     * @Route("/departamentos/nuevo", name="admin_department_new", methods={"GET", "POST"})
282
     * @Route("/departamentos/{id}", name="admin_department_form", methods={"GET", "POST"}, requirements={"id": "\d+"})
283
     */
284
    public function departmentsFormAction(Department $element = null, Request $request)
285
    {
286
        return $this->genericFormAction(self::$DEPARTMENT_ENTITY_DATA, $element, $request);
287
    }
288
289
    /**
290
     * @Route("/departamentos/eliminar/{id}", name="admin_department_delete", methods={"GET", "POST"}, requirements={"id": "\d+"} )
291
     */
292
    public function deleteElementAction(Department $element, Request $request)
293
    {
294
        return $this->genericDeleteAction(self::$DEPARTMENT_ENTITY_DATA, $element, $request);
295
    }
296
297
    /**
298
     * @Route("/empresas", name="admin_company", methods={"GET"})
299
     */
300
    public function companiesIndexAction(Request $request)
301
    {
302
        return $this->genericIndexAction(self::$COMPANY_ENTITY_DATA, $request);
303
    }
304
305
    /**
306
     * @Route("/empresas/nueva", name="admin_company_new", methods={"GET", "POST"})
307
     * @Route("/empresas/{id}", name="admin_company_form", methods={"GET", "POST"}, requirements={"id": "\d+"})
308
     */
309
    public function companyFormAction(Company $element = null, Request $request)
310
    {
311
        return $this->genericFormAction(self::$COMPANY_ENTITY_DATA, $element, $request);
312
    }
313
314
    /**
315
     * @Route("/empresas/eliminar/{id}", name="admin_company_delete", methods={"GET", "POST"}, requirements={"id": "\d+"} )
316
     */
317
    public function companyDeleteAction(Company $element, Request $request)
318
    {
319
        return $this->genericDeleteAction(self::$COMPANY_ENTITY_DATA, $element, $request);
320
    }
321
322
    /**
323
     * @Route("/grupos", name="admin_group", methods={"GET"})
324
     */
325
    public function groupIndexAction(Request $request)
326
    {
327
        return $this->genericIndexAction(self::$GROUP_ENTITY_DATA, $request);
328
    }
329
330
    /**
331
     * @Route("/grupos/nuevo", name="admin_group_new", methods={"GET", "POST"})
332
     * @Route("/grupos/{id}", name="admin_group_form", methods={"GET", "POST"}, requirements={"id": "\d+"})
333
     */
334
    public function groupFormAction(Group $element = null, Request $request)
335
    {
336
        return $this->genericFormAction(self::$GROUP_ENTITY_DATA, $element, $request);
337
    }
338
339
    /**
340
     * @Route("/grupos/eliminar/{id}", name="admin_group_delete", methods={"GET", "POST"}, requirements={"id": "\d+"} )
341
     */
342
    public function groupDeleteAction(Group $element, Request $request)
343
    {
344
        return $this->genericDeleteAction(self::$GROUP_ENTITY_DATA, $element, $request);
345
    }
346
347
    /**
348
     * @Route("/ensenanzas", name="admin_training", methods={"GET"})
349
     */
350
    public function trainingIndexAction(Request $request)
351
    {
352
        return $this->genericIndexAction(self::$TRAINING_ENTITY_DATA, $request);
353
    }
354
355
    /**
356
     * @Route("/ensenanzas/nueva", name="admin_training_new", methods={"GET", "POST"})
357
     * @Route("/ensenanzas/{id}", name="admin_training_form", methods={"GET", "POST"}, requirements={"id": "\d+"})
358
     */
359
    public function trainingFormAction(Training $element = null, Request $request)
360
    {
361
        return $this->genericFormAction(self::$TRAINING_ENTITY_DATA, $element, $request);
362
    }
363
364
    /**
365
     * @Route("/ensenanzas/eliminar/{id}", name="admin_training_delete", methods={"GET", "POST"}, requirements={"id": "\d+"} )
366
     */
367
    public function trainingDeleteAction(Training $element, Request $request)
368
    {
369
        return $this->genericDeleteAction(self::$TRAINING_ENTITY_DATA, $element, $request);
370
    }
371
372
    /**
373
     * @Route("/diasnolectivos", name="admin_non_school_day", methods={"GET"})
374
     */
375
    public function nonSchoolDayIndexAction(Request $request)
376
    {
377
        return $this->genericIndexAction(self::$NON_SCHOOL_DAY_ENTITY_DATA, $request);
378
    }
379
380
    /**
381
     * @Route("/diasnolectivos/nuevo", name="admin_non_school_day_new", methods={"GET", "POST"})
382
     * @Route("/diasnolectivos/{id}", name="admin_non_school_day_form", methods={"GET", "POST"})
383
     */
384
    public function nonSchoolDayFormAction(NonSchoolDay $element = null, Request $request)
385
    {
386
        return $this->genericFormAction(self::$NON_SCHOOL_DAY_ENTITY_DATA, $element, $request);
387
    }
388
389
    /**
390
     * @Route("/diasnolectivos/eliminar/{id}", name="admin_non_school_day_delete", methods={"GET", "POST"})
391
     */
392
    public function workcenterDeleteAction(Workcenter $element, Request $request)
393
    {
394
        return $this->genericDeleteAction(self::$WORKCENTER_ENTITY_DATA, $element, $request);
395
    }
396
397
    /**
398
     * @Route("/centros", name="admin_workcenter", methods={"GET"})
399
     */
400
    public function workcenterIndexAction(Request $request)
401
    {
402
        return $this->genericIndexAction(self::$WORKCENTER_ENTITY_DATA, $request);
403
    }
404
405
    /**
406
     * @Route("/centros/nuevo", name="admin_workcenter_new", methods={"GET", "POST"})
407
     * @Route("/centros/{id}", name="admin_workcenter_form", methods={"GET", "POST"})
408
     */
409
    public function workcenterFormAction(Workcenter $element = null, Request $request)
410
    {
411
        return $this->genericFormAction(self::$WORKCENTER_ENTITY_DATA, $element, $request);
412
    }
413
414
    /**
415
     * @Route("/centros/eliminar/{id}", name="admin_workcenter_delete", methods={"GET", "POST"})
416
     */
417
    public function nonSchoolDayDeleteAction(Workcenter $element, Request $request)
418
    {
419
        return $this->genericDeleteAction(self::$WORKCENTER_ENTITY_DATA, $element, $request);
420
    }
421
422
    /**
423
     * @Route("/profesorado", name="admin_teacher", methods={"GET"})
424
     */
425
    public function teacherIndexAction(Request $request)
426
    {
427
        return $this->genericIndexAction(self::$TEACHER_ENTITY_DATA, $request);
428
    }
429
430
    /**
431
     * @Route("/profesorado/nuevo", name="admin_teacher_new", methods={"GET", "POST"})
432
     * @Route("/profesorado/{id}", name="admin_teacher_form", methods={"GET", "POST"})
433
     */
434
    public function teacherFormAction(Teacher $element = null, Request $request)
435
    {
436
        return $this->genericFormAction(self::$TEACHER_ENTITY_DATA, $element, $request);
437
    }
438
439
    /**
440
     * @Route("/profesorado/eliminar/{id}", name="admin_teacher_delete", methods={"GET", "POST"})
441
     */
442
    public function teacherDeleteAction(Teacher $element, Request $request)
443
    {
444
        return $this->genericDeleteAction(self::$TEACHER_ENTITY_DATA, $element, $request);
445
    }
446
447
    /**
448
     * @Route("/alumnado", name="admin_student", methods={"GET"})
449
     */
450
    public function studentIndexAction(Request $request)
451
    {
452
        return $this->genericIndexAction(self::$STUDENT_ENTITY_DATA, $request);
453
    }
454
455
    /**
456
     * @Route("/alumnado/nuevo", name="admin_student_new", methods={"GET", "POST"})
457
     * @Route("/alumnado/{id}", name="admin_student_form", methods={"GET", "POST"})
458
     */
459
    public function studentFormAction(Student $element = null, Request $request)
460
    {
461
        return $this->genericFormAction(self::$STUDENT_ENTITY_DATA, $element, $request);
462
    }
463
464
    /**
465
     * @Route("/alumnado/eliminar/{id}", name="admin_student_delete", methods={"GET", "POST"})
466
     */
467
    public function studentDeleteAction(Student $element, Request $request)
468
    {
469
        return $this->genericDeleteAction(self::$STUDENT_ENTITY_DATA, $element, $request);
470
    }
471
}
472