Completed
Push — master ( 6130d0...57338d )
by Dev
24:32 queued 11:23
created

MediaAdmin::getRelatedPages()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 11
nc 2
nop 0
dl 0
loc 19
ccs 0
cts 18
cp 0
crap 6
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
namespace PiedWeb\CMSBundle\Admin;
4
5
use Sonata\AdminBundle\Admin\AbstractAdmin;
6
use Sonata\AdminBundle\Datagrid\DatagridMapper;
7
use Sonata\AdminBundle\Datagrid\ListMapper;
8
use Sonata\AdminBundle\Form\FormMapper;
9
use Sonata\BlockBundle\Meta\Metadata;
10
use Symfony\Component\Form\Extension\Core\Type\FileType;
11
use Symfony\Component\Form\Extension\Core\Type\TextType;
12
13
class MediaAdmin extends AbstractAdmin
14
{
15
    use AdminTrait;
16
17
    protected $datagridValues = [
18
        '_page' => 1,
19
        '_sort_order' => 'DESC',
20
        '_sort_by' => 'updatedAt',
21
    ];
22
23
    private $liipImage;
24
    private $relatedPages;
25
26
    public function setLiipImage($liipImage)
27
    {
28
        $this->liipImage = $liipImage;
29
    }
30
31
    protected function configureFormFields(FormMapper $formMapper)
32
    {
33
        $media = $this->getSubject();
34
35
        $formMapper->with('Media', ['class' => 'col-md-6'])
36
            ->add('name', TextType::class, [
37
                    'required' => false,
38
                    'help' => 'admin.media.name.help',
39
                    'label' => 'admin.media.name.label',
40
                    'attr' => ['ismedia' => 1, 'class' => 'col-md-6'],
41
            ])
42
            ->add('mediaFile', FileType::class, [
43
                    'label' => 'admin.media.mediaFile.label',
44
                ])
45
            ->end();
46
47
        $formMapper->with('i18n', ['class' => 'col-md-6'])
48
            ->add('names', null, [
49
                    'required' => false,
50
                    'help' => 'admin.media.names.help',
51
                    'label' => 'admin.media.names.label',
52
                    'attr' => ['ismedia' => 1, 'class' => 'col-md-6'],
53
            ])
54
            ->end();
55
56
        if ($media && $media->getMedia()) {
57
            $formMapper->with('admin.media.preview.label', [
58
                    'class' => 'col-md-12',
59
                    'description' => $this->showMediaPreview(),
60
                    //'empty_message' => false, // to uncomment when sonataAdmin 3.62 is released
61
                ])->end();
62
63
            if ($this->issetRelatedPages()) {
64
                $formMapper->with('admin.media.related.label', [
65
                        'class' => 'col-md-12',
66
                        'description' => $this->showRelatedPages(),
67
                        //'empty_message' => false, /// to uncomment when sonataAdmin 3.62 is released
68
                ])->end();
69
            }
70
        }
71
    }
72
73
    protected function showMediaPreview(): string
74
    {
75
        $media = $this->getSubject();
76
77
        $template = false !== strpos($media->getMimeType(), 'image/') ?
78
            '@PiedWebCMS/admin/media_show.preview_image.html.twig'
79
            : '@PiedWebCMS/admin/media_show.preview.html.twig';
80
81
        return $this->getContainer()->get('twig')->render(
82
            $template,
83
            [
84
                'media' => $media,
85
            ]
86
        );
87
    }
88
89
    protected function issetRelatedPages(): bool
90
    {
91
        $relatedPages = $this->getRelatedPages();
92
93
        if (!empty($relatedPages['content'])
94
            || $relatedPages['gallery']->count() > 0
95
            || $relatedPages['mainImage']->count() > 0
96
        ) {
97
            return true;
98
        } else {
99
            return false;
100
        }
101
    }
102
103
    protected function getRelatedPages(): ?array
104
    {
105
        if (null !== $this->relatedPages) {
106
            return $this->relatedPages;
107
        }
108
109
        $media = $this->getSubject();
110
111
        $pages = $this->getConfigurationPool()->getContainer()->get('doctrine')
112
            ->getRepository($this->getContainer()->getParameter('app.entity_page'))
113
            ->getPagesUsingMedia($this->liipImage->getBrowserPath($media->getFullPath(), 'default'));
114
115
        $this->relatedPages = [
116
            'content' => $pages,
117
            'gallery' => $media->getPageHasMedias(),
118
            'mainImage' => $media->getMainImagePages(),
119
        ];
120
121
        return $this->relatedPages;
122
    }
123
124
    protected function showRelatedPages(): string
125
    {
126
        $media = $this->getSubject();
0 ignored issues
show
Unused Code introduced by
The assignment to $media is dead and can be removed.
Loading history...
127
128
        return $this->getContainer()->get('twig')->render(
129
            '@PiedWebCMS/admin/media_show.relatedPages.html.twig',
130
            $this->getRelatedPages()
131
        );
132
    }
133
134
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
135
    {
136
        /*
137
         * todo: implémente datepicker for orm_date in sonata
138
        $datagridMapper->add('createdAt', null, [
139
            'label' => 'admin.media.createdAt.label',
140
        ]);
141
        */
142
        $datagridMapper->add('name', null, [
143
            'label' => 'admin.media.name.label',
144
        ]);
145
        $datagridMapper->add('names', null, [
146
            'label' => 'admin.media.names.label',
147
        ]);
148
    }
149
150
    protected function configureListFields(ListMapper $listMapper)
151
    {
152
        $this->setMosaicDefaultListMode();
153
154
        $listMapper->add('name', null, [
155
            'label' => 'admin.media.name.label',
156
        ]);
157
        $listMapper->add('createdAt', null, [
158
            'label' => 'admin.media.createdAt.label',
159
            'format' => 'd/m/y',
160
        ]);
161
        $listMapper->add('mainColor', null, [
162
            'label' => 'admin.media.mainColor.label',
163
        ]);
164
        $listMapper->add('_action', null, [
165
            'actions' => [
166
                'edit' => [],
167
                'delete' => [],
168
            ],
169
        ]);
170
    }
171
172
    public function getObjectMetadata($media)
173
    {
174
        if (false !== strpos($media->getMimeType(), 'image/')) {
175
            $fullPath = '/'.$media->getRelativeDir().'/'.$media->getMedia();
176
            $thumb = $this->liipImage->getBrowserPath($fullPath, 'thumb');
177
        } else {
178
            $thumb = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSIzMnB4IiB2ZXJzaW9uP
179
                SIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgd2lkdGg9IjMycHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
180
                eG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiIHhtbG5zOnhsaW5rPSJodHRwOi8
181
                vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48dGl0bGUvPjxkZXNjLz48ZGVmcy8+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub
182
                2RkIiBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSI+PGcgZmlsbD0iIzkyOTI5MiIgaWQ9Imljb24
183
                tMjEtZXllLWhpZGRlbiI+PHBhdGggZD0iTTguMTA4Njk4OTEsMjAuODkxMzAxMSBDNC42MTcyMDgxNiwxOC44MzAxMTQ3IDMsMT
184
                YgMywxNiBDMywxNiA3LDkgMTYsOSBDMTcuMzA0NTEwNyw5IDE4LjUwMzk3NTIsOS4xNDcwNjQ2NiAxOS42MDE0Mzg4LDkuMzk4
185
                NTYxMjIgTDE4Ljc1MTkwMTcsMTAuMjQ4MDk4MyBDMTcuODk3MTQ4NCwxMC4wOTAwNTQ2IDE2Ljk4MDA5MjksMTAgMTYsMTAgQzg
186
                sMTAgNC4xOTk5NTExNywxNiA0LjE5OTk1MTE3LDE2IEM0LjE5OTk1MTE3LDE2IDUuNzE0NzI4MDgsMTguMzkxNzIyNSA4Ljg0ND
187
                kyNzEzLDIwLjE1NTA3MjkgTDguMTA4Njk4OTEsMjAuODkxMzAxMSBMOC4xMDg2OTg5MSwyMC44OTEzMDExIEw4LjEwODY5ODkxLD
188
                IwLjg5MTMwMTEgWiBNMTIuMzk4NTYxLDIyLjYwMTQzOSBDMTMuNDk2MDI0NiwyMi44NTI5MzU2IDE0LjY5NTQ4OTIsMjMuMDAwMD
189
                AwMSAxNiwyMyBDMjUsMjIuOTk5OTk5IDI5LDE2IDI5LDE2IEMyOSwxNiAyNy4zODI3OTE4LDEzLjE2OTg4NTYgMjMuODkxMzAwOC
190
                wxMS4xMDg2OTkyIEwyMy4xNTUwNzI3LDExLjg0NDkyNzMgQzI2LjI4NTI3MTksMTMuNjA4Mjc3NiAyNy44MDAwNDg4LDE2IDI3Lj
191
                gwMDA0ODgsMTYgQzI3LjgwMDA0ODgsMTYgMjQsMjEuOTk5OTk5IDE2LDIyIEMxNS4wMTk5MDcsMjIuMDAwMDAwMSAxNC4xMDI4N
192
                TE1LDIxLjkwOTk0NTUgMTMuMjQ4MDk4MSwyMS43NTE5MDE5IEwxMi4zOTg1NjEsMjIuNjAxNDM5IEwxMi4zOTg1NjEsMjIuNjAxN
193
                DM5IEwxMi4zOTg1NjEsMjIuNjAxNDM5IFogTTE5Ljg5ODY1MzEsMTUuMTAxMzQ2OSBDMTkuOTY0OTY1OCwxNS4zOTAyMTE1IDIwL
194
                DE1LjY5MTAxNDQgMjAsMTYgQzIwLDE4LjIwOTEzOTEgMTguMjA5MTM5MSwyMCAxNiwyMCBDMTUuNjkxMDE0NCwyMCAxNS4zOTAyM
195
                TE1LDE5Ljk2NDk2NTggMTUuMTAxMzQ2OSwxOS44OTg2NTMxIEwxNiwxOSBDMTYuNzY3NzY2OSwxOS4wMDAwMDAxIDE3LjUzNTUzM
196
                zksMTguNzA3MTA2OCAxOC4xMjEzMjAzLDE4LjEyMTMyMDMgQzE4LjcwNzEwNjgsMTcuNTM1NTMzOSAxOS4wMDAwMDAxLDE2Ljc2N
197
                zc2NjkgMTksMTYgTDE5Ljg5ODY1MzEsMTUuMTAxMzQ2OSBMMTkuODk4NjUzMSwxNS4xMDEzNDY5IEwxOS44OTg2NTMxLDE1LjEwM
198
                TM0NjkgWiBNMTYuODk4NjUzMSwxMi4xMDEzNDY5IEMxNi42MDk3ODg1LDEyLjAzNTAzNDIgMTYuMzA4OTg1NiwxMiAxNiwxMiBDM
199
                TMuNzkwODYwOSwxMiAxMiwxMy43OTA4NjA5IDEyLDE2IEMxMiwxNi4zMDg5ODU2IDEyLjAzNTAzNDIsMTYuNjA5Nzg4NSAxMi4xM
200
                DEzNDY5LDE2Ljg5ODY1MzEgTDEzLDE2IEMxMi45OTk5OTk5LDE1LjIzMjIzMzEgMTMuMjkyODkzMiwxNC40NjQ0NjYxIDEzLjg3O
201
                DY3OTcsMTMuODc4Njc5NyBDMTQuNDY0NDY2MSwxMy4yOTI4OTMyIDE1LjIzMjIzMzEsMTIuOTk5OTk5OSAxNiwxMyBMMTYuODk4N
202
                jUzMSwxMi4xMDEzNDY5IEwxNi44OTg2NTMxLDEyLjEwMTM0NjkgTDE2Ljg5ODY1MzEsMTIuMTAxMzQ2OSBaIE0yNCw3IEw3LDI0I
203
                Ew4LDI1IEwyNSw4IEwyNCw3IEwyNCw3IFoiIGlkPSJleWUtaGlkZGVuIi8+PC9nPjwvZz48L3N2Zz4=';
204
        }
205
206
        return new Metadata($media->getName(), null, $thumb);
207
    }
208
}
209