Skip to content

Commit f1e6d1c

Browse files
author
Oleksii Korshenko
authored
Merge pull request #1596 from magento-engcom/2.2-develop-prs
Public Pull Requests #11437 Add confirmation and lock_expires to customer export csv - Fix issue 10765 by @convenient
2 parents 190a4a4 + 4bad882 commit f1e6d1c

File tree

2 files changed

+124
-2
lines changed

2 files changed

+124
-2
lines changed

app/code/Magento/Customer/Test/Unit/Ui/Component/DataProvider/DocumentTest.php

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
use Magento\Customer\Ui\Component\DataProvider\Document;
1414
use Magento\Framework\Api\AttributeValue;
1515
use Magento\Framework\Api\AttributeValueFactory;
16+
use Magento\Framework\App\Config\ScopeConfigInterface;
17+
use Magento\Framework\Phrase;
1618
use Magento\Store\Api\Data\WebsiteInterface;
1719
use Magento\Store\Model\StoreManagerInterface;
1820
use PHPUnit_Framework_MockObject_MockObject as MockObject;
@@ -44,6 +46,11 @@ class DocumentTest extends \PHPUnit\Framework\TestCase
4446
*/
4547
private $storeManager;
4648

49+
/**
50+
* @var ScopeConfigInterface|MockObject
51+
*/
52+
private $scopeConfig;
53+
4754
/**
4855
* @var Document
4956
*/
@@ -59,11 +66,14 @@ protected function setUp()
5966

6067
$this->storeManager = $this->getMockForAbstractClass(StoreManagerInterface::class);
6168

69+
$this->scopeConfig = $this->getMockForAbstractClass(ScopeConfigInterface::class);
70+
6271
$this->document = new Document(
6372
$this->attributeValueFactory,
6473
$this->groupRepository,
6574
$this->customerMetadata,
66-
$this->storeManager
75+
$this->storeManager,
76+
$this->scopeConfig
6777
);
6878
}
6979

@@ -156,6 +166,41 @@ public function testGetWebsiteAttribute()
156166
static::assertEquals('Main Website', $attribute->getValue());
157167
}
158168

169+
/**
170+
* @covers \Magento\Customer\Ui\Component\DataProvider\Document::getCustomAttribute
171+
*/
172+
public function testGetConfirmationAttribute()
173+
{
174+
$websiteId = 1;
175+
$this->document->setData('original_website_id', $websiteId);
176+
177+
$this->scopeConfig->expects(static::once())
178+
->method('getValue')
179+
->with()
180+
->willReturn(true);
181+
182+
$this->document->setData('confirmation', null);
183+
$attribute = $this->document->getCustomAttribute('confirmation');
184+
185+
$value = $attribute->getValue();
186+
static::assertInstanceOf(Phrase::class, $value);
187+
static::assertEquals('Confirmed', (string)$value);
188+
}
189+
190+
/**
191+
* @covers \Magento\Customer\Ui\Component\DataProvider\Document::getCustomAttribute
192+
*/
193+
public function testGetAccountLockValue()
194+
{
195+
$this->document->setData('lock_expires', null);
196+
197+
$attribute = $this->document->getCustomAttribute('lock_expires');
198+
199+
$value = $attribute->getValue();
200+
static::assertInstanceOf(Phrase::class, $value);
201+
static::assertEquals('Unlocked', (string)$value);
202+
}
203+
159204
/**
160205
* Create mock for attribute value factory
161206
* @return void

app/code/Magento/Customer/Ui/Component/DataProvider/Document.php

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
namespace Magento\Customer\Ui\Component\DataProvider;
77

88
use Magento\Customer\Api\CustomerMetadataInterface;
9+
use Magento\Customer\Model\AccountManagement;
910
use Magento\Framework\Api\AttributeValueFactory;
11+
use Magento\Framework\App\Config\ScopeConfigInterface;
1012
use Magento\Framework\Exception\NoSuchEntityException;
1113
use Magento\Customer\Api\GroupRepositoryInterface;
14+
use Magento\Framework\App\ObjectManager;
15+
use Magento\Store\Model\ScopeInterface;
1216
use Magento\Store\Model\StoreManagerInterface;
1317

1418
/**
@@ -31,6 +35,21 @@ class Document extends \Magento\Framework\View\Element\UiComponent\DataProvider\
3135
*/
3236
private static $websiteAttributeCode = 'website_id';
3337

38+
/**
39+
* @var string
40+
*/
41+
private static $websiteIdAttributeCode = 'original_website_id';
42+
43+
/**
44+
* @var string
45+
*/
46+
private static $confirmationAttributeCode = 'confirmation';
47+
48+
/**
49+
* @var string
50+
*/
51+
private static $accountLockAttributeCode = 'lock_expires';
52+
3453
/**
3554
* @var CustomerMetadataInterface
3655
*/
@@ -46,23 +65,31 @@ class Document extends \Magento\Framework\View\Element\UiComponent\DataProvider\
4665
*/
4766
private $storeManager;
4867

68+
/**
69+
* @var ScopeConfigInterface
70+
*/
71+
private $scopeConfig;
72+
4973
/**
5074
* Document constructor.
5175
* @param AttributeValueFactory $attributeValueFactory
5276
* @param GroupRepositoryInterface $groupRepository
5377
* @param CustomerMetadataInterface $customerMetadata
5478
* @param StoreManagerInterface $storeManager
79+
* @param ScopeConfigInterface $scopeConfig
5580
*/
5681
public function __construct(
5782
AttributeValueFactory $attributeValueFactory,
5883
GroupRepositoryInterface $groupRepository,
5984
CustomerMetadataInterface $customerMetadata,
60-
StoreManagerInterface $storeManager
85+
StoreManagerInterface $storeManager,
86+
ScopeConfigInterface $scopeConfig = null
6187
) {
6288
parent::__construct($attributeValueFactory);
6389
$this->customerMetadata = $customerMetadata;
6490
$this->groupRepository = $groupRepository;
6591
$this->storeManager = $storeManager;
92+
$this->scopeConfig = $scopeConfig ?: ObjectManager::getInstance()->create(ScopeConfigInterface::class);
6693
}
6794

6895
/**
@@ -80,6 +107,12 @@ public function getCustomAttribute($attributeCode)
80107
case self::$websiteAttributeCode:
81108
$this->setWebsiteValue();
82109
break;
110+
case self::$confirmationAttributeCode:
111+
$this->setConfirmationValue();
112+
break;
113+
case self::$accountLockAttributeCode:
114+
$this->setAccountLockValue();
115+
break;
83116
}
84117
return parent::getCustomAttribute($attributeCode);
85118
}
@@ -133,5 +166,49 @@ private function setWebsiteValue()
133166
$value = $this->getData(self::$websiteAttributeCode);
134167
$list = $this->storeManager->getWebsites();
135168
$this->setCustomAttribute(self::$websiteAttributeCode, $list[$value]->getName());
169+
$this->setCustomAttribute(self::$websiteIdAttributeCode, $value);
170+
}
171+
172+
/**
173+
* Update confirmation value
174+
* Method set confirmation text value to match what is shown in grid
175+
* @return void
176+
*/
177+
private function setConfirmationValue()
178+
{
179+
$value = $this->getData(self::$confirmationAttributeCode);
180+
$websiteId = $this->getData(self::$websiteIdAttributeCode) ?: $this->getData(self::$websiteAttributeCode);
181+
$isConfirmRequired = (bool)$this->scopeConfig->getValue(
182+
AccountManagement::XML_PATH_IS_CONFIRM,
183+
ScopeInterface::SCOPE_WEBSITES,
184+
$websiteId
185+
);
186+
187+
$valueText = __('Confirmation Not Required');
188+
if ($isConfirmRequired) {
189+
$valueText = $value === null ? __('Confirmed') : __('Confirmation Required');
190+
}
191+
192+
$this->setCustomAttribute(self::$confirmationAttributeCode, $valueText);
193+
}
194+
195+
/**
196+
* Update lock expires value
197+
* Method set account lock text value to match what is shown in grid
198+
* @return void
199+
*/
200+
private function setAccountLockValue()
201+
{
202+
$value = $this->getDataByPath(self::$accountLockAttributeCode);
203+
204+
$valueText = __('Unlocked');
205+
if ($value !== null) {
206+
$lockExpires = new \DateTime($value);
207+
if ($lockExpires > new \DateTime()) {
208+
$valueText = __('Locked');
209+
}
210+
}
211+
212+
$this->setCustomAttribute(self::$accountLockAttributeCode, $valueText);
136213
}
137214
}

0 commit comments

Comments
 (0)