Passed
Push — master ( ade97d...8526c1 )
by Dev
13:03
created

ElementAdmin   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 2
Metric Value
eloc 50
c 2
b 0
f 2
dl 0
loc 107
ccs 0
cts 78
cp 0
rs 10
wmc 14

7 Methods

Rating   Name   Duplication   Size   Complexity  
A getElement() 0 10 3
A getElements() 0 3 1
A deleteElement() 0 22 3
A editElementForm() 0 17 1
A clearTwigCache() 0 9 2
A listElement() 0 3 1
A editElement() 0 26 3
1
<?php
2
3
namespace PiedWeb\CMSBundle\TemplateEditor;
4
5
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
6
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
7
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
8
use Symfony\Component\Form\Extension\Core\Type\TextType;
9
use Symfony\Component\HttpFoundation\Request;
10
use Symfony\Component\Process\Exception\ProcessFailedException;
11
use Symfony\Component\Process\Process;
12
13
class ElementAdmin extends AbstractController
14
{
15
    protected function getElements()
16
    {
17
        return new ElementRepository($this->get('kernel')->getProjectDir().'/templates');
18
    }
19
20
    public function listElement()
21
    {
22
        return $this->render('@PiedWebCMS/admin/theme.list.html.twig', ['elements' => $this->getElements()->getAll()]);
23
    }
24
25
    protected function getElement($encodedPath)
26
    {
27
        if (null !== $encodedPath) {
28
            $element = $this->getElements()->getOneByEncodedPath($encodedPath);
29
            if (!$element) {
30
                throw $this->createNotFoundException('This element does not exist...');
31
            }
32
        }
33
34
        return $element ?? new Element($this->get('kernel')->getProjectDir().'/templates');
35
    }
36
37
    protected function clearTwigCache()
38
    {
39
        $twigCacheFolder = $this->get('twig')->getCache(true);
40
41
        $process = new Process(['rm', '-rf', $twigCacheFolder]);
42
        $process->run();
43
44
        if (!$process->isSuccessful()) {
45
            throw new ProcessFailedException($process);
46
        }
47
    }
48
49
    public function editElement($encodedPath = null, Request $request = null)
50
    {
51
        $element = $this->getElement($encodedPath);
52
53
        $form = $this->editElementForm($element);
54
55
        $form->handleRequest($request);
56
        if ($form->isSubmitted() && $form->isValid()) {
57
            $element = $form->getData();
58
            $element->storeElement();
59
60
            $this->clearTwigCache();
61
62
            return $this->redirectToRoute(
63
                'piedweb_cms_template_editor_edit',
64
                [
65
                'encodedPath' => $element->getEncodedPath(),
66
                ]
67
            );
68
        }
69
70
        return $this->render(
71
            '@PiedWebCMS/admin/theme.edit.html.twig',
72
            [
73
            'element' => $element,
74
            'form' => $form->createView(),
75
            ]
76
        );
77
    }
78
79
    protected function editElementForm(Element $element)
80
    {
81
        return $this->createFormBuilder($element)
82
            ->add('path', TextType::class)
83
            ->add(
84
                'code',
85
                TextareaType::class,
86
                [
87
                'attr' => [
88
                    'style' => 'min-height: 90vh;font-size:125%;',
89
                    'data-editor' => 'twig',
90
                    'data-gutter' => 0,
91
                ],
92
                ]
93
            )
94
95
            ->getForm();
96
    }
97
98
    public function deleteElement($encodedPath, Request $request)
99
    {
100
        $element = $this->getElement($encodedPath);
101
102
        $form = $this->createFormBuilder()
103
            ->add('delete', SubmitType::class, ['label' => 'Supprimer', 'attr' => ['class' => 'btn-danger']])
104
            ->getForm();
105
106
        $form->handleRequest($request);
107
        if ($form->isSubmitted() && $form->isValid()) {
108
            $element->deleteElement();
109
110
            $this->addFlash('error', 'Element supprimé.');
111
112
            return $this->redirectToRoute('piedweb_cms_template_editor_list');
113
        }
114
115
        return $this->render(
116
            '@PiedWebCMS/admin/theme.delete.html.twig',
117
            [
118
            'form' => $form->createView(),
119
            'element' => $element,
120
            ]
121
        );
122
    }
123
}
124