Skip to content

Commit 9a780a8

Browse files
[Magento Community Engineering] Community Contributions - 2.3-develop
- merged latest code from mainline branch
2 parents 976188b + 484cc98 commit 9a780a8

File tree

17 files changed

+319
-94
lines changed

17 files changed

+319
-94
lines changed

app/code/Magento/Catalog/Model/Category/Tree.php

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,16 @@
55
*/
66
namespace Magento\Catalog\Model\Category;
77

8+
use Magento\Catalog\Api\Data\CategoryTreeInterface;
9+
use Magento\Catalog\Api\Data\CategoryTreeInterfaceFactory;
10+
use Magento\Catalog\Model\Category;
11+
use Magento\Catalog\Model\ResourceModel\Category\Collection;
12+
use Magento\Catalog\Model\ResourceModel\Category\TreeFactory;
13+
use Magento\Framework\App\ObjectManager;
814
use Magento\Framework\Data\Tree\Node;
15+
use Magento\Framework\Exception\LocalizedException;
16+
use Magento\Framework\Exception\NoSuchEntityException;
17+
use Magento\Store\Model\StoreManagerInterface;
918

1019
/**
1120
* Retrieve category data represented in tree structure
@@ -18,54 +27,54 @@ class Tree
1827
protected $categoryTree;
1928

2029
/**
21-
* @var \Magento\Store\Model\StoreManagerInterface
30+
* @var StoreManagerInterface
2231
*/
2332
protected $storeManager;
2433

2534
/**
26-
* @var \Magento\Catalog\Model\ResourceModel\Category\Collection
35+
* @var Collection
2736
*/
2837
protected $categoryCollection;
2938

3039
/**
31-
* @var \Magento\Catalog\Api\Data\CategoryTreeInterfaceFactory
40+
* @var CategoryTreeInterfaceFactory
3241
*/
3342
protected $treeFactory;
3443

3544
/**
36-
* @var \Magento\Catalog\Model\ResourceModel\Category\TreeFactory
45+
* @var TreeFactory
3746
*/
3847
private $treeResourceFactory;
3948

4049
/**
4150
* @param \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree
42-
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
43-
* @param \Magento\Catalog\Model\ResourceModel\Category\Collection $categoryCollection
44-
* @param \Magento\Catalog\Api\Data\CategoryTreeInterfaceFactory $treeFactory
45-
* @param \Magento\Catalog\Model\ResourceModel\Category\TreeFactory|null $treeResourceFactory
51+
* @param StoreManagerInterface $storeManager
52+
* @param Collection $categoryCollection
53+
* @param CategoryTreeInterfaceFactory $treeFactory
54+
* @param TreeFactory|null $treeResourceFactory
4655
*/
4756
public function __construct(
4857
\Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree,
49-
\Magento\Store\Model\StoreManagerInterface $storeManager,
50-
\Magento\Catalog\Model\ResourceModel\Category\Collection $categoryCollection,
51-
\Magento\Catalog\Api\Data\CategoryTreeInterfaceFactory $treeFactory,
52-
\Magento\Catalog\Model\ResourceModel\Category\TreeFactory $treeResourceFactory = null
58+
StoreManagerInterface $storeManager,
59+
Collection $categoryCollection,
60+
CategoryTreeInterfaceFactory $treeFactory,
61+
TreeFactory $treeResourceFactory = null
5362
) {
5463
$this->categoryTree = $categoryTree;
5564
$this->storeManager = $storeManager;
5665
$this->categoryCollection = $categoryCollection;
5766
$this->treeFactory = $treeFactory;
58-
$this->treeResourceFactory = $treeResourceFactory ?? \Magento\Framework\App\ObjectManager::getInstance()
59-
->get(\Magento\Catalog\Model\ResourceModel\Category\TreeFactory::class);
67+
$this->treeResourceFactory = $treeResourceFactory ?? ObjectManager::getInstance()
68+
->get(TreeFactory::class);
6069
}
6170

6271
/**
6372
* Get root node by category.
6473
*
65-
* @param \Magento\Catalog\Model\Category|null $category
74+
* @param Category|null $category
6675
* @return Node|null
67-
* @throws \Magento\Framework\Exception\LocalizedException
68-
* @throws \Magento\Framework\Exception\NoSuchEntityException
76+
* @throws LocalizedException
77+
* @throws NoSuchEntityException
6978
*/
7079
public function getRootNode($category = null)
7180
{
@@ -86,28 +95,28 @@ public function getRootNode($category = null)
8695
/**
8796
* Get node by category.
8897
*
89-
* @param \Magento\Catalog\Model\Category $category
98+
* @param Category $category
9099
* @return Node
91-
* @throws \Magento\Framework\Exception\LocalizedException
92-
* @throws \Magento\Framework\Exception\NoSuchEntityException
100+
* @throws LocalizedException
101+
* @throws NoSuchEntityException
93102
*/
94-
protected function getNode(\Magento\Catalog\Model\Category $category)
103+
protected function getNode(Category $category)
95104
{
96105
$nodeId = $category->getId();
97106
$categoryTree = $this->treeResourceFactory->create();
98107
$node = $categoryTree->loadNode($nodeId);
99108
$node->loadChildren();
100109
$this->prepareCollection();
101-
$this->categoryTree->addCollectionData($this->categoryCollection);
110+
$categoryTree->addCollectionData($this->categoryCollection);
102111
return $node;
103112
}
104113

105114
/**
106115
* Prepare category collection.
107116
*
108117
* @return void
109-
* @throws \Magento\Framework\Exception\LocalizedException
110-
* @throws \Magento\Framework\Exception\NoSuchEntityException
118+
* @throws LocalizedException
119+
* @throws NoSuchEntityException
111120
*/
112121
protected function prepareCollection()
113122
{
@@ -128,16 +137,16 @@ protected function prepareCollection()
128137
/**
129138
* Get tree by node.
130139
*
131-
* @param \Magento\Framework\Data\Tree\Node $node
140+
* @param Node $node
132141
* @param int $depth
133142
* @param int $currentLevel
134-
* @return \Magento\Catalog\Api\Data\CategoryTreeInterface
143+
* @return CategoryTreeInterface
135144
*/
136145
public function getTree($node, $depth = null, $currentLevel = 0)
137146
{
138-
/** @var \Magento\Catalog\Api\Data\CategoryTreeInterface[] $children */
147+
/** @var CategoryTreeInterface[] $children */
139148
$children = $this->getChildren($node, $depth, $currentLevel);
140-
/** @var \Magento\Catalog\Api\Data\CategoryTreeInterface $tree */
149+
/** @var CategoryTreeInterface $tree */
141150
$tree = $this->treeFactory->create();
142151
$tree->setId($node->getId())
143152
->setParentId($node->getParentId())
@@ -153,10 +162,10 @@ public function getTree($node, $depth = null, $currentLevel = 0)
153162
/**
154163
* Get node children.
155164
*
156-
* @param \Magento\Framework\Data\Tree\Node $node
165+
* @param Node $node
157166
* @param int $depth
158167
* @param int $currentLevel
159-
* @return \Magento\Catalog\Api\Data\CategoryTreeInterface[]|[]
168+
* @return CategoryTreeInterface[]|[]
160169
*/
161170
protected function getChildren($node, $depth, $currentLevel)
162171
{
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
/**
3+
* Plugin for \Magento\Catalog\Model\Category\DataProvider
4+
*
5+
* Copyright © Magento, Inc. All rights reserved.
6+
* See COPYING.txt for license details.
7+
*/
8+
9+
declare(strict_types=1);
10+
11+
namespace Magento\Catalog\Model\Plugin;
12+
13+
use Magento\Catalog\Model\Category\DataProvider;
14+
use Magento\Framework\Exception\NoSuchEntityException;
15+
16+
/**
17+
* Sets the default value for Category Design Layout if provided
18+
*/
19+
class SetPageLayoutDefaultValue
20+
{
21+
private $defaultValue;
22+
23+
/**
24+
* @param string $defaultValue
25+
*/
26+
public function __construct(string $defaultValue = "")
27+
{
28+
$this->defaultValue = $defaultValue;
29+
}
30+
31+
/**
32+
* Sets the default value for Category Design Layout in data provider if provided
33+
*
34+
* @param DataProvider $subject
35+
* @param array $result
36+
* @return array
37+
*
38+
* @throws NoSuchEntityException
39+
*/
40+
public function afterGetDefaultMetaData(DataProvider $subject, array $result): array
41+
{
42+
$currentCategory = $subject->getCurrentCategory();
43+
44+
if ($currentCategory && !$currentCategory->getId() && array_key_exists('page_layout', $result)) {
45+
$result['page_layout']['default'] = $this->defaultValue ?: null;
46+
}
47+
48+
return $result;
49+
}
50+
}

app/code/Magento/Catalog/etc/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@
7676
<type name="Magento\Customer\Model\ResourceModel\Visitor">
7777
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
7878
</type>
79+
<type name="Magento\Catalog\Model\Category\DataProvider">
80+
<plugin name="set_page_layout_default_value" type="Magento\Catalog\Model\Plugin\SetPageLayoutDefaultValue" />
81+
</type>
7982
<type name="Magento\Theme\Block\Html\Topmenu">
8083
<plugin name="catalogTopmenu" type="Magento\Catalog\Plugin\Block\Topmenu" />
8184
</type>

app/code/Magento/Cms/Model/ResourceModel/Page/Collection.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ public function addStoreFilter($store, $withAdmin = true)
7474
{
7575
if (!$this->getFlag('store_filter_added')) {
7676
$this->performAddStoreFilter($store, $withAdmin);
77+
$this->setFlag('store_filter_added', true);
7778
}
79+
7880
return $this;
7981
}
8082

app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ private function prepareRequestQuery(string $store, string $href) : array
103103
StoreManagerInterface::PARAM_NAME => $store,
104104
ActionInterface::PARAM_NAME_URL_ENCODED => $this->urlEncoder->encode($href)
105105
];
106-
if ($storeView->getCode() !== $store) {
106+
if (null !== $storeView && $storeView->getCode() !== $store) {
107107
$query['___from_store'] = $storeView->getCode();
108108
}
109109

app/code/Magento/Email/Test/Mftf/ActionGroup/EmailTemplateActionGroup.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
<description>Clicks on Delete Template. Accepts the Popup. Validates that the Email Template is NOT present in the Email Templates Grid.</description>
6262
</annotations>
6363
<click selector="{{AdminEmailTemplateEditSection.deleteTemplateButton}}" after="checkTemplateName" stepKey="deleteTemplate"/>
64-
<acceptPopup after="deleteTemplate" stepKey="acceptPopup"/>
64+
<waitForElementVisible selector="{{AdminEmailTemplateEditSection.acceptPopupButton}}" after="deleteTemplate" stepKey="waitForConfirmButton"/>
65+
<click selector="{{AdminEmailTemplateEditSection.acceptPopupButton}}" after="waitForConfirmButton" stepKey="acceptPopup"/>
6566
<waitForElementVisible selector="{{AdminMessagesSection.successMessage}}" after="acceptPopup" stepKey="waitForSuccessMessage"/>
6667
<see selector="{{AdminMessagesSection.successMessage}}" userInput="You deleted the email template." after="waitForSuccessMessage" stepKey="seeSuccessfulMessage"/>
6768
</actionGroup>

app/code/Magento/Email/Test/Mftf/Section/AdminEmailTemplateEditSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@
1616
<element name="loadTemplateButton" type="button" selector="#load" timeout="30"/>
1717
<element name="deleteTemplateButton" type="button" selector="#delete"/>
1818
<element name="previewTemplateButton" type="button" selector="#preview" timeout="30"/>
19+
<element name="acceptPopupButton" type="button" selector=".action-accept" />
1920
</section>
2021
</sections>

app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,11 @@ require([
6161
"jquery",
6262
"wysiwygAdapter",
6363
"Magento_Ui/js/modal/alert",
64+
'Magento_Ui/js/modal/confirm',
6465
"mage/mage",
6566
"Magento_Email/js/variables",
6667
"prototype"
67-
], function(jQuery, tinyMCE, alert){
68+
], function(jQuery, tinyMCE, alert, confirm){
6869

6970
//<![CDATA[
7071
jQuery('#email_template_edit_form').mage('form').mage('validation');
@@ -113,18 +114,22 @@ require([
113114
},
114115

115116
stripTags: function () {
116-
if(!window.confirm("<?= $block->escapeJs($block->escapeHtml(__('Are you sure you want to strip tags?'))) ?>")) {
117-
return false;
118-
}
119-
this.unconvertedText = $('template_text').value;
120-
$('convert_button').hide();
121-
$('template_text').value = $('template_text').value.stripScripts().replace(
122-
new RegExp('<style[^>]*>[\\S\\s]*?</style>', 'img'), ''
123-
).stripTags().strip();
124-
$('convert_button_back').show();
125-
$('field_template_styles').hide();
126-
this.typeChange = true;
127-
return false;
117+
confirm({
118+
content: "<?= $block->escapeJs($block->escapeHtml(__('Are you sure you want to strip tags?'))) ?>",
119+
actions: {
120+
confirm: function () {
121+
this.unconvertedText = $('template_text').value;
122+
$('convert_button').hide();
123+
$('template_text').value = $('template_text').value.stripScripts().replace(
124+
new RegExp('<style[^>]*>[\\S\\s]*?</style>', 'img'), ''
125+
).stripTags().strip();
126+
$('convert_button_back').show();
127+
$('field_template_styles').hide();
128+
this.typeChange = true;
129+
return false;
130+
}
131+
}
132+
});
128133
},
129134
unStripTags: function () {
130135
$('convert_button').show();
@@ -164,9 +169,14 @@ require([
164169
},
165170

166171
deleteTemplate: function() {
167-
if(window.confirm("<?= $block->escapeJs($block->escapeHtml(__('Are you sure you want to delete this template?'))) ?>")) {
168-
window.location.href = '<?= $block->escapeJs($block->escapeUrl($block->getDeleteUrl())) ?>';
169-
}
172+
confirm({
173+
content: "<?= $block->escapeJs($block->escapeHtml(__('Are you sure you want to delete this template?'))) ?>",
174+
actions: {
175+
confirm: function () {
176+
window.location.href = '<?= $block->escapeJs($block->escapeUrl($block->getDeleteUrl())) ?>';
177+
}
178+
}
179+
});
170180
},
171181

172182
load: function() {

app/code/Magento/Paypal/Model/AbstractConfig.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ public function isMethodActive($method)
293293
case Config::METHOD_WPS_BML:
294294
case Config::METHOD_WPP_BML:
295295
$disabledFunding = $this->_scopeConfig->getValue(
296-
'payment/paypal_express/disable_funding_options',
296+
'paypal/style/disable_funding_options',
297297
ScopeInterface::SCOPE_STORE,
298298
$this->_storeId
299299
);

app/code/Magento/Paypal/Test/Unit/Model/AbstractConfigTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ public function testIsMethodActiveBml($disableFundingOptions, $expectedFlag, $ex
306306
{
307307
$this->scopeConfigMock->method('getValue')
308308
->with(
309-
self::equalTo('payment/paypal_express/disable_funding_options'),
309+
self::equalTo('paypal/style/disable_funding_options'),
310310
self::equalTo('store')
311311
)
312312
->willReturn($disableFundingOptions);

0 commit comments

Comments
 (0)