You are here

public function WorkflowStateEditForm::form in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/workflows/src/Form/WorkflowStateEditForm.php \Drupal\workflows\Form\WorkflowStateEditForm::form()
  2. 9 core/modules/workflows/src/Form/WorkflowStateEditForm.php \Drupal\workflows\Form\WorkflowStateEditForm::form()

Gets the actual form array to be built.

Overrides EntityForm::form

See also

\Drupal\Core\Entity\EntityForm::processForm()

\Drupal\Core\Entity\EntityForm::afterBuild()

File

core/modules/workflows/src/Form/WorkflowStateEditForm.php, line 72

Class

WorkflowStateEditForm
Entity form variant for editing workflow states.

Namespace

Drupal\workflows\Form

Code

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

  /** @var \Drupal\workflows\WorkflowInterface $workflow */
  $workflow = $this
    ->getEntity();
  $workflow_type = $workflow
    ->getTypePlugin();
  $state = $workflow
    ->getTypePlugin()
    ->getState($this->stateId);
  $form['label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('State label'),
    '#maxlength' => 255,
    '#default_value' => $state
      ->label(),
    '#required' => TRUE,
  ];
  $form['id'] = [
    '#type' => 'machine_name',
    '#default_value' => $this->stateId,
    '#machine_name' => [
      'exists' => [
        $this,
        'exists',
      ],
    ],
    '#disabled' => TRUE,
  ];

  // Add additional form fields from the workflow type plugin.
  if ($workflow_type
    ->hasFormClass(StateInterface::PLUGIN_FORM_KEY)) {
    $form['type_settings'] = [
      '#tree' => TRUE,
    ];
    $subform_state = SubformState::createForSubform($form['type_settings'], $form, $form_state);
    $subform_state
      ->set('state', $state);
    $form['type_settings'] += $this->pluginFormFactory
      ->createInstance($workflow_type, StateInterface::PLUGIN_FORM_KEY)
      ->buildConfigurationForm($form['type_settings'], $subform_state);
  }
  $header = [
    'label' => $this
      ->t('Transition'),
    'state' => $this
      ->t('To'),
    'operations' => $this
      ->t('Operations'),
  ];
  $form['transitions'] = [
    '#type' => 'table',
    '#header' => $header,
    '#empty' => $this
      ->t('There are no transitions to or from this state yet.'),
  ];
  foreach ($state
    ->getTransitions() as $transition) {
    $links['edit'] = [
      'title' => $this
        ->t('Edit'),
      'url' => Url::fromRoute('entity.workflow.edit_transition_form', [
        'workflow' => $workflow
          ->id(),
        'workflow_transition' => $transition
          ->id(),
      ]),
    ];
    $links['delete'] = [
      'title' => $this
        ->t('Delete'),
      'url' => Url::fromRoute('entity.workflow.delete_transition_form', [
        'workflow' => $workflow
          ->id(),
        'workflow_transition' => $transition
          ->id(),
      ]),
    ];
    $form['transitions'][$transition
      ->id()] = [
      'label' => [
        '#markup' => $transition
          ->label(),
      ],
      'state' => [
        '#markup' => $transition
          ->to()
          ->label(),
      ],
      'operations' => [
        '#type' => 'operations',
        '#links' => $links,
      ],
    ];
  }
  return $form;
}