Skip to content

Commit f5dd204

Browse files
committed
PR changes:
- introduced extended interface for \Magento\Config\Model\Config\Structure\ElementInterface - moved structure element types from static dependency to DI
1 parent b9398af commit f5dd204

File tree

10 files changed

+139
-38
lines changed

10 files changed

+139
-38
lines changed

app/code/Magento/Backend/Model/Search/Config/Result/Builder.php

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
*/
66
namespace Magento\Backend\Model\Search\Config\Result;
77

8-
use Magento\Config\Model\Config\Structure\Element\AbstractComposite;
9-
use Magento\Config\Model\Config\Structure\ElementInterface;
8+
use Magento\Backend\Model\Search\Config\Structure\ElementBuilderInterface;
9+
use Magento\Backend\Model\UrlInterface;
10+
use Magento\Config\Model\Config\Structure\ElementNewInterface;
1011

1112
/**
1213
* Config SearchResult Builder
@@ -20,28 +21,26 @@ class Builder
2021
/**
2122
* @var array
2223
*/
23-
private $supportedElementTypes = [
24-
self::STRUCTURE_ELEMENT_TYPE_SECTION,
25-
self::STRUCTURE_ELEMENT_TYPE_GROUP,
26-
self::STRUCTURE_ELEMENT_TYPE_FIELD,
27-
];
24+
private $results = [];
2825

2926
/**
30-
* @var array
27+
* @var UrlInterface
3128
*/
32-
private $results = [];
29+
private $urlBuilder;
3330

3431
/**
35-
* @var \Magento\Backend\Model\UrlInterface
32+
* @var ElementBuilderInterface[]
3633
*/
37-
private $urlBuilder;
34+
private $structureElementTypes;
3835

3936
/**
40-
* @param \Magento\Backend\Model\UrlInterface $urlBuilder
37+
* @param UrlInterface $urlBuilder
38+
* @param array $structureElementTypes
4139
*/
42-
public function __construct(\Magento\Backend\Model\UrlInterface $urlBuilder)
40+
public function __construct(UrlInterface $urlBuilder, array $structureElementTypes)
4341
{
4442
$this->urlBuilder = $urlBuilder;
43+
$this->structureElementTypes = $structureElementTypes;
4544
}
4645

4746
/**
@@ -53,38 +52,22 @@ public function getAll()
5352
}
5453

5554
/**
56-
* @param AbstractComposite|ElementInterface $structureElement
55+
* @param ElementNewInterface $structureElement
5756
* @param string $elementPathLabel
5857
* @return void
5958
*/
60-
public function add(ElementInterface $structureElement, $elementPathLabel)
59+
public function add(ElementNewInterface $structureElement, $elementPathLabel)
6160
{
6261
$urlParams = [];
6362
$elementData = $structureElement->getData();
6463

65-
if (!in_array($elementData['_elementType'], $this->supportedElementTypes)) {
64+
if (!in_array($elementData['_elementType'], array_keys($this->structureElementTypes))) {
6665
return;
6766
}
6867

69-
$elementPathParts = explode('/', $structureElement->getPath());
70-
71-
switch ($elementData['_elementType']) {
72-
case self::STRUCTURE_ELEMENT_TYPE_SECTION:
73-
$urlParams = ['section' => $elementPathParts[1]];
74-
break;
75-
case self::STRUCTURE_ELEMENT_TYPE_GROUP:
76-
$urlParams = [
77-
'section' => $elementPathParts[0],
78-
'group' => $elementPathParts[1],
79-
];
80-
break;
81-
case self::STRUCTURE_ELEMENT_TYPE_FIELD:
82-
$urlParams = [
83-
'section' => $elementPathParts[0],
84-
'group' => $elementPathParts[1],
85-
'field' => $structureElement->getId(),
86-
];
87-
break;
68+
if (isset($this->structureElementTypes[$elementData['_elementType']])) {
69+
$urlParamsBuilder = $this->structureElementTypes[$elementData['_elementType']];
70+
$urlParams = $urlParamsBuilder->build($structureElement);
8871
}
8972

9073
$this->results[] = [
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Backend\Model\Search\Config\Structure\Element\Builder;
7+
8+
use Magento\Backend\Model\Search\Config\Structure\ElementBuilderInterface;
9+
use Magento\Config\Model\Config\Structure\ElementNewInterface;
10+
11+
class Field implements ElementBuilderInterface
12+
{
13+
/**
14+
* @inheritdoc
15+
*/
16+
public function build(ElementNewInterface $structureElement)
17+
{
18+
$elementPathParts = explode('/', $structureElement->getPath());
19+
return [
20+
'section' => $elementPathParts[0],
21+
'group' => $elementPathParts[1],
22+
'field' => $structureElement->getId(),
23+
];
24+
}
25+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Backend\Model\Search\Config\Structure\Element\Builder;
7+
8+
use Magento\Backend\Model\Search\Config\Structure\ElementBuilderInterface;
9+
use Magento\Config\Model\Config\Structure\ElementNewInterface;
10+
11+
class Group implements ElementBuilderInterface
12+
{
13+
/**
14+
* @inheritdoc
15+
*/
16+
public function build(ElementNewInterface $structureElement)
17+
{
18+
$elementPathParts = explode('/', $structureElement->getPath());
19+
return [
20+
'section' => $elementPathParts[0],
21+
'group' => $elementPathParts[1],
22+
];
23+
}
24+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Backend\Model\Search\Config\Structure\Element\Builder;
7+
8+
use Magento\Backend\Model\Search\Config\Structure\ElementBuilderInterface;
9+
use Magento\Config\Model\Config\Structure\ElementNewInterface;
10+
11+
class Section implements ElementBuilderInterface
12+
{
13+
/**
14+
* @inheritdoc
15+
*/
16+
public function build(ElementNewInterface $structureElement)
17+
{
18+
$elementPathParts = explode('/', $structureElement->getPath());
19+
return ['section' => $elementPathParts[1]];
20+
}
21+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Backend\Model\Search\Config\Structure;
7+
8+
use Magento\Config\Model\Config\Structure\ElementNewInterface;
9+
10+
interface ElementBuilderInterface
11+
{
12+
/**
13+
* @param ElementNewInterface $structureElement
14+
* @return array
15+
*/
16+
public function build(ElementNewInterface $structureElement);
17+
}

app/code/Magento/Backend/etc/adminhtml/di.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,13 @@
147147
</argument>
148148
</arguments>
149149
</type>
150+
<type name="Magento\Backend\Model\Search\Config\Result\Builder">
151+
<arguments>
152+
<argument name="structureElementTypes" xsi:type="array">
153+
<item name="section" xsi:type="object">Magento\Backend\Model\Search\Config\Structure\Element\Builder\Section</item>
154+
<item name="group" xsi:type="object">Magento\Backend\Model\Search\Config\Structure\Element\Builder\Group</item>
155+
<item name="field" xsi:type="object">Magento\Backend\Model\Search\Config\Structure\Element\Builder\Field</item>
156+
</argument>
157+
</arguments>
158+
</type>
150159
</config>

app/code/Magento/Config/Model/Config/Structure/AbstractElement.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
/**
1313
* @api
1414
*/
15-
abstract class AbstractElement implements ElementInterface
15+
abstract class AbstractElement implements ElementNewInterface
1616
{
1717
/**
1818
* Element data

app/code/Magento/Config/Model/Config/Structure/Element/Iterator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Iterator implements \Iterator
1313
/**
1414
* List of element data
1515
*
16-
* @var \Magento\Config\Model\Config\Structure\ElementInterface[]
16+
* @var \Magento\Config\Model\Config\Structure\ElementNewInterface[]
1717
*/
1818
protected $_elements;
1919

@@ -66,7 +66,7 @@ public function setElements(array $elements, $scope)
6666
/**
6767
* Return the current element
6868
*
69-
* @return \Magento\Config\Model\Config\Structure\ElementInterface
69+
* @return \Magento\Config\Model\Config\Structure\ElementNewInterface
7070
*/
7171
public function current()
7272
{

app/code/Magento/Config/Model/Config/Structure/ElementInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
/**
99
* @api
10+
* @deprecated
11+
* @see ElementNewInterface
1012
*/
1113
interface ElementInterface
1214
{
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Config\Model\Config\Structure;
7+
8+
/**
9+
* @api
10+
*/
11+
interface ElementNewInterface extends ElementInterface
12+
{
13+
/**
14+
* Retrieve element config path
15+
*
16+
* @param string $fieldPrefix
17+
* @return string
18+
*/
19+
public function getPath($fieldPrefix = '');
20+
}

0 commit comments

Comments
 (0)