3 namespace Drupal\Console\Core\Command\Generate;
5 use Drupal\Console\Core\Command\Command;
6 use Drupal\Console\Core\Utils\ConfigurationManager;
7 use Drupal\Console\Core\Utils\DrupalFinder;
8 use Drupal\Console\Core\Generator\SiteAliasGenerator;
9 use Symfony\Component\Console\Input\InputInterface;
10 use Symfony\Component\Console\Input\InputOption;
11 use Symfony\Component\Console\Output\OutputInterface;
14 * Class SiteAliasCommand
16 * @package Drupal\Console\Command\Generate
18 class SiteAliasCommand extends Command
21 * @var SiteAliasGenerator
28 protected $drupalFinder;
31 * @var ConfigurationManager
33 protected $configurationManager;
47 private $extraOptions = [
50 'vagrant' => '-o PasswordAuthentication=no -i ~/.vagrant.d/insecure_private_key',
54 'drupal4docker' => 'docker-compose exec --user=82 php'
58 public function __construct(
59 SiteAliasGenerator $generator,
60 ConfigurationManager $configurationManager,
61 DrupalFinder $drupalFinder
63 $this->generator = $generator;
64 $this->configurationManager = $configurationManager;
65 $this->drupalFinder = $drupalFinder;
66 parent::__construct();
72 protected function configure()
75 ->setName('generate:site:alias')
77 $this->trans('commands.generate.site.alias.description')
79 ->setHelp($this->trans('commands.generate.site.alias.help'))
83 InputOption::VALUE_NONE,
84 $this->trans('commands.generate.site.alias.options.site')
89 InputOption::VALUE_REQUIRED,
90 $this->trans('commands.generate.site.alias.options.name')
95 InputOption::VALUE_REQUIRED,
96 $this->trans('commands.generate.site.alias.options.environment')
101 InputOption::VALUE_REQUIRED,
102 $this->trans('commands.generate.site.alias.options.type')
107 InputOption::VALUE_OPTIONAL,
108 $this->trans('commands.generate.site.alias.options.composer-root')
113 InputOption::VALUE_OPTIONAL,
114 $this->trans('commands.generate.site.alias.options.site-uri')
119 InputOption::VALUE_OPTIONAL,
120 $this->trans('commands.generate.site.alias.options.host')
125 InputOption::VALUE_OPTIONAL,
126 $this->trans('commands.generate.site.alias.options.user')
131 InputOption::VALUE_OPTIONAL,
132 $this->trans('commands.generate.site.alias.options.port')
137 InputOption::VALUE_OPTIONAL,
138 $this->trans('commands.generate.site.alias.options.extra-options')
143 InputOption::VALUE_REQUIRED,
144 $this->trans('commands.generate.site.alias.options.directory')
146 ->setAliases(['gsa']);
152 protected function interact(
153 InputInterface $input,
154 OutputInterface $output
156 $site = $input->getOption('site');
157 $name = $input->getOption('name');
159 $sites = $this->configurationManager->getSites();
160 if (!empty($sites)) {
161 $sites = array_keys($this->configurationManager->getSites());
162 $name = $this->getIo()->choiceNoList(
163 $this->trans('commands.generate.site.alias.questions.name'),
169 if (is_numeric($name)) {
170 $name = $sites[$name];
173 $name = $this->getIo()->ask(
174 $this->trans('commands.generate.site.alias.questions.name')
178 $input->setOption('name', $name);
181 $environment = $input->getOption('environment');
183 $environment = $this->getIo()->ask(
184 $this->trans('commands.generate.site.alias.questions.environment'),
188 $input->setOption('environment', $environment);
191 $type = $input->getOption('type');
193 $type = $this->getIo()->choiceNoList(
194 $this->trans('commands.generate.site.alias.questions.type'),
198 $input->setOption('type', $type);
201 $composerRoot = $input->getOption('composer-root');
202 if (!$composerRoot) {
203 $root = $this->drupalFinder->getComposerRoot();
204 if ($type === 'container') {
205 $root = '/var/www/html';
207 if ($type === 'ssh') {
208 $root = '/var/www/'.$name;
210 $composerRoot = $this->getIo()->ask(
211 $this->trans('commands.generate.site.alias.questions.composer-root'),
215 $input->setOption('composer-root', $composerRoot);
218 $siteUri = $input->getOption('site-uri');
220 $uri = explode('.', $environment);
226 $siteUri = $this->getIo()->askEmpty(
227 $this->trans('commands.generate.site.alias.questions.site-uri'),
231 $input->setOption('site-uri', $siteUri);
234 if ($type !== 'local') {
235 $extraOptions = $input->getOption('extra-options');
236 if (!$extraOptions) {
237 $options = array_values($this->extraOptions[$type]);
239 $extraOptions = $this->getIo()->choiceNoList(
241 'commands.generate.site.alias.questions.extra-options'
247 $input->setOption('extra-options', $extraOptions);
250 $host = $input->getOption('host');
252 $host = $this->getIo()->askEmpty(
253 $this->trans('commands.generate.site.alias.questions.host')
256 $input->setOption('host', $host);
259 $user = $input->getOption('user');
261 $user = $this->getIo()->askEmpty(
262 $this->trans('commands.generate.site.alias.questions.user')
265 $input->setOption('user', $user);
268 $port = $input->getOption('port');
270 $port = $this->getIo()->askEmpty(
271 $this->trans('commands.generate.site.alias.questions.port')
274 $input->setOption('port', $port);
278 $directory = $input->getOption('directory');
279 if ($site && $this->drupalFinder->getComposerRoot()) {
280 $directory = $this->drupalFinder->getComposerRoot() . '/console/';
284 $directory = $this->getIo()->choice(
285 $this->trans('commands.generate.site.alias.questions.directory'),
286 $this->configurationManager->getConfigurationDirectories()
289 $input->setOption('directory', $directory);
296 protected function execute(
297 InputInterface $input,
298 OutputInterface $output
300 $site = $input->getOption('site');
301 $directory = $input->getOption('directory');
302 if ($site && $this->drupalFinder->isValidDrupal()) {
303 $directory = $this->drupalFinder->getComposerRoot() . '/console/';
305 $this->generator->generate(
307 'name' => $input->getOption('name'),
308 'environment' => $input->getOption('environment'),
309 'type' => $input->getOption('type'),
310 'extra_options' => $input->getOption('extra-options'),
311 'root' => $input->getOption('composer-root'),
312 'uri' => $input->getOption('site-uri'),
313 'port' => $input->getOption('port'),
314 'user' => $input->getOption('user'),
315 'host' => $input->getOption('host'),
316 'directory' => $directory