Skip to content

Commit f18ce7c

Browse files
committed
Reuse default cookie restriction mode
1 parent c8ae934 commit f18ce7c

File tree

10 files changed

+129
-197
lines changed

10 files changed

+129
-197
lines changed

Model/Config/PrivacyMessage.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,24 @@
77

88
namespace Opengento\Gdpr\Model\Config;
99

10-
use Magento\Cms\Block\Block;
10+
use Magento\Cms\Block\BlockByIdentifier;
1111
use Magento\Cms\Helper\Page as HelperPage;
1212
use Magento\Framework\App\Config\ScopeConfigInterface;
1313
use Magento\Framework\View\Element\BlockFactory;
1414
use Magento\Store\Model\ScopeInterface;
1515

1616
final class PrivacyMessage
1717
{
18+
private const CONFIG_PATH_COOKIE_INFORMATION_ENABLED = 'gdpr/cookie/enabled';
1819
private const CONFIG_PATH_COOKIE_INFORMATION_BLOCK = 'gdpr/cookie/block_id';
19-
private const CONFIG_PATH_GENERAL_INFORMATION_PAGE = 'gdpr/general/page_id';
20+
private const CONFIG_PATH_COOKIE_INFORMATION_PAGE = 'gdpr/cookie/page_id';
2021

2122
private ScopeConfigInterface $scopeConfig;
2223

2324
private BlockFactory $blockFactory;
2425

25-
/**
26-
* @var HelperPage
27-
*/
2826
private HelperPage $helperPage;
2927

30-
/**
31-
* @var string|null
32-
*/
3328
private ?string $blockHtml;
3429

3530
public function __construct(
@@ -42,26 +37,31 @@ public function __construct(
4237
$this->helperPage = $helperPage;
4338
}
4439

40+
public function isEnabled(): bool
41+
{
42+
return $this->scopeConfig->isSetFlag(self::CONFIG_PATH_COOKIE_INFORMATION_ENABLED, ScopeInterface::SCOPE_STORE);
43+
}
44+
4545
public function getDisclosureInformationHtml(): string
4646
{
4747
return $this->blockHtml ??= $this->createDisclosureInformationBlockHtml();
4848
}
4949

50-
public function getLearnMoreUrl(): string
50+
public function getLearnMoreUrl(): ?string
5151
{
5252
return $this->helperPage->getPageUrl((string) $this->scopeConfig->getValue(
53-
self::CONFIG_PATH_GENERAL_INFORMATION_PAGE,
53+
self::CONFIG_PATH_COOKIE_INFORMATION_PAGE,
5454
ScopeInterface::SCOPE_STORE
55-
)) ?? '#';
55+
));
5656
}
5757

5858
private function createDisclosureInformationBlockHtml(): string
5959
{
6060
return $this->blockFactory->createBlock(
61-
Block::class,
61+
BlockByIdentifier::class,
6262
[
6363
'data' => [
64-
'block_id' => (string) $this->scopeConfig->getValue(
64+
'identifier' => (string) $this->scopeConfig->getValue(
6565
self::CONFIG_PATH_COOKIE_INFORMATION_BLOCK,
6666
ScopeInterface::SCOPE_STORE
6767
),
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Opengento\Gdpr\ViewModel\Cookie;
9+
10+
use Magento\Framework\View\Element\Block\ArgumentInterface;
11+
use Opengento\Gdpr\Model\Config\PrivacyMessage;
12+
13+
final class NoticeDataProvider implements ArgumentInterface
14+
{
15+
private PrivacyMessage $privacyMessage;
16+
17+
public function __construct(PrivacyMessage $privacyMessage)
18+
{
19+
$this->privacyMessage = $privacyMessage;
20+
}
21+
22+
public function getTemplate(string $defaultTemplate, string $customTemplate): string
23+
{
24+
return $this->privacyMessage->isEnabled() ? $customTemplate : $defaultTemplate;
25+
}
26+
27+
public function getLearnMoreUrl(): ?string
28+
{
29+
return $this->privacyMessage->getLearnMoreUrl();
30+
}
31+
32+
public function getNoticeHtml(): string
33+
{
34+
return $this->privacyMessage->getDisclosureInformationHtml();
35+
}
36+
}

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"magento/framework": "^103.0",
1717
"magento/module-backend": "^101.0||^102.0",
1818
"magento/module-config": "^101.1",
19+
"magento/module-cookie": "^100.0",
1920
"magento/module-customer": "^102.0||^103.0",
2021
"magento/module-quote": "^101.1",
2122
"magento/module-sales": "^102.0||^103.0",

etc/adminhtml/system/cookie.xml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,27 @@
1414
<group id="cookie" translate="label" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="10">
1515
<label>Cookie Settings</label>
1616
<field id="enabled" type="select" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="10">
17-
<label>Cookie Disclosure</label>
18-
<comment>It will enable the cookie disclosure popin to the storefront.</comment>
17+
<label>Improve Cookie Restriction Message</label>
18+
<comment>It will allows to replace the default cookie restriction popin with content of your own. Make sure that the following configuration is enabled: "General / Web / Default Cookie Settings / Cookie Restriction Mode".</comment>
1919
<source_model>Magento\Config\Model\Config\Source\Enabledisable</source_model>
2020
<config_path>gdpr/cookie/enabled</config_path>
2121
</field>
2222
<field id="block_id" type="select" translate="label" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="20">
23-
<label>Information</label>
23+
<label>Information Block</label>
2424
<source_model>Magento\Cms\Model\Config\Source\Block</source_model>
2525
<depends>
2626
<field id="opengento_gdpr_cookie/cookie/enabled">1</field>
2727
</depends>
2828
<config_path>gdpr/cookie/block_id</config_path>
2929
</field>
30+
<field id="page_id" type="select" translate="label" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="30">
31+
<label>Information Page</label>
32+
<source_model>Magento\Cms\Model\Config\Source\Page</source_model>
33+
<depends>
34+
<field id="opengento_gdpr_cookie/cookie/enabled">1</field>
35+
</depends>
36+
<config_path>gdpr/cookie/page_id</config_path>
37+
</field>
3038
</group>
3139
</section>
3240
</include>

view/frontend/layout/default.xml

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,14 @@
77
-->
88
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
99
<body>
10-
<referenceContainer name="before.body.end">
11-
<block name="privacy_message_popup" after="-" ifconfig="gdpr/cookie/enabled">
12-
<arguments>
13-
<argument name="template" xsi:type="string">Opengento_Gdpr::messages/popup.phtml</argument>
14-
<argument name="jsLayout" xsi:type="array">
15-
<item name="components" xsi:type="array">
16-
<item name="enhanced-privacy-cookie-policy" xsi:type="array">
17-
<item name="component" xsi:type="string">Opengento_Gdpr/js/view/popup</item>
18-
<item name="displayArea" xsi:type="string">enhanced-privacy-cookie-policy</item>
19-
<item name="config" xsi:type="array">
20-
<item name="cookieName" xsi:type="string">cookies-policy</item>
21-
<item name="learnMore" xsi:type="helper" helper="Opengento\Gdpr\Model\Config\PrivacyMessage::getLearnMoreUrl"/>
22-
<item name="notificationText" xsi:type="helper" helper="Opengento\Gdpr\Model\Config\PrivacyMessage::getDisclosureInformationHtml"/>
23-
</item>
24-
</item>
25-
</item>
26-
</argument>
27-
</arguments>
28-
</block>
29-
</referenceContainer>
10+
<referenceBlock name="cookie_notices" template="">
11+
<arguments>
12+
<argument name="template" xsi:type="helper" helper="Opengento\Gdpr\ViewModel\Cookie\NoticeDataProvider::getTemplate">
13+
<param name="defaultTemplate">Magento_Cookie::html/notices.phtml</param>
14+
<param name="customTemplate">Opengento_Gdpr::cookie/notices.phtml</param>
15+
</argument>
16+
<argument name="noticeDataProvider" xsi:type="object">Opengento\Gdpr\ViewModel\Cookie\NoticeDataProvider</argument>
17+
</arguments>
18+
</referenceBlock>
3019
</body>
3120
</page>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
declare(strict_types=1);
3+
/**
4+
* Copyright © OpenGento, All rights reserved.
5+
* See LICENSE bundled with this library for license details.
6+
*/
7+
8+
use Magento\Cookie\Block\Html\Notices;
9+
use Magento\Cookie\Helper\Cookie;
10+
use Magento\Framework\Escaper;
11+
use Magento\Framework\View\Helper\SecureHtmlRenderer;
12+
use Opengento\Gdpr\ViewModel\Cookie\NoticeDataProvider;
13+
14+
/** @var Notices $block */
15+
/** @var Escaper $escaper */
16+
/** @var SecureHtmlRenderer $secureRenderer */
17+
/** @var Cookie $cookieHelper */
18+
$cookieHelper = $block->getData('cookieHelper');
19+
/** @var NoticeDataProvider $noticeDataProvider */
20+
$noticeDataProvider = $block->getData('noticeDataProvider');
21+
22+
$learnMoreUrl = $noticeDataProvider->getLearnMoreUrl() ?: $block->getPrivacyPolicyLink()
23+
?>
24+
<?php
25+
if ($cookieHelper->isCookieRestrictionModeEnabled()): ?>
26+
<div role="alertdialog"
27+
tabindex="-1"
28+
class="message global cookie"
29+
id="notice-cookie-block">
30+
<div role="document" class="content" tabindex="0">
31+
<div class="details">
32+
<?= /* @noEscape */ $noticeDataProvider->getNoticeHtml() ?>
33+
<p>
34+
<strong><?= $block->escapeHtml(__('We use cookies to make your experience better.')) ?></strong>
35+
<?= $block->escapeHtml(__('<a href="%1">Learn more</a>.', $learnMoreUrl), ['a']) ?>
36+
</p>
37+
</div>
38+
<div class="actions">
39+
<button id="btn-cookie-allow" class="action allow primary">
40+
<span><?= $block->escapeHtml(__('Allow Cookies')) ?></span>
41+
</button>
42+
</div>
43+
</div>
44+
</div>
45+
<?= /* @noEscape */ $secureRenderer->renderStyleAsTag('display: none;', 'div#notice-cookie-block') ?>
46+
<script type="text/x-magento-init">
47+
{
48+
"#notice-cookie-block": {
49+
"cookieNotices": {
50+
"cookieAllowButtonSelector": "#btn-cookie-allow",
51+
"cookieName": "<?= /* @noEscape */ Cookie::IS_USER_ALLOWED_SAVE_COOKIE ?>",
52+
"cookieValue": <?= /* @noEscape */ $cookieHelper->getAcceptedSaveCookiesWebsiteIds() ?>,
53+
"cookieLifetime": <?= /* @noEscape */ $cookieHelper->getCookieRestrictionLifetime() ?>,
54+
"noCookiesUrl": "<?= $escaper->escapeJs($block->getUrl('cookie/index/noCookies')) ?>"
55+
}
56+
}
57+
}
58+
</script>
59+
<?php endif; ?>

view/frontend/templates/messages/popup.phtml

Lines changed: 0 additions & 21 deletions
This file was deleted.

view/frontend/web/css/source/_module.less

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,37 +23,4 @@
2323
}
2424
}
2525
}
26-
27-
.enhanced-privacy-popup {
28-
position: fixed;
29-
right: 0;
30-
bottom: 0;
31-
left: 0;
32-
background: @color-gray-light01;
33-
overflow: hidden;
34-
35-
.popup {
36-
&.content {
37-
margin: auto;
38-
padding: 10px 0;
39-
width: @screen__m;
40-
}
41-
}
42-
}
43-
}
44-
45-
//
46-
// Mobile
47-
// _____________________________________________
48-
49-
.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
50-
.enhanced-privacy-popup {
51-
.popup {
52-
&.content {
53-
margin: 0;
54-
padding: 10px;
55-
width: auto;
56-
}
57-
}
58-
}
5926
}

view/frontend/web/js/view/popup.js

Lines changed: 0 additions & 75 deletions
This file was deleted.

0 commit comments

Comments
 (0)