BitBagCommerce /
SyliusCmsPlugin
| 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
Loading history...
|
|||||
| 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
Loading history...
|
|||||
| 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
Loading history...
|
|||||
| 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 |