You are here

public function YamlFormEntityHandlersForm::form in YAML Form 8

Gets the actual form array to be built.

Overrides EntityForm::form

See also

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

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

File

src/YamlFormEntityHandlersForm.php, line 25

Class

YamlFormEntityHandlersForm
Provides a form to manage submission handlers.

Namespace

Drupal\yamlform

Code

public function form(array $form, FormStateInterface $form_state) {

  /** @var \Drupal\yamlform\YamlFormInterface $yamlform */
  $yamlform = $this
    ->getEntity();
  $user_input = $form_state
    ->getUserInput();

  // Build table header.
  $header = [
    $this
      ->t('Title / Description'),
    $this
      ->t('ID'),
    $this
      ->t('Summary'),
    $this
      ->t('Status'),
    $this
      ->t('Weight'),
    $this
      ->t('Operations'),
  ];

  // Build table rows for handlers.
  $handlers = $this->entity
    ->getHandlers();
  $rows = [];
  foreach ($handlers as $handler) {
    $key = $handler
      ->getHandlerId();
    $rows[$key]['#attributes']['class'][] = 'draggable';
    $rows[$key]['#weight'] = isset($user_input['handlers']) ? $user_input['handlers'][$key]['weight'] : NULL;
    $rows[$key]['handler'] = [
      '#tree' => FALSE,
      'data' => [
        'label' => [
          '#markup' => '<b>' . $handler
            ->label() . '</b>: ' . $handler
            ->description(),
        ],
      ],
    ];
    $rows[$key]['id'] = [
      'data' => [
        '#markup' => $handler
          ->getHandlerId(),
      ],
    ];
    $rows[$key]['summary'] = $handler
      ->getSummary();
    $rows[$key]['status'] = [
      'data' => [
        '#markup' => $handler
          ->isEnabled() ? $this
          ->t('Enabled') : $this
          ->t('Disabled'),
      ],
    ];
    $rows[$key]['weight'] = [
      '#type' => 'weight',
      '#title' => $this
        ->t('Weight for @title', [
        '@title' => $handler
          ->label(),
      ]),
      '#title_display' => 'invisible',
      '#delta' => 50,
      '#default_value' => $handler
        ->getWeight(),
      '#attributes' => [
        'class' => [
          'yamlform-handler-order-weight',
        ],
      ],
    ];
    $rows[$key]['operations'] = [
      '#type' => 'operations',
      '#links' => [
        'edit' => [
          'title' => $this
            ->t('Edit'),
          'url' => Url::fromRoute('entity.yamlform.handler.edit_form', [
            'yamlform' => $this->entity
              ->id(),
            'yamlform_handler' => $key,
          ]),
          'attributes' => YamlFormDialogHelper::getModalDialogAttributes(800),
        ],
        'delete' => [
          'title' => $this
            ->t('Delete'),
          'url' => Url::fromRoute('entity.yamlform.handler.delete_form', [
            'yamlform' => $this->entity
              ->id(),
            'yamlform_handler' => $key,
          ]),
        ],
      ],
    ];
  }

  // Must manually add local actions to the form because we can't alter local
  // actions and add the needed dialog attributes.
  // @see https://www.drupal.org/node/2585169
  $dialog_attributes = YamlFormDialogHelper::getModalDialogAttributes(800, [
    'button',
    'button-action',
    'button--primary',
    'button--small',
  ]);
  $form['local_actions'] = [
    'add_element' => [
      '#type' => 'link',
      '#title' => $this
        ->t('Add email'),
      '#url' => new Url('entity.yamlform.handler.add_form', [
        'yamlform' => $yamlform
          ->id(),
        'yamlform_handler' => 'email',
      ]),
      '#attributes' => $dialog_attributes,
      'add_page' => [
        '#type' => 'link',
        '#title' => $this
          ->t('Add handler'),
        '#url' => new Url('entity.yamlform.handlers', [
          'yamlform' => $yamlform
            ->id(),
        ]),
        '#attributes' => $dialog_attributes,
      ],
    ],
  ];

  // Build the list of existing form handlers for this form.
  $form['handlers'] = [
    '#type' => 'table',
    '#header' => $header,
    '#tabledrag' => [
      [
        'action' => 'order',
        'relationship' => 'sibling',
        'group' => 'yamlform-handler-order-weight',
      ],
    ],
    '#attributes' => [
      'id' => 'yamlform-handlers',
    ],
    '#empty' => $this
      ->t('There are currently no handlers setup for this form.'),
  ] + $rows;

  // Must preload libraries required by (modal) dialogs.
  $form['#attached']['library'][] = 'yamlform/yamlform.admin.dialog';
  return parent::form($form, $form_state);
}