protected function execute(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); $language = $input->getArgument('language'); $tableHeader = [$this->trans('commands.locale.translation.status.messages.project'), $this->trans('commands.locale.translation.status.messages.version'), $this->trans('commands.locale.translation.status.messages.local-age'), $this->trans('commands.locale.translation.status.messages.remote-age'), $this->trans('commands.locale.translation.status.messages.info')]; $locale = $this->extensionManager->getModule('locale'); $this->site->loadLegacyFile($locale->getPath(true) . '/locale.compare.inc'); $languages = locale_translatable_language_list(); $status = locale_translation_get_status(); if (!$languages) { $io->info($this->trans('commands.locale.translation.status.messages.no-languages')); return; } elseif (empty($status)) { $io->info($this->trans('commands.locale.translation.status.messages.no-translations')); return; } if ($languages) { $projectsStatus = $this->projectsStatus(); foreach ($projectsStatus as $langcode => $rows) { $tableRows = []; if ($language != '' && !($language == $langcode || strtolower($language) == strtolower($languages[$langcode]->getName()))) { continue; } $io->info($languages[$langcode]->getName()); foreach ($rows as $row) { if ($row[0] == 'drupal') { $row[0] = $this->trans('commands.common.messages.drupal-core'); } $tableRows[] = $row; } $io->table($tableHeader, $tableRows, 'compact'); } } }
/** * Generator Plugin Block. * * @param $module * @param $class * @param $provider_id */ public function generate($module, $class, $provider_id) { $parameters = ['module' => $module, 'class' => $class]; $this->renderFile('module/src/Authentication/Provider/authentication-provider.php.twig', $this->extensionManager->getModule($module)->getAuthenticationPath('Provider') . '/' . $class . '.php', $parameters); $parameters = ['module' => $module, 'class' => $class, 'class_path' => sprintf('Drupal\\%s\\Authentication\\Provider\\%s', $module, $class), 'name' => 'authentication.' . $module, 'services' => [['name' => 'config.factory'], ['name' => 'entity_type.manager']], 'file_exists' => file_exists($this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml'), 'tags' => ['name' => 'authentication_provider', 'provider_id' => $provider_id, 'priority' => '100']]; $this->renderFile('module/services.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml', $parameters, FILE_APPEND); }
protected function execute(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); $module = $input->getArgument('module'); $fullPath = $input->getOption('absolute'); $module = $this->extensionManager->getModule($module); $io->info($module->getPath($fullPath)); }
/** * Generate. * * @param string $module Module name * @param string $name Command name * @param string $class Class name * @param boolean $containerAware Container Aware command * @param array $services Services array */ public function generate($module, $name, $class, $containerAware, $services) { $command_key = str_replace(':', '.', $name); $parameters = ['module' => $module, 'name' => $name, 'class_name' => $class, 'container_aware' => $containerAware, 'command_key' => $command_key, 'services' => $services, 'tags' => ['name' => 'console.command'], 'class_path' => sprintf('Drupal\\%s\\Command\\%s', $module, $class), 'file_exists' => file_exists($this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml')]; $this->renderFile('module/src/Command/command.php.twig', $this->extensionManager->getModule($module)->getCommandDirectory() . '/' . $class . '.php', $parameters); $parameters['name'] = $module . '.' . str_replace(':', '_', $name); $this->renderFile('module/services.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml', $parameters, FILE_APPEND); $this->renderFile('module/src/Command/console/translations/en/command.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/console/translations/en/' . $command_key . '.yml'); }
public function generate($module, $class, $routes, $test, $services) { $parameters = ['class_name' => $class, 'services' => $services, 'module' => $module, 'routes' => $routes]; $this->renderFile('module/src/Controller/controller.php.twig', $this->extensionManager->getModule($module)->getControllerPath() . '/' . $class . '.php', $parameters); $this->renderFile('module/routing-controller.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.routing.yml', $parameters, FILE_APPEND); if ($test) { $this->renderFile('module/Tests/Controller/controller.php.twig', $this->extensionManager->getModule($module)->getTestPath('Controller') . '/' . $class . 'Test.php', $parameters); } }
/** * @param $module * @param $permissions * @param $learning */ public function generate($module, $permissions, $learning) { $parameters = array('module_name' => $module, 'permissions' => $permissions); $this->renderFile('module/permission.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.permissions.yml', $parameters, FILE_APPEND); $content = $this->renderer->render('module/permission-routing.yml.twig', $parameters); if ($learning) { echo 'You can use this permission in the routing file like this:' . PHP_EOL; echo $content; } }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration if (!$this->confirmGeneration($io, $yes)) { return; } $machine_name = $input->getOption('module'); $file_path = $this->extensionManager->getModule($machine_name)->getPath(); $generator = $this->generator; $generator->generate($machine_name, $file_path); }
/** * Generator Entity. * * @param string $module Module name * @param string $entity_name Entity machine name * @param string $entity_class Entity class name * @param string $label Entity label * @param string $base_path Base path * @param string $bundle_of Entity machine name of the content entity this config entity acts as a bundle for. */ public function generate($module, $entity_name, $entity_class, $label, $base_path, $bundle_of = null) { $parameters = ['module' => $module, 'entity_name' => $entity_name, 'entity_class' => $entity_class, 'label' => $label, 'bundle_of' => $bundle_of, 'base_path' => $base_path]; $this->renderFile('module/config/schema/entity.schema.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/config/schema/' . $entity_name . '.schema.yml', $parameters); $this->renderFile('module/links.menu-entity-config.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.links.menu.yml', $parameters, FILE_APPEND); $this->renderFile('module/links.action-entity.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.links.action.yml', $parameters, FILE_APPEND); $this->renderFile('module/src/Entity/interface-entity.php.twig', $this->extensionManager->getModule($module)->getEntityPath() . '/' . $entity_class . 'Interface.php', $parameters); $this->renderFile('module/src/Entity/entity.php.twig', $this->extensionManager->getModule($module)->getEntityPath() . '/' . $entity_class . '.php', $parameters); $this->renderFile('module/src/entity-route-provider.php.twig', $this->extensionManager->getModule($module)->getSourcePath() . '/' . $entity_class . 'HtmlRouteProvider.php', $parameters); $this->renderFile('module/src/Form/entity.php.twig', $this->extensionManager->getModule($module)->getFormPath() . '/' . $entity_class . 'Form.php', $parameters); $this->renderFile('module/src/Form/entity-delete.php.twig', $this->extensionManager->getModule($module)->getFormPath() . '/' . $entity_class . 'DeleteForm.php', $parameters); $this->renderFile('module/src/entity-listbuilder.php.twig', $this->extensionManager->getModule($module)->getSourcePath() . '/' . $entity_class . 'ListBuilder.php', $parameters); }
/** * @param $module * @param $class_name * @param $services * @param $inputs * @param $form_id * @param $form_type * @param $path * @param $menu_link_gen * @param $menu_link_title * @param $menu_parent * @param $menu_link_desc */ public function generate($module, $class_name, $form_id, $form_type, $services, $inputs, $path, $menu_link_gen, $menu_link_title, $menu_parent, $menu_link_desc) { $class_name_short = strtolower($this->stringConverter->removeSuffix($class_name)); $parameters = array('class_name' => $class_name, 'services' => $services, 'inputs' => $inputs, 'module_name' => $module, 'form_id' => $form_id, 'path' => $path, 'route_name' => $class_name, 'menu_link_title' => $menu_link_title, 'menu_parent' => $menu_parent, 'menu_link_desc' => $menu_link_desc, 'class_name_short' => $class_name_short); if ($form_type == 'ConfigFormBase') { $template = 'module/src/Form/form-config.php.twig'; $parameters['config_form'] = true; } else { $template = 'module/src/Form/form.php.twig'; $parameters['config_form'] = false; } $this->renderFile('module/routing-form.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.routing.yml', $parameters, FILE_APPEND); $this->renderFile($template, $this->extensionManager->getModule($module)->getFormPath() . '/' . $class_name . '.php', $parameters); // Render defaults YML file. $this->renderFile('module/config/install/field.default.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/config/install/' . $module . '.' . $class_name_short . '.yml', $parameters); if ($menu_link_gen == true) { $this->renderFile('module/links.menu.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.links.menu.yml', $parameters, FILE_APPEND); } }
protected function setDirectory($target, $template, $module, $class) { $default_path = '/modules/custom/' . $module . '/src/'; $directory = ''; switch ($template) { case 'service.php.twig': $default_target = $this->extensionManager->getModule($module)->getPath() . '/src/' . $class . '.php'; $custom_target = $this->extensionManager->getModule($module)->getPath() . '/' . $target . '/' . $class . '.php'; $directory = strcmp($target, $default_path) == 0 ? $default_target : $custom_target; break; case 'interface.php.twig': $default_target = $this->extensionManager->getModule($module)->getPath() . '/src/' . $class . '.php'; $custom_target = $this->extensionManager->getModule($module)->getPath() . '/' . $target . '/' . $class . '.php'; $directory = strcmp($target, $default_path) == 0 ? $default_target : $custom_target; break; default: // code... break; } return $directory; }
/** * @param \Drupal\Console\Style\DrupalStyle $io * @param $updates */ private function runUpdates(DrupalStyle $io, $updates) { foreach ($updates as $module_name => $module_updates) { $this->site->loadLegacyFile($this->extensionManager->getModule($module_name)->getPath() . '/' . $module_name . '.install', false); foreach ($module_updates['pending'] as $update_number => $update) { if ($this->module != 'all' && $this->update_n !== null && $this->update_n != $update_number) { continue; } if ($this->update_n > $module_updates['start']) { $io->info($this->trans('commands.update.execute.messages.executing-required-previous-updates')); } for ($update_index = $module_updates['start']; $update_index <= $update_number; $update_index++) { $io->info(sprintf($this->trans('commands.update.execute.messages.executing-update'), $update_index, $module_name)); try { $this->moduleHandler->invoke($module_name, 'update_' . $update_index); } catch (\Exception $e) { watchdog_exception('update', $e); $io->error($e->getMessage()); } drupal_set_installed_schema_version($module_name, $update_index); } } } }
public function generate($module, $bundleName, $bundleTitle) { $parameters = ['module' => $module, 'bundle_name' => $bundleName, 'bundle_title' => $bundleTitle]; /** * Generate core.entity_form_display.node.{ bundle_name }.default.yml */ $this->renderFile('module/src/Entity/Bundle/core.entity_form_display.node.default.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/config/install/core.entity_form_display.node.' . $bundleName . '.default.yml', $parameters); /** * Generate core.entity_view_display.node.{ bundle_name }.default.yml */ $this->renderFile('module/src/Entity/Bundle/core.entity_view_display.node.default.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/config/install/core.entity_view_display.node.' . $bundleName . '.default.yml', $parameters); /** * Generate core.entity_view_display.node.{ bundle_name }.teaser.yml */ $this->renderFile('module/src/Entity/Bundle/core.entity_view_display.node.teaser.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/config/install/core.entity_view_display.node.' . $bundleName . '.teaser.yml', $parameters); /** * Generate field.field.node.{ bundle_name }.body.yml */ $this->renderFile('module/src/Entity/Bundle/field.field.node.body.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/config/install/field.field.node.' . $bundleName . '.body.yml', $parameters); /** * Generate node.type.{ bundle_name }.yml */ $this->renderFile('module/src/Entity/Bundle/node.type.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/config/install/node.type.' . $bundleName . '.yml', $parameters); }
/** * Generator Post Update Name function. * * @param $module * @param $post_update_name */ public function generate($module, $description) { $module_path = $this->extensionManager->getModule($module)->getPath(); $parameters = ['machine_name' => $module, 'description' => $description, 'file_exists' => file_exists($module_path . '/' . $module . '.module')]; $this->renderFile('module/src/help.php.twig', $module_path . '/' . $module . '.module', $parameters, FILE_APPEND); }
/** * Generator Entity. * * @param string $module Module name * @param string $entity_name Entity machine name * @param string $entity_class Entity class name * @param string $label Entity label * @param string $base_path Base path * @param string $is_translatable Translation configuration * @param string $bundle_entity_type (Config) entity type acting as bundle */ public function generate($module, $entity_name, $entity_class, $label, $base_path, $is_translatable, $bundle_entity_type = null) { $parameters = ['module' => $module, 'entity_name' => $entity_name, 'entity_class' => $entity_class, 'label' => $label, 'bundle_entity_type' => $bundle_entity_type, 'base_path' => $base_path, 'is_translatable' => $is_translatable]; $this->renderFile('module/permissions-entity-content.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.permissions.yml', $parameters, FILE_APPEND); $this->renderFile('module/links.menu-entity-content.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.links.menu.yml', $parameters, FILE_APPEND); $this->renderFile('module/links.task-entity-content.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.links.task.yml', $parameters, FILE_APPEND); $this->renderFile('module/links.action-entity-content.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.links.action.yml', $parameters, FILE_APPEND); $this->renderFile('module/src/accesscontrolhandler-entity-content.php.twig', $this->extensionManager->getModule($module)->getSourcePath() . '/' . $entity_class . 'AccessControlHandler.php', $parameters); if ($is_translatable) { $this->renderFile('module/src/entity-translation-handler.php.twig', $this->extensionManager->getModule($module)->getSourcePath() . '/' . $entity_class . 'TranslationHandler.php', $parameters); } $this->renderFile('module/src/Entity/interface-entity-content.php.twig', $this->extensionManager->getModule($module)->getEntityPath() . '/' . $entity_class . 'Interface.php', $parameters); $this->renderFile('module/src/Entity/entity-content.php.twig', $this->extensionManager->getModule($module)->getEntityPath() . '/' . $entity_class . '.php', $parameters); $this->renderFile('module/src/entity-content-route-provider.php.twig', $this->extensionManager->getModule($module)->getSourcePath() . '/' . $entity_class . 'HtmlRouteProvider.php', $parameters); $this->renderFile('module/src/Entity/entity-content-views-data.php.twig', $this->extensionManager->getModule($module)->getEntityPath() . '/' . $entity_class . 'ViewsData.php', $parameters); $this->renderFile('module/src/listbuilder-entity-content.php.twig', $this->extensionManager->getModule($module)->getSourcePath() . '/' . $entity_class . 'ListBuilder.php', $parameters); $this->renderFile('module/src/Entity/Form/entity-settings.php.twig', $this->extensionManager->getModule($module)->getFormPath() . '/' . $entity_class . 'SettingsForm.php', $parameters); $this->renderFile('module/src/Entity/Form/entity-content.php.twig', $this->extensionManager->getModule($module)->getFormPath() . '/' . $entity_class . 'Form.php', $parameters); $this->renderFile('module/src/Entity/Form/entity-content-delete.php.twig', $this->extensionManager->getModule($module)->getFormPath() . '/' . $entity_class . 'DeleteForm.php', $parameters); $this->renderFile('module/entity-content-page.php.twig', $this->extensionManager->getModule($module)->getSourcePath() . '/' . $entity_name . '.page.inc', $parameters); $this->renderFile('module/templates/entity-html.twig', $this->extensionManager->getModule($module)->getTemplatePath() . '/' . $entity_name . '.html.twig', $parameters); if ($bundle_entity_type) { $this->renderFile('module/templates/entity-with-bundle-content-add-list-html.twig', $this->extensionManager->getModule($module)->getTemplatePath() . '/' . str_replace('_', '-', $entity_name) . '-content-add-list.html.twig', $parameters); // Check for hook_theme() in module file and warn ... $module_filename = $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module'; // Check if the module file exists. if (!file_exists($module_filename)) { $this->renderFile('module/module.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module', ['machine_name' => $module, 'description' => '']); } $module_file_contents = file_get_contents($module_filename); if (strpos($module_file_contents, 'function ' . $module . '_theme') !== false) { $this->io->warning(["It looks like you have a hook_theme already declared", "Please manually merge the two hook_theme() implementations in", $module_filename]); } $this->renderFile('module/src/Entity/entity-content-with-bundle.theme.php.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module', $parameters, FILE_APPEND); if (strpos($module_file_contents, 'function ' . $module . '_theme_suggestions_' . $entity_name) !== false) { $this->io->warning(["It looks like you have a hook_theme_suggestions_HOOK already declared", "Please manually merge the two hook_theme_suggestions_HOOK() implementations in", $module_filename]); } $this->renderFile('module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module', $parameters, FILE_APPEND); } $content = $this->twigrenderer->render('module/src/Entity/entity-content.theme.php.twig', $parameters); //@TODO: /** if ($this->isLearning()) { $this->io->commentBlock( [ 'Add this to your hook_theme:', $content ] ); } */ }
/** * Generator Plugin Block. * * @param $module * @param $form_id * @param $inputs * @param $metadata */ public function generate($module, $form_id, $inputs, $metadata) { $parameters = ['module' => $module, 'form_id' => $form_id, 'inputs' => $inputs, 'metadata' => $metadata]; $module_path = $this->extensionManager->getModule($module)->getPath(); $this->renderFile('module/src/Form/form-alter.php.twig', $module_path . '/' . $module . '.module', $parameters, FILE_APPEND); }
/** * Generator Update N function. * * @param $module * @param $update_number */ public function generate($module, $update_number) { $parameters = ['module' => $module, 'update_number' => $update_number]; $module_path = $this->extensionManager->getModule($module)->getPath(); $this->renderFile('module/src/update.php.twig', $module_path . '/' . $module . '.module', $parameters, FILE_APPEND); }
/** * Generator Plugin Field Formatter. * * @param string $module Module name * @param string $class_name Plugin Class name * @param string $label Plugin label * @param string $plugin_id Plugin id * @param string $field_type Field type this formatter supports */ public function generate($module, $class_machine_name, $class_name, $title, $description) { $parameters = ['module' => $module, 'class_machine_name' => $class_machine_name, 'class_name' => $class_name, 'title' => $title, 'description' => $description]; $this->renderFile('module/module.views.inc.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.views.inc', $parameters); $this->renderFile('module/src/Plugin/Views/field/field.php.twig', $this->extensionManager->getPluginPath($module, 'views/field') . '/' . $class_name . '.php', $parameters); }
/** * Generator Post Update Name function. * * @param $module * @param $post_update_name */ public function generate($module, $post_update_name) { $module_path = $this->extensionManager->getModule($module)->getPath(); $parameters = ['module' => $module, 'post_update_name' => $post_update_name, 'file_exists' => file_exists($module_path . '/' . $module . '.post_update.php')]; $this->renderFile('module/src/post-update.php.twig', $module_path . '/' . $module . '.post_update.php', $parameters, FILE_APPEND); }
/** * Generator Service. * * @param string $module Module name * @param string $name Service name * @param string $class Class name * @param array $services List of services */ public function generate($module, $name, $class, $services) { $parameters = ['module' => $module, 'name' => $name, 'class' => $class, 'class_path' => sprintf('Drupal\\%s\\TwigExtension\\%s', $module, $class), 'services' => $services, 'tags' => ['name' => 'twig.extension'], 'file_exists' => file_exists($this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml')]; $this->renderFile('module/services.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml', $parameters, FILE_APPEND); $this->renderFile('module/src/TwigExtension/twig-extension.php.twig', $this->extensionManager->getModule($module)->getPath() . '/src/TwigExtension/' . $class . '.php', $parameters); }
/** * Generator Service. * * @param string $module Module name * @param string $name Service name * @param string $class Class name */ public function generate($module, $name, $class) { $parameters = ['module' => $module, 'name' => $name, 'class' => $class, 'class_path' => sprintf('Drupal\\%s\\Routing\\%s', $module, $class), 'tags' => array('name' => 'event_subscriber'), 'file_exists' => file_exists($this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml')]; $this->renderFile('module/src/Routing/route-subscriber.php.twig', $this->extensionManager->getModule($module)->getRoutingPath() . '/' . $class . '.php', $parameters); $this->renderFile('module/services.yml.twig', $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml', $parameters, FILE_APPEND); }