Skip to content

Commit 21380e1

Browse files
authored
Merge branch '2.4.5-develop' into DHL-AC-3145-JUNE-3-2022
2 parents 3544179 + d60c7ed commit 21380e1

File tree

21 files changed

+496
-217
lines changed

21 files changed

+496
-217
lines changed

app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewConditionHtml.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
*/
77
namespace Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog;
88

9+
use Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog as CatalogAction;
910
use Magento\Framework\App\Action\HttpGetActionInterface;
1011
use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
1112
use Magento\Rule\Model\Condition\AbstractCondition;
12-
use Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog as CatalogAction;
13+
use Magento\Rule\Model\Condition\ConditionInterface;
1314

1415
class NewConditionHtml extends CatalogAction implements HttpPostActionInterface, HttpGetActionInterface
1516
{
@@ -25,6 +26,12 @@ public function execute()
2526
$typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type', '')));
2627
$type = $typeArr[0];
2728

29+
if (class_exists($type) && !in_array(ConditionInterface::class, class_implements($type))) {
30+
$html = '';
31+
$this->getResponse()->setBody($html);
32+
return;
33+
}
34+
2835
$model = $this->_objectManager->create($type)
2936
->setId($id)
3037
->setType($type)

app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Checkout\Controller\Sidebar;
79

810
use Magento\Checkout\Model\Cart\RequestQuantityProcessor;
@@ -16,6 +18,9 @@
1618
use Psr\Log\LoggerInterface;
1719
use Magento\Framework\App\Action\HttpPostActionInterface;
1820

21+
/**
22+
* Class used to update item quantity.
23+
*/
1924
class UpdateItemQty extends Action implements HttpPostActionInterface
2025
{
2126
/**
@@ -68,6 +73,10 @@ public function execute()
6873
{
6974
$itemId = (int)$this->getRequest()->getParam('item_id');
7075
$itemQty = (float)$this->getRequest()->getParam('item_qty') * 1;
76+
77+
if ($itemQty <= 0) {
78+
return $this->jsonResponse(__('Invalid Item Quantity Requested.'));
79+
}
7180
$itemQty = $this->quantityProcessor->prepareQuantity($itemQty);
7281

7382
try {

app/code/Magento/Checkout/Model/DefaultConfigProvider.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
use Magento\Quote\Model\QuoteIdMaskFactory;
3232
use Magento\Store\Model\ScopeInterface;
3333
use Magento\Ui\Component\Form\Element\Multiline;
34+
use Magento\Framework\Escaper;
3435

3536
/**
3637
* Default Config Provider for checkout
@@ -191,6 +192,11 @@ class DefaultConfigProvider implements ConfigProviderInterface
191192
*/
192193
private $configPostProcessor;
193194

195+
/**
196+
* @var Escaper
197+
*/
198+
private $escaper;
199+
194200
/**
195201
* @param CheckoutHelper $checkoutHelper
196202
* @param Session $checkoutSession
@@ -222,6 +228,7 @@ class DefaultConfigProvider implements ConfigProviderInterface
222228
* @param AddressMetadataInterface $addressMetadata
223229
* @param AttributeOptionManagementInterface $attributeOptionManager
224230
* @param CustomerAddressDataProvider|null $customerAddressData
231+
* @param Escaper|null $escaper
225232
* @codeCoverageIgnore
226233
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
227234
*/
@@ -255,7 +262,8 @@ public function __construct(
255262
CaptchaConfigPostProcessorInterface $configPostProcessor,
256263
AddressMetadataInterface $addressMetadata = null,
257264
AttributeOptionManagementInterface $attributeOptionManager = null,
258-
CustomerAddressDataProvider $customerAddressData = null
265+
CustomerAddressDataProvider $customerAddressData = null,
266+
Escaper $escaper = null
259267
) {
260268
$this->checkoutHelper = $checkoutHelper;
261269
$this->checkoutSession = $checkoutSession;
@@ -289,6 +297,7 @@ public function __construct(
289297
$this->customerAddressData = $customerAddressData ?:
290298
ObjectManager::getInstance()->get(CustomerAddressDataProvider::class);
291299
$this->configPostProcessor = $configPostProcessor;
300+
$this->escaper = $escaper ?? ObjectManager::getInstance()->get(Escaper::class);
292301
}
293302

294303
/**
@@ -343,6 +352,7 @@ public function getConfig()
343352
'shipping/shipping_policy/shipping_policy_content',
344353
ScopeInterface::SCOPE_STORE
345354
);
355+
$policyContent = $this->escaper->escapeHtml($policyContent);
346356
$output['shippingPolicy'] = [
347357
'isEnabled' => $this->scopeConfig->isSetFlag(
348358
'shipping/shipping_policy/enable_shipping_policy',

app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
use PHPUnit\Framework\TestCase;
2020
use Psr\Log\LoggerInterface;
2121

22+
/**
23+
* Class used to execute test cases for update item quantity
24+
*/
2225
class UpdateItemQtyTest extends TestCase
2326
{
2427
/**
@@ -248,43 +251,32 @@ public function testExecuteWithException(): void
248251
/**
249252
* @return void
250253
*/
251-
public function testExecuteWithWrongRequestParams(): void
254+
public function testExecuteWithInvalidItemQty(): void
252255
{
256+
$error = [
257+
'success' => false,
258+
'error_message' => 'Invalid Item Quantity Requested.'
259+
];
260+
$jsonResult = json_encode($error);
253261
$this->requestMock
254262
->method('getParam')
255-
->withConsecutive(['item_id'], ['item_qty'])
256-
->willReturnOnConsecutiveCalls(0, 'error');
257-
258-
$this->sidebarMock->expects($this->once())
259-
->method('checkQuoteItem')
260-
->with(0)
261-
->willThrowException(new LocalizedException(__('Error!')));
263+
->withConsecutive(['item_id', null], ['item_qty', null])
264+
->willReturnOnConsecutiveCalls('1', '{{7+2}}');
262265

263266
$this->sidebarMock->expects($this->once())
264267
->method('getResponseData')
265-
->with('Error!')
266-
->willReturn(
267-
[
268-
'success' => false,
269-
'error_message' => 'Error!'
270-
]
271-
);
268+
->with('Invalid Item Quantity Requested.')
269+
->willReturn($error);
272270

273271
$this->jsonHelperMock->expects($this->once())
274272
->method('jsonEncode')
275-
->with(
276-
[
277-
'success' => false,
278-
'error_message' => 'Error!'
279-
]
280-
)
281-
->willReturn('json encoded');
273+
->with($error)
274+
->willReturn($jsonResult);
282275

283276
$this->responseMock->expects($this->once())
284277
->method('representJson')
285-
->with('json encoded')
286-
->willReturn('json represented');
278+
->willReturn($jsonResult);
287279

288-
$this->assertEquals('json represented', $this->updateItemQty->execute());
280+
$this->assertEquals($jsonResult, $this->updateItemQty->execute());
289281
}
290282
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,4 @@ Payment,Payment
186186
"Show Cross-sell Items in the Shopping Cart","Show Cross-sell Items in the Shopping Cart"
187187
"You added %1 to your <a href=""%2"">shopping cart</a>.","You added %1 to your <a href=""%2"">shopping cart</a>."
188188
"The shipping method is missing. Select the shipping method and try again.","The shipping method is missing. Select the shipping method and try again."
189+
"Invalid Item Quantity Requested.","Invalid Item Quantity Requested."

app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php

Lines changed: 43 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -17,46 +17,46 @@
1717
*/
1818
class Custom extends \Magento\Framework\App\Config\Value
1919
{
20-
const CONFIG_SCOPE = 'stores';
20+
public const CONFIG_SCOPE = 'stores';
2121

22-
const CONFIG_SCOPE_ID = 0;
22+
public const CONFIG_SCOPE_ID = 0;
2323

24-
const XML_PATH_UNSECURE_BASE_URL = 'web/unsecure/base_url';
25-
const XML_PATH_SECURE_BASE_URL = 'web/secure/base_url';
26-
const XML_PATH_UNSECURE_BASE_LINK_URL = 'web/unsecure/base_link_url';
27-
const XML_PATH_SECURE_BASE_LINK_URL = 'web/secure/base_link_url';
28-
const XML_PATH_CURRENCY_OPTIONS_BASE = 'currency/options/base';
29-
const XML_PATH_ADMIN_SECURITY_USEFORMKEY = 'admin/security/use_form_key';
30-
const XML_PATH_MAINTENANCE_MODE = 'maintenance_mode';
31-
const XML_PATH_WEB_COOKIE_COOKIE_LIFETIME = 'web/cookie/cookie_lifetime';
24+
public const XML_PATH_UNSECURE_BASE_URL = 'web/unsecure/base_url';
25+
public const XML_PATH_SECURE_BASE_URL = 'web/secure/base_url';
26+
public const XML_PATH_UNSECURE_BASE_LINK_URL = 'web/unsecure/base_link_url';
27+
public const XML_PATH_SECURE_BASE_LINK_URL = 'web/secure/base_link_url';
28+
public const XML_PATH_CURRENCY_OPTIONS_BASE = 'currency/options/base';
29+
public const XML_PATH_ADMIN_SECURITY_USEFORMKEY = 'admin/security/use_form_key';
30+
public const XML_PATH_MAINTENANCE_MODE = 'maintenance_mode';
31+
public const XML_PATH_WEB_COOKIE_COOKIE_LIFETIME = 'web/cookie/cookie_lifetime';
3232
/**
3333
* @deprecated Misspelled constant - use XML_PATH_WEB_COOKIE_COOKIE_PATH instead
3434
*/
35-
const XML_PATH_WEB_COOKIE_COOKE_PATH = 'web/cookie/cookie_path';
36-
const XML_PATH_WEB_COOKIE_COOKIE_PATH = 'web/cookie/cookie_path';
37-
const XML_PATH_WEB_COOKIE_COOKIE_DOMAIN = 'web/cookie/cookie_domain';
38-
const XML_PATH_WEB_COOKIE_HTTPONLY = 'web/cookie/cookie_httponly';
39-
const XML_PATH_WEB_COOKIE_RESTRICTION = 'web/cookie/cookie_restriction';
40-
const XML_PATH_GENERAL_LOCALE_TIMEZONE = 'general/locale/timezone';
41-
const XML_PATH_GENERAL_LOCALE_CODE = 'general/locale/code';
42-
const XML_PATH_GENERAL_COUNTRY_DEFAULT = 'general/country/default';
43-
const XML_PATH_SYSTEM_BACKUP_ENABLED = 'system/backup/enabled';
44-
const XML_PATH_DEV_JS_MERGE_FILES = 'dev/js/merge_files';
45-
const XML_PATH_DEV_JS_MINIFY_FILES = 'dev/js/minify_files';
46-
const XML_PATH_DEV_CSS_MERGE_CSS_FILES = 'dev/css/merge_css_files';
47-
const XML_PATH_DEV_CSS_MINIFY_FILES = 'dev/css/minify_files';
48-
const XML_PATH_DEV_IMAGE_DEFAULT_ADAPTER = 'dev/image/default_adapter';
49-
const XML_PATH_WEB_SESSION_USE_FRONTEND_SID = 'web/session/use_frontend_sid';
50-
const XML_PATH_WEB_SESSION_USE_HTTP_X_FORWARDED_FOR = 'web/session/use_http_x_forwarded_for';
51-
const XML_PATH_WEB_SESSION_USE_HTTP_VIA = 'web/session/use_http_via';
52-
const XML_PATH_WEB_SESSION_USE_REMOTE_ADDR = 'web/session/use_remote_addr';
53-
const XML_PATH_WEB_SESSION_USE_HTTP_USER_AGENT = 'web/session/use_http_user_agent';
54-
const XML_PATH_CATALOG_FRONTEND_FLAT_CATALOG_CATEGORY = 'catalog/frontend/flat_catalog_category';
55-
const XML_PATH_CATALOG_FRONTEND_FLAT_CATALOG_PRODUCT = 'catalog/frontend/flat_catalog_product';
56-
const XML_PATH_TAX_WEEE_ENABLE = 'tax/weee/enable';
57-
const XML_PATH_CATALOG_SEARCH_ENGINE = 'catalog/search/engine';
58-
const XML_PATH_CARRIERS = 'carriers';
59-
const XML_PATH_PAYMENT = 'payment';
35+
public const XML_PATH_WEB_COOKIE_COOKE_PATH = 'web/cookie/cookie_path';
36+
public const XML_PATH_WEB_COOKIE_COOKIE_PATH = 'web/cookie/cookie_path';
37+
public const XML_PATH_WEB_COOKIE_COOKIE_DOMAIN = 'web/cookie/cookie_domain';
38+
public const XML_PATH_WEB_COOKIE_HTTPONLY = 'web/cookie/cookie_httponly';
39+
public const XML_PATH_WEB_COOKIE_RESTRICTION = 'web/cookie/cookie_restriction';
40+
public const XML_PATH_GENERAL_LOCALE_TIMEZONE = 'general/locale/timezone';
41+
public const XML_PATH_GENERAL_LOCALE_CODE = 'general/locale/code';
42+
public const XML_PATH_GENERAL_COUNTRY_DEFAULT = 'general/country/default';
43+
public const XML_PATH_SYSTEM_BACKUP_ENABLED = 'system/backup/enabled';
44+
public const XML_PATH_DEV_JS_MERGE_FILES = 'dev/js/merge_files';
45+
public const XML_PATH_DEV_JS_MINIFY_FILES = 'dev/js/minify_files';
46+
public const XML_PATH_DEV_CSS_MERGE_CSS_FILES = 'dev/css/merge_css_files';
47+
public const XML_PATH_DEV_CSS_MINIFY_FILES = 'dev/css/minify_files';
48+
public const XML_PATH_DEV_IMAGE_DEFAULT_ADAPTER = 'dev/image/default_adapter';
49+
public const XML_PATH_WEB_SESSION_USE_FRONTEND_SID = 'web/session/use_frontend_sid';
50+
public const XML_PATH_WEB_SESSION_USE_HTTP_X_FORWARDED_FOR = 'web/session/use_http_x_forwarded_for';
51+
public const XML_PATH_WEB_SESSION_USE_HTTP_VIA = 'web/session/use_http_via';
52+
public const XML_PATH_WEB_SESSION_USE_REMOTE_ADDR = 'web/session/use_remote_addr';
53+
public const XML_PATH_WEB_SESSION_USE_HTTP_USER_AGENT = 'web/session/use_http_user_agent';
54+
public const XML_PATH_CATALOG_FRONTEND_FLAT_CATALOG_CATEGORY = 'catalog/frontend/flat_catalog_category';
55+
public const XML_PATH_CATALOG_FRONTEND_FLAT_CATALOG_PRODUCT = 'catalog/frontend/flat_catalog_product';
56+
public const XML_PATH_TAX_WEEE_ENABLE = 'tax/weee/enable';
57+
public const XML_PATH_CATALOG_SEARCH_ENGINE = 'catalog/search/engine';
58+
public const XML_PATH_CARRIERS = 'carriers';
59+
public const XML_PATH_PAYMENT = 'payment';
6060

6161
/**
6262
* @var \Magento\Framework\App\Config\Storage\WriterInterface
@@ -119,18 +119,16 @@ public function afterSave()
119119
}
120120

121121
if ($useCustomUrl == 1) {
122-
$this->_configWriter->save(
122+
$paths = [
123123
self::XML_PATH_SECURE_BASE_URL,
124-
$value,
125-
self::CONFIG_SCOPE,
126-
self::CONFIG_SCOPE_ID
127-
);
128-
$this->_configWriter->save(
129124
self::XML_PATH_UNSECURE_BASE_URL,
130-
$value,
131-
self::CONFIG_SCOPE,
132-
self::CONFIG_SCOPE_ID
133-
);
125+
self::XML_PATH_SECURE_BASE_LINK_URL,
126+
self::XML_PATH_UNSECURE_BASE_LINK_URL,
127+
];
128+
129+
foreach ($paths as $path) {
130+
$this->_configWriter->save($path, $value, self::CONFIG_SCOPE, self::CONFIG_SCOPE_ID);
131+
}
134132
}
135133

136134
return parent::afterSave();

app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,16 @@ public function afterSave()
7878
$value = $this->getValue();
7979

8080
if (!$value) {
81-
$this->_configWriter->delete(
81+
$paths = [
8282
Custom::XML_PATH_SECURE_BASE_URL,
83-
Custom::CONFIG_SCOPE,
84-
Custom::CONFIG_SCOPE_ID
85-
);
86-
$this->_configWriter->delete(
8783
Custom::XML_PATH_UNSECURE_BASE_URL,
88-
Custom::CONFIG_SCOPE,
89-
Custom::CONFIG_SCOPE_ID
90-
);
84+
Custom::XML_PATH_SECURE_BASE_LINK_URL,
85+
Custom::XML_PATH_UNSECURE_BASE_LINK_URL,
86+
];
87+
88+
foreach ($paths as $path) {
89+
$this->_configWriter->delete($path, Custom::CONFIG_SCOPE, Custom::CONFIG_SCOPE_ID);
90+
}
9191
}
9292

9393
return parent::afterSave();

0 commit comments

Comments
 (0)