/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { /* Get Option vendor */ $inputVendor = $input->getOption('vendor'); if ($inputVendor) { $preg = '/' . $inputVendor . '_(.*)/i'; $listModules = array_flip(preg_grep($preg, $this->fullModuleList->getNames())); } else { $listModules = array_flip($this->fullModuleList->getNames()); } /* Get Option enabled */ $inputEnabled = $input->getOption('enabled'); if ($inputEnabled) { if ($inputEnabled != 'n' && $inputEnabled != 'y') { $output->writeln("<error>--enabled only can be 'y' or 'n'</error>"); die; } } $modules = $this->getModulesByCriteria($listModules, $inputEnabled); if (count($modules)) { $this->ouputHeader($output); $this->ouputResult($output, $modules); } else { $output->writeln('<error>Not exist modules with these criteria</error>'); } }
/** * Check for dependencies to modules, return error messages * * @param string[] $modules * @return string[] */ private function checkDependencies(array $modules) { $messages = []; $dependencies = $this->dependencyChecker->checkDependenciesWhenDisableModules($modules, $this->fullModuleList->getNames()); foreach ($dependencies as $module => $dependingModules) { if (!empty($dependingModules)) { $messages[] = "<error>Cannot uninstall module '{$module}' because the following module(s) depend on it:</error>" . PHP_EOL . "\t<error>" . implode('</error>' . PHP_EOL . "\t<error>", array_keys($dependingModules)) . "</error>"; } } return $messages; }
/** * Get full list of modules as an associative array * * @return array */ private function getAllModules() { $modules = []; $allModules = $this->fullModuleList->getNames(); foreach ($allModules as $module) { $moduleName = $this->packageInfo->getPackageName($module); $modules[$moduleName]['name'] = $moduleName; $modules[$moduleName]['type'] = \Magento\Framework\Composer\ComposerInformation::MODULE_PACKAGE_TYPE; $modules[$moduleName]['version'] = $this->packageInfo->getVersion($module); } return $modules; }
/** * Auto discover ConfigOptionsList class and collect them. * These classes should reside in <module>/Setup directories. * * @return \Magento\Framework\Setup\ConfigOptionsListInterface[] */ public function collectOptionsLists() { $optionsList = []; // go through modules foreach ($this->fullModuleList->getNames() as $moduleName) { $optionsClassName = str_replace('_', '\\', $moduleName) . '\\Setup\\ConfigOptionsList'; if (class_exists($optionsClassName)) { $optionsClass = $this->objectManagerProvider->get()->create($optionsClassName); if ($optionsClass instanceof ConfigOptionsListInterface) { $optionsList[$moduleName] = $optionsClass; } } } // check Setup $setupOptionsClassName = 'Magento\\Setup\\Model\\ConfigOptionsList'; if (class_exists($setupOptionsClassName)) { $setupOptionsClass = $this->serviceLocator->get($setupOptionsClassName); if ($setupOptionsClass instanceof ConfigOptionsListInterface) { $optionsList['setup'] = $setupOptionsClass; } } return $optionsList; }