class MicrositeMenuLinkDiscovery in Entity Reference Hierarchy 3.x
Same name and namespace in other branches
- 8.2 modules/entity_hierarchy_microsite/src/MicrositeMenuLinkDiscovery.php \Drupal\entity_hierarchy_microsite\MicrositeMenuLinkDiscovery
Defines a class for microsite menu link discovery.
Hierarchy
- class \Drupal\entity_hierarchy_microsite\MicrositeMenuLinkDiscovery implements MicrositeMenuLinkDiscoveryInterface
Expanded class hierarchy of MicrositeMenuLinkDiscovery
1 string reference to 'MicrositeMenuLinkDiscovery'
- entity_hierarchy_microsite.services.yml in modules/
entity_hierarchy_microsite/ entity_hierarchy_microsite.services.yml - modules/entity_hierarchy_microsite/entity_hierarchy_microsite.services.yml
1 service uses MicrositeMenuLinkDiscovery
- entity_hierarchy_microsite.menu_link_discovery in modules/
entity_hierarchy_microsite/ entity_hierarchy_microsite.services.yml - Drupal\entity_hierarchy_microsite\MicrositeMenuLinkDiscovery
File
- modules/
entity_hierarchy_microsite/ src/ MicrositeMenuLinkDiscovery.php, line 20
Namespace
Drupal\entity_hierarchy_micrositeView source
class MicrositeMenuLinkDiscovery implements MicrositeMenuLinkDiscoveryInterface {
/**
* Set storage.
*
* @var \Drupal\entity_hierarchy\Storage\NestedSetStorageFactory
*/
protected $nestedSetStorageFactory;
/**
* Mapper.
*
* @var \Drupal\entity_hierarchy\Storage\EntityTreeNodeMapperInterface
*/
protected $mapper;
/**
* Parent candidate.
*
* @var \Drupal\entity_hierarchy\Information\ParentCandidateInterface
*/
protected $candidate;
/**
* Field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
private $entityFieldManager;
/**
* Type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
private $entityTypeManager;
/**
* Key factory.
*
* @var \Drupal\entity_hierarchy\Storage\NestedSetNodeKeyFactory
*/
private $keyFactory;
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* Constructs a new MicrositeMenuItemDeriver.
*
* @param \Drupal\entity_hierarchy\Storage\NestedSetStorageFactory $nestedSetStorageFactory
* Storage.
* @param \Drupal\entity_hierarchy\Storage\EntityTreeNodeMapperInterface $mapper
* Mapper.
* @param \Drupal\entity_hierarchy\Information\ParentCandidateInterface $candidate
* Candidate.
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entityFieldManager
* Field manager.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* Type manager.
* @param \Drupal\entity_hierarchy\Storage\NestedSetNodeKeyFactory $keyFactory
* Key factory.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler
* The module handler.
*/
public function __construct(NestedSetStorageFactory $nestedSetStorageFactory, EntityTreeNodeMapperInterface $mapper, ParentCandidateInterface $candidate, EntityFieldManagerInterface $entityFieldManager, EntityTypeManagerInterface $entityTypeManager, NestedSetNodeKeyFactory $keyFactory, ModuleHandlerInterface $moduleHandler) {
$this->nestedSetStorageFactory = $nestedSetStorageFactory;
$this->mapper = $mapper;
$this->candidate = $candidate;
$this->entityFieldManager = $entityFieldManager;
$this->entityTypeManager = $entityTypeManager;
$this->keyFactory = $keyFactory;
$this->moduleHandler = $moduleHandler;
}
/**
* {@inheritdoc}
*/
public function getMenuLinkDefinitions(MicrositeInterface $microsite = NULL) {
$definitions = [];
$microsites = $microsite ? [
$microsite,
] : $this->entityTypeManager
->getStorage('entity_hierarchy_microsite')
->loadMultiple();
/** @var \Drupal\entity_hierarchy_microsite\Entity\MicrositeInterface $microsite */
foreach ($microsites as $microsite) {
$home = $microsite
->getHome();
if (!$home) {
continue;
}
$key = $this->keyFactory
->fromEntity($home);
$parentUuids = [];
foreach ($this->candidate
->getCandidateFields($home) as $field_name) {
/** @var \PNX\NestedSet\NestedSetInterface $tree */
$tree = $this->nestedSetStorageFactory
->get($field_name, 'node');
$homeNode = $tree
->getNode($key);
if (!$homeNode) {
// No children.
continue;
}
$nodes = $this->mapper
->loadEntitiesForTreeNodesWithoutAccessChecks('node', $tree
->findDescendants($key));
$url = $home
->toUrl();
$definitions[$home
->uuid()] = [
'class' => MicrositeMenuItem::class,
'menu_name' => 'entity-hierarchy-microsite',
'route_name' => $url
->getRouteName(),
'route_parameters' => $url
->getRouteParameters(),
'options' => $url
->getOptions(),
'title' => $home
->label(),
'description' => '',
'weight' => $homeNode
->getLeft(),
'id' => 'entity_hierarchy_microsite:' . $home
->uuid(),
'metadata' => [
'entity_id' => $home
->id(),
'entity_hierarchy_depth' => $homeNode
->getDepth(),
],
'form_class' => MenuLinkDefaultForm::class,
'enabled' => 1,
'expanded' => 1,
'provider' => 'entity_hierarchy_microsite',
'discovered' => 0,
];
/** @var \PNX\NestedSet\Node $treeNode */
foreach ($nodes as $treeNode) {
if (!$nodes
->contains($treeNode)) {
continue;
}
/** @var \Drupal\node\NodeInterface $item */
$item = $nodes
->offsetGet($treeNode);
$url = $item
->toUrl();
$revisionKey = sprintf('%s:%s', $treeNode
->getId(), $treeNode
->getRevisionId());
$itemUuid = $item
->uuid();
$parentUuids[$revisionKey] = $itemUuid;
$definitions[$itemUuid] = [
'class' => MicrositeMenuItem::class,
'menu_name' => 'entity-hierarchy-microsite',
'route_name' => $url
->getRouteName(),
'route_parameters' => $url
->getRouteParameters(),
'options' => $url
->getOptions(),
'title' => $item
->label(),
'description' => '',
'weight' => $treeNode
->getLeft(),
'id' => 'entity_hierarchy_microsite:' . $itemUuid,
'metadata' => [
'entity_id' => $item
->id(),
'entity_hierarchy_depth' => $treeNode
->getDepth(),
],
'form_class' => MenuLinkDefaultForm::class,
'enabled' => 1,
'expanded' => 1,
'provider' => 'entity_hierarchy_microsite',
'discovered' => 0,
'parent' => 'entity_hierarchy_microsite:' . $home
->uuid(),
];
$parent = $tree
->findParent($treeNode
->getNodeKey());
if ($parent && ($parentRevisionKey = sprintf('%s:%s', $parent
->getId(), $parent
->getRevisionId())) && array_key_exists($parentRevisionKey, $parentUuids)) {
$definitions[$itemUuid]['parent'] = 'entity_hierarchy_microsite:' . $parentUuids[$parentRevisionKey];
}
}
}
/** @var \Drupal\entity_hierarchy_microsite\Entity\MicrositeMenuItemOverrideInterface $override */
if ($definitions) {
foreach ($this->entityTypeManager
->getStorage('eh_microsite_menu_override')
->loadByProperties([
'target' => array_keys($definitions),
]) as $override) {
$original = $definitions[$override
->getTarget()];
$definitions[$override
->getTarget()] = [
'metadata' => [
'original' => array_intersect_key($original, [
'title' => TRUE,
'weight' => TRUE,
'enabled' => TRUE,
'expanded' => TRUE,
'parent' => TRUE,
]),
] + $original['metadata'],
'title' => $override
->label(),
'form_class' => MicrositeMenuItemForm::class,
'weight' => $override
->getWeight(),
'enabled' => $override
->isEnabled(),
'expanded' => $override
->isExpanded(),
'parent' => $override
->getParent(),
] + $original;
}
}
}
$this->moduleHandler
->alter('entity_hierarchy_microsite_links', $definitions);
return $definitions;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
MicrositeMenuLinkDiscovery:: |
protected | property | Parent candidate. | |
MicrositeMenuLinkDiscovery:: |
private | property | Field manager. | |
MicrositeMenuLinkDiscovery:: |
private | property | Type manager. | |
MicrositeMenuLinkDiscovery:: |
private | property | Key factory. | |
MicrositeMenuLinkDiscovery:: |
protected | property | Mapper. | |
MicrositeMenuLinkDiscovery:: |
protected | property | The module handler. | |
MicrositeMenuLinkDiscovery:: |
protected | property | Set storage. | |
MicrositeMenuLinkDiscovery:: |
public | function |
Gets menu link definitions for the given site or all sites if none given. Overrides MicrositeMenuLinkDiscoveryInterface:: |
|
MicrositeMenuLinkDiscovery:: |
public | function | Constructs a new MicrositeMenuItemDeriver. |