setName('module:install') ->setDescription($this->trans('commands.module.install.description')) ->addArgument('module', InputArgument::REQUIRED, $this->trans('commands.module.install.options.module')); } protected function execute(InputInterface $input, OutputInterface $output) { $extension_config = $this->getConfigFactory()->getEditable('core.extension'); $moduleInstaller = $this->getModuleInstaller(); // Get info about modules available $module_data = system_rebuild_module_data(); $module = $input->getArgument('module'); $modules = array_filter(array_map('trim', explode(",", $module))); $module_list = array_combine($modules, $modules); // Determine if some module request is missing if ($missing_modules = array_diff_key($module_list, $module_data)) { $output->writeln('[+] ' . sprintf($this->trans('commands.module.install.messages.missing'), implode(", ", $modules), implode(", ", $missing_modules)) . ''); return true; } // Only process currently uninstalled modules. $installed_modules = $extension_config->get('module') ?: array(); if (!$module_list = array_diff_key($module_list, $installed_modules)) { $output->writeln('[+] ' . $this->trans('commands.module.install.messages.nothing') . ''); return true; } // Calculate dependencies and missing dependencies $dependencies = array(); $misssing_dependencies = array(); while (list($module) = each($module_list)) { foreach (array_keys($module_data[$module]->requires) as $dependency) { if (!isset($module_data[$dependency])) { $misssing_dependencies[] = $dependency; } // Skip already installed modules. if (!isset($module_list[$dependency]) && !isset($installed_modules[$dependency])) { $module_list[$dependency] = $dependency; $dependencies[] = $dependency; } } } // Error if there are missing dependencies if (!empty($misssing_dependencies)) { $output->writeln('[+] ' . sprintf($this->trans('commands.module.install.messages.missing-dependencies'), implode(", ", $modules), implode(", ", $misssing_dependencies)) . ''); return true; } // Confirm if user want to install dependencies uninstalled if ($dependencies) { $dialog = $this->getDialogHelper(); if (!$dialog->askConfirmation( $output, $dialog->getQuestion(sprintf($this->trans('commands.module.install.messages.dependencies'), implode(", ", $dependencies)), n), false ) ) { return; } } // Installing modules try { // Install the modules. $moduleInstaller->install($module_list); system_rebuild_module_data(); $output->writeln('[+] ' . sprintf($this->trans('commands.module.install.messages.success'), implode(", ", $modules)) . ''); } catch (\Exception $e) { $output->writeln('[+] ' . $e->getMessage() . ''); return; } } }