Links.php in Drupal 7 to 8/9 Module Upgrader 8
File
src/Plugin/DMU/Converter/Links.php
View source
<?php
namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Converter;
use Drupal\Component\Plugin\PluginManagerInterface;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\drupalmoduleupgrader\ConverterBase;
use Drupal\drupalmoduleupgrader\Routing\HookMenu;
use Drupal\drupalmoduleupgrader\Routing\LinkBinding\LinkBindingFactory;
use Drupal\drupalmoduleupgrader\Routing\LinkBinding\LocalActionLinkBinding;
use Drupal\drupalmoduleupgrader\Routing\LinkBinding\LocalTaskLinkBinding;
use Drupal\drupalmoduleupgrader\Routing\LinkBinding\MenuLinkBinding;
use Drupal\drupalmoduleupgrader\Routing\LinkIndex;
use Drupal\drupalmoduleupgrader\TargetInterface;
use Drupal\drupalmoduleupgrader\Utility\Filter\ContainsLogicFilter;
use Pharborist\DocCommentNode;
use Psr\Log\LoggerInterface;
class Links extends ConverterBase {
protected $routeConverters;
protected $linkBinding;
public function __construct(array $configuration, $plugin_id, $plugin_definition, TranslationInterface $translator, LoggerInterface $log, PluginManagerInterface $route_converters, LinkBindingFactory $link_binding) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $translator, $log);
$this->routeConverters = $route_converters;
$this->linkBinding = $link_binding;
}
public function convert(TargetInterface $target) {
$hook = $target
->getIndexer('function')
->get('hook_menu');
if ($hook
->is(new ContainsLogicFilter())) {
$hook
->setDocComment(DocCommentNode::create($this->pluginDefinition['fixme']));
$target
->save($hook);
return;
}
$links = [
'menu' => new LinkIndex(),
'task' => new LinkIndex(),
'action' => new LinkIndex(),
'contextual' => new LinkIndex(),
];
$hook_menu = new HookMenu($target, $this->routeConverters);
foreach ($hook_menu
->getSourceRoutes()
->getAllLinks() as $path => $source) {
$binding = $this->linkBinding
->create($source, $hook_menu
->getDestinationRoute($path));
$destination = $binding
->getDestination();
if (empty($destination)) {
continue;
}
if ($binding instanceof MenuLinkBinding) {
$links['menu']
->addBinding($binding);
}
elseif ($binding instanceof LocalTaskLinkBinding) {
$links['task']
->addBinding($binding);
}
elseif ($binding instanceof LocalActionLinkBinding) {
$links['action']
->addBinding($binding);
}
elseif ($source
->isContextualLink()) {
$links['contextual']
->addBinding($binding);
}
}
$links = array_map(function (LinkIndex $index) {
return $index
->build();
}, $links);
foreach ($links['contextual'] as $link) {
$link['group'] = $target
->id();
}
foreach ($links as $group => $data) {
if ($data) {
$this
->writeInfo($target, 'links.' . $group, $data);
}
}
}
}
Classes
Name |
Description |
Links |
Plugin annotation
@Converter(
id = "links",
description = @Translation("Converts Drupal 7's hook_menu() links to plugin definitions."),
hook = "hook_menu",
fixme = @Translation("@FIXME
This implementation of hook_menu() cannot be automatically… |