Completed
Push — master ( 699d35...4f061e )
by Mikołaj
01:56
created

PageController::previewAction()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 32
rs 9.408
c 0
b 0
f 0
cc 3
nc 4
nop 1
1
<?php
2
3
/*
4
 * This file has been created by developers from BitBag.
5
 * Feel free to contact us once you face any issues or want to start
6
 * another great project.
7
 * You can find more information about us on https://bitbag.shop and write us
8
 * an email on [email protected].
9
 */
10
11
declare(strict_types=1);
12
13
namespace BitBag\SyliusCmsPlugin\Controller;
14
15
use BitBag\SyliusCmsPlugin\Entity\PageImageInterface;
16
use BitBag\SyliusCmsPlugin\Entity\PageInterface;
17
use FOS\RestBundle\View\View;
18
use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
19
use Sylius\Component\Resource\ResourceActions;
20
use Symfony\Component\HttpFoundation\File\File;
21
use Symfony\Component\HttpFoundation\Request;
22
use Symfony\Component\HttpFoundation\Response;
23
24
final class PageController extends ResourceController
25
{
26
    public function renderLinkAction(Request $request): Response
27
    {
28
        $configuration = $this->requestConfigurationFactory->create($this->metadata, $request);
29
30
        $this->isGrantedOr403($configuration, ResourceActions::SHOW);
31
32
        $code = $request->get('code');
33
        $pageResourceResolver = $this->get('bitbag_sylius_cms_plugin.resolver.page_resource');
34
35
        $page = $pageResourceResolver->findOrLog($code);
36
37
        if (null === $page) {
38
            return new Response();
39
        }
40
41
        $this->eventDispatcher->dispatch(ResourceActions::SHOW, $configuration, $page);
42
43
        $view = View::create($page);
44
45
        if ($configuration->isHtmlRequest()) {
46
            $view
47
                ->setTemplate($configuration->getTemplate(ResourceActions::SHOW . '.html'))
48
                ->setTemplateVar($this->metadata->getName())
49
                ->setData([
50
                    'configuration' => $configuration,
51
                    'metadata' => $this->metadata,
52
                    'resource' => $page,
53
                    $this->metadata->getName() => $page,
54
                ])
55
            ;
56
        }
57
58
        return $this->viewHandler->handle($configuration, $view);
59
    }
60
61
    public function previewAction(Request $request): Response
62
    {
63
        $configuration = $this->requestConfigurationFactory->create($this->metadata, $request);
64
65
        $this->isGrantedOr403($configuration, ResourceActions::CREATE);
66
67
        /** @var PageInterface $page */
68
        $page = $request->get('id') && $this->repository->find($request->get('id')) ?
69
            $this->repository->find($request->get('id')) :
70
            $this->factory->createNew();
71
        $form = $this->resourceFormFactory->create($configuration, $page);
72
        $defaultLocale = $this->getParameter('locale');
73
74
        $form->handleRequest($request);
75
76
        $page->setFallbackLocale($request->get('_locale', $defaultLocale));
77
        $page->setCurrentLocale($request->get('_locale', $defaultLocale));
78
79
        $this->resolveImage($page);
80
81
        $this->get('bitbag_sylius_cms_plugin.controller.helper.form_errors_flash')->addFlashErrors($form);
82
83
        $view = View::create()
84
            ->setData([
85
                'resource' => $page,
86
                $this->metadata->getName() => $page,
87
            ])
88
            ->setTemplate($configuration->getTemplate(ResourceActions::CREATE . '.html'))
89
        ;
90
91
        return $this->viewHandler->handle($configuration, $view);
92
    }
93
94
    private function resolveImage(PageInterface $page): void
95
    {
96
        /** @var PageImageInterface $image */
97
        if (!$image = $page->getTranslation()->getImage()) {
98
            return;
99
        }
100
101
        $file = $image->getFile() ?: new File($this->getParameter('kernel.project_dir') . '/web/' . $image->getPath());
102
        $base64Content = base64_encode(file_get_contents($file->getPathname()));
103
        $path = 'data:' . $file->getMimeType() . ';base64, ' . $base64Content;
104
105
        $image->setPath($path);
106
    }
107
}
108