/
MediaPreviewField.php
executable file
·93 lines (77 loc) · 2.43 KB
/
MediaPreviewField.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
namespace Pushword\Admin\FormField;
use Pushword\Core\Entity\MediaInterface;
use Pushword\Core\Entity\PageInterface;
use Pushword\Core\Repository\Repository;
use Sonata\AdminBundle\Form\FormMapper;
/**
* @extends AbstractField<MediaInterface>
*/
final class MediaPreviewField extends AbstractField
{
/**
* @var ?PageInterface[]
*/
private ?array $relatedPages = null;
/**
* @param FormMapper<MediaInterface> $form
*
* @return FormMapper<MediaInterface>
*/
public function formField(FormMapper $form): FormMapper
{
if (null !== $this->admin->getSubject()->getMedia()) {
$form->with('admin.media.preview.label', [
'class' => 'col-md-12',
'description' => $this->showMediaPreview(),
'empty_message' => false,
])->end();
if ($this->issetRelatedPages()) {
$form->with('admin.media.related.label', [
'class' => 'col-md-12',
'description' => $this->showRelatedPages(),
'empty_message' => false,
])->end();
}
}
return $form;
}
private function issetRelatedPages(): bool
{
$relatedPages = $this->getRelatedPages();
return [] !== $relatedPages;
}
/**
* @return PageInterface[]
*/
private function getRelatedPages(): array
{
if (null !== $this->relatedPages) {
return $this->relatedPages;
}
$media = $this->admin->getSubject();
$this->relatedPages = Repository::getPageRepository($this->admin->getEntityManager(), $this->admin->getPageClass())
->getPagesUsingMedia($media);
return $this->relatedPages;
}
private function showRelatedPages(): string
{
return $this->admin->getTwig()->render(
'@pwAdmin/media/media_show.relatedPages.html.twig',
['related_pages' => $this->getRelatedPages()]
);
}
private function showMediaPreview(): string
{
$media = $this->admin->getSubject();
$template = $this->admin->getImageManager()->isImage($media) ?
'@pwAdmin/media/media_show.preview_image.html.twig'
: '@pwAdmin/media/media_show.preview.html.twig';
return $this->admin->getTwig()->render(
$template,
[
'media' => $media,
]
);
}
}