From dfe2a283b227f20730ecef7a605c8cfd3f1e1897 Mon Sep 17 00:00:00 2001 From: silinmykola Date: Wed, 11 Aug 2021 17:54:30 +0300 Subject: [PATCH 1/7] 33310 fix unsubscribe url in newsletter email template --- app/code/Magento/Newsletter/Model/Queue.php | 1 + app/code/Magento/Newsletter/Model/Template.php | 2 +- app/code/Magento/Newsletter/i18n/en_US.csv | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index a3279f8c83699..58b04d01237de 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -253,6 +253,7 @@ public function sendPerSubscriber($count = 20) /** @var \Magento\Newsletter\Model\Subscriber $item */ foreach ($collection->getItems() as $item) { + $item->setData('unsubscriptionLink', $item->getUnsubscriptionLink()); $transport = $this->_transportBuilder->setTemplateOptions( ['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $item->getStoreId()] )->setTemplateVars( diff --git a/app/code/Magento/Newsletter/Model/Template.php b/app/code/Magento/Newsletter/Model/Template.php index 58afd45b26f44..60c63e05d7a65 100644 --- a/app/code/Magento/Newsletter/Model/Template.php +++ b/app/code/Magento/Newsletter/Model/Template.php @@ -224,7 +224,7 @@ public function getTemplateText() 'template_text', __( 'Follow this link to unsubscribe ' . - '{{var subscriber.getUnsubscriptionLink()}}' . + '{{var subscriber.unsubscriptionLink}}' . '' ) ); diff --git a/app/code/Magento/Newsletter/i18n/en_US.csv b/app/code/Magento/Newsletter/i18n/en_US.csv index f8706967117fe..9a0e48f568be6 100644 --- a/app/code/Magento/Newsletter/i18n/en_US.csv +++ b/app/code/Magento/Newsletter/i18n/en_US.csv @@ -91,7 +91,7 @@ Paused,Paused "You selected an invalid queue.","You selected an invalid queue." "We cannot mark as received subscriber.","We cannot mark as received subscriber." "Duplicate template code","Duplicate template code" -"Follow this link to unsubscribe {{var subscriber.getUnsubscriptionLink()}}","Follow this link to unsubscribe {{var subscriber.getUnsubscriptionLink()}}" +"Follow this link to unsubscribe {{var subscriber.unsubscriptionLink}}","Follow this link to unsubscribe {{var subscriber.unsubscriptionLink}}" "No such entity with %fieldName = %fieldValue","No such entity with %fieldName = %fieldValue" "Choose Store View:","Choose Store View:" "Newsletter Message Preview","Newsletter Message Preview" From 31c513759f9f8f6bc56f8e85dbec90720b9f7fad Mon Sep 17 00:00:00 2001 From: silinmykola Date: Wed, 25 Aug 2021 15:18:20 +0300 Subject: [PATCH 2/7] 33310 change strict resolver to fix empty email template variables --- app/code/Magento/Newsletter/Model/Queue.php | 1 - app/code/Magento/Newsletter/Model/Template.php | 2 +- app/code/Magento/Newsletter/i18n/en_US.csv | 2 +- .../Framework/Filter/VariableResolver/StrictResolver.php | 6 ++++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index 58b04d01237de..a3279f8c83699 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -253,7 +253,6 @@ public function sendPerSubscriber($count = 20) /** @var \Magento\Newsletter\Model\Subscriber $item */ foreach ($collection->getItems() as $item) { - $item->setData('unsubscriptionLink', $item->getUnsubscriptionLink()); $transport = $this->_transportBuilder->setTemplateOptions( ['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $item->getStoreId()] )->setTemplateVars( diff --git a/app/code/Magento/Newsletter/Model/Template.php b/app/code/Magento/Newsletter/Model/Template.php index 60c63e05d7a65..58afd45b26f44 100644 --- a/app/code/Magento/Newsletter/Model/Template.php +++ b/app/code/Magento/Newsletter/Model/Template.php @@ -224,7 +224,7 @@ public function getTemplateText() 'template_text', __( 'Follow this link to unsubscribe ' . - '{{var subscriber.unsubscriptionLink}}' . + '{{var subscriber.getUnsubscriptionLink()}}' . '' ) ); diff --git a/app/code/Magento/Newsletter/i18n/en_US.csv b/app/code/Magento/Newsletter/i18n/en_US.csv index 9a0e48f568be6..f8706967117fe 100644 --- a/app/code/Magento/Newsletter/i18n/en_US.csv +++ b/app/code/Magento/Newsletter/i18n/en_US.csv @@ -91,7 +91,7 @@ Paused,Paused "You selected an invalid queue.","You selected an invalid queue." "We cannot mark as received subscriber.","We cannot mark as received subscriber." "Duplicate template code","Duplicate template code" -"Follow this link to unsubscribe {{var subscriber.unsubscriptionLink}}","Follow this link to unsubscribe {{var subscriber.unsubscriptionLink}}" +"Follow this link to unsubscribe {{var subscriber.getUnsubscriptionLink()}}","Follow this link to unsubscribe {{var subscriber.getUnsubscriptionLink()}}" "No such entity with %fieldName = %fieldValue","No such entity with %fieldName = %fieldValue" "Choose Store View:","Choose Store View:" "Newsletter Message Preview","Newsletter Message Preview" diff --git a/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php b/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php index 4915c6346503b..b49bb9d32bd28 100644 --- a/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php +++ b/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php @@ -115,8 +115,10 @@ private function handleGetterMethod(int $i, Template $filter, array $templateVar ...$stackArgs[$i]['args'] ); } else { - $dataKey = $this->extractDataKeyFromGetter($stackArgs[$i]['name']); - $stackArgs[$i]['variable'] = $stackArgs[$i - 1]['variable']->getData($dataKey); + $stackArgs[$i]['variable'] = call_user_func_array( + [$stackArgs[$i - 1]['variable'], $stackArgs[$i]['name']], + $stackArgs[$i]['args'] + ); } } From b7139ed9ffb37a61ee8ed070bfa48ebbf8e3162d Mon Sep 17 00:00:00 2001 From: engcom-Bravo Date: Thu, 30 Dec 2021 19:29:15 +0530 Subject: [PATCH 3/7] ISSUE-33310 Fix the code to appear unsubscribe link in newsletter template --- .../Block/Adminhtml/Template/Preview.php | 3 +++ app/code/Magento/Newsletter/Model/Queue.php | 7 +++++- .../Magento/Newsletter/Model/Template.php | 2 +- .../Block/Adminhtml/Template/PreviewTest.php | 23 +++++++++++++++---- .../VariableResolver/StrictResolver.php | 6 ++--- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php index 1eb1c0ff4a15a..da292194bb7cb 100644 --- a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php +++ b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php @@ -75,6 +75,9 @@ protected function _toHtml() if ($this->getRequest()->getParam('subscriber')) { $vars['subscriber']->load($this->getRequest()->getParam('subscriber')); } + $vars['subscriber_data']['unsubscription_link'] = $vars['subscriber'] ? + $vars['subscriber']->getUnsubscriptionLink() : + null; $template->emulateDesign($this->getStoreId()); $templateProcessed = $this->_appState->emulateAreaCode( diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index 6cc0ac251084b..e5073552955dd 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -259,7 +259,12 @@ public function sendPerSubscriber($count = 20) $transport = $this->_transportBuilder->setTemplateOptions( ['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $item->getStoreId()] )->setTemplateVars( - ['subscriber' => $item] + [ + 'subscriber' => $item, + 'subscriber_data' => [ + 'unsubscription_link' => $item->getUnsubscriptionLink() + ] + ] )->setFrom( ['name' => $this->getNewsletterSenderName(), 'email' => $this->getNewsletterSenderEmail()] )->addTo( diff --git a/app/code/Magento/Newsletter/Model/Template.php b/app/code/Magento/Newsletter/Model/Template.php index 58afd45b26f44..062835a29a20e 100644 --- a/app/code/Magento/Newsletter/Model/Template.php +++ b/app/code/Magento/Newsletter/Model/Template.php @@ -224,7 +224,7 @@ public function getTemplateText() 'template_text', __( 'Follow this link to unsubscribe ' . - '{{var subscriber.getUnsubscriptionLink()}}' . + '{{var subscriber_data.unsubscription_link}}' . '' ) ); diff --git a/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Template/PreviewTest.php b/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Template/PreviewTest.php index db02fce3696af..dc38b9068b743 100644 --- a/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Template/PreviewTest.php +++ b/app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Template/PreviewTest.php @@ -100,7 +100,14 @@ public function testToHtml() ->with( Template::DEFAULT_DESIGN_AREA, [$this->templateMock, 'getProcessedTemplate'], - [['subscriber' => null]] + [ + [ + 'subscriber' => null, + 'subscriber_data' => [ + 'unsubscription_link' => null + ] + ] + ] ) ->willReturn('Processed Template'); @@ -141,7 +148,10 @@ public function testToHtmlForNewTemplate() ], [ [ - 'subscriber' => null + 'subscriber' => null, + 'subscriber_data' => [ + 'unsubscription_link' => null + ] ] ] ) @@ -162,7 +172,9 @@ public function testToHtmlWithSubscriber() $subscriber = $this->createMock(Subscriber::class); $subscriber->expects($this->atLeastOnce())->method('load')->with(3)->willReturnSelf(); $this->subscriberFactoryMock->expects($this->atLeastOnce())->method('create')->willReturn($subscriber); - + $subscriber->expects($this->exactly(2)) + ->method('getUnsubscriptionLink') + ->willReturn('http://example.com/newsletter/subscriber/unsubscribe/'); $this->templateMock->expects($this->atLeastOnce())->method('emulateDesign')->with(1); $this->templateMock->expects($this->atLeastOnce())->method('revertDesign'); @@ -175,7 +187,10 @@ public function testToHtmlWithSubscriber() ], [ [ - 'subscriber' => $subscriber + 'subscriber' => $subscriber, + 'subscriber_data' => [ + 'unsubscription_link' => $subscriber->getUnsubscriptionLink() + ] ] ] ) diff --git a/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php b/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php index b49bb9d32bd28..4915c6346503b 100644 --- a/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php +++ b/lib/internal/Magento/Framework/Filter/VariableResolver/StrictResolver.php @@ -115,10 +115,8 @@ private function handleGetterMethod(int $i, Template $filter, array $templateVar ...$stackArgs[$i]['args'] ); } else { - $stackArgs[$i]['variable'] = call_user_func_array( - [$stackArgs[$i - 1]['variable'], $stackArgs[$i]['name']], - $stackArgs[$i]['args'] - ); + $dataKey = $this->extractDataKeyFromGetter($stackArgs[$i]['name']); + $stackArgs[$i]['variable'] = $stackArgs[$i - 1]['variable']->getData($dataKey); } } From 4b42e83d47affd37cdfbd1120a5ef790188396ee Mon Sep 17 00:00:00 2001 From: engcom-Bravo Date: Thu, 30 Dec 2021 21:40:23 +0530 Subject: [PATCH 4/7] ISSUE-33310 Fixed unit and static test fail --- app/code/Magento/Newsletter/Model/Queue.php | 22 +++++++++---------- .../Magento/Newsletter/Model/Template.php | 7 +++--- .../Newsletter/Test/Unit/Model/QueueTest.php | 7 +++++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index e5073552955dd..ce658920617b3 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -48,14 +48,14 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy protected $_template; /** - * Subscribers collection + * Subscriber collection * * @var \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection */ protected $_subscribersCollection; /** - * Save stores flag. + * Flag for Save Stores. * * @var boolean */ @@ -68,15 +68,15 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy */ protected $_stores = []; - const STATUS_NEVER = 0; + public const STATUS_NEVER = 0; - const STATUS_SENDING = 1; + public const STATUS_SENDING = 1; - const STATUS_CANCEL = 2; + public const STATUS_CANCEL = 2; - const STATUS_SENT = 3; + public const STATUS_SENT = 3; - const STATUS_PAUSE = 4; + public const STATUS_PAUSE = 4; /** * Filter for newsletter text @@ -86,7 +86,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy protected $_templateFilter; /** - * Date + * Datetime * * @var \Magento\Framework\Stdlib\DateTime\DateTime */ @@ -100,7 +100,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy protected $_problemFactory; /** - * Template factory + * Factory of Template * * @var \Magento\Newsletter\Model\TemplateFactory */ @@ -168,8 +168,8 @@ public function __construct( $this->_subscribersCollection = $subscriberCollectionFactory->create(); $this->_transportBuilder = $transportBuilder; - $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); - $this->timezone = $timezone ?: $objectManager->get(TimezoneInterface::class); +// $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); +// $this->timezone = $timezone ?: $objectManager->get(TimezoneInterface::class); $this->utcConverter = $utcConverter ?? $objectManager->get(LocalizedDateToUtcConverterInterface::class); } diff --git a/app/code/Magento/Newsletter/Model/Template.php b/app/code/Magento/Newsletter/Model/Template.php index 062835a29a20e..f96b3451b132e 100644 --- a/app/code/Magento/Newsletter/Model/Template.php +++ b/app/code/Magento/Newsletter/Model/Template.php @@ -41,7 +41,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate * Mail object * * @deprecated 100.3.0 Unused property - * + * @var string */ protected $_mail; @@ -60,7 +60,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate protected $_request; /** - * Filter factory + * Factory of Filter class * * @var \Magento\Newsletter\Model\Template\FilterFactory */ @@ -224,7 +224,8 @@ public function getTemplateText() 'template_text', __( 'Follow this link to unsubscribe ' . - '{{var subscriber_data.unsubscription_link}}' . + ' + {{var subscriber_data.unsubscription_link}}' . '' ) ); diff --git a/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php b/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php index d3453708e99a6..ff91437795a17 100644 --- a/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php +++ b/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php @@ -169,7 +169,9 @@ public function testSendPerSubscriber2() ->getMock(); $item = $this->getMockBuilder(Subscriber::class) ->disableOriginalConstructor() - ->setMethods(['getStoreId', 'getSubscriberEmail', 'getSubscriberFullName', 'received']) + ->setMethods( + ['getStoreId', 'getSubscriberEmail', 'getSubscriberFullName', 'received', 'getUnsubscriptionLink'] + ) ->getMock(); $transport = $this->getMockForAbstractClass(TransportInterface::class); $this->subscribersCollectionMock->expects($this->once())->method('getQueueJoinedFlag')->willReturn(false); @@ -188,6 +190,9 @@ public function testSendPerSubscriber2() $item->expects($this->once())->method('getStoreId')->willReturn('store_id'); $item->expects($this->once())->method('getSubscriberEmail')->willReturn('email'); $item->expects($this->once())->method('getSubscriberFullName')->willReturn('full_name'); + $item->expects($this->once()) + ->method('getUnsubscriptionLink') + ->willReturn('http://example.com/newsletter/subscriber/unsubscribe/'); $this->transportBuilderMock->expects($this->once())->method('setTemplateOptions')->willReturnSelf(); $this->transportBuilderMock->expects($this->once())->method('setTemplateVars')->willReturnSelf(); $this->transportBuilderMock->expects($this->once())->method('setFrom')->willReturnSelf(); From 990641bd2a437f7ad78b58563e1fde13efee34ac Mon Sep 17 00:00:00 2001 From: engcom-Bravo Date: Thu, 30 Dec 2021 21:43:18 +0530 Subject: [PATCH 5/7] ISSUE-33310 updated commented code --- app/code/Magento/Newsletter/Model/Queue.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index ce658920617b3..55bf9c0e521d3 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -168,8 +168,8 @@ public function __construct( $this->_subscribersCollection = $subscriberCollectionFactory->create(); $this->_transportBuilder = $transportBuilder; -// $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); -// $this->timezone = $timezone ?: $objectManager->get(TimezoneInterface::class); + $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); + $this->timezone = $timezone ?: $objectManager->get(TimezoneInterface::class); $this->utcConverter = $utcConverter ?? $objectManager->get(LocalizedDateToUtcConverterInterface::class); } From 17ab362b0c85bfa36410ede8d1a0f012ff17f0cd Mon Sep 17 00:00:00 2001 From: engcom-Bravo Date: Thu, 30 Dec 2021 23:05:16 +0530 Subject: [PATCH 6/7] ISSUE-33310 Fix static tests failed --- app/code/Magento/Newsletter/Model/Queue.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index 55bf9c0e521d3..76fe12658f752 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -93,7 +93,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy protected $_date; /** - * Problem factory + * Factory of Problem * * @var \Magento\Newsletter\Model\ProblemFactory */ From 61e21b2926750ddff5659f12ea947a860ce1cf33 Mon Sep 17 00:00:00 2001 From: engcom-Bravo Date: Fri, 31 Dec 2021 11:32:41 +0530 Subject: [PATCH 7/7] ISSUE-33310 Update translation for updated contents --- app/code/Magento/Newsletter/i18n/en_US.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Newsletter/i18n/en_US.csv b/app/code/Magento/Newsletter/i18n/en_US.csv index f8706967117fe..0937bf6ff1083 100644 --- a/app/code/Magento/Newsletter/i18n/en_US.csv +++ b/app/code/Magento/Newsletter/i18n/en_US.csv @@ -91,7 +91,7 @@ Paused,Paused "You selected an invalid queue.","You selected an invalid queue." "We cannot mark as received subscriber.","We cannot mark as received subscriber." "Duplicate template code","Duplicate template code" -"Follow this link to unsubscribe {{var subscriber.getUnsubscriptionLink()}}","Follow this link to unsubscribe {{var subscriber.getUnsubscriptionLink()}}" +"Follow this link to unsubscribe {{var subscriber_data.unsubscription_link}}","Follow this link to unsubscribe {{var subscriber_data.unsubscription_link}}" "No such entity with %fieldName = %fieldValue","No such entity with %fieldName = %fieldValue" "Choose Store View:","Choose Store View:" "Newsletter Message Preview","Newsletter Message Preview"