Passed
Push — master ( 4017d9...9757db )
by Dev
10:15
created

PageAdminFormFieldsTrait::configureFormFieldH1()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 6
rs 10
c 0
b 0
f 0
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('mainContentIsMarkdown', null, [
90
            'required' => false,
91
            'label' => 'admin.page.markdown.label',
92
            'help_html' => true,
93
            'help' => 'admin.page.markdown.help',
94
        ]);
95
    }
96
97
    protected function configureFormFieldOtherProperties(FormMapper $formMapper): FormMapper
98
    {
99
        return !$this->exists('otherProperties') ? $formMapper : $formMapper->add('otherProperties', null, [
100
            'required' => false,
101
            'attr' => [
102
                'style' => 'min-height:15vh',
103
                'data-editor' => 'yaml',
104
            ],
105
            'label' => 'admin.page.otherProperties.label',
106
            'help_html' => true,
107
            'help' => 'admin.page.otherProperties.help',
108
        ]);
109
    }
110
111
    protected function getHosts()
112
    {
113
        return array_keys($this->apps);
114
    }
115
116
    protected function configureFormFieldHost(FormMapper $formMapper): FormMapper
117
    {
118
        if (null === $this->getSubject()->getHost()) {
119
            $this->getSubject()->setHost($this->getHosts()[0]);
120
        }
121
122
        return $formMapper->add('host', ChoiceType::class, [
123
            'choices' => array_combine($this->getHosts(), $this->getHosts()),
124
            'required' => false,
125
            'label' => 'admin.page.host.label',
126
            'empty_data' => $this->getHosts()[0],
127
        ]);
128
    }
129
130
    protected function configureFormFieldTranslations(FormMapper $formMapper): FormMapper
131
    {
132
        return $formMapper->add('translations', ModelAutocompleteType::class, [
133
            'required' => false,
134
            'multiple' => true,
135
            'class' => $this->pageClass,
136
            'property' => 'slug',
137
            'label' => 'admin.page.translations.label',
138
            'help_html' => true,
139
            'help' => 'admin.page.translations.help',
140
            'btn_add' => false,
141
            'to_string_callback' => function ($entity) {
142
                return $entity->getLocale()
143
                    ? $entity->getLocale().' ('.$entity->getSlug().')'
144
                    : $entity->getSlug(); // switch for getLocale
145
                // todo : remove it in next release and leave only get locale
146
                // todo : add a clickable link to the other admin
147
            },
148
        ]);
149
    }
150
151
    protected function configureFormFieldTitle(FormMapper $formMapper): FormMapper
152
    {
153
        return $formMapper->add('title', TextType::class, [
154
            'label' => 'admin.page.title.label',
155
            'required' => false,
156
            'help_html' => true,
157
            'help' => 'admin.page.title.help',
158
            'attr' => ['class' => 'titleToMeasure'],
159
        ]);
160
    }
161
162
    protected function configureFormFieldH1(FormMapper $formMapper): FormMapper
163
    {
164
        return $formMapper->add('h1', TextType::class, [
165
                'required' => false,
166
                'attr' => ['class' => 'input-lg', 'placeholder' => 'admin.page.title.label'],
167
                'label' => ' ',
168
            ]);
169
    }
170
171
    protected function configureFormFieldMainImage(FormMapper $formMapper): FormMapper
172
    {
173
        return $formMapper->add('mainImage', \Sonata\AdminBundle\Form\Type\ModelListType::class, [
174
                'required' => false,
175
                'class' => $this->mediaClass,
176
                'label' => 'admin.page.mainImage.label',
177
                'btn_edit' => false,
178
            ]);
179
    }
180
181
    protected function getSlugHelp()
182
    {
183
        $url = !$this->getSubject() ? null
184
            : $this->pageCanonicalService->generatePathForPage($this->getSubject()->getSlug());
185
186
        return $this->getSubject() && $this->getSubject()->getSlug()
187
                ? '<span class="btn btn-link" onclick="toggleDisabled()" id="disabledLinkSlug">
188
                    <i class="fa fa-unlock"></i></span>
189
                    <script>function toggleDisabled() {
190
                        $(".slug_disabled").first().removeAttr("disabled");
191
                        $(".slug_disabled").first().focus();
192
                        $("#disabledLinkSlug").first().remove();
193
                    }</script><small>Changer le slug change l\'URL et peut créer des erreurs.</small>'
194
                    .'<br><small>URL actuelle&nbsp: <a href="'.$url.'">'.$url.'</a></small>'
195
                : 'admin.page.slug.help';
196
    }
197
198
    protected function configureFormFieldSlug(FormMapper $formMapper): FormMapper
199
    {
200
        return $formMapper->add('slug', TextType::class, [
201
            'required' => false,
202
            'label' => 'admin.page.slug.label',
203
            'help_html' => true,
204
            'help' => $this->getSlugHelp(),
205
            'attr' => [
206
                'class' => 'slug_disabled',
207
                ($this->getSubject() ? ($this->getSubject()->getSlug() ? 'disabled' : 't') : 't') => '',
208
            ],
209
        ]);
210
    }
211
212
    protected function configureFormFieldLocale(FormMapper $formMapper): FormMapper
213
    {
214
        return $formMapper->add('locale', TextType::class, [
215
            'label' => 'admin.page.locale.label',
216
            'help_html' => true,
217
            'help' => 'admin.page.locale.help',
218
        ]);
219
    }
220
221
    protected function configureFormFieldImages(FormMapper $formMapper): FormMapper
222
    {
223
        return $formMapper->add(
224
            'pageHasMedias',
225
            CollectionType::class,
226
            [
227
                'by_reference' => false,
228
                'required' => false,
229
                'label' => ' ',
230
                'type_options' => [
231
                    'delete' => true,
232
                ],
233
            ],
234
            [
235
                'allow_add' => false,
236
                'allow_delete' => true,
237
                'btn_add' => false,
238
                'btn_catalogue' => false,
239
                'edit' => 'inline',
240
                'inline' => 'table',
241
                'sortable' => 'position',
242
                //'link_parameters' => ['context' => $context],
243
                'admin_code' => 'piedweb.admin.pagehasmedia',
244
            ]
245
        );
246
    }
247
248
    abstract protected function exists(string $name): bool;
249
250
    abstract protected function getSubject();
251
}
252