basket_imex-10.x-dev/src/Command/ImexClassCommand.php

src/Command/ImexClassCommand.php
<?php

namespace Drupal\basket_imex\Command;

use Drupal\Console\Command\Shared\ConfirmationTrait;
use Drupal\Console\Command\Shared\ModuleTrait;
use Drupal\Console\Core\Command\Command;
use Drupal\Console\Core\Generator\GeneratorInterface;
use Drupal\Console\Core\Utils\StringConverter;
use Drupal\Console\Extension\Manager;
use Drupal\Console\Utils\Validator;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

/**
 * Class BasketImexCommand.
 *
 * Drupal\Console\Annotations\DrupalCommand (
 *     extension="basket_imex",
 *     extensionType="module"
 * )
 */
class ImexClassCommand extends Command {

  use ConfirmationTrait;
  use ModuleTrait;

  /**
   * Drupal\Console\Core\Generator\GeneratorInterface definition.
   *
   * @var \Drupal\Console\Core\Generator\GeneratorInterface
   */
  protected $generator;

  /**
   * Manager object.
   *
   * @var \Drupal\Console\Extension\Manager
   */
  protected $extensionManager;

  /**
   * Validator object.
   *
   * @var \Drupal\Console\Utils\Validator
   */
  protected $validator;

  /**
   * String converter.
   *
   * @var \Drupal\Console\Core\Utils\StringConverter
   */
  protected $stringConverter;

  /**
   * Constructs a new EventNotificationsCommand object.
   */
  public function __construct(Manager $extensionManager, Validator $validator, StringConverter $stringConverter, GeneratorInterface $generator) {
    $this->generator = $generator;
    $this->extensionManager = $extensionManager;
    $this->validator = $validator;
    $this->stringConverter = $stringConverter;
    parent::__construct();
  }

  /**
   * {@inheritdoc}
   */
  protected function configure() {
    $this
      ->setName('basket_imex:generate:service')
      ->setDescription('Generate a new "Basket IMEX Service"')
      ->addOption(
        'module',
        NULL,
        InputOption::VALUE_REQUIRED,
        $this->trans('commands.common.options.module')
      )
      ->addOption(
        'id',
        NULL,
        InputOption::VALUE_REQUIRED,
        'Enter Service ID'
      )
      ->addOption(
        'name',
        NULL,
        InputOption::VALUE_REQUIRED,
        'Enter Service name'
      )
      ->addOption(
        'class',
        NULL,
        InputOption::VALUE_REQUIRED,
        'Enter class name'
      )
      ->setAliases(['imex-s']);
  }

  /**
   * {@inheritdoc}
   */
  protected function interact(InputInterface $input, OutputInterface $output) {

    // --module option
    $module = $this->getModuleOption();

    // --id option
    $id = $input->getOption('id');
    if (!$id) {
      $id = $this->getIo()->ask(
        'Enter Service ID',
        $module,
        function ($id) {
          return $this->validator->validateMachineName($id);
        }
      );
      $input->setOption('id', $id);
    }

    // --name option
    $name = $input->getOption('name');
    if (!$name) {
      $name = $this->getIo()->ask(
        'Enter Service name',
        implode(' ', $this->getArrNames($id))
      );
      $input->setOption('name', $name);
    }

    // --class option
    $class = $input->getOption('class');
    if (!$class) {
      $class = $this->getIo()->ask(
        'Enter Plugin name',
        implode('', $this->getArrNames($id)) . 'Class',
        function ($class) {
          return $this->validator->validateClassName($class);
        }
      );
      $input->setOption('class', $class);
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function execute(InputInterface $input, OutputInterface $output) {
    if (!$this->confirmOperation()) {
      return 1;
    }
    $this->generator->generate([
      'g_type' => 'service',
      'module' => $input->getOption('module'),
      'id' => $input->getOption('id'),
      'name' => $input->getOption('name'),
      'class' => $input->getOption('class'),
    ]);
  }

  /**
   * {@inheritdoc}
   */
  private function getArrNames($string) {
    $items = explode('_', $string);
    foreach ($items as &$item) {
      $item = ucfirst($item);
    }
    return $items;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc