Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Theme / InstallCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Theme\InstallCommand.
6  */
7
8 namespace Drupal\Console\Command\Theme;
9
10 use Symfony\Component\Console\Input\InputArgument;
11 use Symfony\Component\Console\Input\InputOption;
12 use Symfony\Component\Console\Input\InputInterface;
13 use Symfony\Component\Console\Output\OutputInterface;
14 use Drupal\Core\Config\UnmetDependenciesException;
15
16 class InstallCommand extends ThemeBaseCommand
17 {
18     protected function configure()
19     {
20         $this
21             ->setName('theme:install')
22             ->setDescription($this->trans('commands.theme.install.description'))
23             ->addArgument(
24                 'theme',
25                 InputArgument::IS_ARRAY,
26                 $this->trans('commands.theme.install.options.theme')
27             )
28             ->addOption(
29                 'set-default',
30                 null,
31                 InputOption::VALUE_NONE,
32                 $this->trans('commands.theme.install.options.set-default')
33             )->setAliases(['thi']);
34     }
35
36     /**
37      * {@inheritdoc}
38      */
39     protected function interact(InputInterface $input, OutputInterface $output)
40     {
41         $titleTranslatableString = 'commands.theme.install.messages.disabled-themes';
42         $questionTranslatableString = 'commands.theme.install.questions.theme';
43         $autocompleteAvailableThemes = $this->getAutoCompleteList();
44         $this->getThemeArgument($titleTranslatableString, $questionTranslatableString, $autocompleteAvailableThemes);
45     }
46
47     protected function execute(InputInterface $input, OutputInterface $output)
48     {
49         $config = $this->configFactory->getEditable('system.theme');
50
51         $this->themeHandler->refreshInfo();
52         $theme = $input->getArgument('theme');
53         $default = $input->getOption('set-default');
54
55         if ($default && count($theme) > 1) {
56             $this->getIo()->error($this->trans('commands.theme.install.messages.invalid-theme-default'));
57
58             return 1;
59         }
60
61         $this->prepareThemesArrays($theme);
62         if (count($this->getUninstalledThemes()) > 0) {
63             try {
64                 if ($this->themeHandler->install($theme)) {
65                     if (count($this->getUninstalledThemes()) > 1) {
66                         $this->setInfoMessage('commands.theme.install.messages.themes-success', $this->getUninstalledThemes());
67                     } else {
68                         if ($default) {
69                             // Set the default theme.
70                             $config->set('default', $theme[0])->save();
71                             $this->setInfoMessage('commands.theme.install.messages.theme-default-success', array_shift($this->getUninstalledThemes()));
72                         } else {
73                             $this->setInfoMessage('commands.theme.install.messages.theme-success', array_shift($this->getUninstalledThemes()));
74                         }
75                     }
76                 }
77             } catch (UnmetDependenciesException $e) {
78                 $this->setErrorMessage('commands.theme.install.messages.dependencies', $theme);
79                 return 1;
80             }
81         } elseif (empty($this->getUninstalledThemes()) && count($this->getAvailableThemes()) > 0) {
82             if (count($this->getAvailableThemes()) > 1) {
83                 $this->setInfoMessage('commands.theme.install.messages.themes-nothing', $this->getAvailableThemes());
84             } else {
85                 $this->setInfoMessage('commands.theme.install.messages.theme-nothing', $this->getAvailableThemes());
86             }
87         } else {
88             if (count($this->getUnavailableThemes()) > 1) {
89                 $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
90             } else {
91                 $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
92             }
93         }
94
95         // Run cache rebuild to see changes in Web UI
96         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
97
98         return 0;
99     }
100 }