1 | <?php |
||||
2 | |||||
3 | /* |
||||
4 | * This file was created by developers working at BitBag |
||||
5 | * Do you need more information about us and what we do? Visit our https://bitbag.io website! |
||||
6 | * We are hiring developers from all over the world. Join us and start your new, exciting adventure and become part of us: https://bitbag.io/career |
||||
7 | */ |
||||
8 | |||||
9 | declare(strict_types=1); |
||||
10 | |||||
11 | namespace BitBag\SyliusCmsPlugin\Controller; |
||||
12 | |||||
13 | use BitBag\SyliusCmsPlugin\Entity\MediaInterface; |
||||
14 | use BitBag\SyliusCmsPlugin\Resolver\MediaProviderResolverInterface; |
||||
15 | use BitBag\SyliusCmsPlugin\Resolver\MediaResourceResolverInterface; |
||||
16 | use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration; |
||||
17 | use Sylius\Bundle\ResourceBundle\Controller\ResourceController; |
||||
18 | use Sylius\Component\Resource\ResourceActions; |
||||
19 | use Symfony\Component\HttpFoundation\BinaryFileResponse; |
||||
20 | use Symfony\Component\HttpFoundation\File\File; |
||||
21 | use Symfony\Component\HttpFoundation\Request; |
||||
22 | use Symfony\Component\HttpFoundation\Response; |
||||
23 | use Symfony\Component\HttpFoundation\ResponseHeaderBag; |
||||
24 | use Webmozart\Assert\Assert; |
||||
25 | |||||
26 | final class MediaController extends ResourceController |
||||
27 | { |
||||
28 | use ResourceDataProcessingTrait; |
||||
29 | |||||
30 | use MediaPageControllersCommonDependencyInjectionsTrait; |
||||
31 | |||||
32 | /** @var MediaResourceResolverInterface */ |
||||
33 | private $mediaResourceResolver; |
||||
34 | |||||
35 | /** @var MediaProviderResolverInterface */ |
||||
36 | private $mediaProviderResolver; |
||||
37 | |||||
38 | public const FILTER = 'sylius_admin_product_original'; |
||||
39 | |||||
40 | public function renderMediaAction(Request $request): Response |
||||
41 | { |
||||
42 | $configuration = $this->getRequestConfiguration($request); |
||||
43 | /** @var MediaInterface|null $media */ |
||||
44 | $media = $this->getMediaForRequestCode($configuration, $request); |
||||
45 | |||||
46 | if (null === $media) { |
||||
47 | return new Response(); |
||||
48 | } |
||||
49 | |||||
50 | $this->eventDispatcher->dispatch(ResourceActions::SHOW, $configuration, $media); |
||||
51 | |||||
52 | return new Response($this->mediaProviderResolver->resolveProvider($media)->render($media, $request->get('template'))); |
||||
53 | } |
||||
54 | |||||
55 | public function downloadMediaAction(Request $request): Response |
||||
56 | { |
||||
57 | $configuration = $this->getRequestConfiguration($request); |
||||
58 | |||||
59 | /** @var MediaInterface|null $media */ |
||||
60 | $media = $this->getMediaForRequestCode($configuration, $request); |
||||
61 | Assert::notNull($media); |
||||
62 | $this->eventDispatcher->dispatch(ResourceActions::SHOW, $configuration, $media); |
||||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||
63 | $mediaPath = $this->getMediaPathIfNotNull($media); |
||||
0 ignored issues
–
show
It seems like
$media can also be of type null ; however, parameter $media of BitBag\SyliusCmsPlugin\C...getMediaPathIfNotNull() does only seem to accept BitBag\SyliusCmsPlugin\Entity\MediaInterface , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
64 | $mediaFile = new File($mediaPath); |
||||
65 | $mediaName = $media->getDownloadName() . '.' . $mediaFile->guessExtension(); |
||||
66 | $response = new BinaryFileResponse($mediaPath); |
||||
67 | |||||
68 | $response->setContentDisposition( |
||||
69 | $request->get('disposition', ResponseHeaderBag::DISPOSITION_ATTACHMENT), |
||||
70 | $mediaName |
||||
71 | ); |
||||
72 | $response->headers->set('Content-Type', $media->getMimeType()); |
||||
73 | |||||
74 | return $response; |
||||
75 | } |
||||
76 | |||||
77 | public function previewAction(Request $request): Response |
||||
78 | { |
||||
79 | $configuration = $this->getRequestConfiguration($request); |
||||
80 | |||||
81 | $this->isGrantedOr403($configuration, ResourceActions::CREATE); |
||||
82 | /** @var MediaInterface $media */ |
||||
83 | $media = $this->getResourceInterface($request); |
||||
84 | $form = $this->getFormForResource($configuration, $media); |
||||
85 | $mediaTemplate = null; |
||||
86 | |||||
87 | $form->handleRequest($request); |
||||
88 | |||||
89 | if ($form->isValid()) { |
||||
90 | $this->setMediaLocales($media, $request); |
||||
91 | $this->setMediaPathIfExists($media); |
||||
92 | $mediaTemplate = $this->mediaProviderResolver->resolveProvider($media)->getTemplate(); |
||||
93 | } |
||||
94 | $this->formErrorsFlashHelper->addFlashErrors($form); |
||||
95 | |||||
96 | return $this->render($configuration->getTemplate(ResourceActions::CREATE . '.html'), [ |
||||
97 | 'metadata' => $this->metadata, |
||||
98 | 'resource' => $media, |
||||
99 | 'mediaTemplate' => $mediaTemplate, |
||||
100 | $this->metadata->getName() => $media, |
||||
101 | ]); |
||||
102 | } |
||||
103 | |||||
104 | public function setMediaProviderResolver(MediaProviderResolverInterface $mediaProviderResolver): void |
||||
105 | { |
||||
106 | $this->mediaProviderResolver = $mediaProviderResolver; |
||||
107 | } |
||||
108 | |||||
109 | public function setMediaResourceResolver(MediaResourceResolverInterface $mediaResourceResolver): void |
||||
110 | { |
||||
111 | $this->mediaResourceResolver = $mediaResourceResolver; |
||||
112 | } |
||||
113 | |||||
114 | private function getMediaForRequestCode(RequestConfiguration $configuration, Request $request): ?MediaInterface |
||||
115 | { |
||||
116 | $this->isGrantedOr403($configuration, ResourceActions::SHOW); |
||||
117 | $code = $request->get('code'); |
||||
118 | |||||
119 | return $this->mediaResourceResolver->findOrLog($code); |
||||
0 ignored issues
–
show
It seems like
$code can also be of type null ; however, parameter $code of BitBag\SyliusCmsPlugin\R...rInterface::findOrLog() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
120 | } |
||||
121 | |||||
122 | private function setMediaLocales(MediaInterface $media, Request $request): void |
||||
123 | { |
||||
124 | $defaultLocale = $this->getParameter('locale'); |
||||
125 | $media->setFallbackLocale($request->get('_locale', $defaultLocale)); |
||||
126 | $media->setCurrentLocale($request->get('_locale', $defaultLocale)); |
||||
127 | } |
||||
128 | |||||
129 | private function setMediaPathIfExists(MediaInterface $media): void |
||||
130 | { |
||||
131 | if (null !== $media->getFile() || null !== $media->getPath()) { |
||||
132 | $this->setResourceMediaPath($media); |
||||
133 | } |
||||
134 | } |
||||
135 | } |
||||
136 |