Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Debug / PluginCommand.php
diff --git a/vendor/drupal/console/src/Command/Debug/PluginCommand.php b/vendor/drupal/console/src/Command/Debug/PluginCommand.php
new file mode 100644 (file)
index 0000000..f6a661d
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\PluginDebugCommand.
+ */
+
+namespace Drupal\Console\Command\Debug;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * Class DebugCommand
+ *
+ * @package Drupal\Console\Command\Debug
+ */
+class PluginCommand extends ContainerAwareCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('debug:plugin')
+            ->setDescription($this->trans('commands.debug.plugin.description'))
+            ->setHelp($this->trans('commands.debug.plugin.help'))
+            ->addArgument(
+                'type',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.debug.plugin.arguments.type')
+            )
+            ->addArgument(
+                'id',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.debug.plugin.arguments.id')
+            )->setAliases(['dpl']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $pluginType = $input->getArgument('type');
+        $pluginId = $input->getArgument('id');
+
+        // No plugin type specified, show a list of plugin types.
+        if (!$pluginType) {
+            $tableHeader = [
+                $this->trans('commands.debug.plugin.table-headers.plugin-type-name'),
+                $this->trans('commands.debug.plugin.table-headers.plugin-type-class')
+            ];
+            $tableRows = [];
+            $serviceDefinitions = $this->container->getDefinitions();
+
+            foreach ($serviceDefinitions as $serviceId => $serviceDefinition) {
+                if (strpos($serviceId, 'plugin.manager.') === 0) {
+                    $serviceName = substr($serviceId, 15);
+                    $tableRows[$serviceName] = [
+                        $serviceName,
+                        $serviceDefinition->getClass()
+                    ];
+                }
+            }
+
+            ksort($tableRows);
+            $this->getIo()->table($tableHeader, array_values($tableRows));
+
+            return true;
+        }
+
+        $service = $this->container->get('plugin.manager.' . $pluginType);
+        if (!$service) {
+            $this->getIo()->error(
+                sprintf(
+                    $this->trans('commands.debug.plugin.errors.plugin-type-not-found'),
+                    $pluginType
+                )
+            );
+            return false;
+        }
+
+        // Valid plugin type specified, no ID specified, show list of instances.
+        if (!$pluginId) {
+            $tableHeader = [
+                $this->trans('commands.debug.plugin.table-headers.plugin-id'),
+                $this->trans('commands.debug.plugin.table-headers.plugin-class')
+            ];
+            $tableRows = [];
+            foreach ($service->getDefinitions() as $definition) {
+                $pluginId = $definition['id'];
+                $className = $definition['class'];
+                $tableRows[$pluginId] = [$pluginId, $className];
+            }
+            ksort($tableRows);
+            $this->getIo()->table($tableHeader, array_values($tableRows));
+            return true;
+        }
+
+        // Valid plugin type specified, ID specified, show the definition.
+        $definition = $service->getDefinition($pluginId);
+        $tableHeader = [
+            $this->trans('commands.debug.plugin.table-headers.definition-key'),
+            $this->trans('commands.debug.plugin.table-headers.definition-value')
+        ];
+        $tableRows = [];
+        foreach ($definition as $key => $value) {
+            if (is_object($value) && method_exists($value, '__toString')) {
+                $value = (string) $value;
+            } elseif (is_array($value) || is_object($value)) {
+                $value = Yaml::dump($value);
+            } elseif (is_bool($value)) {
+                $value = ($value) ? 'TRUE' : 'FALSE';
+            }
+            $tableRows[$key] = [$key, $value];
+        }
+        ksort($tableRows);
+        $this->getIo()->table($tableHeader, array_values($tableRows));
+        return true;
+    }
+}