From 64f905877798c511a19eb8a8ce1022336cb1806e Mon Sep 17 00:00:00 2001 From: Thomas Klein Date: Thu, 24 Dec 2020 11:12:32 +0100 Subject: [PATCH 1/2] #68 refactor pdf & html renderers --- Service/Export/Renderer/HtmlRenderer.php | 32 +++++++++++++- .../Renderer/HtmlRenderer/LayoutInitiator.php | 6 --- .../customer_privacy_export_personal_data.xml | 4 +- ...privacy_export_personal_data_renderers.xml | 2 +- .../templates/export/renderer/default.phtml | 42 +++++++++++++++---- view/base/templates/export/result.phtml | 6 +-- view/base/web/css/export.less | 22 ++++++++++ 7 files changed, 91 insertions(+), 23 deletions(-) create mode 100644 view/base/web/css/export.less diff --git a/Service/Export/Renderer/HtmlRenderer.php b/Service/Export/Renderer/HtmlRenderer.php index a747e49..f25881d 100644 --- a/Service/Export/Renderer/HtmlRenderer.php +++ b/Service/Export/Renderer/HtmlRenderer.php @@ -9,16 +9,18 @@ use Exception; use InvalidArgumentException; +use Magento\Framework\App\Area; +use Magento\Framework\App\State; use Magento\Framework\DataObject; use Magento\Framework\Filesystem; use Magento\Framework\Translate\InlineInterface; +use Magento\Framework\View\DesignInterface; use Magento\Framework\View\Element\Template; use Magento\Framework\View\FileSystem as ViewFileSystem; use Magento\Framework\View\Page\Config; use Magento\Framework\View\Page\Config\RendererInterface; use Opengento\Gdpr\Model\View\Page\Config\RendererFactory; use Opengento\Gdpr\Service\Export\Renderer\HtmlRenderer\LayoutInitiatorInterface; -use function array_keys; use function extract; use function ob_end_clean; use function ob_get_clean; @@ -26,6 +28,13 @@ final class HtmlRenderer extends AbstractRenderer { + /** + * @var State + */ + private $appState; + + private $design; + /** * @var LayoutInitiatorInterface */ @@ -52,6 +61,8 @@ final class HtmlRenderer extends AbstractRenderer private $template; public function __construct( + State $appState, + DesignInterface $design, Filesystem $filesystem, LayoutInitiatorInterface $layoutInitiator, Config $pageConfig, @@ -60,6 +71,8 @@ public function __construct( ViewFileSystem $viewFileSystem, string $template ) { + $this->appState = $appState; + $this->design = $design; $this->layoutInitiator = $layoutInitiator; $this->pageConfigRenderer = $rendererFactory->create(['pageConfig' => $pageConfig]); $this->translateInline = $translateInline; @@ -74,6 +87,23 @@ public function __construct( */ public function render(array $data): string { + return $this->appState->emulateAreaCode( + Area::AREA_FRONTEND, + function () use ($data): string { return $this->renderHtml($data); } + ); + } + + /** + * @param array $data + * @return string + * @throws Exception + */ + private function renderHtml(array $data): string + { + // Workaround for emulated area code + $this->design->setArea($this->design->getArea()); + $this->design->setDefaultDesignTheme(); + $layout = $this->layoutInitiator->createLayout(); /** @var Template $block */ diff --git a/Service/Export/Renderer/HtmlRenderer/LayoutInitiator.php b/Service/Export/Renderer/HtmlRenderer/LayoutInitiator.php index 938b6d8..17baec6 100644 --- a/Service/Export/Renderer/HtmlRenderer/LayoutInitiator.php +++ b/Service/Export/Renderer/HtmlRenderer/LayoutInitiator.php @@ -81,13 +81,7 @@ public function createLayout(): LayoutInterface 'generatorPool' => $this->layoutGeneratorPool, ]); - $layout->getUpdate()->addHandle('default'); $layout->getUpdate()->addHandle($this->defaultLayoutHandle); - /** @var Merge $update */ - $update = $layout->getUpdate(); - if ($update->isLayoutDefined()) { - $update->removeHandle('default'); - } return $this->addConfigLayout($layout); } diff --git a/view/base/layout/customer_privacy_export_personal_data.xml b/view/base/layout/customer_privacy_export_personal_data.xml index a0a15c8..7def026 100644 --- a/view/base/layout/customer_privacy_export_personal_data.xml +++ b/view/base/layout/customer_privacy_export_personal_data.xml @@ -8,11 +8,13 @@ + + My Personal Data - + diff --git a/view/base/layout/customer_privacy_export_personal_data_renderers.xml b/view/base/layout/customer_privacy_export_personal_data_renderers.xml index 32da9bd..78a08f8 100644 --- a/view/base/layout/customer_privacy_export_personal_data_renderers.xml +++ b/view/base/layout/customer_privacy_export_personal_data_renderers.xml @@ -7,6 +7,6 @@ --> - + diff --git a/view/base/templates/export/renderer/default.phtml b/view/base/templates/export/renderer/default.phtml index be44719..c46112a 100644 --- a/view/base/templates/export/renderer/default.phtml +++ b/view/base/templates/export/renderer/default.phtml @@ -18,18 +18,42 @@ $escaper = $escaper ?? $block; $rendererList = $block->getChildBlock('exportRenderer'); /** @var DataObject $viewModel */ $viewModel = $block->getData('viewModel'); + +$exportData = array_filter($viewModel->toArray()); + +if (!function_exists('formatLabel')) { + function formatLabel(string $label): string + { + return ucwords(str_replace('_', ' ', $label)); + } +} +if (!function_exists('renderNestedItems')) { + function renderNestedItems(array $items, $escaper): string + { + $items = array_filter($items); + if (!$items) { + return ''; + } + + $html = ''; + + return $html; + } +} ?> -toArray() as $key => $value): ?> + $value): ?>
-
escapeHtml($key) ?>
+
escapeHtml(formatLabel($key)) ?>
- -
-                    
-                
- -

escapeHtml($value) ?>

- +
diff --git a/view/base/templates/export/result.phtml b/view/base/templates/export/result.phtml index bf42977..ddfd1bc 100644 --- a/view/base/templates/export/result.phtml +++ b/view/base/templates/export/result.phtml @@ -17,9 +17,5 @@ $rendererList = $block->getLayout()->getBlock('opengento.gdpr.customer.privacy.e $viewModel = $block->getData('viewModel'); ?> toArray() as $key => $value): ?> - getRenderer($key, 'default', 'Opengento_Gdpr::export/renderer/default.phtml') - ->setData('viewModel', new DataObject([$key => $value])) - ->toHtml() - ?> + getRenderer($key, 'default', 'Opengento_Gdpr::export/renderer/default.phtml')->setData('viewModel', new DataObject([$key => $value]))->toHtml() ?> diff --git a/view/base/web/css/export.less b/view/base/web/css/export.less new file mode 100644 index 0000000..7165ab3 --- /dev/null +++ b/view/base/web/css/export.less @@ -0,0 +1,22 @@ +/** + * Copyright © OpenGento, All rights reserved. + * See LICENSE bundled with this library for license details. + */ + +.customer-privacy-export-personal-data { + .fieldset { + .legend { + font-weight: 600; + text-transform: capitalize; + } + } + .items { + .item { + .label { + font-weight: 600; + text-decoration: underline; + text-transform: capitalize; + } + } + } +} From c20cfac509d8ce1d837a014ca5f5d7aca290f4e3 Mon Sep 17 00:00:00 2001 From: Thomas Klein Date: Thu, 24 Dec 2020 11:14:44 +0100 Subject: [PATCH 2/2] fix tcpdf dependency --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 09f3fbf..49a221a 100755 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ "require": { "php": "^7.2", "ext-zip": "*", - "mikehaertl/phpwkhtmltopdf": "^2.3.1", + "tecnickcom/tcpdf": "^6.3", "magento/framework": "^103.0", "magento/module-backend": "^101.0||^102.0", "magento/module-config": "^101.1",