Skip to content

Commit 44e055e

Browse files
committed
Merge remote-tracking branch 'magento-l3/ACP2E-290' into L3_PR_21-12-13
2 parents 8d634f7 + 8a02b9d commit 44e055e

File tree

2 files changed

+83
-163
lines changed

2 files changed

+83
-163
lines changed

app/code/Magento/Theme/Controller/Result/MessagePlugin.php

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
use Magento\Framework\Controller\Result\Json;
99
use Magento\Framework\Controller\ResultInterface;
10-
use Magento\Framework\Message\MessageInterface;
10+
use Magento\Framework\Stdlib\Cookie\CookieSizeLimitReachedException;
1111
use Magento\Framework\Translate\Inline\ParserInterface;
1212
use Magento\Framework\Translate\InlineInterface;
1313
use Magento\Framework\Session\Config\ConfigInterface;
@@ -22,7 +22,7 @@ class MessagePlugin
2222
/**
2323
* Cookies name for messages
2424
*/
25-
const MESSAGES_COOKIES_NAME = 'mage-messages';
25+
public const MESSAGES_COOKIES_NAME = 'mage-messages';
2626

2727
/**
2828
* @var \Magento\Framework\Stdlib\CookieManagerInterface
@@ -101,11 +101,44 @@ public function afterRenderResult(
101101
ResultInterface $result
102102
) {
103103
if (!($subject instanceof Json)) {
104-
$this->setCookie($this->getMessages());
104+
$newMessages = [];
105+
foreach ($this->messageManager->getMessages(true)->getItems() as $message) {
106+
$newMessages[] = [
107+
'type' => $message->getType(),
108+
'text' => $this->interpretationStrategy->interpret($message),
109+
];
110+
}
111+
if (!empty($newMessages)) {
112+
$this->setMessages($this->getCookiesMessages(), $newMessages);
113+
}
105114
}
106115
return $result;
107116
}
108117

118+
/**
119+
* Add new messages to already existing ones.
120+
*
121+
* In case if there are too many messages clear old messages.
122+
*
123+
* @param array $oldMessages
124+
* @param array $newMessages
125+
* @throws CookieSizeLimitReachedException
126+
*/
127+
private function setMessages(array $oldMessages, array $newMessages): void
128+
{
129+
$messages = array_merge($oldMessages, $newMessages);
130+
try {
131+
$this->setCookie($messages);
132+
} catch (CookieSizeLimitReachedException $e) {
133+
if (empty($oldMessages)) {
134+
throw $e;
135+
}
136+
137+
array_shift($oldMessages);
138+
$this->setMessages($oldMessages, $newMessages);
139+
}
140+
}
141+
109142
/**
110143
* Set 'mage-messages' cookie with 'messages' array
111144
*
@@ -166,24 +199,6 @@ private function convertMessageText(string $text): string
166199
return $text;
167200
}
168201

169-
/**
170-
* Return messages array and clean message manager messages
171-
*
172-
* @return array
173-
*/
174-
protected function getMessages()
175-
{
176-
$messages = $this->getCookiesMessages();
177-
/** @var MessageInterface $message */
178-
foreach ($this->messageManager->getMessages(true)->getItems() as $message) {
179-
$messages[] = [
180-
'type' => $message->getType(),
181-
'text' => $this->interpretationStrategy->interpret($message),
182-
];
183-
}
184-
return $messages;
185-
}
186-
187202
/**
188203
* Return messages stored in cookies
189204
*

0 commit comments

Comments
 (0)