protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class_name = $input->getOption('class'); if (!$class_name) { $class_name = $io->ask($this->trans('commands.generate.plugin.type.yaml.options.class'), 'ExamplePlugin'); $input->setOption('class', $class_name); } // --plugin-name option $plugin_name = $input->getOption('plugin-name'); if (!$plugin_name) { $plugin_name = $io->ask($this->trans('commands.generate.plugin.type.yaml.options.plugin-name'), $this->stringConverter->camelCaseToUnderscore($class_name)); $input->setOption('plugin-name', $plugin_name); } // --plugin-file-name option $plugin_file_name = $input->getOption('plugin-file-name'); if (!$plugin_file_name) { $plugin_file_name = $io->ask($this->trans('commands.generate.plugin.type.yaml.options.plugin-file-name'), strtr($plugin_name, '_-', '..')); $input->setOption('plugin-file-name', $plugin_file_name); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class = $input->getOption('class'); if (!$class) { $class = $io->ask($this->trans('commands.generate.plugin.mail.options.class'), 'HtmlFormatterMail', function ($class) { return $this->validator->validateClassName($class); }); $input->setOption('class', $class); } // --label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.mail.options.label'), $this->stringConverter->camelCaseToHuman($class)); $input->setOption('label', $label); } // --plugin-id option $pluginId = $input->getOption('plugin-id'); if (!$pluginId) { $pluginId = $io->ask($this->trans('commands.generate.plugin.mail.options.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class)); $input->setOption('plugin-id', $pluginId); } // --services option // @see Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion $services = $this->servicesQuestion($io); $input->setOption('services', $services); }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class_name = $input->getOption('class'); if (!$class_name) { $class_name = $io->ask($this->trans('commands.generate.plugin.type.annotation.options.class'), 'ExamplePlugin'); $input->setOption('class', $class_name); } // --machine-name option $machine_name = $input->getOption('machine-name'); if (!$machine_name) { $machine_name = $io->ask($this->trans('commands.generate.plugin.type.annotation.options.machine-name'), $this->stringConverter->camelCaseToUnderscore($class_name)); $input->setOption('machine-name', $machine_name); } // --label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.type.annotation.options.label'), $this->stringConverter->camelCaseToHuman($class_name)); $input->setOption('label', $label); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } $pluginId = $input->getOption('plugin-id'); if (!$pluginId) { $plugins = $this->getPlugins(); $pluginId = $io->choiceNoList($this->trans('commands.generate.plugin.skeleton.questions.plugin'), $plugins); $input->setOption('plugin-id', $pluginId); } if (array_key_exists($pluginId, $this->pluginGeneratorsImplemented)) { $io->warning(sprintf($this->trans('commands.generate.plugin.skeleton.messages.plugin-dont-exist'), $pluginId, $this->pluginGeneratorsImplemented[$pluginId])); } // --class option $class = $input->getOption('class'); if (!$class) { $class = $io->ask($this->trans('commands.generate.plugin.skeleton.options.class'), sprintf('%s%s', 'Default', ucfirst($this->stringConverter->underscoreToCamelCase($pluginId))), function ($class) { return $this->validator->validateClassName($class); }); $input->setOption('class', $class); } // --services option // @see Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion $services = $input->getOption('services'); if (!$services) { $services = $this->servicesQuestion($io); $input->setOption('services', $services); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class_name = $input->getOption('class'); if (!$class_name) { $class_name = $io->ask($this->trans('commands.generate.plugin.views.field.questions.class'), 'CustomViewsField'); } $input->setOption('class', $class_name); // --title option $title = $input->getOption('title'); if (!$title) { $title = $io->ask($this->trans('commands.generate.plugin.views.field.questions.title'), $this->stringConverter->camelCaseToHuman($class_name)); $input->setOption('title', $title); } // --description option $description = $input->getOption('description'); if (!$description) { $description = $io->ask($this->trans('commands.generate.plugin.views.field.questions.description'), $this->trans('commands.generate.plugin.views.field.questions.description_default')); $input->setOption('description', $description); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class_name = $input->getOption('class'); if (!$class_name) { $class_name = $io->ask($this->trans('commands.generate.plugin.imageeffect.questions.class'), 'DefaultImageEffect'); $input->setOption('class', $class_name); } // --label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.imageeffect.questions.label'), $this->stringConverter->camelCaseToHuman($class_name)); $input->setOption('label', $label); } // --plugin-id option $plugin_id = $input->getOption('plugin-id'); if (!$plugin_id) { $plugin_id = $io->ask($this->trans('commands.generate.plugin.imageeffect.questions.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class_name)); $input->setOption('plugin-id', $plugin_id); } // --description option $description = $input->getOption('description'); if (!$description) { $description = $io->ask($this->trans('commands.generate.plugin.imageeffect.questions.description'), 'My Image Effect'); $input->setOption('description', $description); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); $entityTypeRepository = $this->entitytyperepository; $entity_types = $entityTypeRepository->getEntityTypeLabels(true); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); } $input->setOption('module', $module); // --class option $class = $input->getOption('class'); if (!$class) { $class = $io->ask($this->trans('commands.generate.plugin.condition.questions.class'), 'ExampleCondition'); $input->setOption('class', $class); } // --plugin label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.condition.questions.label'), $this->stringConverter->camelCaseToHuman($class)); $input->setOption('label', $label); } // --plugin-id option $pluginId = $input->getOption('plugin-id'); if (!$pluginId) { $pluginId = $io->ask($this->trans('commands.generate.plugin.condition.questions.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class)); $input->setOption('plugin-id', $pluginId); } $context_definition_id = $input->getOption('context-definition-id'); if (!$context_definition_id) { $context_type = array('language' => 'Language', "entity" => "Entity"); $context_type_sel = $io->choice($this->trans('commands.generate.plugin.condition.questions.context-type'), array_values($context_type)); $context_type_sel = array_search($context_type_sel, $context_type); if ($context_type_sel == 'language') { $context_definition_id = $context_type_sel; $context_definition_id_value = ucfirst($context_type_sel); } else { $content_entity_types_sel = $io->choice($this->trans('commands.generate.plugin.condition.questions.context-entity-type'), array_keys($entity_types)); $contextDefinitionIdList = $entity_types[$content_entity_types_sel]; $context_definition_id_sel = $io->choice($this->trans('commands.generate.plugin.condition.questions.context-definition-id'), array_values($contextDefinitionIdList)); $context_definition_id_value = array_search($context_definition_id_sel, $contextDefinitionIdList); $context_definition_id = 'entity:' . $context_definition_id_value; } $input->setOption('context-definition-id', $context_definition_id); } $context_definition_label = $input->getOption('context-definition-label'); if (!$context_definition_label) { $context_definition_label = $io->ask($this->trans('commands.generate.plugin.condition.questions.context-definition-label'), $context_definition_id_value ?: null); $input->setOption('context-definition-label', $context_definition_label); } $context_definition_required = $input->getOption('context-definition-required'); if (empty($context_definition_required)) { $context_definition_required = $io->confirm($this->trans('commands.generate.plugin.condition.questions.context-definition-required'), true); $input->setOption('context-definition-required', $context_definition_required); } }
/** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); //$stringUtils = $this->getStringHelper(); $validators = $this->validator; try { // A profile is technically also a module, so we can use the same // validator to check the name. $profile = $input->getOption('profile') ? $this->validateModuleName($input->getOption('profile')) : null; } catch (\Exception $error) { $io->error($error->getMessage()); return; } if (!$profile) { $profile = $io->ask($this->trans('commands.generate.profile.questions.profile'), '', function ($profile) use($validators) { return $validators->validateModuleName($profile); }); $input->setOption('profile', $profile); } try { $machine_name = $input->getOption('machine-name') ? $this->validateModule($input->getOption('machine-name')) : null; } catch (\Exception $error) { $io->error($error->getMessage()); return; } if (!$machine_name) { $machine_name = $io->ask($this->trans('commands.generate.profile.questions.machine-name'), $this->stringConverter->createMachineName($profile), function ($machine_name) use($validators) { return $validators->validateMachineName($machine_name); }); $input->setOption('machine-name', $machine_name); } $description = $input->getOption('description'); if (!$description) { $description = $io->ask($this->trans('commands.generate.profile.questions.description'), 'My Useful Profile'); $input->setOption('description', $description); } $core = $input->getOption('core'); if (!$core) { $core = $io->ask($this->trans('commands.generate.profile.questions.core'), '8.x'); $input->setOption('core', $core); } $dependencies = $input->getOption('dependencies'); if (!$dependencies) { if ($io->confirm($this->trans('commands.generate.profile.questions.dependencies'), true)) { $dependencies = $io->ask($this->trans('commands.generate.profile.options.dependencies'), ''); } $input->setOption('dependencies', $dependencies); } $distribution = $input->getOption('distribution'); if (!$distribution) { if ($io->confirm($this->trans('commands.generate.profile.questions.distribution'), false)) { $distribution = $io->ask($this->trans('commands.generate.profile.options.distribution'), 'My Kick-ass Distribution'); $input->setOption('distribution', $distribution); } } }
/** * @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 interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); $theme = $this->configFactory->get('system.theme')->get('default'); $themeRegions = \system_region_list($theme, REGIONS_VISIBLE); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class = $input->getOption('class'); if (!$class) { $class = $io->ask($this->trans('commands.generate.plugin.block.options.class'), 'DefaultBlock', function ($class) { return $this->validator->validateClassName($class); return $this->validator->validateClassName($class); }); $input->setOption('class', $class); } // --label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.block.options.label'), $this->stringConverter->camelCaseToHuman($class)); $input->setOption('label', $label); } // --plugin-id option $pluginId = $input->getOption('plugin-id'); if (!$pluginId) { $pluginId = $io->ask($this->trans('commands.generate.plugin.block.options.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class)); $input->setOption('plugin-id', $pluginId); } // --theme-region option $themeRegion = $input->getOption('theme-region'); if (!$themeRegion) { $themeRegion = $io->choiceNoList($this->trans('commands.generate.plugin.block.options.theme-region'), array_values($themeRegions), null, true); $themeRegion = array_search($themeRegion, $themeRegions); $input->setOption('theme-region', $themeRegion); } // --services option // @see Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion $services = $this->servicesQuestion($io); $input->setOption('services', $services); $output->writeln($this->trans('commands.generate.plugin.block.messages.inputs')); // @see Drupal\Console\Command\Shared\FormTrait::formQuestion $inputs = $this->formQuestion($io); $input->setOption('inputs', $inputs); }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class_name = $input->getOption('class'); if (!$class_name) { $stringUtils = $this->stringConverter; $class_name = $io->ask($this->trans('commands.generate.plugin.rest.resource.questions.class'), 'DefaultRestResource', function ($class_name) use($stringUtils) { if (!strlen(trim($class_name))) { throw new \Exception('The Class name can not be empty'); } return $stringUtils->humanToCamelCase($class_name); }); $input->setOption('class', $class_name); } // --plugin-id option $plugin_id = $input->getOption('plugin-id'); if (!$plugin_id) { $plugin_id = $io->ask($this->trans('commands.generate.plugin.rest.resource.questions.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class_name)); $input->setOption('plugin-id', $plugin_id); } // --plugin-label option $plugin_label = $input->getOption('plugin-label'); if (!$plugin_label) { $plugin_label = $io->ask($this->trans('commands.generate.plugin.rest.resource.questions.plugin-label'), $this->stringConverter->camelCaseToHuman($class_name)); $input->setOption('plugin-label', $plugin_label); } // --plugin-url option $plugin_url = $input->getOption('plugin-url'); if (!$plugin_url) { $plugin_url = $io->ask($this->trans('commands.generate.plugin.rest.resource.questions.plugin-url')); $input->setOption('plugin-url', $plugin_url); } // --plugin-states option $plugin_states = $input->getOption('plugin-states'); if (!$plugin_states) { $states = array('GET', 'PUT', 'POST', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'); $plugin_states = $io->choice($this->trans('commands.generate.plugin.rest.resource.questions.plugin-states'), $states, null, true); $input->setOption('plugin-states', $plugin_states); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class_name = $input->getOption('class'); if (!$class_name) { $class_name = $io->ask($this->trans('commands.generate.plugin.rulesaction.options.class'), 'DefaultAction'); $input->setOption('class', $class_name); } // --label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.rulesaction.options.label'), $this->stringConverter->camelCaseToHuman($class_name)); $input->setOption('label', $label); } // --plugin-id option $plugin_id = $input->getOption('plugin-id'); if (!$plugin_id) { $plugin_id = $io->ask($this->trans('commands.generate.plugin.rulesaction.options.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class_name)); $input->setOption('plugin-id', $plugin_id); } // --type option $type = $input->getOption('type'); if (!$type) { $type = $io->ask($this->trans('commands.generate.plugin.rulesaction.options.type'), 'user'); $input->setOption('type', $type); } // --category option $category = $input->getOption('category'); if (!$category) { $category = $io->ask($this->trans('commands.generate.plugin.rulesaction.options.category'), $this->stringConverter->camelCaseToUnderscore($class_name)); $input->setOption('category', $category); } // --context option $context = $input->getOption('context'); if (!$context) { $context = $io->ask($this->trans('commands.generate.plugin.rulesaction.options.context'), $this->stringConverter->camelCaseToUnderscore($class_name)); $input->setOption('context', $context); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class = $input->getOption('class'); if (!$class) { $class = $io->ask($this->trans('commands.generate.plugin.fieldformatter.questions.class'), 'ExampleFieldFormatter'); $input->setOption('class', $class); } // --plugin label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.fieldformatter.questions.label'), $this->stringConverter->camelCaseToHuman($class)); $input->setOption('label', $label); } // --name option $plugin_id = $input->getOption('plugin-id'); if (!$plugin_id) { $plugin_id = $io->ask($this->trans('commands.generate.plugin.fieldformatter.questions.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class)); $input->setOption('plugin-id', $plugin_id); } // --field type option $field_type = $input->getOption('field-type'); if (!$field_type) { // Gather valid field types. $field_type_options = []; foreach ($this->fieldTypePluginManager->getGroupedDefinitions($this->fieldTypePluginManager->getUiDefinitions()) as $category => $field_types) { foreach ($field_types as $name => $field_type) { $field_type_options[] = $name; } } $field_type = $io->choice($this->trans('commands.generate.plugin.fieldwidget.questions.field-type'), $field_type_options); $input->setOption('field-type', $field_type); } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class_name = $input->getOption('class'); if (!$class_name) { $class_name = $io->ask($this->trans('commands.generate.plugin.ckeditorbutton.questions.class'), 'DefaultCKEditorButton'); $input->setOption('class', $class_name); } // --label option $label = $input->getOption('label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.ckeditorbutton.questions.label'), $this->stringConverter->camelCaseToHuman($class_name)); $input->setOption('label', $label); } // --plugin-id option $plugin_id = $input->getOption('plugin-id'); if (!$plugin_id) { $plugin_id = $io->ask($this->trans('commands.generate.plugin.ckeditorbutton.questions.plugin-id'), $this->stringConverter->camelCaseToLowerCase($label)); $input->setOption('plugin-id', $plugin_id); } // --button-name option $button_name = $input->getOption('button-name'); if (!$button_name) { $button_name = $io->ask($this->trans('commands.generate.plugin.ckeditorbutton.questions.button-name'), $this->stringConverter->anyCaseToUcFirst($plugin_id)); $input->setOption('button-name', $button_name); } // --button-icon-path option $button_icon_path = $input->getOption('button-icon-path'); if (!$button_icon_path) { $button_icon_path = $io->ask($this->trans('commands.generate.plugin.ckeditorbutton.questions.button-icon-path'), drupal_get_path('module', $module) . '/js/plugins/' . $plugin_id . '/images/icon.png'); $input->setOption('button-icon-path', $button_icon_path); } }
/** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); try { $theme = $input->getOption('theme') ? $this->validator->validateModuleName($input->getOption('theme')) : null; } catch (\Exception $error) { $io->error($error->getMessage()); return; } if (!$theme) { $validators = $this->validator; $theme = $io->ask($this->trans('commands.generate.theme.questions.theme'), '', function ($theme) use($validators) { return $validators->validateModuleName($theme); }); $input->setOption('theme', $theme); } try { $machine_name = $input->getOption('machine-name') ? $this->validator->validateModule($input->getOption('machine-name')) : null; } catch (\Exception $error) { $io->error($error->getMessage()); return; } if (!$machine_name) { $machine_name = $io->ask($this->trans('commands.generate.module.questions.machine-name'), $this->stringConverter->createMachineName($theme), function ($machine_name) use($validators) { return $validators->validateMachineName($machine_name); }); $input->setOption('machine-name', $machine_name); } $theme_path = $input->getOption('theme-path'); if (!$theme_path) { $drupalRoot = $this->appRoot; $theme_path = $io->ask($this->trans('commands.generate.theme.questions.theme-path'), '/themes/custom', function ($theme_path) use($drupalRoot, $machine_name) { $theme_path = ($theme_path[0] != '/' ? '/' : '') . $theme_path; $full_path = $drupalRoot . $theme_path . '/' . $machine_name; if (file_exists($full_path)) { throw new \InvalidArgumentException(sprintf($this->trans('commands.generate.theme.errors.directory-exists'), $full_path)); } else { return $theme_path; } }); $input->setOption('theme-path', $theme_path); } $description = $input->getOption('description'); if (!$description) { $description = $io->ask($this->trans('commands.generate.theme.questions.description'), 'My Awesome theme'); $input->setOption('description', $description); } $package = $input->getOption('package'); if (!$package) { $package = $io->ask($this->trans('commands.generate.theme.questions.package'), 'Other'); $input->setOption('package', $package); } $core = $input->getOption('core'); if (!$core) { $core = $io->ask($this->trans('commands.generate.theme.questions.core'), '8.x'); $input->setOption('core', $core); } $base_theme = $input->getOption('base-theme'); if (!$base_theme) { $themes = $this->themeHandler->rebuildThemeData(); $themes['false'] = ''; uasort($themes, 'system_sort_modules_by_info_name'); $base_theme = $io->choiceNoList($this->trans('commands.generate.theme.options.base-theme'), array_keys($themes)); $input->setOption('base-theme', $base_theme); } $global_library = $input->getOption('global-library'); if (!$global_library) { $global_library = $io->ask($this->trans('commands.generate.theme.questions.global-library'), 'global-styling'); $input->setOption('global-library', $global_library); } // --regions option. $regions = $input->getOption('regions'); if (!$regions) { if ($io->confirm($this->trans('commands.generate.theme.questions.regions'), true)) { // @see \Drupal\Console\Command\Shared\ThemeRegionTrait::regionQuestion $regions = $this->regionQuestion($io); $input->setOption('regions', $regions); } } // --breakpoints option. $breakpoints = $input->getOption('breakpoints'); if (!$breakpoints) { if ($io->confirm($this->trans('commands.generate.theme.questions.breakpoints'), true)) { // @see \Drupal\Console\Command\Shared\ThemeRegionTrait::regionQuestion $breakpoints = $this->breakpointQuestion($io); $input->setOption('breakpoints', $breakpoints); } } }
/** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); $validator = $this->validator; try { $module = $input->getOption('module') ? $this->validateModuleName($input->getOption('module')) : null; } catch (\Exception $error) { $io->error($error->getMessage()); return; } if (!$module) { $module = $io->ask($this->trans('commands.generate.module.questions.module'), null, function ($module) use($validator) { return $validator->validateModuleName($module); }); $input->setOption('module', $module); } try { $machineName = $input->getOption('machine-name') ? $this->validateModule($input->getOption('machine-name')) : null; } catch (\Exception $error) { $io->error($error->getMessage()); } if (!$machineName) { $machineName = $io->ask($this->trans('commands.generate.module.questions.machine-name'), $this->stringConverter->createMachineName($module), function ($machine_name) use($validator) { return $validator->validateMachineName($machine_name); }); $input->setOption('machine-name', $machineName); } $modulePath = $input->getOption('module-path'); if (!$modulePath) { $drupalRoot = $this->appRoot; $modulePath = $io->ask($this->trans('commands.generate.module.questions.module-path'), '/modules/custom', function ($modulePath) use($drupalRoot, $machineName) { $modulePath = ($modulePath[0] != '/' ? '/' : '') . $modulePath; $fullPath = $drupalRoot . $modulePath . '/' . $machineName; if (file_exists($fullPath)) { throw new \InvalidArgumentException(sprintf($this->trans('commands.generate.module.errors.directory-exists'), $fullPath)); } return $modulePath; }); } $input->setOption('module-path', $modulePath); $description = $input->getOption('description'); if (!$description) { $description = $io->ask($this->trans('commands.generate.module.questions.description'), 'My Awesome Module'); } $input->setOption('description', $description); $package = $input->getOption('package'); if (!$package) { $package = $io->ask($this->trans('commands.generate.module.questions.package'), 'Custom'); } $input->setOption('package', $package); $core = $input->getOption('core'); if (!$core) { $core = $io->ask($this->trans('commands.generate.module.questions.core'), '8.x', function ($core) { // Only allow 8.x and higher as core version. if (!preg_match('/^([0-9]+)\\.x$/', $core, $matches) || $matches[1] < 8) { throw new \InvalidArgumentException(sprintf($this->trans('commands.generate.module.errors.invalid-core'), $core)); } return $core; }); $input->setOption('core', $core); } $moduleFile = $input->getOption('module-file'); if (!$moduleFile) { $moduleFile = $io->confirm($this->trans('commands.generate.module.questions.module-file'), true); $input->setOption('module-file', $moduleFile); } $featuresBundle = $input->getOption('features-bundle'); if (!$featuresBundle) { $featuresSupport = $io->confirm($this->trans('commands.generate.module.questions.features-support'), false); if ($featuresSupport) { $featuresBundle = $io->ask($this->trans('commands.generate.module.questions.features-bundle'), 'default'); } $input->setOption('features-bundle', $featuresBundle); } $composer = $input->getOption('composer'); if (!$composer) { $composer = $io->confirm($this->trans('commands.generate.module.questions.composer'), true); $input->setOption('composer', $composer); } $dependencies = $input->getOption('dependencies'); if (!$dependencies) { $addDependencies = $io->confirm($this->trans('commands.generate.module.questions.dependencies'), false); if ($addDependencies) { $dependencies = $io->ask($this->trans('commands.generate.module.options.dependencies')); } $input->setOption('dependencies', $dependencies); } }
/** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $class = $input->getOption('class'); if (!$class) { $class = $io->ask($this->trans('commands.generate.controller.questions.class'), 'DefaultController', function ($class) { return $this->validator->validateClassName($class); }); $input->setOption('class', $class); } $routes = $input->getOption('routes'); if (!$routes) { while (true) { $title = $io->askEmpty($this->trans('commands.generate.controller.questions.title'), function ($title) use($routes) { if ($routes && empty(trim($title))) { return false; } if (!$routes && empty(trim($title))) { throw new \InvalidArgumentException($this->trans('commands.generate.controller.messages.title-empty')); } if (in_array($title, array_column($routes, 'title'))) { throw new \InvalidArgumentException(sprintf($this->trans('commands.generate.controller.messages.title-already-added'), $title)); } return $title; }); if ($title === '') { break; } $method = $io->ask($this->trans('commands.generate.controller.questions.method'), 'hello', function ($method) use($routes) { if (in_array($method, array_column($routes, 'method'))) { throw new \InvalidArgumentException(sprintf($this->trans('commands.generate.controller.messages.method-already-added'), $method)); } return $method; }); $path = $io->ask($this->trans('commands.generate.controller.questions.path'), sprintf('/%s/hello/{name}', $module), function ($path) use($routes) { if (count($this->routeProvider->getRoutesByPattern($path)) > 0 || in_array($path, array_column($routes, 'path'))) { throw new \InvalidArgumentException(sprintf($this->trans('commands.generate.controller.messages.path-already-added'), $path)); } return $path; }); $classMachineName = $this->stringConverter->camelCaseToMachineName($class); $routeName = $module . '.' . $classMachineName . '_' . $method; if ($this->routeProvider->getRoutesByNames([$routeName]) || in_array($routeName, $routes)) { $routeName .= '_' . rand(0, 100); } $routes[] = ['title' => $title, 'name' => $routeName, 'method' => $method, 'path' => $path]; } $input->setOption('routes', $routes); } // --test option $test = $input->getOption('test'); if (!$test) { $test = $io->confirm($this->trans('commands.generate.controller.questions.test'), true); $input->setOption('test', $test); } // --services option // @see use Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion $services = $this->servicesQuestion($io); $input->setOption('services', $services); }
/** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --class option $className = $input->getOption('class'); if (!$className) { $className = $io->ask($this->trans('commands.generate.form.questions.class'), 'DefaultForm'); $input->setOption('class', $className); } // --form-id option $formId = $input->getOption('form-id'); if (!$formId) { $formId = $io->ask($this->trans('commands.generate.form.questions.form-id'), $this->stringConverter->camelCaseToMachineName($className)); $input->setOption('form-id', $formId); } // --services option // @see use Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion $services = $this->servicesQuestion($io); $input->setOption('services', $services); // --inputs option $inputs = $input->getOption('inputs'); if (!$inputs) { // @see \Drupal\Console\Command\Shared\FormTrait::formQuestion $inputs = $this->formQuestion($io); $input->setOption('inputs', $inputs); } $path = $input->getOption('path'); if (!$path) { if ($this->formType == 'ConfigFormBase') { $form_path = '/admin/config/{{ module_name }}/{{ class_name_short }}'; $form_path = sprintf('/admin/config/%s/%s', $module, strtolower($this->stringConverter->removeSuffix($className))); } else { $form_path = sprintf('/%s/form/%s', $module, $this->stringConverter->camelCaseToMachineName($this->stringConverter->removeSuffix($className))); } $path = $io->ask($this->trans('commands.generate.form.questions.path'), $form_path, function ($path) { if (count($this->routeProvider->getRoutesByPattern($path)) > 0) { throw new \InvalidArgumentException(sprintf($this->trans('commands.generate.form.messages.path-already-added'), $path)); } return $path; }); $input->setOption('path', $path); } // --link option for links.menu if ($this->formType == 'ConfigFormBase') { $menu_options = $this->menuQuestion($io, $className); $menu_link_gen = $input->getOption('menu_link_gen'); $menu_link_title = $input->getOption('menu_link_title'); $menu_parent = $input->getOption('menu_parent'); $menu_link_desc = $input->getOption('menu_link_desc'); if (!$menu_link_gen || !$menu_link_title || !$menu_parent || !$menu_link_desc) { $input->setOption('menu_link_gen', $menu_options['menu_link_gen']); $input->setOption('menu_link_title', $menu_options['menu_link_title']); $input->setOption('menu_parent', $menu_options['menu_parent']); $input->setOption('menu_link_desc', $menu_options['menu_link_desc']); } } }
protected function interact(InputInterface $input, OutputInterface $output) { $io = new DrupalStyle($input, $output); // --module option $module = $input->getOption('module'); if (!$module) { // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion $module = $this->moduleQuestion($io); $input->setOption('module', $module); } // --type-class option $typeClass = $input->getOption('type-class'); if (!$typeClass) { $typeClass = $io->ask($this->trans('commands.generate.plugin.field.questions.type-class'), 'ExampleFieldType'); $input->setOption('type-class', $typeClass); } // --type-label option $label = $input->getOption('type-label'); if (!$label) { $label = $io->ask($this->trans('commands.generate.plugin.field.questions.type-label'), $this->stringConverter->camelCaseToHuman($typeClass)); $input->setOption('type-label', $label); } // --type-plugin-id option $plugin_id = $input->getOption('type-plugin-id'); if (!$plugin_id) { $plugin_id = $io->ask($this->trans('commands.generate.plugin.field.questions.type-plugin-id'), $this->stringConverter->camelCaseToUnderscore($typeClass)); $input->setOption('type-plugin-id', $plugin_id); } // --type-description option $description = $input->getOption('type-description'); if (!$description) { $description = $io->ask($this->trans('commands.generate.plugin.field.questions.type-description'), 'My Field Type'); $input->setOption('type-description', $description); } // --widget-class option $widgetClass = $input->getOption('widget-class'); if (!$widgetClass) { $widgetClass = $io->ask($this->trans('commands.generate.plugin.field.questions.widget-class'), 'ExampleWidgetType'); $input->setOption('widget-class', $widgetClass); } // --widget-label option $widgetLabel = $input->getOption('widget-label'); if (!$widgetLabel) { $widgetLabel = $io->ask($this->trans('commands.generate.plugin.field.questions.widget-label'), $this->stringConverter->camelCaseToHuman($widgetClass)); $input->setOption('widget-label', $widgetLabel); } // --widget-plugin-id option $widget_plugin_id = $input->getOption('widget-plugin-id'); if (!$widget_plugin_id) { $widget_plugin_id = $io->ask($this->trans('commands.generate.plugin.field.questions.widget-plugin-id'), $this->stringConverter->camelCaseToUnderscore($widgetClass)); $input->setOption('widget-plugin-id', $widget_plugin_id); } // --formatter-class option $formatterClass = $input->getOption('formatter-class'); if (!$formatterClass) { $formatterClass = $io->ask($this->trans('commands.generate.plugin.field.questions.formatter-class'), 'ExampleFormatterType'); $input->setOption('formatter-class', $formatterClass); } // --formatter-label option $formatterLabel = $input->getOption('formatter-label'); if (!$formatterLabel) { $formatterLabel = $io->ask($this->trans('commands.generate.plugin.field.questions.formatter-label'), $this->stringConverter->camelCaseToHuman($formatterClass)); $input->setOption('formatter-label', $formatterLabel); } // --formatter-plugin-id option $formatter_plugin_id = $input->getOption('formatter-plugin-id'); if (!$formatter_plugin_id) { $formatter_plugin_id = $io->ask($this->trans('commands.generate.plugin.field.questions.formatter-plugin-id'), $this->stringConverter->camelCaseToUnderscore($formatterClass)); $input->setOption('formatter-plugin-id', $formatter_plugin_id); } // --field-type option $field_type = $input->getOption('field-type'); if (!$field_type) { $field_type = $io->ask($this->trans('commands.generate.plugin.field.questions.field-type'), $plugin_id); $input->setOption('field-type', $field_type); } // --default-widget option $default_widget = $input->getOption('default-widget'); if (!$default_widget) { $default_widget = $io->ask($this->trans('commands.generate.plugin.field.questions.default-widget'), $widget_plugin_id); $input->setOption('default-widget', $default_widget); } // --default-formatter option $default_formatter = $input->getOption('default-formatter'); if (!$default_formatter) { $default_formatter = $io->ask($this->trans('commands.generate.plugin.field.questions.default-formatter'), $formatter_plugin_id); $input->setOption('default-formatter', $default_formatter); } }