Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Debug / RouterCommand.php
diff --git a/vendor/drupal/console/src/Command/Debug/RouterCommand.php b/vendor/drupal/console/src/Command/Debug/RouterCommand.php
new file mode 100644 (file)
index 0000000..17cd7dc
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Debug\RouterCommand.
+ */
+
+namespace Drupal\Console\Command\Debug;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Core\Routing\RouteProviderInterface;
+use Drupal\Component\Serialization\Yaml;
+
+class RouterCommand extends Command
+{
+    /**
+     * @var RouteProviderInterface
+     */
+    protected $routeProvider;
+
+    /**
+     * DebugCommand constructor.
+     *
+     * @param RouteProviderInterface $routeProvider
+     */
+    public function __construct(RouteProviderInterface $routeProvider)
+    {
+        $this->routeProvider = $routeProvider;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('debug:router')
+            ->setDescription($this->trans('commands.debug.router.description'))
+            ->addArgument(
+                'route-name',
+                InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
+                $this->trans('commands.debug.router.arguments.route-name')
+            )
+            ->setAliases(['dr']);
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $route_name = $input->getArgument('route-name');
+
+        if ($route_name) {
+            $this->getRouteByNames($route_name);
+        } else {
+            $this->getAllRoutes();
+        }
+    }
+
+    protected function getAllRoutes()
+    {
+        $routes = $this->routeProvider->getAllRoutes();
+
+        $tableHeader = [
+            $this->trans('commands.debug.router.messages.name'),
+            $this->trans('commands.debug.router.messages.path'),
+        ];
+
+        $tableRows = [];
+        foreach ($routes as $route_name => $route) {
+            $tableRows[] = [$route_name, $route->getPath()];
+        }
+
+        $this->getIo()->table($tableHeader, $tableRows, 'compact');
+    }
+
+    protected function getRouteByNames($route_name)
+    {
+        $routes = $this->routeProvider->getRoutesByNames($route_name);
+
+        foreach ($routes as $name => $route) {
+            $tableHeader = [
+                $this->trans('commands.debug.router.messages.route'),
+                '<info>'.$name.'</info>'
+            ];
+            $tableRows = [];
+
+            $tableRows[] = [
+                '<comment>'.$this->trans('commands.debug.router.messages.path').'</comment>',
+                $route->getPath(),
+            ];
+
+            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.defaults').'</comment>'];
+            $attributes = $this->addRouteAttributes($route->getDefaults());
+            foreach ($attributes as $attribute) {
+                $tableRows[] = $attribute;
+            }
+
+            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.requirements').'</comment>'];
+            $requirements = $this->addRouteAttributes($route->getRequirements());
+            foreach ($requirements as $requirement) {
+                $tableRows[] = $requirement;
+            }
+
+            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.options').'</comment>'];
+            $options = $this->addRouteAttributes($route->getOptions());
+            foreach ($options as $option) {
+                $tableRows[] = $option;
+            }
+
+            $this->getIo()->table($tableHeader, $tableRows, 'compact');
+        }
+    }
+
+    protected function addRouteAttributes($attr, $attributes = null)
+    {
+        foreach ($attr as $key => $value) {
+            if (is_array($value)) {
+                $attributes[] = [
+                  ' '.$key,
+                  str_replace(
+                      '- ',
+                      '',
+                      Yaml::encode($value)
+                  )
+                ];
+            } else {
+                $attributes[] = [' '.$key, $value];
+            }
+        }
+
+        return $attributes;
+    }
+}