Passed
Push — master ( 838f20...a86ce5 )
by Dev
03:52
created

PageAdmin::preUpdate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace PiedWeb\CMSBundle\Admin;
4
5
use Sonata\AdminBundle\Admin\AbstractAdmin;
6
use Sonata\AdminBundle\Datagrid\ListMapper;
7
use Sonata\AdminBundle\Datagrid\DatagridMapper;
8
use Sonata\AdminBundle\Form\FormMapper;
9
use Symfony\Component\Form\Extension\Core\Type\TextType;
10
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
11
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
12
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
13
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
14
use Sonata\AdminBundle\Form\Type\ModelAutocompleteType;
15
use Sonata\CoreBundle\Form\Type\DateTimePickerType;
16
use Sonata\BlockBundle\Meta\Metadata;
17
use PiedWeb\CMSBundle\Service\FeedDumpService;
18
19
class PageAdmin extends AbstractAdmin
20
{
21
    use AdminTrait;
1 ignored issue
show
Bug introduced by
The trait PiedWeb\CMSBundle\Admin\AdminTrait requires the property $query which is not provided by PiedWeb\CMSBundle\Admin\PageAdmin.
Loading history...
22
23
    protected $datagridValues = [
24
        '_page' => 1,
25
        '_sort_order' => 'DESC',
26
        '_sort_by' => 'updatedAt',
27
    ];
28
29
    protected $feedDumper;
30
31
    private $liipImage;
32
33
    public function setLiipImage($liipImage)
34
    {
35
        $this->liipImage = $liipImage;
36
    }
37
38
    public function setFeedDumper(FeedDumpService $feedDumper)
39
    {
40
        $this->feedDumper = $feedDumper;
41
    }
42
43
    public function configure()
44
    {
45
        $this->setTemplate('edit', '@PiedWebCMS/admin/edit.html.twig');
46
        $this->setTemplate('show', '@PiedWebCMS/admin/show_page.html.twig');
47
    }
48
49
    /**
50
    public function getFormTheme()
51
    {
52
53
        return array_merge(
54
            parent::getFormTheme(),
55
            array('@PiedWebCMS/admin/edit-media.html.twig')
56
        );
57
    }**/
58
    protected function configureFormFields(FormMapper $formMapper)
59
    {
60
        if ($this->getSubject() && $this->getSubject()->getSlug()) {
61
            // Better to be in  event PostUpdate page... but it's quicker
62
            $this->feedDumper->dump();
63
        }
64
65
        $formMapper->with('admin.page.title.label', ['class' => 'col-md-9']);
66
        $formMapper->add('title', TextType::class, [
67
            'label' => 'admin.page.title.label',
68
            'help' => 'admin.page.title.help',
69
        ]);
70
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getH1')) { // To do on each element to permit to use admin without all page Trait.
71
            $formMapper->add('h1', TextType::class, [
72
                'required' => false,
73
                'attr' => ['class' => 'input-lg'],
74
                'label' => 'admin.page.h1.label',
75
                'help' => 'admin.page.h1.help',
76
            ]);
77
        }
78
79
        $formMapper->add('slug', TextType::class, [
80
            'label' => 'admin.page.slug.label',
81
            'help' => 'admin.page.slug.help',
82
            'attr' => [
83
                ($this->getSubject()->getSlug() ? 'disabled' : 't') => '',
84
            ],
85
        ]);
86
87
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getMainImage')) {
88
            $formMapper->add('mainImage', \Sonata\AdminBundle\Form\Type\ModelListType::class, [
89
            'required' => false,
90
            'class' => $this->getConfigurationPool()->getContainer()->getParameter('app.entity_media'),
91
            'label' => 'admin.page.mainImage.label',
92
            'btn_edit' => false,
93
        ]);
94
        }
95
        $formMapper->end();
96
97
        $formMapper->with('admin.page.mainContent.label');
98
        $formMapper->add('mainContent', TextareaType::class, [
99
            'attr' => [
100
                'style' => 'min-height: 600px;font-size:125%;',
101
                'data-editor' => 'markdown',
102
                'data-gutter' => 0,
103
            ],
104
            'required' => false,
105
            'label' => ' ',
106
            'help' => 'admin.page.mainContent.help',
107
        ]);
108
        $formMapper->add('mainContentIsMarkdown', null, [
109
            'required' => false,
110
            'label' => 'markdown',
111
        ]);
112
        $formMapper->end();
113
114
        $formMapper->with('admin.details', ['class' => 'col-md-6 order-1']);
115
116
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getname')) {
117
            $formMapper->add('name', TextType::class, [
118
                'label' => 'admin.page.name.label',
119
                'required' => false,
120
                'help' => 'admin.page.name.help',
121
            ]);
122
        }
123
124
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getparentPage')) {
125
            $formMapper->add('parentPage', EntityType::class, [
126
                'class' => $this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'),
127
                'label' => 'admin.page.parentPage.label',
128
                'required' => false,
129
            ]);
130
        }
131
132
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getexcrept')) {
133
            $formMapper->add('excrept', TextareaType::class, [
134
            'required' => false,
135
            'label' => 'admin.page.excrept.label',
136
            'help' => 'admin.page.excrept.help',
137
        ]);
138
        }
139
140
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getfaq')) {
141
            $formMapper->add('faq', ModelAutocompleteType::class, [
142
                'required' => false,
143
                 'multiple' => true,
144
                 'class' => $this->getConfigurationPool()->getContainer()->getParameter('app.entity_faq'),
145
                 'property' => 'question',   // or any field in your media entity
146
                 'label' => 'admin.page.faq.label',
147
                 'btn_add' => true,
148
                 'to_string_callback' => function ($entity) {//, $property) {
149
                     return $entity->getQuestion();
150
                 },
151
             ]);
152
        }
153
154
        //var_dump($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page')); exit;
155
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getrelatedPages')) {
156
            $formMapper->add('relatedPages', ModelAutocompleteType::class, [
157
                'required' => false,
158
                 'multiple' => true,
159
                 'class' => $this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'),
160
                 'property' => 'title',   // or any field in your media entity
161
                 'label' => 'admin.page.relatedPage.label',
162
                 'btn_add' => false,
163
                 'to_string_callback' => function ($entity) { //, $property) {
164
                     return $entity->getTitle();
165
                 },
166
             ]);
167
        }
168
        $formMapper->end();
169
170
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getimages')) {
171
            $formMapper->with('admin.page.images.label', ['class' => 'col-md-3']);
172
            $formMapper->add('pageHasMedias', \Sonata\CoreBundle\Form\Type\CollectionType::class, [
173
                    'by_reference' => false,
174
                    'required' => false,
175
                    'label' => ' ',
176
                    'type_options' => [
177
                        'delete' => true,
178
                    ],
179
                ],
180
                [
181
                    'allow_add' => false,
182
                    'allow_delete' => true,
183
                    'btn_add' => false,
184
                    'btn_catalogue' => false,
185
                    'edit' => 'inline',
186
                    'inline' => 'table',
187
                    'sortable' => 'position',
188
                    //'link_parameters' => ['context' => $context],
189
                    'admin_code' => 'piedweb.admin.pagehasmedia',
190
                ]
191
            );
192
            $formMapper->end();
193
        }
194
195
        $formMapper->with('admin.edition', ['class' => 'col-md-3']);
196
197
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getmetaRobots')) {
198
            $formMapper->add('metaRobots', ChoiceType::class, [
199
            'choices' => [
200
                'admin.page.metaRobots.choice.noIndex' => 'no-index, no-follow',
201
            ],
202
             'label' => 'admin.page.metaRobots.label',
203
            'required' => false,
204
        ]);
205
        }
206
        $formMapper->add('createdAt', DateTimePickerType::class, [
207
            //'date_format' => 'd MMMM y H:mm',
208
            'format' => DateTimeType::HTML5_FORMAT,
209
            'dp_side_by_side' => true,
210
            'dp_use_current' => true,
211
            'dp_use_seconds' => false,
212
            'dp_collapse' => true,
213
            'dp_calendar_weeks' => false,
214
            'dp_view_mode' => 'days',
215
            'dp_min_view_mode' => 'days',
216
             'label' => 'admin.page.createdAt.label',
217
        ]);
218
        $formMapper->add('updatedAt', DateTimePickerType::class, [
219
            //'date_format' => 'd MMMM y H:mm',
220
            'format' => DateTimeType::HTML5_FORMAT,
221
            'dp_side_by_side' => true,
222
            'dp_use_current' => true,
223
            'dp_use_seconds' => false,
224
            'dp_collapse' => true,
225
            'dp_calendar_weeks' => false,
226
            'dp_view_mode' => 'days',
227
            'dp_min_view_mode' => 'days',
228
             'label' => 'admin.page.updatedAt.label',
229
            'attr' => [
230
                ($this->getSubject()->getSlug() ? 'disabled' : 't') => '',
231
            ],
232
        ]);
233
234
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getauthor')) {
235
            $formMapper->add('author', EntityType::class, [
236
             'label' => 'admin.page.author.label',
237
             'class' => $this->getConfigurationPool()->getContainer()->getParameter('app.entity_user'), 'label' => 'Auteur',
238
             'required' => false,
239
        ]);
240
        }
241
242
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'gettemplate')) {
243
            $formMapper->add('template', null, [
244
             'label' => 'admin.page.template.label',
245
             'required' => false,
246
            ]);
247
        }
248
249
        $formMapper->end();
250
    }
251
252
    protected function configureDatagridFilters(DatagridMapper $formMapper)
253
    {
254
        $formMapper->add('title', null, ['label' => 'admin.page.title.label']);
255
256
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getH1')) {
257
            $formMapper->add('h1', null, ['label' => 'admin.page.h1.label']);
258
        }
259
260
        $formMapper->add('slug', null, ['label' => 'admin.page.slug.label']);
261
262
        $formMapper->add('mainContent', null, ['label' => 'admin.page.mainContent.label']);
263
264
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getname')) {
265
            $formMapper->add('name', null, ['label' => 'admin.page.mainContent.label']);
266
        }
267
268
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getparentPage')) {
269
            $formMapper->add('parentPage', null, ['label' => 'admin.page.parentPage.label']);
270
        }
271
272
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getmetaRobots')) {
273
            $formMapper->add('metaRobots', null, [
274
            'choices' => [
275
                'admin.page.metaRobots.choice.noIndex' => 'no-index, no-follow',
276
            ],
277
             'label' => 'admin.page.metaRobots.label',
278
        ]);
279
        }
280
        /*
281
         * todo: implémente datepicker for orm_date in sonata
282
        $formMapper->add('createdAt', 'doctrine_orm_date', [
283
             'label' => 'admin.page.createdAt.label',
284
        ]);
285
        $formMapper->add('updatedAt', null, [
286
             'label' => 'admin.page.updatedAt.label',
287
        ]);
288
        */
289
290
        if (method_exists($this->getConfigurationPool()->getContainer()->getParameter('app.entity_page'), 'getauthor')) {
291
            $formMapper->add('author', null, [
292
             'label' => 'admin.page.author.label',
293
             'class' => $this->getConfigurationPool()->getContainer()->getParameter('app.entity_user'),
294
             'required' => false,
295
            ]);
296
        }
297
    }
298
299
    public function preUpdate($page)
300
    {
301
        $page->setUpdatedAt(new \Datetime());
302
    }
303
304
    protected function configureListFields(ListMapper $listMapper)
305
    {
306
        //$this->setMosaicDefaultListMode();
307
308
        $listMapper->addIdentifier('title', null, [
309
            'label' => 'admin.page.title.label',
310
        ]);
311
        $listMapper->add('slug', null, [
312
            'label' => 'admin.page.slug.label',
313
        ]);
314
        $listMapper->add('updatedAt', null, [
315
            'format' => 'd M y (H:m)',
316
            'label' => 'admin.page.updatedAt.label',
317
        ]);
318
        $listMapper->add('createdAt', null, [
319
            'format' => 'd M y (H:m)',
320
            'label' => 'admin.page.createdAt.label',
321
        ]);
322
        $listMapper->add('_action', null, [
323
            'actions' => [
324
                'show' => [],
325
                'edit' => [],
326
                'delete' => [],
327
            ],
328
            'row_align' => 'right',
329
            'header_class' => 'text-right',
330
            'label' => 'admin.action',
331
        ]);
332
    }
333
334
    public function getObjectMetadata($page)
335
    {
336
        $media = $page->getMainImage();
337
        if (null !== $media && false !== strpos($media->getMimeType(), 'image/')) {
338
            $fullPath = '/'.$media->getRelativeDir().'/'.$media->getMedia();
339
            $thumb = $this->liipImage->getBrowserPath($fullPath, 'thumb');
340
        } else {
341
            $thumb = null; // feature, une icone en fonction du media (pdf/word...)
342
        }
343
344
        return new Metadata($page->getTitle(), null, $thumb);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new Sonata\BlockB...tTitle(), null, $thumb) returns the type Sonata\BlockBundle\Meta\Metadata which is incompatible with the return type mandated by Sonata\AdminBundle\Admin...ce::getObjectMetadata() of Sonata\AdminBundle\Object\MetadataInterface.

In the issue above, the returned value is violating the contract defined by the mentioned interface.

Let's take a look at an example:

interface HasName {
    /** @return string */
    public function getName();
}

class Name {
    public $name;
}

class User implements HasName {
    /** @return string|Name */
    public function getName() {
        return new Name('foo'); // This is a violation of the ``HasName`` interface
                                // which only allows a string value to be returned.
    }
}
Loading history...
345
    }
346
}
347