configurationManager = $configurationManager; $this->site = $site; $this->httpClient = $httpClient; parent::__construct(); } protected function configure() { $this ->setName('module:debug') ->setDescription($this->trans('commands.module.debug.description')) ->addArgument( 'module', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, $this->trans('commands.module.debug.module') ) ->addOption( 'status', null, InputOption::VALUE_OPTIONAL, $this->trans('commands.module.debug.options.status') ) ->addOption( 'type', null, InputOption::VALUE_OPTIONAL, $this->trans('commands.module.debug.options.type') ); } protected function execute(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); $this->site->loadLegacyFile('/core/modules/system/system.module'); $status = strtolower($input->getOption('status')); $type = strtolower($input->getOption('type')); $modules = strtolower($input->getArgument('module')); if ($modules) { $config = $this->configurationManager->getConfiguration(); $repo = $config->get('application.composer.repositories.default'); foreach ($modules as $module) { $url = sprintf( '%s/packages/drupal/%s.json', $config->get('application.composer.packages.default'), $module ); try { $data = $this->httpClient->getUrlAsJson($repo . $url); } catch (\Exception $e) { $io->error( sprintf( $this->trans('commands.module.debug.messages.no-results'), $module ) ); return 1; } $tableHeader = [ ''.$data->package->name.'' ]; $tableRows = []; $tableRows[] = [ $data->package->description ]; $tableRows[] = [ ''.$this->trans('commands.module.debug.messages.total-downloads').'', $data->package->downloads->total ]; $tableRows[] = [ ''.$this->trans('commands.module.debug.messages.total-monthly').'', $data->package->downloads->monthly ]; $tableRows[] = [ ''.$this->trans('commands.module.debug.messages.total-daily').'', $data->package->downloads->daily ]; $io->table($tableHeader, $tableRows, 'compact'); } return 0; } if ($status == 'installed') { $status = 1; } elseif ($status == 'uninstalled') { $status = 0; } else { $status = -1; } if ($type == 'core') { $type = 'core'; } elseif ($type == 'no-core') { $type = ''; } else { $type = null; } $tableHeader = [ $this->trans('commands.module.debug.messages.id'), $this->trans('commands.module.debug.messages.name'), $this->trans('commands.module.debug.messages.package'), $this->trans('commands.module.debug.messages.version'), $this->trans('commands.module.debug.messages.schema-version'), $this->trans('commands.module.debug.messages.status'), $this->trans('commands.module.debug.messages.origin'), ]; $tableRows = []; $modules = system_rebuild_module_data(); foreach ($modules as $module_id => $module) { if ($status >= 0 && $status != $module->status) { continue; } if ($type !== null && $type !== $module->origin) { continue; } $module_status = ($module->status) ? $this->trans('commands.module.debug.messages.installed') : $this->trans('commands.module.debug.messages.uninstalled'); $module_origin = ($module->origin) ? $module->origin : 'no core'; $schema_version = (drupal_get_installed_schema_version($module_id)!= -1?drupal_get_installed_schema_version($module_id): ''); $tableRows [] = [ $module_id, $module->info['name'], $module->info['package'], $module->info['version'], $schema_version, $module_status, $module_origin, ]; } $io->table($tableHeader, $tableRows, 'compact'); } }