MenuLinkConfig.php in Config menu link 8
File
src/Entity/MenuLinkConfig.php
View source
<?php
namespace Drupal\menu_link_config\Entity;
use Drupal\Core\Config\Entity\ConfigEntityBase;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Url;
use Drupal\menu_link_config\MenuLinkConfigInterface;
class MenuLinkConfig extends ConfigEntityBase implements MenuLinkConfigInterface {
public $id;
public $title;
public $url;
public $route_name;
public $route_parameters;
public $options;
public $expanded;
public $menu_name;
public $parent;
public $weight;
public $description;
public $enabled;
public function getTitle() {
return $this->title;
}
public function getDescription() {
return $this->description;
}
public function getRouteName() {
return $this->route_name ?: '<front>';
}
public function getRouteParameters() {
return $this->route_parameters ?: [];
}
public function getOptions() {
return $this->options ?: [];
}
public function getUrlObject() {
return new Url($this
->getRouteName(), $this
->getRouteParameters(), $this
->getOptions());
}
public function getPluginDefinition() {
$plugin_definition = [];
$plugin_definition['title'] = $this
->getTitle();
$plugin_definition['description'] = $this
->getDescription();
$plugin_definition['route_name'] = $this
->getRouteName();
$plugin_definition['route_parameters'] = $this
->getRouteParameters();
$plugin_definition['options'] = $this
->getOptions();
$plugin_definition['menu_name'] = $this
->getMenuName();
$plugin_definition['parent'] = $this
->getParent();
$plugin_definition['enabled'] = $this
->isEnabled() ? 1 : 0;
$plugin_definition['weight'] = $this
->getWeight();
$plugin_definition['metadata']['entity_id'] = $this
->id();
$plugin_definition['class'] = 'Drupal\\menu_link_config\\Plugin\\Menu\\MenuLinkConfig';
$plugin_definition['form_class'] = 'Drupal\\menu_link_config\\Plugin\\Menu\\Form\\MenuLinkConfigForm';
return $plugin_definition;
}
public function isExpanded() {
return $this->expanded;
}
public function getMenuName() {
return $this->menu_name;
}
public function getParent() {
return $this->parent;
}
public function getPluginId() {
return 'menu_link_config:' . $this
->id();
}
public function getWeight() {
return $this->weight;
}
public function isEnabled() {
return (bool) $this->enabled;
}
public function postSave(EntityStorageInterface $storage, $update = TRUE) {
parent::postSave($storage, $update);
$menu_link_manager = \Drupal::service('plugin.manager.menu.link');
if ($update && $menu_link_manager
->getDefinition($this
->getPluginId())) {
$menu_link_manager
->updateDefinition($this
->getPluginId(), $this
->getPluginDefinition(), FALSE);
}
else {
$menu_link_manager
->addDefinition($this
->getPluginId(), $this
->getPluginDefinition());
}
}
protected function urlRouteParameters($rel) {
return [
'menu_link_plugin' => 'menu_link_config:' . $this
->id(),
'menu_link_config' => $this
->id(),
];
}
public static function processEntityRouteParameters($menu_link, $processor) {
$route = \Drupal::service('router.route_provider')
->getRouteByName($menu_link
->getRouteName());
$route_parameters = $menu_link
->getRouteParameters();
$changed = FALSE;
foreach ($route_parameters as $name => $value) {
$parameter_info = $route
->getOption('parameters');
if (isset($parameter_info[$name]['type']) && strpos($parameter_info[$name]['type'], 'entity:') === 0) {
$entity_type_id = substr($parameter_info[$name]['type'], 7);
$new_value = $processor($entity_type_id, $value);
if (isset($new_value)) {
$route_parameters[$name] = $new_value;
$changed = TRUE;
}
}
}
if ($changed) {
$menu_link
->set('route_parameters', $route_parameters);
}
}
}