You are here

public function WorkflowCleanupSettingsForm::buildForm in Workflow 8

@inheritdoc

Overrides FormInterface::buildForm

File

modules/workflow_cleanup/src/Form/WorkflowCleanupSettingsForm.php, line 27

Class

WorkflowCleanupSettingsForm
Provides a Form for organizing obsolete States.

Namespace

Drupal\workflow_cleanup\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form = [];

  // Get all of the states, indexed by sid.
  $orphans = $inactive = [];

  /** @var \Drupal\workflow\Entity\WorkflowState[] $states */

  /** @var \Drupal\workflow\Entity\WorkflowState $state */
  $states = WorkflowState::loadMultiple();
  foreach ($states as $state) {

    // Does the associated workflow exist?
    if (!$state
      ->getWorkflow()) {
      $orphans[$state
        ->id()] = $state;
    }
    else {

      // Is the state still active?
      if (!$state
        ->isActive()) {
        $inactive[$state
          ->id()] = $state;
      }
    }
  }

  // Save the relevant states in an indexed array.
  $form['#workflow_states'] = $orphans + $inactive;
  $form['no_workflow'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Orphaned States'),
    '#open' => TRUE,
    // Controls the HTML5 'open' attribute. Defaults to FALSE.
    '#description' => $this
      ->t('These states no longer belong to an existing workflow.'),
    '#tree' => TRUE,
  ];
  foreach ($orphans as $sid => $state) {
    $form['no_workflow'][$sid]['check'] = [
      '#type' => 'checkbox',
      '#title' => $state
        ->label(),
      '#return_value' => $sid,
    ];
  }
  $form['inactive'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Inactive (Deleted) States'),
    '#open' => TRUE,
    // Controls the HTML5 'open' attribute. Defaults to FALSE.
    '#description' => $this
      ->t('These states belong to a workflow, but have been marked inactive (deleted).'),
    '#tree' => TRUE,
  ];
  foreach ($inactive as $sid => $state) {
    $form['inactive'][$sid]['check'] = [
      '#type' => 'checkbox',
      '#title' => $state
        ->label() . ' (' . $state
        ->getWorkflow()
        ->label() . ')',
      '#return_value' => $sid,
    ];
  }
  $form['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Delete selected states'),
  ];
  return $form;
}