5 * Contains \Drupal\Console\Command\Theme\InstallCommand.
8 namespace Drupal\Console\Command\Theme;
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;
16 class InstallCommand extends ThemeBaseCommand
18 protected function configure()
21 ->setName('theme:install')
22 ->setDescription($this->trans('commands.theme.install.description'))
25 InputArgument::IS_ARRAY,
26 $this->trans('commands.theme.install.options.theme')
31 InputOption::VALUE_NONE,
32 $this->trans('commands.theme.install.options.set-default')
33 )->setAliases(['thi']);
39 protected function interact(InputInterface $input, OutputInterface $output)
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);
47 protected function execute(InputInterface $input, OutputInterface $output)
49 $config = $this->configFactory->getEditable('system.theme');
51 $this->themeHandler->refreshInfo();
52 $theme = $input->getArgument('theme');
53 $default = $input->getOption('set-default');
55 if ($default && count($theme) > 1) {
56 $this->getIo()->error($this->trans('commands.theme.install.messages.invalid-theme-default'));
61 $this->prepareThemesArrays($theme);
62 if (count($this->getUninstalledThemes()) > 0) {
64 if ($this->themeHandler->install($theme)) {
65 if (count($this->getUninstalledThemes()) > 1) {
66 $this->setInfoMessage('commands.theme.install.messages.themes-success', $this->getUninstalledThemes());
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()));
73 $this->setInfoMessage('commands.theme.install.messages.theme-success', array_shift($this->getUninstalledThemes()));
77 } catch (UnmetDependenciesException $e) {
78 $this->setErrorMessage('commands.theme.install.messages.dependencies', $theme);
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());
85 $this->setInfoMessage('commands.theme.install.messages.theme-nothing', $this->getAvailableThemes());
88 if (count($this->getUnavailableThemes()) > 1) {
89 $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
91 $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
95 // Run cache rebuild to see changes in Web UI
96 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);