Skip to content

Commit ca97eb8

Browse files
committed
ACP2E-4294: Restricted Category Products Still Counted in Wishlist After Customer Group Update
1 parent e89b0b1 commit ca97eb8

File tree

6 files changed

+46
-47
lines changed

6 files changed

+46
-47
lines changed

app/code/Magento/Wishlist/Block/AbstractBlock.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88

99
use Magento\Catalog\Helper\Image;
1010
use Magento\Catalog\Model\Product\Image\UrlBuilder;
11+
use Magento\Framework\Exception\NoSuchEntityException;
1112
use Magento\Framework\View\ConfigInterface;
1213
use Magento\Framework\App\ObjectManager;
14+
use Magento\Wishlist\Model\WishlistItemPermissionsCollectionProcessor;
1315

1416
/**
1517
* Wishlist Product Items abstract Block
@@ -45,6 +47,11 @@ abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProd
4547
*/
4648
private $imageUrlBuilder;
4749

50+
/**
51+
* @var WishlistItemPermissionsCollectionProcessor
52+
*/
53+
private WishlistItemPermissionsCollectionProcessor $permissionCollectionProcessor;
54+
4855
/**
4956
* @param \Magento\Catalog\Block\Product\Context $context
5057
* @param \Magento\Framework\App\Http\Context $httpContext
@@ -57,7 +64,8 @@ public function __construct(
5764
\Magento\Framework\App\Http\Context $httpContext,
5865
array $data = [],
5966
?ConfigInterface $config = null,
60-
?UrlBuilder $urlBuilder = null
67+
?UrlBuilder $urlBuilder = null,
68+
?WishlistItemPermissionsCollectionProcessor $permissionCollectionProcessor = null
6169
) {
6270
$this->httpContext = $httpContext;
6371
parent::__construct(
@@ -66,6 +74,8 @@ public function __construct(
6674
);
6775
$this->viewConfig = $config ?? ObjectManager::getInstance()->get(ConfigInterface::class);
6876
$this->imageUrlBuilder = $urlBuilder ?? ObjectManager::getInstance()->get(UrlBuilder::class);
77+
$this->permissionCollectionProcessor = $permissionCollectionProcessor ??
78+
ObjectManager::getInstance()->get(WishlistItemPermissionsCollectionProcessor::class);
6979
}
7080

7181
/**
@@ -104,10 +114,12 @@ protected function _prepareCollection($collection)
104114
* Create wishlist item collection
105115
*
106116
* @return \Magento\Wishlist\Model\ResourceModel\Item\Collection
117+
* @throws NoSuchEntityException
107118
*/
108119
protected function _createWishlistItemCollection()
109120
{
110-
return $this->_getWishlist()->getItemCollection();
121+
$itemCollection = $this->_getWishlist()->getItemCollection();
122+
return $this->permissionCollectionProcessor->execute($itemCollection);
111123
}
112124

113125
/**

app/code/Magento/Wishlist/Block/Customer/Wishlist.php

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
use Magento\Catalog\Block\Product\Context;
1111
use Magento\Catalog\Helper\Product\ConfigurationPool;
1212
use Magento\Customer\Helper\Session\CurrentCustomer;
13-
use Magento\Framework\App\ObjectManager;
1413
use Magento\Framework\Data\Helper\PostHelper;
15-
use Magento\Wishlist\Model\WishlistItemSellableCollectionProcessor;
1614

1715
/**
1816
* Wishlist block customer items.
@@ -50,28 +48,21 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock
5048
*/
5149
protected $postDataHelper;
5250

53-
/**
54-
* @var WishlistItemSellableCollectionProcessor
55-
*/
56-
private WishlistItemSellableCollectionProcessor $sellableCollectionProcessor;
57-
5851
/**
5952
* @param Context $context
6053
* @param \Magento\Framework\App\Http\Context $httpContext
6154
* @param ConfigurationPool $helperPool
6255
* @param CurrentCustomer $currentCustomer
6356
* @param PostHelper $postDataHelper
64-
* @param WishlistItemSellableCollectionProcessor|null $sellableCollectionProcessor
6557
* @param array $data
6658
*/
6759
public function __construct(
68-
\Magento\Catalog\Block\Product\Context $context,
69-
\Magento\Framework\App\Http\Context $httpContext,
60+
\Magento\Catalog\Block\Product\Context $context,
61+
\Magento\Framework\App\Http\Context $httpContext,
7062
\Magento\Catalog\Helper\Product\ConfigurationPool $helperPool,
71-
\Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer,
72-
\Magento\Framework\Data\Helper\PostHelper $postDataHelper,
73-
?WishlistItemSellableCollectionProcessor $sellableCollectionProcessor = null,
74-
array $data = []
63+
\Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer,
64+
\Magento\Framework\Data\Helper\PostHelper $postDataHelper,
65+
array $data = []
7566
) {
7667
parent::__construct(
7768
$context,
@@ -81,8 +72,6 @@ public function __construct(
8172
$this->_helperPool = $helperPool;
8273
$this->currentCustomer = $currentCustomer;
8374
$this->postDataHelper = $postDataHelper;
84-
$this->sellableCollectionProcessor = $sellableCollectionProcessor ??
85-
ObjectManager::getInstance()->get(WishlistItemSellableCollectionProcessor::class);
8675
}
8776

8877
/**
@@ -95,7 +84,6 @@ public function __construct(
9584
protected function _prepareCollection($collection)
9685
{
9786
$collection->setInStockFilter()->setOrder('added_at', 'ASC');
98-
$this->sellableCollectionProcessor->execute($collection);
9987

10088
return $this;
10189
}

app/code/Magento/Wishlist/Model/Wishlist.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,11 @@ class Wishlist extends AbstractModel implements IdentityInterface
149149
*/
150150
private $stockConfiguration;
151151

152+
/**
153+
* @var WishlistItemPermissionsCollectionProcessor
154+
*/
155+
private WishlistItemPermissionsCollectionProcessor $permissionCollectionProcessor;
156+
152157
/**
153158
* Constructor
154159
*
@@ -172,6 +177,7 @@ class Wishlist extends AbstractModel implements IdentityInterface
172177
* @param StockRegistryInterface|null $stockRegistry
173178
* @param ScopeConfigInterface|null $scopeConfig
174179
* @param StockConfigurationInterface|null $stockConfiguration
180+
* @param WishlistItemPermissionsCollectionProcessor|null $permissionCollectionProcessor
175181
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
176182
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
177183
*/
@@ -195,7 +201,8 @@ public function __construct(
195201
?Json $serializer = null,
196202
?StockRegistryInterface $stockRegistry = null,
197203
?ScopeConfigInterface $scopeConfig = null,
198-
?StockConfigurationInterface $stockConfiguration = null
204+
?StockConfigurationInterface $stockConfiguration = null,
205+
?WishlistItemPermissionsCollectionProcessor $permissionCollectionProcessor = null
199206
) {
200207
$this->_useCurrentWebsite = $useCurrentWebsite;
201208
$this->_catalogProduct = $catalogProduct;
@@ -212,6 +219,8 @@ public function __construct(
212219
$this->productRepository = $productRepository;
213220
$this->stockConfiguration = $stockConfiguration
214221
?: ObjectManager::getInstance()->get(StockConfigurationInterface::class);
222+
$this->permissionCollectionProcessor = $permissionCollectionProcessor ?:
223+
ObjectManager::getInstance()->get(WishlistItemPermissionsCollectionProcessor::class);
215224
}
216225

217226
/**
@@ -369,7 +378,7 @@ protected function _addCatalogProduct(Product $product, $qty = 1, $forciblySetQt
369378
*
370379
* @return \Magento\Wishlist\Model\ResourceModel\Item\Collection
371380
*
372-
* @throws NoSuchEntityException
381+
* @throws NoSuchEntityException|Exception
373382
*/
374383
public function getItemCollection()
375384
{
@@ -379,6 +388,7 @@ public function getItemCollection()
379388
)->addStoreFilter(
380389
$this->getSharedStoreIds()
381390
)->setVisibilityFilter($this->_useCurrentWebsite);
391+
$this->permissionCollectionProcessor->execute($this->_itemCollection);
382392
}
383393

384394
return $this->_itemCollection;

app/code/Magento/Wishlist/Model/WishlistItemSellableCollectionProcessor.php renamed to app/code/Magento/Wishlist/Model/WishlistItemPermissionsCollectionProcessor.php

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@
88
namespace Magento\Wishlist\Model;
99

1010
use Magento\Catalog\Api\ProductRepositoryInterface;
11-
use Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver;
11+
use Magento\CatalogPermissions\Observer\ApplyPermissionsOnProduct;
1212
use Magento\Framework\Api\SearchCriteriaBuilder;
1313
use Magento\Wishlist\Model\ResourceModel\Item\Collection;
1414

15-
class WishlistItemSellableCollectionProcessor
15+
class WishlistItemPermissionsCollectionProcessor
1616
{
1717
/**
1818
* @param ProductRepositoryInterface $productRepository
19-
* @param SalableResolver $salableResolver
2019
* @param SearchCriteriaBuilder $searchCriteriaBuilder
20+
* @param ApplyPermissionsOnProduct $permissionApplier
2121
*/
2222
public function __construct(
2323
private readonly ProductRepositoryInterface $productRepository,
24-
private readonly SalableResolver $salableResolver,
25-
private readonly SearchCriteriaBuilder $searchCriteriaBuilder
24+
private readonly SearchCriteriaBuilder $searchCriteriaBuilder,
25+
private readonly ApplyPermissionsOnProduct $permissionApplier
2626
) {
2727
}
2828

@@ -47,9 +47,7 @@ public function execute(Collection $collection): Collection
4747
$validItems = [];
4848
$collection->removeAllItems();
4949
foreach ($items as $item) {
50-
if (!isset($products[$item->getProductId()]) ||
51-
!$this->salableResolver->isSalable($products[$item->getProductId()])
52-
) {
50+
if (!isset($products[$item->getProductId()]) || $products[$item->getProductId()]->getIsHidden()) {
5351
continue;
5452
}
5553
$validItems[] = $item->getProductId();

app/code/Magento/WishlistGraphQl/Model/Resolver/WishlistItemsResolver.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
use Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory as WishlistItemCollectionFactory;
1818
use Magento\Wishlist\Model\Item;
1919
use Magento\Wishlist\Model\Wishlist;
20-
use Magento\Wishlist\Model\WishlistItemSellableCollectionProcessor;
20+
use Magento\Wishlist\Model\WishlistItemPermissionsCollectionProcessor;
2121

2222
/**
2323
* Fetches the Wishlist Items data according to the GraphQL schema
@@ -35,23 +35,23 @@ class WishlistItemsResolver implements ResolverInterface
3535
private StoreManagerInterface $storeManager;
3636

3737
/**
38-
* @var WishlistItemSellableCollectionProcessor
38+
* @var WishlistItemPermissionsCollectionProcessor
3939
*/
40-
private WishlistItemSellableCollectionProcessor $sellableCollectionProcessor;
40+
private WishlistItemPermissionsCollectionProcessor $permissionCollectionProcessor;
4141

4242
/**
4343
* @param WishlistItemCollectionFactory $wishlistItemCollectionFactory
4444
* @param StoreManagerInterface $storeManager
45-
* @param WishlistItemSellableCollectionProcessor $sellableCollectionProcessor
45+
* @param WishlistItemPermissionsCollectionProcessor $permissionCollectionProcessor
4646
*/
4747
public function __construct(
4848
WishlistItemCollectionFactory $wishlistItemCollectionFactory,
4949
StoreManagerInterface $storeManager,
50-
WishlistItemSellableCollectionProcessor $sellableCollectionProcessor
50+
WishlistItemPermissionsCollectionProcessor $permissionCollectionProcessor
5151
) {
5252
$this->wishlistItemCollectionFactory = $wishlistItemCollectionFactory;
5353
$this->storeManager = $storeManager;
54-
$this->sellableCollectionProcessor = $sellableCollectionProcessor;
54+
$this->permissionCollectionProcessor = $permissionCollectionProcessor;
5555
}
5656

5757
/**
@@ -90,6 +90,7 @@ public function resolve(
9090
*
9191
* @param Wishlist $wishlist
9292
* @return Item[]
93+
* @throws \Exception
9394
*/
9495
private function getWishListItems(Wishlist $wishlist): array
9596
{
@@ -101,7 +102,7 @@ private function getWishListItems(Wishlist $wishlist): array
101102
return $store->getId();
102103
}, $this->storeManager->getStores()))
103104
->setVisibilityFilter();
104-
$this->sellableCollectionProcessor->execute($wishlistItemCollection);
105+
$this->permissionCollectionProcessor->execute($wishlistItemCollection);
105106
return $wishlistItemCollection->getItems();
106107
}
107108
}

app/code/Magento/WishlistGraphQl/Model/Resolver/WishlistResolver.php

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use Magento\Wishlist\Model\Wishlist\Config as WishlistConfig;
1717
use Magento\Wishlist\Model\WishlistFactory;
1818
use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
19-
use Magento\Wishlist\Model\WishlistItemSellableCollectionProcessor;
2019

2120
/**
2221
* Fetches the Wishlist data according to the GraphQL schema
@@ -38,27 +37,19 @@ class WishlistResolver implements ResolverInterface
3837
*/
3938
private $wishlistConfig;
4039

41-
/**
42-
* @var WishlistItemSellableCollectionProcessor
43-
*/
44-
private WishlistItemSellableCollectionProcessor $sellableCollectionProcessor;
45-
4640
/**
4741
* @param WishlistResourceModel $wishlistResource
4842
* @param WishlistFactory $wishlistFactory
4943
* @param WishlistConfig $wishlistConfig
50-
* @param WishlistItemSellableCollectionProcessor $sellableCollectionProcessor
5144
*/
5245
public function __construct(
5346
WishlistResourceModel $wishlistResource,
5447
WishlistFactory $wishlistFactory,
55-
WishlistConfig $wishlistConfig,
56-
WishlistItemSellableCollectionProcessor $sellableCollectionProcessor
48+
WishlistConfig $wishlistConfig
5749
) {
5850
$this->wishlistResource = $wishlistResource;
5951
$this->wishlistFactory = $wishlistFactory;
6052
$this->wishlistConfig = $wishlistConfig;
61-
$this->sellableCollectionProcessor = $sellableCollectionProcessor;
6253
}
6354

6455
/**
@@ -88,7 +79,6 @@ public function resolve(
8879
if (null === $wishlist->getId()) {
8980
return [];
9081
}
91-
$this->sellableCollectionProcessor->execute($wishlist->getItemCollection());
9282

9383
return [
9484
'sharing_code' => $wishlist->getSharingCode(),

0 commit comments

Comments
 (0)