/**
  * @param $extension
  * @return bool
  */
 protected function isExtensionInstalled($extension)
 {
     if (!$this->extensions) {
         $modules = $this->extensionManager->discoverModules()->showCore()->showNoCore()->showInstalled()->getList(TRUE);
         $themes = $this->extensionManager->discoverThemes()->showCore()->showNoCore()->showInstalled()->getList(TRUE);
         $profiles = $this->extensionManager->discoverProfiles()->showCore()->showNoCore()->showInstalled()->getList(TRUE);
         $this->extensions = array_merge($modules, $themes, $profiles);
     }
     return in_array($extension, $this->extensions);
 }
 /**
  * {@inheritdoc}
  */
 protected function interact(InputInterface $input, OutputInterface $output)
 {
     $io = new DrupalStyle($input, $output);
     // --profile option
     $profile = $input->getArgument('profile');
     if (!$profile) {
         $profiles = $this->extensionManager->discoverProfiles()->showCore()->showNoCore()->showInstalled()->showUninstalled()->getList(true);
         $profiles = array_filter($profiles, function ($profile) {
             return strpos($profile, 'testing') !== 0;
         });
         $profile = $io->choice($this->trans('commands.site.install.questions.profile'), $profiles);
         $input->setArgument('profile', $profile);
     }
     //        // --langcode option
     $langcode = $input->getOption('langcode');
     if (!$langcode) {
         $languages = $this->site->getStandardLanguages();
         $defaultLanguage = $this->configurationManager->getConfiguration()->get('application.language');
         $langcode = $io->choiceNoList($this->trans('commands.site.install.questions.langcode'), $languages, $languages[$defaultLanguage]);
         $input->setOption('langcode', $langcode);
     }
     // Use default database setting if is available
     $database = Database::getConnectionInfo();
     if (empty($database['default'])) {
         // --db-type option
         $dbType = $input->getOption('db-type');
         if (!$dbType) {
             $databases = $this->site->getDatabaseTypes();
             $dbType = $io->choice($this->trans('commands.migrate.setup.questions.db-type'), array_column($databases, 'name'));
             foreach ($databases as $dbIndex => $database) {
                 if ($database['name'] == $dbType) {
                     $dbType = $dbIndex;
                 }
             }
             $input->setOption('db-type', $dbType);
         }
         if ($dbType === 'sqlite') {
             // --db-file option
             $dbFile = $input->getOption('db-file');
             if (!$dbFile) {
                 $dbFile = $io->ask($this->trans('commands.migrate.execute.questions.db-file'), 'sites/default/files/.ht.sqlite');
                 $input->setOption('db-file', $dbFile);
             }
         } else {
             // --db-host option
             $dbHost = $input->getOption('db-host');
             if (!$dbHost) {
                 $dbHost = $this->dbHostQuestion($io);
                 $input->setOption('db-host', $dbHost);
             }
             // --db-name option
             $dbName = $input->getOption('db-name');
             if (!$dbName) {
                 $dbName = $this->dbNameQuestion($io);
                 $input->setOption('db-name', $dbName);
             }
             // --db-user option
             $dbUser = $input->getOption('db-user');
             if (!$dbUser) {
                 $dbUser = $this->dbUserQuestion($io);
                 $input->setOption('db-user', $dbUser);
             }
             // --db-pass option
             $dbPass = $input->getOption('db-pass');
             if (!$dbPass) {
                 $dbPass = $this->dbPassQuestion($io);
                 $input->setOption('db-pass', $dbPass);
             }
             // --db-port prefix
             $dbPort = $input->getOption('db-port');
             if (!$dbPort) {
                 $dbPort = $this->dbPortQuestion($io);
                 $input->setOption('db-port', $dbPort);
             }
         }
         // --db-prefix
         $dbPrefix = $input->getOption('db-prefix');
         if (!$dbPrefix) {
             $dbPrefix = $this->dbPrefixQuestion($io);
             $input->setOption('db-prefix', $dbPrefix);
         }
     } else {
         $input->setOption('db-type', $database['default']['driver']);
         $input->setOption('db-host', $database['default']['host']);
         $input->setOption('db-name', $database['default']['database']);
         $input->setOption('db-user', $database['default']['username']);
         $input->setOption('db-pass', $database['default']['password']);
         $input->setOption('db-port', $database['default']['port']);
         $input->setOption('db-prefix', $database['default']['prefix']['default']);
         $io->info(sprintf($this->trans('commands.site.install.messages.using-current-database'), $database['default']['driver'], $database['default']['database'], $database['default']['username']));
     }
     // --site-name option
     $siteName = $input->getOption('site-name');
     if (!$siteName) {
         $siteName = $io->ask($this->trans('commands.site.install.questions.site-name'), 'Drupal 8 Site Install');
         $input->setOption('site-name', $siteName);
     }
     // --site-mail option
     $siteMail = $input->getOption('site-mail');
     if (!$siteMail) {
         $siteMail = $io->ask($this->trans('commands.site.install.questions.site-mail'), '*****@*****.**');
         $input->setOption('site-mail', $siteMail);
     }
     // --account-name option
     $accountName = $input->getOption('account-name');
     if (!$accountName) {
         $accountName = $io->ask($this->trans('commands.site.install.questions.account-name'), 'admin');
         $input->setOption('account-name', $accountName);
     }
     // --account-pass option
     $accountPass = $input->getOption('account-pass');
     if (!$accountPass) {
         $accountPass = $io->askHidden($this->trans('commands.site.install.questions.account-pass'));
         $input->setOption('account-pass', $accountPass);
     }
     // --account-mail option
     $accountMail = $input->getOption('account-mail');
     if (!$accountMail) {
         $accountMail = $io->ask($this->trans('commands.site.install.questions.account-mail'), $siteMail);
         $input->setOption('account-mail', $accountMail);
     }
 }