3 namespace Drupal\Console\Command\Shared;
8 * @package Drupal\Console\Command
13 * Ask the user to choose a module or profile.
15 * @param bool $showProfile
16 * If profiles should be discovered.
19 * When no modules are found.
23 public function moduleQuestion($showProfile = true)
25 $modules = $this->extensionManager->discoverModules()
32 $profiles = $this->extensionManager->discoverProfiles()
39 $modules = array_merge($modules, $profiles);
42 if (empty($modules)) {
43 throw new \Exception('No extension available, execute the proper generator command to generate one.');
46 $module = $this->getIo()->choiceNoList(
47 $this->trans('commands.common.questions.module'),
55 * Verify that install requirements for a list of modules are met.
57 * @param string[] $module
58 * List of modules to verify.
61 * When one or more requirements are not met.
63 public function moduleRequirement(array $module)
65 // TODO: Module dependencies should also be checked
66 // for unmet requirements recursively.
68 foreach ($module as $module_name) {
69 module_load_install($module_name);
70 if ($requirements = \Drupal::moduleHandler()->invoke($module_name, 'requirements', ['install'])) {
71 foreach ($requirements as $requirement) {
72 if (isset($requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) {
73 $this->getIo()->info("Module '{$module_name}' cannot be installed: " . $requirement['title'] . ' | ' . $requirement['value']);
80 throw new \Exception("Some module install requirements are not met.");
85 * Get module name from user.
87 * @return mixed|string
90 * When module is not found.
92 public function getModuleOption()
94 $input = $this->getIo()->getInput();
95 $module = $input->getOption('module');
97 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
98 $module = $this->moduleQuestion();
99 $input->setOption('module', $module);
101 $missing_modules = $this->validator->getMissingModules([$module]);
102 if ($missing_modules) {
103 throw new \Exception(
106 'commands.module.download.messages.no-releases'