Yaffs site version 1.1
[yaffs-website] / vendor / drupal / console / src / Command / Develop / GenerateDocGitbookCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Develop\GenerateDocGitbookCommand.
6  */
7
8 namespace Drupal\Console\Command\Develop;
9
10 use Symfony\Component\Console\Input\InputInterface;
11 use Symfony\Component\Console\Output\OutputInterface;
12 use Symfony\Component\Console\Input\InputOption;
13 use Symfony\Component\Console\Command\Command;
14 use Drupal\Console\Core\Style\DrupalStyle;
15 use Drupal\Console\Core\Command\Shared\CommandTrait;
16 use Drupal\Console\Core\Utils\TwigRenderer;
17
18 class GenerateDocGitbookCommand extends Command
19 {
20     use CommandTrait;
21     /**
22      * @var TwigRenderer $renderer
23      */
24     protected $renderer;
25
26     /**
27      * GenerateDocGitbookCommand constructor.
28      *
29      * @param TwigRenderer $renderer
30      */
31     public function __construct(TwigRenderer $renderer)
32     {
33         $this->renderer = $renderer;
34         parent::__construct();
35     }
36
37
38     /**
39      * {@inheritdoc}
40      */
41     protected function configure()
42     {
43         $this
44             ->setName('generate:doc:gitbook')
45             ->setDescription($this->trans('commands.generate.doc.gitbook.description'))
46             ->addOption(
47                 'path',
48                 null,
49                 InputOption::VALUE_OPTIONAL,
50                 $this->trans('commands.generate.doc.gitbook.options.path')
51             );
52         ;
53     }
54
55     /**
56      * {@inheritdoc}
57      */
58     protected function execute(InputInterface $input, OutputInterface $output)
59     {
60         $io = new DrupalStyle($input, $output);
61
62         $path = null;
63         if ($input->hasOption('path')) {
64             $path = $input->getOption('path');
65         }
66
67         if (!$path) {
68             $io->error(
69                 $this->trans('commands.generate.doc.gitbook.messages.missing_path')
70             );
71
72             return 1;
73         }
74
75         $application = $this->getApplication();
76         $applicationData = $application->getData();
77         $namespaces = $applicationData['application']['namespaces'];
78         foreach ($namespaces as $namespace) {
79             foreach ($applicationData['commands'][$namespace] as $command) {
80                 $this->renderFile(
81                     'gitbook' . DIRECTORY_SEPARATOR . 'command.md.twig',
82                     $path . DIRECTORY_SEPARATOR . 'commands' . DIRECTORY_SEPARATOR . $command['dashed'] . '.md',
83                     $command,
84                     null,
85                     $this->renderer
86                 );
87             }
88         }
89
90         $this->renderFile(
91             'gitbook'.DIRECTORY_SEPARATOR.'available-commands.md.twig',
92             $path . DIRECTORY_SEPARATOR . 'commands'.DIRECTORY_SEPARATOR.'available-commands.md',
93             $applicationData,
94             null,
95             $this->renderer
96         );
97
98         $this->renderFile(
99             'gitbook'.DIRECTORY_SEPARATOR.'available-commands-list.md.twig',
100             $path . DIRECTORY_SEPARATOR . 'commands'.DIRECTORY_SEPARATOR.'available-commands-list.md',
101             $applicationData,
102             null,
103             $this->renderer
104         );
105     }
106
107     private function renderFile($template, $target, $parameters, $flag = null, $renderer)
108     {
109         if (!is_dir(dirname($target))) {
110             mkdir(dirname($target), 0777, true);
111         }
112
113         return file_put_contents($target, $renderer->render($template, $parameters), $flag);
114     }
115 }