Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / src / Plugin / DMU / Converter / Routing.php
1 <?php
2
3 namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Converter;
4
5 use Drupal\Component\Plugin\PluginManagerInterface;
6 use Drupal\Core\StringTranslation\TranslationInterface;
7 use Drupal\drupalmoduleupgrader\ConverterBase;
8 use Drupal\drupalmoduleupgrader\Routing\HookMenu;
9 use Drupal\drupalmoduleupgrader\TargetInterface;
10 use Drupal\drupalmoduleupgrader\Utility\Filter\ContainsLogicFilter;
11 use Pharborist\DocCommentNode;
12 use Psr\Log\LoggerInterface;
13
14 /**
15  * @Converter(
16  *  id = "routing",
17  *  description = @Translation("Converts parts of hook_menu() to the Drupal 8 routing system."),
18  *  hook = "hook_menu",
19  *  fixme = @Translation("@FIXME
20 This implementation of hook_menu() cannot be automatically converted because
21 it contains logic (i.e., branching statements, function calls, object
22 instantiation, etc.) You will need to convert it manually. Sorry!
23
24 For more information on how to convert hook_menu() to Drupal 8's new routing
25 and linking systems, see https://api.drupal.org/api/drupal/core%21includes%21menu.inc/group/menu/8"),
26  *  dependencies = { "plugin.manager.drupalmoduleupgrader.route" }
27  * )
28  */
29 class Routing extends ConverterBase {
30
31   /**
32    * The route converters' plugin manager.
33    *
34    * @var \Drupal\Component\Plugin\PluginManagerInterface
35    */
36   protected $routeConverters;
37
38   /**
39    * Constructs a Routing object.
40    *
41    * @param array $configuration
42    *   Additional configuration for the plugin.
43    * @param string $plugin_id
44    *   The plugin ID, will be "Links".
45    * @param mixed $plugin_definition
46    *   The plugin definition as derived from the annotations.
47    *
48    * @param PluginManagerInterface $route_converters
49    */
50   public function __construct(array $configuration, $plugin_id, $plugin_definition, TranslationInterface $translator, LoggerInterface $log, PluginManagerInterface $route_converters) {
51     parent::__construct($configuration, $plugin_id, $plugin_definition, $translator, $log);
52     $this->routeConverters = $route_converters;
53   }
54
55   /**
56    * {@inheritdoc}
57    */
58   public function convert(TargetInterface $target) {
59     // If the hook implementation contains logic, we cannot convert it and
60     // that's that. So we'll leave a FIXME and bail out.
61     /** @var \Pharborist\Functions\FunctionDeclarationNode $hook */
62     $hook = $target->getIndexer('function')->get('hook_menu');
63     if ($hook->is(new ContainsLogicFilter)) {
64       $hook->setDocComment(DocCommentNode::create($this->pluginDefinition['fixme']));
65       $target->save($hook);
66       return;
67     }
68
69     $hook_menu = new HookMenu($target, $this->routeConverters);
70     foreach ($hook_menu->getSourceRoutes() as $path => $route) {
71       /** @var \Drupal\drupalmoduleupgrader\Routing\Drupal7\RouteWrapper $route */
72       if ($route->containsKey('page callback')) {
73         $plugin_id = $this->routeConverters->hasDefinition($route['page callback']) ? $route['page callback'] : 'default';
74         /** @var \Drupal\drupalmoduleupgrader\Routing\RouteConverterInterface $converter */
75         $this->routeConverters->createInstance($plugin_id)->buildRoute($target, $route);
76       }
77     }
78
79     $routing = [];
80     foreach ($hook_menu->getDestinationRoutes() as $name => $route) {
81       $routing[$name] = [
82         'path' => $route->getPath()->__toString(),
83         'defaults' => $route->getDefaults(),
84         'requirements' => $route->getRequirements(),
85       ];
86     }
87     $this->writeInfo($target, 'routing', $routing);
88   }
89
90 }