Yaffs site version 1.1
[yaffs-website] / vendor / drupal / console / src / Command / DevelDumperCommand.php
1 <?php
2
3 namespace Drupal\Console\Command;
4
5 use Drupal\Core\Config\Config;
6 use Drupal\Core\Config\ConfigFactory;
7 use Symfony\Component\Console\Input\InputArgument;
8 use Symfony\Component\Console\Input\InputInterface;
9 use Symfony\Component\Console\Output\OutputInterface;
10 use Symfony\Component\Console\Command\Command;
11 use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
12 use Drupal\Console\Core\Style\DrupalStyle;
13 use Drupal\devel\DevelDumperPluginManager;
14 use Drupal\devel\DevelDumperManager;
15
16 /**
17  * Class DevelDumperCommand.
18  * Command to quickly change between devel dumpers from the command line
19  *
20  * @package Drupal\Console\Command
21  *
22  * @todo Inject services using \Drupal
23  * @todo Move to namespace Devel
24  * @todo Load devel.module legacy file
25  */
26 class DevelDumperCommand extends Command
27 {
28     use ContainerAwareCommandTrait;
29
30     /**
31      * @var DevelDumperPluginManager
32      */
33     protected $develDumperPluginManager;
34
35     /**
36      * DevelDumperCommand constructor.
37      */
38     public function __construct(
39         DevelDumperPluginManager $develDumperPluginManager = null
40     ) {
41         $this->develDumperPluginManager = $develDumperPluginManager;
42
43         parent::__construct();
44     }
45
46     /**
47      * {@inheritdoc}
48      */
49     protected function configure()
50     {
51         $this
52             ->setName('devel:dumper')
53             ->setDescription($this->trans('Change the devel dumper plugin'))
54             ->addArgument(
55                 'dumper',
56                 InputArgument::OPTIONAL,
57                 $this->trans('Name of the devel dumper plugin')
58             );
59     }
60
61     /**
62      * {@inheritdoc}
63      */
64     protected function interact(InputInterface $input, OutputInterface $output)
65     {
66         $io = new DrupalStyle($input, $output);
67         if (!\Drupal::moduleHandler()->moduleExists('devel')) {
68             $io->error($this->trans('Devel must be installed'));
69
70             return 1;
71         }
72
73         $dumper = $input->getArgument('dumper');
74         if (!$dumper) {
75             /* @var string[] $dumpKeys */
76             $dumpKeys = $this->getDumperKeys();
77
78             $dumper = $io->choice(
79                 $this->trans('Select a Debug Dumper'),
80                 $dumpKeys,
81                 'kint', //Make kint the default for quick 'switchback'
82                 false
83             );
84
85             $input->setArgument('dumper', $dumper);
86         }
87     }
88
89     /**
90      * {@inheritdoc}
91      */
92     protected function execute(InputInterface $input, OutputInterface $output)
93     {
94         $io = new DrupalStyle($input, $output);
95
96         //Check the dumper actually exists
97         $dumper = $input->getArgument('dumper');
98         $dumpKeys = $this->getDumperKeys();
99         if (!in_array($dumper, $dumpKeys)) {
100             $io->error($this->trans('Dumper does not exist'));
101
102             return 1;
103         }
104         /* @var ConfigFactory $configFactory */
105         $configFactory = \Drupal::configFactory();
106         /* @var Config $develSettings */
107         $develSettings = $configFactory->getEditable('devel.settings');
108         $develSettings->set('devel_dumper', $dumper)->save();
109         $io->info(
110             sprintf(
111                 $this->trans('Devel Dumper set to: %s'),
112                 $configFactory->get('devel.settings')->get('devel_dumper')
113             )
114         );
115     }
116
117     protected function getDumperKeys()
118     {
119         /* @var DevelDumperPluginManager $manager */
120         $plugins = $this->develDumperPluginManager->getDefinitions();
121         return array_keys($plugins);
122     }
123 }