Completed
Push — master ( 3bba38...f9f96f )
by Dev
04:14
created

ElementAdmin::editElement()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 3
eloc 10
c 1
b 0
f 1
nc 2
nop 2
dl 0
loc 17
ccs 0
cts 12
cp 0
crap 12
rs 9.9332
1
<?php
2
3
namespace PiedWeb\CMSBundle\TemplateEditor;
4
5
use Symfony\Component\Finder\Finder;
6
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
7
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
8
use Symfony\Component\Form\Extension\Core\Type\TextType;
9
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
10
use Symfony\Component\HttpFoundation\Request;
11
12
class ElementAdmin extends AbstractController
13
{
14
15
    protected function getElements()
16
    {
17
        return new ElementRepository($this->get('kernel')->getProjectDir().'/templates');
18
    }
19
20
    public function listElement() {
21
        return $this->render('@PiedWebCMS/admin/theme.list.html.twig', ['elements'=>$this->getElements()->getAll()]);
22
    }
23
24
    protected function getElement($encodedPath)
25
    {
26
        if ($encodedPath !== null) {
27
            $element = $this->getElements()->getOneByEncodedPath($encodedPath);
28
            if (!$element) {
29
                throw $this->createNotFoundException('This element does not exist...');
30
            }
31
        }
32
33
        return $element??new Element($this->get('kernel')->getProjectDir().'/templates');
34
    }
35
36
    public function editElement($encodedPath = null, Request $request) {
37
38
        $element = $this->getElement($encodedPath);
39
40
        $form = $this->editElementForm($element);
41
42
        $form->handleRequest($request);
43
        if ($form->isSubmitted() && $form->isValid()) {
44
            $element = $form->getData();
45
            $element->storeElement();
46
47
            return $this->redirectToRoute('piedweb_cms_template_editor_edit', ['encodedPath' => $element->getEncodedPath()]);
48
        }
49
50
        return $this->render('@PiedWebCMS/admin/theme.edit.html.twig', [
51
            'element' => $element,
52
            'form'=> $form->createView()
53
        ]);
54
    }
55
56
    protected function editElementForm(Element $element)
57
    {
58
        return $this->createFormBuilder($element)
59
            ->add('path', TextType::class)
60
            ->add('code', TextareaType::class, [
61
                'attr' => [
62
                    'style' => 'min-height: 90vh;font-size:125%;',
63
                    'data-editor' => 'markdown',
64
                    'data-gutter' => 0,
65
                ],
66
            ])
67
68
            ->getForm();
69
    }
70
71
    public function deleteElement ($encodedPath, Request $request) {
72
73
74
        $element = $this->getElement($encodedPath);
75
76
        $form = $this->createFormBuilder()
77
           ->add('delete', SubmitType::class, ['label' => 'Supprimer', 'attr' => ['class'=>'btn-danger']])
78
            ->getForm();
79
80
        $form->handleRequest($request);
81
        if ($form->isSubmitted() && $form->isValid()) {
82
            $element->deleteElement();
83
84
            $this->addFlash('error', 'Element supprimé.');
85
86
            return $this->redirectToRoute('piedweb_cms_template_editor_list');
87
        }
88
89
        return $this->render('@PiedWebCMS/admin/theme.delete.html.twig', [
90
            'form' => $form->createView(),
91
            'element' => $element
92
        ]);
93
    }
94
}
95