Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / SnippetCommand.php
diff --git a/vendor/drupal/console/src/Command/SnippetCommand.php b/vendor/drupal/console/src/Command/SnippetCommand.php
new file mode 100644 (file)
index 0000000..0f2bc16
--- /dev/null
@@ -0,0 +1,128 @@
+<?php
+
+namespace Drupal\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Command\Command;
+use Symfony\Component\Filesystem\Filesystem;
+
+/**
+ * Class SnippetCommand
+ *
+ * @package Drupal\Console\Command
+ */
+class SnippetCommand extends Command
+{
+
+    /**
+     * @var string
+     */
+    protected $consoleRoot;
+
+    /**
+     * @var string
+     */
+    protected $appRoot;
+
+    /**
+     * RestoreCommand constructor.
+     *
+     * @param string $appRoot
+     */
+    public function __construct($consoleRoot, $appRoot)
+    {
+        $this->consoleRoot = $consoleRoot;
+        $this->appRoot = $appRoot;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('snippet')
+            ->addOption(
+                'file',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.snippet.options.file')
+            )
+            ->addOption(
+                'code',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.snippet.options.code')
+            )
+            ->addOption(
+                'show-code',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.snippet.options.show-code')
+            )
+            ->setDescription($this->trans('commands.snippet.description'))
+            ->setHelp($this->trans('commands.snippet.help'));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $file = $input->getOption('file');
+        $code = $input->getOption('code');
+        $showCode = $input->getOption('show-code');
+
+        if ($code) {
+            eval($code);
+            return 0;
+        }
+
+        if (!$file) {
+            $this->getIo()->error($this->trans('commands.snippet.errors.invalid-options'));
+
+            return 1;
+        }
+
+        $file = $this->getFileAsAbsolutePath($file);
+        if (!$file) {
+            $this->getIo()->error($this->trans('commands.snippet.errors.invalid-file'));
+
+            return 1;
+        }
+
+        if ($showCode) {
+            $code = file_get_contents($file);
+            $this->getIo()->writeln($code);
+        }
+
+        include_once $file;
+
+        return 0;
+    }
+
+    private function getFileAsAbsolutePath($file)
+    {
+        $fs = new Filesystem();
+
+        if ($fs->isAbsolutePath($file)) {
+            return $fs->exists($file)?$file:null;
+        }
+
+        $files = [
+            $this->consoleRoot.'/'.$file,
+            $this->appRoot.'/'.$file
+        ];
+
+        foreach ($files as $file) {
+            if ($fs->exists($file)) {
+                return $file;
+            }
+        }
+
+        return null;
+    }
+}