Version 1
[yaffs-website] / vendor / drupal / console / src / Application.php
diff --git a/vendor/drupal/console/src/Application.php b/vendor/drupal/console/src/Application.php
new file mode 100644 (file)
index 0000000..5085bb5
--- /dev/null
@@ -0,0 +1,377 @@
+<?php
+
+namespace Drupal\Console;
+
+use Doctrine\Common\Annotations\AnnotationRegistry;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Console\Annotations\DrupalCommandAnnotationReader;
+use Drupal\Console\Utils\AnnotationValidator;
+use Drupal\Console\Core\Application as BaseApplication;
+
+/**
+ * Class Application
+ *
+ * @package Drupal\Console
+ */
+class Application extends BaseApplication
+{
+    /**
+     * @var string
+     */
+    const NAME = 'Drupal Console';
+
+    /**
+     * @var string
+     */
+    const VERSION = '1.0.0-rc16';
+
+    public function __construct(ContainerInterface $container)
+    {
+        parent::__construct($container, $this::NAME, $this::VERSION);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function doRun(InputInterface $input, OutputInterface $output)
+    {
+        $this->registerGenerators();
+        $this->registerCommands();
+        $clear = $this->container->get('console.configuration_manager')
+            ->getConfiguration()
+            ->get('application.clear')?:false;
+        if ($clear === true || $clear === 'true') {
+            $output->write(sprintf("\033\143"));
+        }
+
+        $exitCode = parent::doRun($input, $output);
+        return $exitCode;
+    }
+
+    private function registerGenerators()
+    {
+        if ($this->container->hasParameter('drupal.generators')) {
+            $consoleGenerators = $this->container->getParameter(
+                'drupal.generators'
+            );
+        } else {
+            $consoleGenerators = array_keys(
+                $this->container->findTaggedServiceIds('drupal.generator')
+            );
+        }
+
+        foreach ($consoleGenerators as $name) {
+            if (!$this->container->has($name)) {
+                continue;
+            }
+
+            try {
+                $generator = $this->container->get($name);
+            } catch (\Exception $e) {
+                echo $name . ' - ' . $e->getMessage() . PHP_EOL;
+
+                continue;
+            }
+
+            if (!$generator) {
+                continue;
+            }
+
+            if (method_exists($generator, 'setRenderer')) {
+                $generator->setRenderer(
+                    $this->container->get('console.renderer')
+                );
+            }
+
+            if (method_exists($generator, 'setFileQueue')) {
+                $generator->setFileQueue(
+                    $this->container->get('console.file_queue')
+                );
+            }
+        }
+    }
+
+    private function registerCommands()
+    {
+        if ($this->container->hasParameter('drupal.commands')) {
+            $consoleCommands = $this->container->getParameter(
+                'drupal.commands'
+            );
+        } else {
+            $consoleCommands = array_keys(
+                $this->container->findTaggedServiceIds('drupal.command')
+            );
+            $this->container->setParameter(
+                'console.warning',
+                'application.site.errors.settings'
+            );
+        }
+
+        $serviceDefinitions = [];
+        $annotationValidator = null;
+        $annotationCommandReader = null;
+        if ($this->container->hasParameter('console.service_definitions')) {
+            $serviceDefinitions = $this->container
+                ->getParameter('console.service_definitions');
+
+            /**
+             * @var DrupalCommandAnnotationReader $annotationCommandReader
+             */
+            $annotationCommandReader = $this->container
+                ->get('console.annotation_command_reader');
+
+            /**
+             * @var AnnotationValidator $annotationValidator
+             */
+            $annotationValidator = $this->container
+                ->get('console.annotation_validator');
+        }
+
+        $aliases = $this->container->get('console.configuration_manager')
+            ->getConfiguration()
+            ->get('application.commands.aliases')?:[];
+
+        foreach ($consoleCommands as $name) {
+            AnnotationRegistry::reset();
+            AnnotationRegistry::registerLoader(
+                [
+                    $this->container->get('class_loader'),
+                    "loadClass"
+                ]
+            );
+
+            if (!$this->container->has($name)) {
+                continue;
+            }
+
+            if ($annotationValidator && $annotationCommandReader) {
+                if (!$serviceDefinition = $serviceDefinitions[$name]) {
+                    continue;
+                }
+
+                $annotation = $annotationCommandReader
+                    ->readAnnotation($serviceDefinition->getClass());
+                if ($annotation) {
+                    $this->container->get('console.translator_manager')
+                        ->addResourceTranslationsByExtension(
+                            $annotation['extension'],
+                            $annotation['extensionType']
+                        );
+                }
+
+                if (!$annotationValidator->isValidCommand($serviceDefinition->getClass())) {
+                    continue;
+                }
+            }
+
+            try {
+                $command = $this->container->get($name);
+            } catch (\Exception $e) {
+                echo $name . ' - ' . $e->getMessage() . PHP_EOL;
+
+                continue;
+            }
+
+            if (!$command) {
+                continue;
+            }
+
+            if (method_exists($command, 'setTranslator')) {
+                $command->setTranslator(
+                    $this->container->get('console.translator_manager')
+                );
+            }
+
+            if (method_exists($command, 'setContainer')) {
+                $command->setContainer(
+                    $this->container->get('service_container')
+                );
+            }
+
+            if (array_key_exists($command->getName(), $aliases)) {
+                $commandAliases = $aliases[$command->getName()];
+                if (!is_array($commandAliases)) {
+                    $commandAliases = [$commandAliases];
+                }
+                $command->setAliases($commandAliases);
+            }
+
+            $this->add($command);
+        }
+    }
+
+    public function getData()
+    {
+        $singleCommands = [
+            'about',
+            'chain',
+            'check',
+            'exec',
+            'help',
+            'init',
+            'list',
+            'shell',
+            'server'
+        ];
+
+        $languages = $this->container->get('console.configuration_manager')
+            ->getConfiguration()
+            ->get('application.languages');
+
+        $data = [];
+        foreach ($singleCommands as $singleCommand) {
+            $data['commands']['misc'][] = $this->commandData($singleCommand);
+        }
+
+        $namespaces = array_filter(
+            $this->getNamespaces(), function ($item) {
+                return (strpos($item, ':')<=0);
+            }
+        );
+        sort($namespaces);
+        array_unshift($namespaces, 'misc');
+
+        foreach ($namespaces as $namespace) {
+            $commands = $this->all($namespace);
+            usort(
+                $commands, function ($cmd1, $cmd2) {
+                    return strcmp($cmd1->getName(), $cmd2->getName());
+                }
+            );
+
+            foreach ($commands as $command) {
+                if (method_exists($command, 'getModule')) {
+                    if ($command->getModule() == 'Console') {
+                        $data['commands'][$namespace][] = $this->commandData(
+                            $command->getName()
+                        );
+                    }
+                } else {
+                    $data['commands'][$namespace][] = $this->commandData(
+                        $command->getName()
+                    );
+                }
+            }
+        }
+
+        $input = $this->getDefinition();
+        $options = [];
+        foreach ($input->getOptions() as $option) {
+            $options[] = [
+                'name' => $option->getName(),
+                'description' => $this->trans('application.options.'.$option->getName())
+            ];
+        }
+        $arguments = [];
+        foreach ($input->getArguments() as $argument) {
+            $arguments[] = [
+                'name' => $argument->getName(),
+                'description' => $this->trans('application.arguments.'.$argument->getName())
+            ];
+        }
+
+        $data['application'] = [
+            'namespaces' => $namespaces,
+            'options' => $options,
+            'arguments' => $arguments,
+            'languages' => $languages,
+            'messages' => [
+                'title' =>  $this->trans('commands.generate.doc.gitbook.messages.title'),
+                'note' =>  $this->trans('commands.generate.doc.gitbook.messages.note'),
+                'note_description' =>  $this->trans('commands.generate.doc.gitbook.messages.note-description'),
+                'command' =>  $this->trans('commands.generate.doc.gitbook.messages.command'),
+                'options' => $this->trans('commands.generate.doc.gitbook.messages.options'),
+                'option' => $this->trans('commands.generate.doc.gitbook.messages.option'),
+                'details' => $this->trans('commands.generate.doc.gitbook.messages.details'),
+                'arguments' => $this->trans('commands.generate.doc.gitbook.messages.arguments'),
+                'argument' => $this->trans('commands.generate.doc.gitbook.messages.argument'),
+                'examples' => $this->trans('commands.generate.doc.gitbook.messages.examples')
+            ],
+            'examples' => []
+        ];
+
+        return $data;
+    }
+
+    private function commandData($commandName)
+    {
+        if (!$this->has($commandName)) {
+            return [];
+        }
+
+        $command = $this->find($commandName);
+
+        $input = $command->getDefinition();
+        $options = [];
+        foreach ($input->getOptions() as $option) {
+            $options[$option->getName()] = [
+                'name' => $option->getName(),
+                'description' => $this->trans($option->getDescription()),
+            ];
+        }
+
+        $arguments = [];
+        foreach ($input->getArguments() as $argument) {
+            $arguments[$argument->getName()] = [
+                'name' => $argument->getName(),
+                'description' => $this->trans($argument->getDescription()),
+            ];
+        }
+
+        $commandKey = str_replace(':', '.', $command->getName());
+
+        $examples = [];
+        for ($i = 0; $i < 5; $i++) {
+            $description = sprintf(
+                'commands.%s.examples.%s.description',
+                $commandKey,
+                $i
+            );
+            $execution = sprintf(
+                'commands.%s.examples.%s.execution',
+                $commandKey,
+                $i
+            );
+
+            if ($description != $this->trans($description)) {
+                $examples[] = [
+                    'description' => $this->trans($description),
+                    'execution' => $this->trans($execution)
+                ];
+            } else {
+                break;
+            }
+        }
+
+        $data = [
+            'name' => $command->getName(),
+            'description' => $command->getDescription(),
+            'options' => $options,
+            'arguments' => $arguments,
+            'examples' => $examples,
+            'aliases' => $command->getAliases(),
+            'key' => $commandKey,
+            'dashed' => str_replace(':', '-', $command->getName()),
+            'messages' => [
+                'usage' =>  $this->trans('commands.generate.doc.gitbook.messages.usage'),
+                'options' => $this->trans('commands.generate.doc.gitbook.messages.options'),
+                'option' => $this->trans('commands.generate.doc.gitbook.messages.option'),
+                'details' => $this->trans('commands.generate.doc.gitbook.messages.details'),
+                'arguments' => $this->trans('commands.generate.doc.gitbook.messages.arguments'),
+                'argument' => $this->trans('commands.generate.doc.gitbook.messages.argument'),
+                'examples' => $this->trans('commands.generate.doc.gitbook.messages.examples')
+            ],
+        ];
+
+        return $data;
+    }
+
+    public function setContainer($container)
+    {
+        $this->container = $container;
+        $this->registerGenerators();
+        $this->registerCommands();
+    }
+}