You are here

public function TransactionTypeFormBase::buildForm in Transaction 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides EntityForm::buildForm

1 call to TransactionTypeFormBase::buildForm()
TransactionTypeEditForm::buildForm in src/Form/TransactionTypeEditForm.php
Form constructor.
1 method overrides TransactionTypeFormBase::buildForm()
TransactionTypeEditForm::buildForm in src/Form/TransactionTypeEditForm.php
Form constructor.

File

src/Form/TransactionTypeFormBase.php, line 64

Class

TransactionTypeFormBase
Base form for transaction type forms.

Namespace

Drupal\transaction\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form = parent::buildForm($form, $form_state);

  /** @var \Drupal\transaction\TransactionTypeInterface $transaction_type */
  $transaction_type = $this->entity;
  $form['label'] = [
    '#title' => $this
      ->t('Name'),
    '#type' => 'textfield',
    '#default_value' => $transaction_type
      ->label(),
    '#description' => $this
      ->t('The human-readable name of this transaction type.'),
    '#maxlength' => 255,
    '#required' => TRUE,
    '#size' => 30,
  ];
  $form['id'] = [
    '#type' => 'machine_name',
    '#default_value' => $transaction_type
      ->id(),
    '#maxlength' => EntityTypeInterface::BUNDLE_MAX_LENGTH,
    '#machine_name' => [
      'exists' => [
        TransactionType::class,
        'load',
      ],
      'source' => [
        'label',
      ],
    ],
    '#description' => $this
      ->t('A unique machine-readable name for this transaction type. It must only contain lowercase letters, numbers, and underscores.'),
  ];

  // Set the target entity type from request arguments on creation.
  if ($transaction_type
    ->isNew()) {
    $transaction_type
      ->setTargetEntityTypeId($this
      ->getRequest()
      ->get('target_entity_type'));
  }

  // Applicable bundles.
  $target_entity_type = $this->entityTypeManager
    ->getDefinition($transaction_type
    ->getTargetEntityTypeId());
  if ($target_entity_type
    ->getBundleEntityType()) {
    $bundles = [];
    $definitions = $this->bundleInfo
      ->getBundleInfo($target_entity_type
      ->id());
    foreach ($definitions as $bundle_id => $bundle_metadata) {
      $bundles[$bundle_id] = $bundle_metadata['label'];
    }
    if (count($bundles)) {
      asort($bundles);
      $form['bundles'] = [
        '#type' => 'checkboxes',
        '#title' => $this
          ->t('Bundles'),
        '#description' => $this
          ->t('Bundles of the target entity type where this transaction type is applicable. Leave empty to apply to all bundles.'),
        '#options' => $bundles,
        '#default_value' => $transaction_type
          ->getBundles(),
      ];
    }
  }

  // Set the transactor plugin id from request arguments on creation.
  if ($transaction_type
    ->isNew()) {
    $transaction_type
      ->setPluginId($this
      ->getRequest()
      ->get('transactor'));
  }

  // General options.
  $form['options'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Options'),
    '#open' => TRUE,
    '#tree' => FALSE,
    '#weight' => 50,
  ];

  // Add transaction local task (tab) to target entity.
  $form['options']['execution'] = [
    '#type' => 'radios',
    '#title' => $this
      ->t('Execution control'),
    '#default_value' => $transaction_type
      ->getOption('execution', TransactionTypeInterface::EXECUTION_STANDARD),
    '#options' => [
      TransactionTypeInterface::EXECUTION_STANDARD => $this
        ->t('Leave as pending'),
      TransactionTypeInterface::EXECUTION_IMMEDIATE => $this
        ->t('Immediate execution'),
      TransactionTypeInterface::EXECUTION_ASK => $this
        ->t('Ask user'),
    ],
  ];
  $form['options']['execution'][TransactionTypeInterface::EXECUTION_STANDARD]['#description'] = $this
    ->t('The new transaction can be executed only after its creation.');
  $form['options']['execution'][TransactionTypeInterface::EXECUTION_IMMEDIATE]['#description'] = $this
    ->t('The transaction will be executed automatically right after its creation.');
  $form['options']['execution'][TransactionTypeInterface::EXECUTION_ASK]['#description'] = $this
    ->t('Let the user choose how the new transaction will be executed in the transaction form.');

  // Transaction list local task in the target entity.
  $form['options']['local_task'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Add a local task (tab) to access the transaction list in the target entity'),
    '#description' => $this
      ->t('The tab will be labeled with the transaction type name. Disable if you have your own views based transaction list.'),
    '#default_value' => !empty($transaction_type
      ->getOption('local_task')),
  ];

  // Add transactor settings.
  $form = $transaction_type
    ->getPlugin()
    ->buildConfigurationForm($form, $form_state);
  return $this
    ->protectBundleIdElement($form);
}