Skip to content

Commit c8ba4ab

Browse files
Merge pull request #9749 from adobe-commerce-tier-4/PR_Apr23_doleksandr
[Support Tier-4 odubovyk] 04-23-2025 Regular delivery of bugfixes and improvements
2 parents 3113ce1 + 0b282d1 commit c8ba4ab

File tree

11 files changed

+277
-40
lines changed

11 files changed

+277
-40
lines changed

app/code/Magento/CustomerGraphQl/Model/Resolver/UpdateCustomerEmail.php

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
<?php
22
/**
3-
* Copyright 2025 Adobe
3+
* Copyright 2020 Adobe
44
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

88
namespace Magento\CustomerGraphQl\Model\Resolver;
99

10+
use Exception;
11+
use Magento\Customer\Model\EmailNotificationInterface;
1012
use Magento\CustomerGraphQl\Model\Customer\ExtractCustomerData;
1113
use Magento\CustomerGraphQl\Model\Customer\GetCustomer;
1214
use Magento\CustomerGraphQl\Model\Customer\UpdateCustomerAccount;
15+
use Magento\Framework\App\ObjectManager;
1316
use Magento\Framework\GraphQl\Config\Element\Field;
1417
use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
18+
use Magento\Framework\GraphQl\Query\Resolver\ContextInterface as ResolverContext;
1519
use Magento\Framework\GraphQl\Query\Resolver\Value;
1620
use Magento\Framework\GraphQl\Query\ResolverInterface;
1721
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
@@ -37,31 +41,40 @@ class UpdateCustomerEmail implements ResolverInterface
3741
*/
3842
private $extractCustomerData;
3943

44+
/**
45+
* @var EmailNotificationInterface
46+
*/
47+
private $emailNotification;
48+
4049
/**
4150
* @param GetCustomer $getCustomer
4251
* @param UpdateCustomerAccount $updateCustomerAccount
4352
* @param ExtractCustomerData $extractCustomerData
53+
* @param EmailNotificationInterface|null $emailNotification
4454
*/
4555
public function __construct(
4656
GetCustomer $getCustomer,
4757
UpdateCustomerAccount $updateCustomerAccount,
48-
ExtractCustomerData $extractCustomerData
58+
ExtractCustomerData $extractCustomerData,
59+
?EmailNotificationInterface $emailNotification = null
4960
) {
5061
$this->getCustomer = $getCustomer;
5162
$this->updateCustomerAccount = $updateCustomerAccount;
5263
$this->extractCustomerData = $extractCustomerData;
64+
$this->emailNotification = $emailNotification
65+
?? ObjectManager::getInstance()->get(EmailNotificationInterface::class);
5366
}
5467

5568
/**
5669
* Resolve customer email update mutation
5770
*
58-
* @param \Magento\Framework\GraphQl\Config\Element\Field $field
59-
* @param \Magento\Framework\GraphQl\Query\Resolver\ContextInterface $context
71+
* @param Field $field
72+
* @param ResolverContext $context
6073
* @param ResolveInfo $info
6174
* @param array|null $value
6275
* @param array|null $args
6376
* @return array|Value
64-
* @throws \Exception
77+
* @throws Exception
6578
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
6679
*/
6780
public function resolve(
@@ -77,6 +90,7 @@ public function resolve(
7790
}
7891

7992
$customer = $this->getCustomer->execute($context);
93+
$customerOriginalEmail = $customer->getEmail();
8094
$customer->setData('ignore_validation_flag', true);
8195
$this->updateCustomerAccount->execute(
8296
$customer,
@@ -86,7 +100,11 @@ public function resolve(
86100
],
87101
$context->getExtensionAttributes()->getStore()
88102
);
89-
103+
$this->emailNotification->credentialsChanged(
104+
$customer,
105+
$customerOriginalEmail,
106+
false
107+
);
90108
return ['customer' => $this->extractCustomerData->execute($customer)];
91109
}
92110
}

app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Cart.php

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2011 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

@@ -15,7 +15,6 @@
1515
* Adminhtml sales order create sidebar cart block
1616
*
1717
* @api
18-
* @author Magento Core Team <[email protected]>
1918
* @since 100.0.2
2019
*/
2120
class Cart extends \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\AbstractSidebar
@@ -59,16 +58,6 @@ public function getItemCollection()
5958
$collection = $this->getData('item_collection');
6059
if ($collection === null) {
6160
$collection = $this->getCreateOrderModel()->getCustomerCart()->getAllVisibleItems();
62-
$transferredItems = $this->getCreateOrderModel()->getSession()->getTransferredItems() ?? [];
63-
$transferredItems = $transferredItems[$this->getDataId()] ?? [];
64-
if (!empty($transferredItems)) {
65-
foreach ($collection as $key => $item) {
66-
if (in_array($item->getId(), $transferredItems)) {
67-
unset($collection[$key]);
68-
}
69-
}
70-
}
71-
7261
$this->setData('item_collection', $collection);
7362
}
7463
return $collection;

app/code/Magento/Sales/Model/AdminOrder/Create.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,25 +2359,22 @@ private function formattedOptions(\Magento\Catalog\Model\Product $product, $buyR
23592359
}
23602360

23612361
/**
2362-
* Remove cart from transferred items and update the qty.
2362+
* Remove cart from transferred items
23632363
*
23642364
* @param int|null|Item $cartItem
23652365
* @param int $itemId
23662366
* @return void
2367+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
2368+
* @see AC-14442
23672369
*/
23682370
private function removeCartTransferredItemsAndUpdateQty(int|null|Item $cartItem, int $itemId)
23692371
{
23702372
$removeCartTransferredItems = $this->getSession()->getTransferredItems() ?? [];
23712373
if (isset($removeCartTransferredItems['cart'])) {
23722374
$removeTransferredItemKey = array_search($cartItem->getId(), $removeCartTransferredItems['cart']);
2373-
if ($removeCartTransferredItems['cart'][$removeTransferredItemKey]) {
2375+
if ($removeTransferredItemKey !== false && $removeCartTransferredItems['cart'][$removeTransferredItemKey]) {
23742376
$cartItem->clearMessage();
23752377
$cartItem->setHasError(false);
2376-
if (isset($this->request->get('item')[$itemId]['qty'])) {
2377-
$qty = $this->request->get('item')[$itemId]['qty'];
2378-
$cartItem->setQty($qty);
2379-
}
2380-
23812378
if ($cartItem->getHasError()) {
23822379
throw new LocalizedException(__($cartItem->getMessage()));
23832380
}

app/code/Magento/Sales/Test/Mftf/Test/CreateOrderFromEditCustomerPageTest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,10 @@
182182
<actionGroup ref="AdminClickUpdateChangesOnCreateOrderPageActionGroup" stepKey="clickOnUpdateButton1"/>
183183
<comment userInput="Comment is added to preserve the step key for backward compatibility" stepKey="waitForAdminCreateOrderShoppingCartSectionPageLoad1"/>
184184

185-
<dontSee selector="{{AdminCreateOrderShoppingCartSection.shoppingCartBlock}}" userInput="$$simpleProduct.name$$" stepKey="donSeeProductInShoppingCart"/>
186-
<dontSee selector="{{AdminCreateOrderShoppingCartSection.shoppingCartBlock}}" userInput="$$simpleProduct1.name$$" stepKey="dontSeeSecondProductInShoppingCart"/>
185+
<comment userInput="Comment is added to preserve the step key for backward compatibility" stepKey="donSeeProductInShoppingCart"/>
186+
<comment userInput="Comment is added to preserve the step key for backward compatibility" stepKey="dontSeeSecondProductInShoppingCart"/>
187+
<see selector="{{AdminCreateOrderShoppingCartSection.shoppingCartBlock}}" userInput="$$simpleProduct.name$$" stepKey="seeProductInShoppingCart2"/>
188+
<see selector="{{AdminCreateOrderShoppingCartSection.shoppingCartBlock}}" userInput="$$simpleProduct1.name$$" stepKey="seeSecondProductInShoppingCart2"/>
187189

188190
<dontSee selector="{{AdminCreateOrderWishListSection.wishListBlock}}" userInput="$$simpleProduct.name$$" stepKey="seeSimpleProductInWishList1"/>
189191
<dontSee selector="{{AdminCreateOrderWishListSection.wishListBlock}}" userInput="$$createConfigProduct.name$$" stepKey="seeConfigurableProductInWishList1"/>

app/code/Magento/Sales/i18n/en_US.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ Subtotal:,Subtotal:
528528
Refresh,Refresh
529529
Item,Item
530530
"Add To Order","Add To Order"
531+
"Add to the new order", "Add to the new order"
531532
"Configure and Add to Order","Configure and Add to Order"
532533
"No items","No items"
533534
"Append Comments","Append Comments"

app/code/Magento/Sales/view/adminhtml/templates/order/create/sidebar/items.phtml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22
/**
3-
* Copyright 2025 Adobe
3+
* Copyright 2013 Adobe
44
* All Rights Reserved.
55
*/
66

@@ -64,9 +64,9 @@ $sideBarPermissionCheck = $block->getData('sideBarPermissionCheck');
6464
<?php endif; ?>
6565

6666
<th class="col-add">
67-
<span title="<?= $escaper->escapeHtml(__('Add To Order')) ?>"
67+
<span title="<?= $escaper->escapeHtml(__('Add to the new order')) ?>"
6868
class="icon icon-add">
69-
<span><?= $escaper->escapeHtml(__('Add To Order')) ?></span>
69+
<span><?= $escaper->escapeHtml(__('Add to the new order')) ?></span>
7070
</span>
7171
</th>
7272
</tr>
@@ -145,7 +145,7 @@ $sideBarPermissionCheck = $block->getData('sideBarPermissionCheck');
145145
name="sidebar[<?= $escaper->escapeHtmlAttr($block->getSidebarStorageAction())
146146
?>][<?= (int) $block->getIdentifierId($_item) ?>]"
147147
value="<?= $block->canDisplayItemQty() ? (float) $_item->getQty() : 1 ?>"
148-
title="<?= $escaper->escapeHtml(__('Add To Order')) ?>"/>
148+
title="<?= $escaper->escapeHtml(__('Add to the new order')) ?>"/>
149149
<label class="admin__field-label"
150150
for="sidebar-<?= $escaper->escapeHtmlAttr($block->getSidebarStorageAction())
151151
?>-<?= (int) $block->getIdentifierId($_item) ?>">

app/code/Magento/SalesGraphQl/Model/Resolver/Reorder.php

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2020 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

@@ -11,6 +11,7 @@
1111
use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
1212
use Magento\Framework\GraphQl\Query\ResolverInterface;
1313
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
14+
use Magento\Framework\Lock\LockManagerInterface;
1415
use Magento\GraphQl\Model\Query\ContextInterface;
1516
use Magento\Sales\Model\Reorder\Data\Error;
1617
use Magento\Sales\Model\OrderFactory;
@@ -26,6 +27,10 @@ class Reorder implements ResolverInterface
2627
*/
2728
private const ARGUMENT_ORDER_NUMBER = 'orderNumber';
2829

30+
private const LOCK_PREFIX = 'reorder_lock_';
31+
32+
private const LOCK_TIMEOUT = 60;
33+
2934
/**
3035
* @var OrderFactory
3136
*/
@@ -36,16 +41,24 @@ class Reorder implements ResolverInterface
3641
*/
3742
private $reorder;
3843

44+
/**
45+
* @var LockManagerInterface
46+
*/
47+
private $lockManager;
48+
3949
/**
4050
* @param \Magento\Sales\Model\Reorder\Reorder $reorder
4151
* @param OrderFactory $orderFactory
52+
* @param LockManagerInterface $lockManager
4253
*/
4354
public function __construct(
4455
\Magento\Sales\Model\Reorder\Reorder $reorder,
45-
OrderFactory $orderFactory
56+
OrderFactory $orderFactory,
57+
LockManagerInterface $lockManager
4658
) {
4759
$this->orderFactory = $orderFactory;
4860
$this->reorder = $reorder;
61+
$this->lockManager = $lockManager;
4962
}
5063

5164
/**
@@ -74,7 +87,18 @@ public function resolve(
7487
);
7588
}
7689

77-
$reorderOutput = $this->reorder->execute($orderNumber, $storeId);
90+
$lockName = hash('sha256', $orderNumber);
91+
if ($this->lockManager->lock(self::LOCK_PREFIX . $lockName, self::LOCK_TIMEOUT)) {
92+
try {
93+
$reorderOutput = $this->reorder->execute($orderNumber, $storeId);
94+
} finally {
95+
$this->lockManager->unlock(self::LOCK_PREFIX . $lockName);
96+
}
97+
} else {
98+
throw new \Magento\Framework\Exception\LocalizedException(
99+
__('Sorry, there has been an error processing your request. Please try again later.')
100+
);
101+
}
78102

79103
return [
80104
'cart' => [

0 commit comments

Comments
 (0)