Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Debug / ThemeKeysCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Theme\DebugKeysCommand.
6  */
7
8 namespace Drupal\Console\Command\Debug;
9
10 use Symfony\Component\Console\Input\InputArgument;
11 use Symfony\Component\Console\Input\InputInterface;
12 use Symfony\Component\Console\Output\OutputInterface;
13 use Symfony\Component\Console\Command\Command;
14 use Symfony\Component\Yaml\Yaml;
15 use Drupal\Console\Core\Command\Shared\CommandTrait;
16 use Drupal\Core\Theme\Registry;
17
18 class ThemeKeysCommand extends Command
19 {
20     use CommandTrait;
21
22     /**
23    * @var Registry
24    */
25     protected $themeRegistry;
26
27     /**
28    * DebugCommand constructor.
29    *
30    * @param \Drupal\Core\Theme\Registry $themeRegistry
31    *   The theme registry service.
32    */
33     public function __construct(Registry $themeRegistry)
34     {
35         $this->themeRegistry = $themeRegistry;
36         parent::__construct();
37     }
38
39     protected function configure()
40     {
41         $this
42             ->setName('debug:theme:keys')
43             ->setDescription($this->trans('commands.debug.theme.keys.description'))
44             ->setHelp($this->trans('commands.debug.theme.keys.help'))
45             ->addArgument(
46                 'key',
47                 InputArgument::OPTIONAL,
48                 $this->trans('commands.debug.theme.keys.arguments.key')
49             )
50             ->setAliases(['dtk']);
51     }
52
53     protected function execute(InputInterface $input, OutputInterface $output)
54     {
55         $key = $input->getArgument('key');
56
57         if (!$key) {
58             $this->themeKeysList();
59         } else {
60             $this->themeKeysDetail($key);
61         }
62     }
63
64     protected function themeKeysList()
65     {
66         $tableHeader = [
67         $this->trans('commands.debug.theme.keys.table-headers.key'),
68         $this->trans('commands.debug.theme.keys.table-headers.provider-type'),
69         $this->trans('commands.debug.theme.keys.table-headers.provider'),
70         ];
71
72         $tableRows = [];
73         $keys = $this->themeRegistry->get();
74         foreach ($keys as $key => $definition) {
75             $tableRows[] = [
76             $key,
77             $this->trans('commands.debug.theme.keys.provider-types.' . strtr($definition['type'], '_', '-')),
78             basename($definition['theme path']),
79             ];
80         }
81         array_multisort($tableRows, array_column($tableRows, 0));
82
83         $this->getIo()->table($tableHeader, $tableRows);
84     }
85
86     protected function themeKeysDetail($key)
87     {
88         $tableHeader = [
89         $this->trans('commands.debug.theme.keys.table-headers.key'),
90         $this->trans('commands.debug.theme.keys.table-headers.value')
91         ];
92
93         $keys = $this->themeRegistry->get();
94         $definition = $keys[$key];
95
96         $tableRows = [];
97         foreach ($definition as $key => $value) {
98             if (is_object($value) && method_exists($value, '__toString')) {
99                 $value = (string) $value;
100             } elseif (is_array($value) || is_object($value)) {
101                 $value = Yaml::dump($value);
102             } elseif (is_bool($value)) {
103                 $value = ($value) ? 'TRUE' : 'FALSE';
104             }
105             $tableRows[$key] = [$key, $value];
106         }
107         ksort($tableRows);
108         $this->getIo()->table($tableHeader, array_values($tableRows));
109     }
110 }