EditTrickController   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
eloc 30
dl 0
loc 71
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
B edit() 0 36 6
1
<?php
2
3
namespace App\Controller\Trick\Admin;
4
5
6
use App\Entity\Trick;
7
use App\Event\Trick\TrickAddPrimaryImageEvent;
8
use App\Event\Trick\TrickDeletedEvent;
9
use App\Event\Trick\TrickEditedEvent;
10
use App\Form\TrickFormType;
11
use App\History\TrickHistory;
12
use App\Repository\TagRepository;
13
use App\Serializer\TagSerializer;
14
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
15
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
16
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
17
use Symfony\Component\Form\Form;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\Routing\Annotation\Route;
20
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
21
22
/**
23
 * Class TrickEditController
24
 * @package App\Controller\Edit
25
 *
26
 * Require the user to be connected for everything here
27
 * @IsGranted("ROLE_USER")
28
 */
29
class EditTrickController extends AbstractController
30
{
31
    /**
32
     * @var EventDispatcherInterface
33
     */
34
    private $dispatcher;
35
    /**
36
     * @var TrickHistory
37
     */
38
    private $trickHistory;
39
40
    /**
41
     * @var TagRepository
42
     */
43
    private $tagRepository;
44
    /**
45
     * @var TagSerializer
46
     */
47
    private $tagSerializer;
48
49
    public function __construct(
50
        EventDispatcherInterface $dispatcher,
51
        TrickHistory $trickHistory,
52
        TagRepository $tagRepository,
53
        TagSerializer $tagSerializer
54
    ) {
55
        $this->dispatcher = $dispatcher;
56
        $this->trickHistory = $trickHistory;
57
        $this->tagRepository = $tagRepository;
58
        $this->tagSerializer = $tagSerializer;
59
    }
60
61
    /**
62
     * @Route("/trick/edit/{id}", name="trick.edit")
63
     */
64
    public function edit(Trick $trick, Request $request)
65
    {
66
        $originalTrickImages = $trick->getImages()->count();
67
        /** @var Form $form */
68
        $form = $this->createForm(TrickFormType::class, $trick, [
69
            'all_tags_json' => $this->tagSerializer->allTagsJson(),
70
            'trick_tags_json' => $trick->getTagsJson(),
71
        ]);
72
73
        $form->handleRequest($request);
74
75
        if ($form->getClickedButton() && $form->getClickedButton()->getName() === 'delete') {
76
77
            $event = new TrickDeletedEvent($trick);
78
            $this->dispatcher->dispatch(TrickDeletedEvent::NAME, $event);
79
80
            return $this->redirectToRoute('home');
81
        }
82
83
        if ($form->isSubmitted() && $form->isValid()) {
84
            if($originalTrickImages === 0){
85
                $addImageEvent = new TrickAddPrimaryImageEvent($trick);
86
                $this->dispatcher->dispatch(TrickAddPrimaryImageEvent::NAME, $addImageEvent);
87
            }
88
            $event = new TrickEditedEvent($trick);
89
            $this->dispatcher->dispatch(TrickEditedEvent::NAME, $event);
90
91
            return $this->redirectToRoute('trick.show', [
92
                'id' => $trick->getId(),
93
                'slug' => $trick->getSlug(),
94
            ]);
95
        }
96
97
        return $this->render('trick/admin/edit.html.twig', [
98
            'trick' => $trick,
99
            'form' => $form->createView(),
100
        ]);
101
    }
102
103
}