Skip to content

Commit 686ec6f

Browse files
[Magento Community Engineering] Community Contributions - 2.4-develop
- merged latest code from mainline branch
2 parents 3e26cd0 + d7ff26b commit 686ec6f

File tree

6 files changed

+111
-29
lines changed

6 files changed

+111
-29
lines changed

app/code/Magento/Backend/view/adminhtml/templates/widget/tabshoriz.phtml

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,52 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
7+
use Magento\Framework\Escaper;
8+
use Magento\Framework\View\Helper\SecureHtmlRenderer;
9+
10+
/**
11+
* @var SecureHtmlRenderer $secureRenderer
12+
* @var Escaper $escaper
13+
*/
814
?>
9-
<!-- <?php if ($block->getTitle()): ?>
10-
<h3><?= $block->escapeHtml($block->getTitle()) ?></h3>
11-
<?php endif ?> -->
1215
<?php if (!empty($tabs)): ?>
13-
<div id="<?= $block->escapeHtmlAttr($block->getId()) ?>">
16+
<?php $blockId = $block->getId() ?>
17+
<div id="<?= $escaper->escapeHtmlAttr($blockId) ?>" class="hidden">
1418
<ul class="tabs-horiz">
1519
<?php foreach ($tabs as $_tab): ?>
20+
<?php $tabId = $block->getTabId($_tab) ?>
1621
<?php $_tabClass = 'tab-item-link ' . $block->getTabClass($_tab) . ' ' .
1722
(preg_match('/\s?ajax\s?/', $_tab->getClass()) ? 'notloaded' : '') ?>
1823
<?php $_tabType = (!preg_match('/\s?ajax\s?/', $_tabClass) && $block->getTabUrl($_tab) != '#') ? 'link' : '' ?>
1924
<?php $_tabHref = $block->getTabUrl($_tab) == '#' ?
20-
'#' . $block->getTabId($_tab) . '_content' :
25+
'#' . $tabId . '_content' :
2126
$block->getTabUrl($_tab) ?>
2227
<li>
23-
<a href="<?= $block->escapeUrl($_tabHref) ?>"
24-
id="<?= $block->escapeHtmlAttr($block->getTabId($_tab)) ?>"
25-
title="<?= $block->escapeHtmlAttr($block->getTabTitle($_tab)) ?>"
26-
class="<?= $block->escapeHtmlAttr($_tabClass) ?>"
27-
data-tab-type="<?= $block->escapeHtmlAttr($_tabType) ?>">
28+
<a href="<?= $escaper->escapeUrl($_tabHref) ?>"
29+
id="<?= $escaper->escapeHtmlAttr($tabId) ?>"
30+
title="<?= $escaper->escapeHtmlAttr($block->getTabTitle($_tab)) ?>"
31+
class="<?= $escaper->escapeHtmlAttr($_tabClass) ?>"
32+
data-tab-type="<?= $escaper->escapeHtmlAttr($_tabType) ?>">
2833
<span>
2934
<span class="changed"
30-
title="<?= $block->escapeHtmlAttr(__('The information in this tab has been changed.')) ?>"></span>
35+
title="<?= $escaper->escapeHtmlAttr(__(
36+
'The information in this tab has been changed.'
37+
)) ?>"></span>
3138
<span class="error"
32-
title="<?= $block->escapeHtmlAttr(__(
39+
title="<?= $escaper->escapeHtmlAttr(__(
3340
'This tab contains invalid data. Please resolve this before saving.'
3441
)) ?>"></span>
3542
<span class="loader"
36-
title="<?= $block->escapeHtmlAttr(__('Loading...')) ?>"></span>
37-
<?= $block->escapeHtml($block->getTabLabel($_tab)) ?>
43+
title="<?= $escaper->escapeHtmlAttr(__('Loading...')) ?>"></span>
44+
<?= $escaper->escapeHtml($block->getTabLabel($_tab)) ?>
3845
</span>
3946
</a>
40-
<div id="<?= $block->escapeHtmlAttr($block->getTabId($_tab)) ?>_content">
47+
<div id="<?= $escaper->escapeHtmlAttr($tabId) ?>_content">
4148
<?= /* @noEscape */ $block->getTabContent($_tab) ?>
4249
</div>
4350
<?= /* @noEscape */ $secureRenderer->renderStyleAsTag(
4451
'display:none',
45-
'#' . $block->escapeJs($block->getTabId($_tab)) . '_content'
52+
'#' . $escaper->escapeJs($tabId) . '_content'
4653
); ?>
4754
</li>
4855
<?php endforeach; ?>
@@ -51,11 +58,12 @@
5158
<?php $scriptString = <<<script
5259
require(["jquery","mage/backend/tabs"], function($){
5360
$(function() {
54-
$('#{$block->getId()}').tabs({
55-
active: '{$block->getActiveTabId()}',
56-
destination: '#{$block->getDestElementId()}',
61+
$('#{$escaper->escapeJs($blockId)}').tabs({
62+
active: '{$escaper->escapeJs($block->getActiveTabId())}',
63+
destination: '#{$escaper->escapeJs($block->getDestElementId())}',
5764
shadowTabs: {$block->getAllShadowTabs()}
5865
});
66+
$('#{$escaper->escapeJs($blockId)}').removeClass('hidden');
5967
});
6068
});
6169
script;
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="AdminDeleteBundleDynamicPriceProductTest">
11+
<annotations>
12+
<features value="Bundle"/>
13+
<stories value="Delete products"/>
14+
<title value="Delete Bundle Dynamic Product"/>
15+
<description value="Admin should be able to delete a bundle dynamic product"/>
16+
<severity value="CRITICAL"/>
17+
<testCaseId value="MC-26056"/>
18+
<group value="mtf_migrated"/>
19+
<group value="bundle"/>
20+
</annotations>
21+
<before>
22+
<!-- Create category and simple product -->
23+
<createData entity="SimpleSubCategory" stepKey="createCategory"/>
24+
<createData entity="SimpleProduct2" stepKey="createSimpleProduct"/>
25+
26+
<!-- Create bundle product -->
27+
<createData entity="ApiBundleProductPriceViewRange" stepKey="createDynamicBundleProduct">
28+
<requiredEntity createDataKey="createCategory"/>
29+
</createData>
30+
<createData entity="DropDownBundleOption" stepKey="bundleOption">
31+
<requiredEntity createDataKey="createDynamicBundleProduct"/>
32+
</createData>
33+
<createData entity="ApiBundleLink" stepKey="createNewBundleLink">
34+
<requiredEntity createDataKey="createDynamicBundleProduct"/>
35+
<requiredEntity createDataKey="bundleOption"/>
36+
<requiredEntity createDataKey="createSimpleProduct"/>
37+
</createData>
38+
<!-- TODO: Remove this action when MC-37719 will be fixed -->
39+
<actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindexInvalidatedIndices">
40+
<argument name="indices" value="cataloginventory_stock"/>
41+
</actionGroup>
42+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
43+
</before>
44+
<after>
45+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
46+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
47+
<magentoCron groups="index" stepKey="reindexInvalidatedIndices"/>
48+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
49+
</after>
50+
<actionGroup ref="DeleteProductBySkuActionGroup" stepKey="deleteBundleProductBySku">
51+
<argument name="sku" value="$createDynamicBundleProduct.sku$"/>
52+
</actionGroup>
53+
<!-- Verify product on Product Page -->
54+
<amOnPage url="{{StorefrontProductPage.url($createDynamicBundleProduct.custom_attributes[url_key]$)}}" stepKey="openBundleProductPage"/>
55+
<see selector="{{StorefrontProductInfoMainSection.productName}}" userInput="Whoops, our bad..." stepKey="seeWhoopsMessage"/>
56+
<!-- Search for the product by sku -->
57+
<actionGroup ref="StoreFrontQuickSearchActionGroup" stepKey="searchBySku">
58+
<argument name="query" value="$createDynamicBundleProduct.sku$"/>
59+
</actionGroup>
60+
<!-- Should not see bundle product -->
61+
<dontSee userInput="$createDynamicBundleProduct.sku$" selector="{{StorefrontCatalogSearchMainSection.searchResults}}" stepKey="dontSeeProduct"/>
62+
<amOnPage url="{{StorefrontCategoryPage.url($createCategory.custom_attributes[url_key]$)}}" stepKey="openCategoryPage"/>
63+
<!-- Should not see any products in category -->
64+
<dontSee userInput="$createDynamicBundleProduct.name$" selector="{{StorefrontCategoryMainSection.productsList}}" stepKey="dontSeeProductInCategory"/>
65+
<see selector="{{StorefrontCategoryMainSection.emptyProductMessage}}" userInput="We can't find products matching the selection." stepKey="seeEmptyProductMessage"/>
66+
</test>
67+
</tests>

app/code/Magento/Bundle/Test/Mftf/Test/AdminDeleteBundleDynamicProductTest.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
-->
88
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
99
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10-
<test name="AdminDeleteBundleDynamicProductTest">
10+
<test name="AdminDeleteBundleDynamicProductTest" deprecated="Use AdminDeleteBundleDynamicPriceProductTest instead">
1111
<annotations>
1212
<features value="Bundle"/>
1313
<stories value="Delete products"/>
14-
<title value="Delete Bundle Dynamic Product"/>
15-
<description value="Admin should be able to delete a bundle dynamic product"/>
14+
<title value="Deprecated. Delete Bundle Dynamic Product"/>
15+
<description value="Deprecated. Admin should be able to delete a bundle dynamic product"/>
1616
<severity value="CRITICAL"/>
1717
<testCaseId value="MC-11016"/>
1818
<group value="mtf_migrated"/>
1919
<skip>
20-
<issueId value="MC-16393"/>
20+
<issueId value="DEPRECATED">Use AdminDeleteBundleDynamicPriceProductTest instead</issueId>
2121
</skip>
2222
</annotations>
2323
<before>

app/code/Magento/Customer/view/adminhtml/web/js/form/components/insert-listing.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ define([
7272
},
7373

7474
/**
75-
* Delete customer address by ids
75+
* Delete customer address and selections by provided ids.
7676
*
7777
* @param {Array} ids
7878
*/
@@ -87,6 +87,10 @@ define([
8787
if (ids.indexOf(defaultBillingId) !== -1) {
8888
this.source.set('data.default_billing_address', []);
8989
}
90+
91+
_.each(ids, function (id) {
92+
this.selections().deselect(id.toString(), false);
93+
}, this);
9094
}
9195
});
9296
});

app/code/Magento/ProductVideo/view/adminhtml/templates/helper/gallery.phtml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,8 @@ $elementToggleCode = $element->getToggleCode() ? $element->getToggleCode():
268268
</fieldset>
269269
</div>
270270
</script>
271-
<div id="new_video_<?= /* @noEscape */ $block->getNewVideoBlockName() ?>">
271+
<?php $videoBlockId = "new_video_" . $block->getHtmlId() . rand(); ?>
272+
<div id="<?= /* @noEscape */ $videoBlockId ?>">
272273
<?= $block->getFormHtml() ?>
273274
<div id="video-player-preview-location" class="video-player-sidebar">
274275
<div class="video-player-container"></div>
@@ -288,7 +289,7 @@ $elementToggleCode = $element->getToggleCode() ? $element->getToggleCode():
288289
</div>
289290
<?= /* @noEscape */ $secureRenderer->renderStyleAsTag(
290291
'display:none',
291-
'div#new_video_' . /* @noEscape */ $block->getNewVideoBlockName()
292+
'div#' . $videoBlockId
292293
) ?>
293294

294295
<?= $block->getChildHtml('new-video') ?>

dev/tests/js/jasmine/tests/app/code/Magento/Customer/adminhtml/js/view/form/components/insert-listing.test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ define(['Magento_Customer/js/form/components/insert-listing'], function (Constr)
1818
}
1919
},
2020
selectionsProvider = {
21-
selected: jasmine.createSpy().and.returnValue(ids)
21+
selected: jasmine.createSpy().and.returnValue(ids),
22+
deselect: jasmine.createSpy()
2223
};
2324

2425
beforeEach(function () {
@@ -54,7 +55,7 @@ define(['Magento_Customer/js/form/components/insert-listing'], function (Constr)
5455
expect(obj._delete).toHaveBeenCalledWith([1, 2]);
5556
});
5657

57-
it('Check removal of default addresses', function () {
58+
it('Check removal of default addresses and selections by provided ids', function () {
5859
obj.source = {
5960
get: jasmine.createSpy().and.returnValues(2, 3),
6061
set: jasmine.createSpy()
@@ -64,6 +65,7 @@ define(['Magento_Customer/js/form/components/insert-listing'], function (Constr)
6465
expect(selectionsProvider.selected).not.toHaveBeenCalled();
6566
expect(obj.source.get.calls.count()).toEqual(2);
6667
expect(obj.source.set.calls.count()).toEqual(1);
68+
expect(selectionsProvider.deselect.calls.count()).toEqual(2);
6769
});
6870
});
6971
});

0 commit comments

Comments
 (0)