PageAdminFormFieldsTrait   A
last analyzed

Complexity

Total Complexity 26

Size/Duplication

Total Lines 241
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 132
dl 0
loc 241
rs 10
c 0
b 0
f 0
wmc 26

18 Methods

Rating   Name   Duplication   Size   Complexity  
A configureFormFieldMainContent() 0 12 1
A configureFormFieldMetaRobots() 0 8 1
A configureFormFieldParentPage() 0 6 1
A configureFormFieldName() 0 7 1
A configureFormFieldExcrept() 0 7 1
A configureFormFieldCreatedAt() 0 12 1
A configureFormFieldH1() 0 6 1
A configureFormFieldHost() 0 11 2
A configureFormFieldSlug() 0 10 3
A configureFormFieldLocale() 0 6 1
A configureFormFieldOtherProperties() 0 11 2
A configureFormFieldTitle() 0 8 1
A getSlugHelp() 0 15 4
A configureFormFieldMainContentIsMarkdown() 0 12 1
A getHosts() 0 3 1
A configureFormFieldTranslations() 0 15 2
A configureFormFieldImages() 0 23 1
A configureFormFieldMainImage() 0 7 1
1
<?php
2
3
namespace PiedWeb\CMSBundle\Extension\Admin;
4
5
use Sonata\AdminBundle\Form\FormMapper;
6
use Sonata\AdminBundle\Form\Type\ModelAutocompleteType;
7
use Sonata\Form\Type\CollectionType;
8
use Sonata\Form\Type\DateTimePickerType;
9
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
10
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
11
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
12
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
13
use Symfony\Component\Form\Extension\Core\Type\TextType;
14
15
trait PageAdminFormFieldsTrait
16
{
17
    protected function configureFormFieldParentPage(FormMapper $formMapper): FormMapper
18
    {
19
        return $formMapper->add('parentPage', EntityType::class, [
20
                'class' => $this->pageClass,
21
                'label' => 'admin.page.parentPage.label',
22
                'required' => false,
23
            ]);
24
    }
25
26
    protected function configureFormFieldCreatedAt(FormMapper $formMapper): FormMapper
27
    {
28
        return $formMapper->add('createdAt', DateTimePickerType::class, [
29
            'format' => DateTimeType::HTML5_FORMAT,
30
            'dp_side_by_side' => true,
31
            'dp_use_current' => true,
32
            'dp_use_seconds' => false,
33
            'dp_collapse' => true,
34
            'dp_calendar_weeks' => false,
35
            'dp_view_mode' => 'days',
36
            'dp_min_view_mode' => 'days',
37
            'label' => 'admin.page.createdAt.label',
38
        ]);
39
    }
40
41
    protected function configureFormFieldMetaRobots(FormMapper $formMapper): FormMapper
42
    {
43
        return $formMapper->add('metaRobots', ChoiceType::class, [
44
                'choices' => [
45
                    'admin.page.metaRobots.choice.noIndex' => 'noindex',
46
                ],
47
                'label' => 'admin.page.metaRobots.label',
48
                'required' => false,
49
            ]);
50
    }
51
52
    protected function configureFormFieldName(FormMapper $formMapper): FormMapper
53
    {
54
        return $formMapper->add('name', TextType::class, [
55
                'label' => 'admin.page.name.label',
56
                'required' => false,
57
                'help_html' => true,
58
                'help' => 'admin.page.name.help',
59
            ]);
60
    }
61
62
    protected function configureFormFieldExcrept(FormMapper $formMapper): FormMapper
63
    {
64
        return $formMapper->add('excrept', TextareaType::class, [
65
                'required' => false,
66
                'label' => 'admin.page.excrept.label',
67
                'help_html' => true,
68
                'help' => 'admin.page.excrept.help',
69
            ]);
70
    }
71
72
    protected function configureFormFieldMainContent(FormMapper $formMapper): FormMapper
73
    {
74
        return $formMapper->add('mainContent', TextareaType::class, [
75
            'attr' => [
76
                'style' => 'min-height: 50vh;font-size:125%; max-width:900px',
77
                'data-editor' => 'markdown',
78
                'data-gutter' => 0,
79
            ],
80
            'required' => false,
81
            'label' => ' ',
82
            'help_html' => true,
83
            'help' => 'admin.page.mainContent.help',
84
        ]);
85
    }
86
87
    protected function configureFormFieldMainContentIsMarkdown(FormMapper $formMapper): FormMapper
88
    {
89
        return $formMapper->add('mainContentType', ChoiceType::class, [
90
            'choices' => [
91
                'admin.page.mainContentType.choice.raw' => '0',
92
                'admin.page.mainContentType.choice.markdown' => '1',
93
                'admin.page.mainContentType.choice.editorjs' => '2',
94
            ],
95
            'label' => 'admin.page.mainContentType.label',
96
            'required' => false,
97
            'help_html' => true,
98
            'help' => 'admin.page.markdown.help',
99
        ]);
100
    }
101
102
    protected function configureFormFieldOtherProperties(FormMapper $formMapper): FormMapper
103
    {
104
        return ! $this->exists('otherProperties') ? $formMapper : $formMapper->add('otherProperties', null, [
105
            'required' => false,
106
            'attr' => [
107
                'style' => 'min-height:15vh',
108
                'data-editor' => 'yaml',
109
            ],
110
            'label' => 'admin.page.otherProperties.label',
111
            'help_html' => true,
112
            'help' => 'admin.page.otherProperties.help',
113
        ]);
114
    }
115
116
    protected function getHosts()
117
    {
118
        return array_keys($this->apps);
119
    }
120
121
    protected function configureFormFieldHost(FormMapper $formMapper): FormMapper
122
    {
123
        if (null === $this->getSubject()->getHost()) {
124
            $this->getSubject()->setHost($this->getHosts()[0]);
125
        }
126
127
        return $formMapper->add('host', ChoiceType::class, [
128
            'choices' => array_combine($this->getHosts(), $this->getHosts()),
129
            'required' => false,
130
            'label' => 'admin.page.host.label',
131
            'empty_data' => $this->getHosts()[0],
132
        ]);
133
    }
134
135
    protected function configureFormFieldTranslations(FormMapper $formMapper): FormMapper
136
    {
137
        return $formMapper->add('translations', ModelAutocompleteType::class, [
138
            'required' => false,
139
            'multiple' => true,
140
            'class' => $this->pageClass,
141
            'property' => 'slug',
142
            'label' => 'admin.page.translations.label',
143
            'help_html' => true,
144
            'help' => 'admin.page.translations.help',
145
            'btn_add' => false,
146
            'to_string_callback' => function ($entity) {
147
                return $entity->getLocale()
148
                    ? $entity->getLocale().' ('.$entity->getSlug().')'
149
                    : $entity->getSlug(); // switch for getLocale
150
                // todo : remove it in next release and leave only get locale
151
                // todo : add a clickable link to the other admin
152
            },
153
        ]);
154
    }
155
156
    protected function configureFormFieldTitle(FormMapper $formMapper): FormMapper
157
    {
158
        return $formMapper->add('title', TextType::class, [
159
            'label' => 'admin.page.title.label',
160
            'required' => false,
161
            'help_html' => true,
162
            'help' => 'admin.page.title.help',
163
            'attr' => ['class' => 'titleToMeasure'],
164
        ]);
165
    }
166
167
    protected function configureFormFieldH1(FormMapper $formMapper): FormMapper
168
    {
169
        return $formMapper->add('h1', TextType::class, [
170
                'required' => false,
171
                'attr' => ['class' => 'input-lg', 'placeholder' => 'admin.page.title.label'],
172
                'label' => ' ',
173
            ]);
174
    }
175
176
    protected function configureFormFieldMainImage(FormMapper $formMapper): FormMapper
177
    {
178
        return $formMapper->add('mainImage', \Sonata\AdminBundle\Form\Type\ModelListType::class, [
179
                'required' => false,
180
                'class' => $this->mediaClass,
181
                'label' => 'admin.page.mainImage.label',
182
                'btn_edit' => false,
183
            ]);
184
    }
185
186
    protected function getSlugHelp()
187
    {
188
        $url = ! $this->getSubject() ? null
189
            : $this->pageCanonicalService->generatePathForPage($this->getSubject()->getSlug());
190
191
        return $this->getSubject() && $this->getSubject()->getSlug()
192
                ? '<span class="btn btn-link" onclick="toggleDisabled()" id="disabledLinkSlug">
193
                    <i class="fa fa-unlock"></i></span>
194
                    <script>function toggleDisabled() {
195
                        $(".slug_disabled").first().removeAttr("disabled");
196
                        $(".slug_disabled").first().focus();
197
                        $("#disabledLinkSlug").first().remove();
198
                    }</script><small>Changer le slug change l\'URL et peut créer des erreurs.</small>'
199
                    .'<br><small>URL actuelle&nbsp: <a href="'.$url.'">'.$url.'</a></small>'
200
                : 'admin.page.slug.help';
201
    }
202
203
    protected function configureFormFieldSlug(FormMapper $formMapper): FormMapper
204
    {
205
        return $formMapper->add('slug', TextType::class, [
206
            'required' => false,
207
            'label' => 'admin.page.slug.label',
208
            'help_html' => true,
209
            'help' => $this->getSlugHelp(),
210
            'attr' => [
211
                'class' => 'slug_disabled',
212
                ($this->getSubject() ? ($this->getSubject()->getSlug() ? 'disabled' : 't') : 't') => '',
213
            ],
214
        ]);
215
    }
216
217
    protected function configureFormFieldLocale(FormMapper $formMapper): FormMapper
218
    {
219
        return $formMapper->add('locale', TextType::class, [
220
            'label' => 'admin.page.locale.label',
221
            'help_html' => true,
222
            'help' => 'admin.page.locale.help',
223
        ]);
224
    }
225
226
    protected function configureFormFieldImages(FormMapper $formMapper): FormMapper
227
    {
228
        return $formMapper->add(
229
            'pageHasMedias',
230
            CollectionType::class,
231
            [
232
                'by_reference' => false,
233
                'required' => false,
234
                'label' => ' ',
235
                'type_options' => [
236
                    'delete' => true,
237
                ],
238
            ],
239
            [
240
                'allow_add' => false,
241
                'allow_delete' => true,
242
                'btn_add' => false,
243
                'btn_catalogue' => false,
244
                'edit' => 'inline',
245
                'inline' => 'table',
246
                'sortable' => 'position',
247
                //'link_parameters' => ['context' => $context],
248
                'admin_code' => 'piedweb.admin.pagehasmedia',
249
            ]
250
        );
251
    }
252
253
    abstract protected function exists(string $name): bool;
254
255
    abstract protected function getSubject();
256
}
257