setName('module:uninstall') ->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.uninstall.messages.missing'), implode(", ", $modules), implode(", ", $missing_modules)) . ''); return true; } // Only process currently installed modules. $installed_modules = $extension_config->get('module') ?: array(); if (!$module_list = array_intersect_key($module_list, $installed_modules)) { $output->writeln('[+] ' . $this->trans('commands.module.uninstall.messages.nothing') . ''); return true; } // Calculate $dependents $dependents = array(); while (list($module) = each($module_list)) { foreach (array_keys($module_data[$module]->required_by) as $dependent) { // Skip already uninstalled modules. if (isset($installed_modules[$dependent]) && !isset($module_list[$dependent]) && $dependent != $profile) { $dependents[] = $dependent; } } } // Error if there are missing dependencies if (!empty($dependents)) { $output->writeln('[+] ' . sprintf($this->trans('commands.module.uninstall.messages.dependents'), implode(", ", $modules), implode(", ", $dependents)) . ''); return true; } // Installing modules try { // Install the modules. $moduleInstaller->uninstall($module_list); $output->writeln('[+] ' . sprintf($this->trans('commands.module.uninstall.messages.success'), implode(", ", $modules)) . ''); } catch (\Exception $e) { $output->writeln('[+] ' . $e->getMessage() . ''); return; } } }