-
Notifications
You must be signed in to change notification settings - Fork 119
Expand file tree
/
Copy pathNode.php
More file actions
80 lines (66 loc) · 2.02 KB
/
Node.php
File metadata and controls
80 lines (66 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
declare(strict_types=1);
namespace Snowdog\Menu\Model\ImportExport\Processor\Export;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\Api\SortOrder;
use Magento\Framework\Api\SortOrderBuilder;
use Snowdog\Menu\Api\Data\MenuInterface;
use Snowdog\Menu\Api\Data\NodeInterface;
use Snowdog\Menu\Api\NodeRepositoryInterface;
use Snowdog\Menu\Helper\MenuHelper;
use Snowdog\Menu\Model\ImportExport\Processor\Export\Node\Tree as NodeTree;
class Node
{
const EXCLUDED_FIELDS = [
NodeInterface::MENU_ID,
NodeInterface::NODE_ID,
NodeInterface::PARENT_ID,
NodeInterface::LEVEL
];
/**
* @var SearchCriteriaBuilder
*/
private $searchCriteriaBuilder;
/**
* @var SortOrderBuilder
*/
private $sortOrderBuilder;
/**
* @var NodeRepositoryInterface
*/
private $nodeRepository;
/**
* @var NodeTree
*/
private $nodeTree;
/**
* @var MenuHelper
*/
private $menuHelper;
public function __construct(
MenuHelper $menuHelper,
SearchCriteriaBuilder $searchCriteriaBuilder,
SortOrderBuilder $sortOrderBuilder,
NodeRepositoryInterface $nodeRepository,
NodeTree $nodeTree
) {
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
$this->sortOrderBuilder = $sortOrderBuilder;
$this->nodeRepository = $nodeRepository;
$this->nodeTree = $nodeTree;
$this->menuHelper = $menuHelper;
}
public function getList(int $menuId): array
{
$sortOrder = $this->sortOrderBuilder
->setField(NodeInterface::LEVEL)
->setDirection(SortOrder::SORT_ASC)
->create();
$searchCriteria = $this->searchCriteriaBuilder
->addFilter($this->menuHelper->getLinkField(), $menuId)
->setSortOrders([$sortOrder])
->create();
$nodes = $this->nodeRepository->getList($searchCriteria)->getItems();
return $nodes ? $this->nodeTree->get($nodes) : [];
}
}