Skip to content

Commit 16836c1

Browse files
ENGCOM-8551: #31168 fix for customer which have more than two subscriptions #31261
- Merge Pull Request #31261 from korovitskyi/magento2:31168_fix_exception_on_customer_getlist - Merged commits: 1. f5cc98e 2. 66c3bff 3. b19a6dc
2 parents 285b397 + b19a6dc commit 16836c1

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

app/code/Magento/Newsletter/Model/Plugin/CustomerPlugin.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,21 @@ public function afterGetById(CustomerRepositoryInterface $subject, CustomerInter
244244
*/
245245
public function afterGetList(CustomerRepositoryInterface $subject, SearchResults $searchResults): SearchResults
246246
{
247+
$customerEmails = [];
248+
249+
foreach ($searchResults->getItems() as $customer) {
250+
$customerEmails[] = $customer->getEmail();
251+
}
252+
253+
$collection = $this->collectionFactory->create();
254+
$collection->addFieldToFilter('subscriber_email', ['in' => $customerEmails]);
255+
247256
foreach ($searchResults->getItems() as $customer) {
248257
/** @var CustomerExtensionInterface $extensionAttributes */
249258
$extensionAttributes = $customer->getExtensionAttributes();
250-
251-
$isSubscribed = (int) $extensionAttributes->getIsSubscribed() === Subscriber::STATUS_SUBSCRIBED ?: false;
259+
/** @var Subscriber $subscribe */
260+
$subscribe = $collection->getItemByColumnValue('subscriber_email', $customer->getEmail());
261+
$isSubscribed = $subscribe && (int) $subscribe->getStatus() === Subscriber::STATUS_SUBSCRIBED;
252262
$extensionAttributes->setIsSubscribed($isSubscribed);
253263
}
254264

app/code/Magento/Newsletter/etc/extension_attributes.xml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88

99
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
1010
<extension_attributes for="Magento\Customer\Api\Data\CustomerInterface">
11-
<attribute code="is_subscribed" type="boolean" >
12-
<join reference_table="newsletter_subscriber" reference_field="customer_id" join_on_field="entity_id">
13-
<field>subscriber_status</field>
14-
</join>
15-
</attribute>
11+
<attribute code="is_subscribed" type="boolean"/>
1612
</extension_attributes>
1713
</config>

dev/tests/integration/testsuite/Magento/Newsletter/Model/Plugin/PluginTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,22 @@ public function testCustomerWithZeroStoreIdIsSubscribed()
205205
$this->assertEquals($customer->getId(), (int)$subscriber->getCustomerId());
206206
$this->assertEquals($currentStore, (int)$subscriber->getStoreId());
207207
}
208+
209+
/**
210+
* Test get list customer, which have more then 2 subscribes in newsletter_subscriber.
211+
*
212+
* @magentoAppArea frontend
213+
* @magentoDataFixture Magento/Newsletter/_files/subscribers.php
214+
*/
215+
public function testCustomerWithTwoNewsLetterSubscriptions()
216+
{
217+
/** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchBuilder */
218+
$searchBuilder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
219+
$searchCriteria = $searchBuilder->addFilter('entity_id', 1)->create();
220+
$items = $this->customerRepository->getList($searchCriteria)->getItems();
221+
/** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
222+
$customer = $items[0];
223+
$extensionAttributes = $customer->getExtensionAttributes();
224+
$this->assertTrue($extensionAttributes->getIsSubscribed());
225+
}
208226
}

0 commit comments

Comments
 (0)