Skip to content

Commit 8da0a89

Browse files
committed
Merge remote-tracking branch 'origin/MC-33295' into 2.4-develop-pr24
2 parents afa6123 + 1d7c063 commit 8da0a89

File tree

2 files changed

+223
-106
lines changed

2 files changed

+223
-106
lines changed

app/code/Magento/Wishlist/Controller/Index/Cart.php

Lines changed: 95 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,93 +6,128 @@
66

77
namespace Magento\Wishlist\Controller\Index;
88

9+
use Magento\Catalog\Helper\Product;
910
use Magento\Catalog\Model\Product\Exception as ProductException;
11+
use Magento\Checkout\Model\Cart as CheckoutCart;
12+
use Magento\Checkout\Helper\Cart as CartHelper;
1013
use Magento\Framework\App\Action;
14+
use Magento\Framework\App\ObjectManager;
15+
use Magento\Framework\Controller\Result\Json;
16+
use Magento\Framework\Controller\Result\Redirect;
1117
use Magento\Framework\Controller\ResultFactory;
18+
use Magento\Framework\Controller\ResultInterface;
19+
use Magento\Framework\Data\Form\FormKey\Validator;
20+
use Magento\Framework\Escaper;
21+
use Magento\Framework\Exception\LocalizedException;
22+
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
23+
use Magento\Framework\Stdlib\Cookie\PublicCookieMetadata;
24+
use Magento\Framework\Stdlib\CookieManagerInterface;
25+
use Magento\Wishlist\Controller\AbstractIndex;
26+
use Magento\Wishlist\Controller\WishlistProviderInterface;
27+
use Magento\Wishlist\Helper\Data;
28+
use Magento\Wishlist\Model\Item\OptionFactory;
29+
use Magento\Wishlist\Model\ItemFactory;
30+
use Magento\Wishlist\Model\LocaleQuantityProcessor;
31+
use Magento\Wishlist\Model\ResourceModel\Item\Option\Collection;
1232

1333
/**
1434
* Add wishlist item to shopping cart and remove from wishlist controller.
1535
*
1636
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1737
*/
18-
class Cart extends \Magento\Wishlist\Controller\AbstractIndex implements Action\HttpPostActionInterface
38+
class Cart extends AbstractIndex implements Action\HttpPostActionInterface
1939
{
2040
/**
21-
* @var \Magento\Wishlist\Controller\WishlistProviderInterface
41+
* @var WishlistProviderInterface
2242
*/
2343
protected $wishlistProvider;
2444

2545
/**
26-
* @var \Magento\Wishlist\Model\LocaleQuantityProcessor
46+
* @var LocaleQuantityProcessor
2747
*/
2848
protected $quantityProcessor;
2949

3050
/**
31-
* @var \Magento\Wishlist\Model\ItemFactory
51+
* @var ItemFactory
3252
*/
3353
protected $itemFactory;
3454

3555
/**
36-
* @var \Magento\Checkout\Model\Cart
56+
* @var CheckoutCart
3757
*/
3858
protected $cart;
3959

4060
/**
41-
* @var \Magento\Checkout\Helper\Cart
61+
* @var CartHelper
4262
*/
4363
protected $cartHelper;
4464

4565
/**
46-
* @var \Magento\Wishlist\Model\Item\OptionFactory
66+
* @var OptionFactory
4767
*/
4868
private $optionFactory;
4969

5070
/**
51-
* @var \Magento\Catalog\Helper\Product
71+
* @var Product
5272
*/
5373
protected $productHelper;
5474

5575
/**
56-
* @var \Magento\Framework\Escaper
76+
* @var Escaper
5777
*/
5878
protected $escaper;
5979

6080
/**
61-
* @var \Magento\Wishlist\Helper\Data
81+
* @var Data
6282
*/
6383
protected $helper;
6484

6585
/**
66-
* @var \Magento\Framework\Data\Form\FormKey\Validator
86+
* @var Validator
6787
*/
6888
protected $formKeyValidator;
6989

90+
/**
91+
* @var CookieManagerInterface
92+
*/
93+
private $cookieManager;
94+
95+
/**
96+
* @var CookieMetadataFactory
97+
*/
98+
private $cookieMetadataFactory;
99+
70100
/**
71101
* @param Action\Context $context
72-
* @param \Magento\Wishlist\Controller\WishlistProviderInterface $wishlistProvider
73-
* @param \Magento\Wishlist\Model\LocaleQuantityProcessor $quantityProcessor
74-
* @param \Magento\Wishlist\Model\ItemFactory $itemFactory
75-
* @param \Magento\Checkout\Model\Cart $cart
76-
* @param \Magento\Wishlist\Model\Item\OptionFactory $optionFactory
77-
* @param \Magento\Catalog\Helper\Product $productHelper
78-
* @param \Magento\Framework\Escaper $escaper
79-
* @param \Magento\Wishlist\Helper\Data $helper
80-
* @param \Magento\Checkout\Helper\Cart $cartHelper
81-
* @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
102+
* @param WishlistProviderInterface $wishlistProvider
103+
* @param LocaleQuantityProcessor $quantityProcessor
104+
* @param ItemFactory $itemFactory
105+
* @param CheckoutCart $cart
106+
* @param OptionFactory $optionFactory
107+
* @param Product $productHelper
108+
* @param Escaper $escaper
109+
* @param Data $helper
110+
* @param CartHelper $cartHelper
111+
* @param Validator $formKeyValidator
112+
* @param CookieManagerInterface|null $cookieManager
113+
* @param CookieMetadataFactory|null $cookieMetadataFactory
114+
*
82115
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
83116
*/
84117
public function __construct(
85118
Action\Context $context,
86-
\Magento\Wishlist\Controller\WishlistProviderInterface $wishlistProvider,
87-
\Magento\Wishlist\Model\LocaleQuantityProcessor $quantityProcessor,
88-
\Magento\Wishlist\Model\ItemFactory $itemFactory,
89-
\Magento\Checkout\Model\Cart $cart,
90-
\Magento\Wishlist\Model\Item\OptionFactory $optionFactory,
91-
\Magento\Catalog\Helper\Product $productHelper,
92-
\Magento\Framework\Escaper $escaper,
93-
\Magento\Wishlist\Helper\Data $helper,
94-
\Magento\Checkout\Helper\Cart $cartHelper,
95-
\Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
119+
WishlistProviderInterface $wishlistProvider,
120+
LocaleQuantityProcessor $quantityProcessor,
121+
ItemFactory $itemFactory,
122+
CheckoutCart $cart,
123+
OptionFactory $optionFactory,
124+
Product $productHelper,
125+
Escaper $escaper,
126+
Data $helper,
127+
CartHelper $cartHelper,
128+
Validator $formKeyValidator,
129+
?CookieManagerInterface $cookieManager = null,
130+
?CookieMetadataFactory $cookieMetadataFactory = null
96131
) {
97132
$this->wishlistProvider = $wishlistProvider;
98133
$this->quantityProcessor = $quantityProcessor;
@@ -104,6 +139,9 @@ public function __construct(
104139
$this->helper = $helper;
105140
$this->cartHelper = $cartHelper;
106141
$this->formKeyValidator = $formKeyValidator;
142+
$this->cookieManager = $cookieManager ?: ObjectManager::getInstance()->get(CookieManagerInterface::class);
143+
$this->cookieMetadataFactory = $cookieMetadataFactory ?:
144+
ObjectManager::getInstance()->get(CookieMetadataFactory::class);
107145
parent::__construct($context);
108146
}
109147

@@ -113,14 +151,14 @@ public function __construct(
113151
* If Product has required options - item removed from wishlist and redirect
114152
* to product view page with message about needed defined required options
115153
*
116-
* @return \Magento\Framework\Controller\ResultInterface
154+
* @return ResultInterface
117155
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
118156
* @SuppressWarnings(PHPMD.NPathComplexity)
119157
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
120158
*/
121159
public function execute()
122160
{
123-
/** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
161+
/** @var Redirect $resultRedirect */
124162
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
125163
if (!$this->formKeyValidator->validate($this->getRequest())) {
126164
return $resultRedirect->setPath('*/*/');
@@ -167,7 +205,7 @@ public function execute()
167205
);
168206

169207
try {
170-
/** @var \Magento\Wishlist\Model\ResourceModel\Item\Option\Collection $options */
208+
/** @var Collection $options */
171209
$options = $this->optionFactory->create()->getCollection()->addItemFilter([$itemId]);
172210
$item->setOptions($options->getOptionsByItem($itemId));
173211

@@ -187,6 +225,27 @@ public function execute()
187225
$this->escaper->escapeHtml($item->getProduct()->getName())
188226
);
189227
$this->messageManager->addSuccessMessage($message);
228+
229+
$productsToAdd = [
230+
[
231+
'sku' => $item->getProduct()->getSku(),
232+
'name' => $item->getProduct()->getName(),
233+
'price' => $item->getProduct()->getFinalPrice(),
234+
'qty' => $item->getQty(),
235+
]
236+
];
237+
238+
/** @var PublicCookieMetadata $publicCookieMetadata */
239+
$publicCookieMetadata = $this->cookieMetadataFactory->createPublicCookieMetadata()
240+
->setDuration(3600)
241+
->setPath('/')
242+
->setHttpOnly(false);
243+
244+
$this->cookieManager->setPublicCookie(
245+
'add_to_cart',
246+
\rawurlencode(\json_encode($productsToAdd)),
247+
$publicCookieMetadata
248+
);
190249
}
191250

192251
if ($this->cartHelper->getShouldRedirectToCart()) {
@@ -199,7 +258,7 @@ public function execute()
199258
}
200259
} catch (ProductException $e) {
201260
$this->messageManager->addErrorMessage(__('This product(s) is out of stock.'));
202-
} catch (\Magento\Framework\Exception\LocalizedException $e) {
261+
} catch (LocalizedException $e) {
203262
$this->messageManager->addNoticeMessage($e->getMessage());
204263
$redirectUrl = $configureUrl;
205264
} catch (\Exception $e) {
@@ -209,7 +268,7 @@ public function execute()
209268
$this->helper->calculate();
210269

211270
if ($this->getRequest()->isAjax()) {
212-
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
271+
/** @var Json $resultJson */
213272
$resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON);
214273
$resultJson->setData(['backUrl' => $redirectUrl]);
215274
return $resultJson;

0 commit comments

Comments
 (0)