Skip to content

Commit be1f880

Browse files
ENGCOM-8311: Replace hard-coded list of category attributes #28216
- Merge Pull Request #28216 from fredden/magento2:uiComponent/category_form-hard-coded-list - Merged commits: 1. e9511e8 2. af9f897 3. 3bd5fa0 4. 471dc6b 5. fd5b12e 6. d3e011c 7. 8d899e1 8. d62b0b5 9. 223a7f5 10. 18eaaf1 11. 13c45d1 12. fe28e23 13. 58651f9 14. d267e3b 15. e2c42e6 16. 749ee55 17. e59de41 18. cebb5be 19. c3ce246
2 parents edfbc39 + c3ce246 commit be1f880

File tree

4 files changed

+75
-53
lines changed

4 files changed

+75
-53
lines changed

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

Lines changed: 52 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
use Magento\Eav\Model\Entity\Type;
2323
use Magento\Framework\App\ObjectManager;
2424
use Magento\Framework\App\RequestInterface;
25+
use Magento\Framework\AuthorizationInterface;
26+
use Magento\Framework\Config\DataInterfaceFactory;
2527
use Magento\Framework\Exception\LocalizedException;
2628
use Magento\Framework\Exception\NoSuchEntityException;
2729
use Magento\Framework\Registry;
@@ -32,7 +34,6 @@
3234
use Magento\Ui\Component\Form\Field;
3335
use Magento\Ui\DataProvider\EavValidationRules;
3436
use Magento\Ui\DataProvider\Modifier\PoolInterface;
35-
use Magento\Framework\AuthorizationInterface;
3637
use Magento\Ui\DataProvider\ModifierPoolDataProvider;
3738

3839
/**
@@ -153,6 +154,11 @@ class DataProvider extends ModifierPoolDataProvider
153154
*/
154155
private $categoryFactory;
155156

157+
/**
158+
* @var DataInterfaceFactory
159+
*/
160+
private $uiConfigFactory;
161+
156162
/**
157163
* @var ScopeOverriddenValue
158164
*/
@@ -177,6 +183,7 @@ class DataProvider extends ModifierPoolDataProvider
177183
* @var AuthorizationInterface
178184
*/
179185
private $auth;
186+
180187
/**
181188
* @var Image
182189
*/
@@ -202,6 +209,7 @@ class DataProvider extends ModifierPoolDataProvider
202209
* @param ArrayManager|null $arrayManager
203210
* @param FileInfo|null $fileInfo
204211
* @param Image|null $categoryImage
212+
* @param DataInterfaceFactory|null $uiConfigFactory
205213
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
206214
*/
207215
public function __construct(
@@ -223,7 +231,8 @@ public function __construct(
223231
ScopeOverriddenValue $scopeOverriddenValue = null,
224232
ArrayManager $arrayManager = null,
225233
FileInfo $fileInfo = null,
226-
?Image $categoryImage = null
234+
?Image $categoryImage = null,
235+
?DataInterfaceFactory $uiConfigFactory = null
227236
) {
228237
$this->eavValidationRules = $eavValidationRules;
229238
$this->collection = $categoryCollectionFactory->create();
@@ -240,6 +249,10 @@ public function __construct(
240249
$this->arrayManager = $arrayManager ?: ObjectManager::getInstance()->get(ArrayManager::class);
241250
$this->fileInfo = $fileInfo ?: ObjectManager::getInstance()->get(FileInfo::class);
242251
$this->categoryImage = $categoryImage ?? ObjectManager::getInstance()->get(Image::class);
252+
$this->uiConfigFactory = $uiConfigFactory ?? ObjectManager::getInstance()->create(
253+
DataInterfaceFactory::class,
254+
['instanceName' => \Magento\Ui\Config\Data::class]
255+
);
243256

244257
parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data, $pool);
245258
}
@@ -611,7 +624,7 @@ private function convertValues($category, $categoryData): array
611624

612625
$categoryData[$attributeCode][0]['url'] = $this->categoryImage->getUrl($category, $attributeCode);
613626

614-
$categoryData[$attributeCode][0]['size'] = isset($stat) ? $stat['size'] : 0;
627+
$categoryData[$attributeCode][0]['size'] = $stat['size'];
615628
$categoryData[$attributeCode][0]['type'] = $mime;
616629
}
617630
}
@@ -645,56 +658,42 @@ public function getDefaultMetaData($result)
645658
*/
646659
protected function getFieldsMap()
647660
{
648-
return [
649-
'general' => [
650-
'parent',
651-
'path',
652-
'is_active',
653-
'include_in_menu',
654-
'name',
655-
],
656-
'content' => [
657-
'image',
658-
'description',
659-
'landing_page',
660-
],
661-
'display_settings' => [
662-
'display_mode',
663-
'is_anchor',
664-
'available_sort_by',
665-
'use_config.available_sort_by',
666-
'default_sort_by',
667-
'use_config.default_sort_by',
668-
'filter_price_range',
669-
'use_config.filter_price_range',
670-
],
671-
'search_engine_optimization' => [
672-
'url_key',
673-
'url_key_create_redirect',
674-
'url_key_group',
675-
'meta_title',
676-
'meta_keywords',
677-
'meta_description',
678-
],
679-
'assign_products' => [
680-
],
681-
'design' => [
682-
'custom_use_parent_settings',
683-
'custom_apply_to_products',
684-
'custom_design',
685-
'page_layout',
686-
'custom_layout_update',
687-
'custom_layout_update_file'
688-
],
689-
'schedule_design_update' => [
690-
'custom_design_from',
691-
'custom_design_to',
692-
],
693-
'category_view_optimization' => [
694-
],
695-
'category_permissions' => [
696-
],
697-
];
661+
$referenceName = 'category_form';
662+
$config = $this->uiConfigFactory
663+
->create(['componentName' => $referenceName])
664+
->get($referenceName);
665+
666+
if (empty($config)) {
667+
return [];
668+
}
669+
670+
$fieldsMap = [];
671+
672+
foreach ($config['children'] as $group => $node) {
673+
// Skip disabled components (required for Commerce Edition)
674+
if ($node['arguments']['data']['config']['componentDisabled'] ?? false) {
675+
continue;
676+
}
677+
678+
$fields = [];
679+
680+
foreach ($node['children'] as $childName => $childNode) {
681+
if (!empty($childNode['children'])) {
682+
// <container/> nodes need special handling
683+
foreach (array_keys($childNode['children']) as $grandchildName) {
684+
$fields[] = $grandchildName;
685+
}
686+
} else {
687+
$fields[] = $childName;
688+
}
689+
}
690+
691+
if (!empty($fields)) {
692+
$fieldsMap[$group] = $fields;
693+
}
694+
}
695+
696+
return $fieldsMap;
698697
}
699698

700699
/**

app/code/Magento/Catalog/Test/Unit/Model/Category/DataProviderTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
use Magento\Eav\Model\Entity\Type;
2121
use Magento\Framework\App\RequestInterface;
2222
use Magento\Framework\AuthorizationInterface;
23+
use Magento\Framework\Config\Data;
24+
use Magento\Framework\Config\DataInterfaceFactory;
2325
use Magento\Framework\Registry;
2426
use Magento\Framework\Stdlib\ArrayUtils;
2527
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -70,6 +72,11 @@ class DataProviderTest extends TestCase
7072
*/
7173
private $categoryFactory;
7274

75+
/**
76+
* @var DataInterfaceFactory|MockObject
77+
*/
78+
private $uiConfigFactory;
79+
7380
/**
7481
* @var Collection|MockObject
7582
*/
@@ -151,6 +158,15 @@ protected function setUp(): void
151158
->disableOriginalConstructor()
152159
->getMock();
153160

161+
$dataMock = $this->getMockBuilder(Data::class)
162+
->disableOriginalConstructor()
163+
->getMock();
164+
$this->uiConfigFactory = $this->getMockBuilder(DataInterfaceFactory::class)
165+
->disableOriginalConstructor()
166+
->getMock();
167+
$this->uiConfigFactory->method('create')
168+
->willReturn($dataMock);
169+
154170
$this->fileInfo = $this->getMockBuilder(FileInfo::class)
155171
->disableOriginalConstructor()
156172
->getMock();
@@ -198,6 +214,7 @@ private function getModel()
198214
'eavConfig' => $this->eavConfig,
199215
'request' => $this->request,
200216
'categoryFactory' => $this->categoryFactory,
217+
'uiConfigFactory' => $this->uiConfigFactory,
201218
'pool' => $this->modifierPool,
202219
'auth' => $this->auth,
203220
'arrayUtils' => $this->arrayUtils,

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@
8080
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
8181
</type>
8282
<type name="Magento\Catalog\Model\Category\DataProvider">
83+
<arguments>
84+
<argument name="uiConfigFactory" xsi:type="object">uiComponentConfigFactory</argument>
85+
</arguments>
8386
<plugin name="set_page_layout_default_value" type="Magento\Catalog\Model\Plugin\SetPageLayoutDefaultValue" />
8487
</type>
8588
<type name="Magento\Theme\Block\Html\Topmenu">

dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Catalog/Block/Adminhtml/Category/Tab/AttributesTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use Magento\Eav\Model\Config as EavConfig;
1010
use Magento\TestFramework\Helper\Bootstrap;
1111

12+
/**
13+
* @magentoAppArea adminhtml
14+
*/
1215
class AttributesTest extends \PHPUnit\Framework\TestCase
1316
{
1417
/**

0 commit comments

Comments
 (0)