Skip to content
This repository was archived by the owner on Apr 29, 2019. It is now read-only.

Commit d05dc82

Browse files
MAGETWO-86894: CheckoutAgreements getList refactoring #13221
2 parents 2da8b3d + 768a3e7 commit d05dc82

File tree

19 files changed

+676
-73
lines changed

19 files changed

+676
-73
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\CheckoutAgreements\Api;
8+
9+
/**
10+
* Interface for retrieving list of checkout agreements.
11+
*
12+
* Extended variation of CheckoutAgreementsRepositoryInterface::getList with possibility to get results according
13+
* search filters without predefined limitations.
14+
*
15+
* @api
16+
*/
17+
interface CheckoutAgreementsListInterface
18+
{
19+
/**
20+
* List of checkout agreements.
21+
*
22+
* @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria
23+
* @return \Magento\CheckoutAgreements\Api\Data\AgreementInterface[]
24+
*/
25+
public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria) : array;
26+
}

app/code/Magento/CheckoutAgreements/Api/CheckoutAgreementsRepositoryInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public function get($id, $storeId = null);
2525
* Lists active checkout agreements.
2626
*
2727
* @return \Magento\CheckoutAgreements\Api\Data\AgreementInterface[]
28+
* @deprecated
29+
* @see \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface::getList
2830
*/
2931
public function getList();
3032

app/code/Magento/CheckoutAgreements/Model/AgreementsConfigProvider.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
namespace Magento\CheckoutAgreements\Model;
77

88
use Magento\Checkout\Model\ConfigProviderInterface;
9+
use Magento\Framework\App\ObjectManager;
910
use Magento\Store\Model\ScopeInterface;
11+
use Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter;
1012

1113
/**
1214
* Configuration provider for GiftMessage rendering on "Shipping Method" step of checkout.
@@ -28,20 +30,40 @@ class AgreementsConfigProvider implements ConfigProviderInterface
2830
*/
2931
protected $escaper;
3032

33+
/**
34+
* @var \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface
35+
*/
36+
private $checkoutAgreementsList;
37+
38+
/**
39+
* @var ActiveStoreAgreementsFilter
40+
*/
41+
private $activeStoreAgreementsFilter;
42+
3143
/**
3244
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration
3345
* @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
3446
* @param \Magento\Framework\Escaper $escaper
47+
* @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface|null $checkoutAgreementsList
48+
* @param ActiveStoreAgreementsFilter|null $activeStoreAgreementsFilter
3549
* @codeCoverageIgnore
3650
*/
3751
public function __construct(
3852
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration,
3953
\Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository,
40-
\Magento\Framework\Escaper $escaper
54+
\Magento\Framework\Escaper $escaper,
55+
\Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface $checkoutAgreementsList = null,
56+
ActiveStoreAgreementsFilter $activeStoreAgreementsFilter = null
4157
) {
4258
$this->scopeConfiguration = $scopeConfiguration;
4359
$this->checkoutAgreementsRepository = $checkoutAgreementsRepository;
4460
$this->escaper = $escaper;
61+
$this->checkoutAgreementsList = $checkoutAgreementsList ?: ObjectManager::getInstance()->get(
62+
\Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface::class
63+
);
64+
$this->activeStoreAgreementsFilter = $activeStoreAgreementsFilter ?: ObjectManager::getInstance()->get(
65+
ActiveStoreAgreementsFilter::class
66+
);
4567
}
4668

4769
/**
@@ -67,7 +89,9 @@ protected function getAgreementsConfig()
6789
ScopeInterface::SCOPE_STORE
6890
);
6991

70-
$agreementsList = $this->checkoutAgreementsRepository->getList();
92+
$agreementsList = $this->checkoutAgreementsList->getList(
93+
$this->activeStoreAgreementsFilter->buildSearchCriteria()
94+
);
7195
$agreementConfiguration['isEnabled'] = (bool)($isAgreementsEnabled && count($agreementsList) > 0);
7296

7397
foreach ($agreementsList as $agreement) {
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\CheckoutAgreements\Model\Api\SearchCriteria;
8+
9+
/**
10+
* Build search criteria for agreements list.
11+
*/
12+
class ActiveStoreAgreementsFilter
13+
{
14+
/**
15+
* @var \Magento\Framework\Api\FilterBuilder
16+
*/
17+
private $filterBuilder;
18+
19+
/**
20+
* @var \Magento\Framework\Api\SearchCriteriaBuilder
21+
*/
22+
private $searchCriteriaBuilder;
23+
24+
/**
25+
* @var \Magento\Store\Model\StoreManagerInterface
26+
*/
27+
private $storeManager;
28+
29+
/**
30+
* @param \Magento\Framework\Api\FilterBuilder $filterBuilder
31+
* @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
32+
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
33+
*/
34+
public function __construct(
35+
\Magento\Framework\Api\FilterBuilder $filterBuilder,
36+
\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
37+
\Magento\Store\Model\StoreManagerInterface $storeManager
38+
) {
39+
$this->filterBuilder = $filterBuilder;
40+
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
41+
$this->storeManager = $storeManager;
42+
}
43+
44+
/**
45+
* Build search criteria with store and is_active filters.
46+
*
47+
* @return \Magento\Framework\Api\SearchCriteriaInterface
48+
*/
49+
public function buildSearchCriteria() : \Magento\Framework\Api\SearchCriteriaInterface
50+
{
51+
$storeFilter = $this->filterBuilder
52+
->setField('store_id')
53+
->setConditionType('eq')
54+
->setValue($this->storeManager->getStore()->getId())
55+
->create();
56+
$isActiveFilter = $this->filterBuilder->setField('is_active')
57+
->setConditionType('eq')
58+
->setValue(1)
59+
->create();
60+
$this->searchCriteriaBuilder->addFilters([$storeFilter]);
61+
$this->searchCriteriaBuilder->addFilters([$isActiveFilter]);
62+
return $this->searchCriteriaBuilder->create();
63+
}
64+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\CheckoutAgreements\Model\Api\SearchCriteria\CollectionProcessor\FilterProcessor;
8+
9+
use Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor\CustomFilterInterface;
10+
use Magento\Framework\Data\Collection\AbstractDb;
11+
use Magento\Framework\Api\Filter;
12+
use Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection;
13+
14+
/**
15+
* Custom store filter to collection
16+
*/
17+
class StoreFilter implements CustomFilterInterface
18+
{
19+
/**
20+
* Apply custom store filter to collection
21+
*
22+
* @param Filter $filter
23+
* @param AbstractDb $collection
24+
* @return bool
25+
*/
26+
public function apply(Filter $filter, AbstractDb $collection)
27+
{
28+
/** @var Collection $collection */
29+
$collection->addStoreFilter($filter->getValue());
30+
return true;
31+
}
32+
}

app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/GuestValidation.php

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

88
use Magento\CheckoutAgreements\Model\AgreementsProvider;
99
use Magento\Store\Model\ScopeInterface;
10+
use Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter;
1011

1112
/**
1213
* Class GuestValidation
@@ -23,28 +24,36 @@ class GuestValidation
2324
private $scopeConfiguration;
2425

2526
/**
26-
* @var \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface
27+
* @var \Magento\Checkout\Api\AgreementsValidatorInterface
2728
*/
28-
private $checkoutAgreementsRepository;
29+
private $agreementsValidator;
2930

3031
/**
31-
* @var \Magento\Checkout\Api\AgreementsValidatorInterface
32+
* @var \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface
3233
*/
33-
private $agreementsValidator;
34+
private $checkoutAgreementsList;
35+
36+
/**
37+
* @var \Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter
38+
*/
39+
private $activeStoreAgreementsFilter;
3440

3541
/**
3642
* @param \Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator
3743
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration
38-
* @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
44+
* @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface $checkoutAgreementsList
45+
* @param ActiveStoreAgreementsFilter $activeStoreAgreementsFilter
3946
*/
4047
public function __construct(
4148
\Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator,
4249
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration,
43-
\Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
50+
\Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface $checkoutAgreementsList,
51+
\Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter $activeStoreAgreementsFilter
4452
) {
4553
$this->agreementsValidator = $agreementsValidator;
4654
$this->scopeConfiguration = $scopeConfiguration;
47-
$this->checkoutAgreementsRepository = $checkoutAgreementsRepository;
55+
$this->checkoutAgreementsList = $checkoutAgreementsList;
56+
$this->activeStoreAgreementsFilter = $activeStoreAgreementsFilter;
4857
}
4958

5059
/**
@@ -53,6 +62,7 @@ public function __construct(
5362
* @param string $email
5463
* @param \Magento\Quote\Api\Data\PaymentInterface $paymentMethod
5564
* @param \Magento\Quote\Api\Data\AddressInterface|null $billingAddress
65+
* @throws \Magento\Framework\Exception\CouldNotSaveException
5666
* @return void
5767
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
5868
*/
@@ -74,6 +84,7 @@ public function beforeSavePaymentInformationAndPlaceOrder(
7484
* @param string $email
7585
* @param \Magento\Quote\Api\Data\PaymentInterface $paymentMethod
7686
* @param \Magento\Quote\Api\Data\AddressInterface|null $billingAddress
87+
* @throws \Magento\Framework\Exception\CouldNotSaveException
7788
* @return void
7889
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
7990
*/
@@ -117,7 +128,9 @@ private function isAgreementEnabled()
117128
AgreementsProvider::PATH_ENABLED,
118129
ScopeInterface::SCOPE_STORE
119130
);
120-
$agreementsList = $isAgreementsEnabled ? $this->checkoutAgreementsRepository->getList() : [];
131+
$agreementsList = $isAgreementsEnabled
132+
? $this->checkoutAgreementsList->getList($this->activeStoreAgreementsFilter->buildSearchCriteria())
133+
: [];
121134
return (bool)($isAgreementsEnabled && count($agreementsList) > 0);
122135
}
123136
}

app/code/Magento/CheckoutAgreements/Model/Checkout/Plugin/Validation.php

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

88
use Magento\CheckoutAgreements\Model\AgreementsProvider;
99
use Magento\Store\Model\ScopeInterface;
10+
use Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter;
1011

1112
/**
1213
* Class Validation
@@ -19,35 +20,44 @@ class Validation
1920
protected $scopeConfiguration;
2021

2122
/**
22-
* @var \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface
23+
* @var \Magento\Checkout\Api\AgreementsValidatorInterface
2324
*/
24-
protected $checkoutAgreementsRepository;
25+
protected $agreementsValidator;
2526

2627
/**
27-
* @var \Magento\Checkout\Api\AgreementsValidatorInterface
28+
* @var \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface
2829
*/
29-
protected $agreementsValidator;
30+
private $checkoutAgreementsList;
31+
32+
/**
33+
* @var \Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter
34+
*/
35+
private $activeStoreAgreementsFilter;
3036

3137
/**
3238
* @param \Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator
3339
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration
34-
* @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
40+
* @param \Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface $checkoutAgreementsList
41+
* @param ActiveStoreAgreementsFilter $activeStoreAgreementsFilter
3542
*/
3643
public function __construct(
3744
\Magento\Checkout\Api\AgreementsValidatorInterface $agreementsValidator,
3845
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration,
39-
\Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface $checkoutAgreementsRepository
46+
\Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface $checkoutAgreementsList,
47+
\Magento\CheckoutAgreements\Model\Api\SearchCriteria\ActiveStoreAgreementsFilter $activeStoreAgreementsFilter
4048
) {
4149
$this->agreementsValidator = $agreementsValidator;
4250
$this->scopeConfiguration = $scopeConfiguration;
43-
$this->checkoutAgreementsRepository = $checkoutAgreementsRepository;
51+
$this->checkoutAgreementsList = $checkoutAgreementsList;
52+
$this->activeStoreAgreementsFilter = $activeStoreAgreementsFilter;
4453
}
4554

4655
/**
4756
* @param \Magento\Checkout\Api\PaymentInformationManagementInterface $subject
4857
* @param int $cartId
4958
* @param \Magento\Quote\Api\Data\PaymentInterface $paymentMethod
5059
* @param \Magento\Quote\Api\Data\AddressInterface|null $billingAddress
60+
* @throws \Magento\Framework\Exception\CouldNotSaveException
5161
* @return void
5262
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
5363
*/
@@ -67,6 +77,7 @@ public function beforeSavePaymentInformationAndPlaceOrder(
6777
* @param int $cartId
6878
* @param \Magento\Quote\Api\Data\PaymentInterface $paymentMethod
6979
* @param \Magento\Quote\Api\Data\AddressInterface|null $billingAddress
80+
* @throws \Magento\Framework\Exception\CouldNotSaveException
7081
* @return void
7182
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
7283
*/
@@ -109,7 +120,9 @@ protected function isAgreementEnabled()
109120
AgreementsProvider::PATH_ENABLED,
110121
ScopeInterface::SCOPE_STORE
111122
);
112-
$agreementsList = $isAgreementsEnabled ? $this->checkoutAgreementsRepository->getList() : [];
123+
$agreementsList = $isAgreementsEnabled
124+
? $this->checkoutAgreementsList->getList($this->activeStoreAgreementsFilter->buildSearchCriteria())
125+
: [];
113126
return (bool)($isAgreementsEnabled && count($agreementsList) > 0);
114127
}
115128
}

0 commit comments

Comments
 (0)