You are here

public function WebhookConfigForm::form in Webhooks 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/Form/WebhookConfigForm.php, line 104

Class

WebhookConfigForm
Class Webhook Config Form.

Namespace

Drupal\webhooks\Form

Code

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

  /** @var \Drupal\webhooks\Entity\WebhookConfig $webhook_config */
  $webhook_config = $this->entity;
  $form['label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Label'),
    '#maxlength' => 255,
    '#default_value' => $webhook_config
      ->label(),
    '#description' => $this
      ->t('Easily recognizable name for your webhook.'),
    '#required' => TRUE,
  ];
  $form['id'] = [
    '#type' => 'machine_name',
    '#default_value' => $webhook_config
      ->id(),
    '#machine_name' => [
      'exists' => '\\Drupal\\webhooks\\Entity\\WebhookConfig::load',
    ],
    '#disabled' => !$webhook_config
      ->isNew(),
  ];
  $form['type'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Type'),
    '#options' => [
      'incoming' => $this
        ->t('Incoming'),
      'outgoing' => $this
        ->t('Outgoing'),
    ],
    '#default_value' => $webhook_config
      ->getType() ? $webhook_config
      ->getType() : 'outgoing',
    '#description' => $this
      ->t('The type of webhook. <strong>Incoming webhooks</strong> receive HTTP events. <strong>Outgoing webhooks</strong> post new events to the configured URL.'),
    '#required' => TRUE,
    '#disabled' => !$webhook_config
      ->isNew(),
  ];
  $form['content_type'] = [
    '#type' => 'select',
    '#title' => $this
      ->t("Content Type"),
    '#description' => $this
      ->t("The Content Type of your webhook."),
    '#options' => [
      WebhookConfig::CONTENT_TYPE_JSON => $this
        ->t('application/json'),
      WebhookConfig::CONTENT_TYPE_XML => $this
        ->t('application/xml'),
    ],
    '#default_value' => $webhook_config
      ->getContentType(),
  ];
  $form['secret'] = [
    '#type' => 'textfield',
    '#attributes' => [
      'placeholder' => $this
        ->t('Secret'),
    ],
    '#title' => $this
      ->t('Secret'),
    '#maxlength' => 255,
    '#description' => $this
      ->t('For <strong>incoming webhooks</strong> this secret is provided by the remote website. For <strong>outgoing webhooks</strong> this secret should be used for the incoming hook configuration on the remote website.'),
    '#default_value' => $webhook_config
      ->getSecret(),
  ];
  $form['token'] = [
    '#type' => 'textfield',
    '#attributes' => [
      'placeholder' => $this
        ->t('Token'),
    ],
    '#title' => $this
      ->t('Token'),
    '#maxlength' => 255,
    '#description' => $this
      ->t('For <strong>incoming webhooks</strong> this secret is provided by the remote website. For <strong>outgoing webhooks</strong> this secret should be used for the incoming hook configuration on the remote website.'),
    '#default_value' => $webhook_config
      ->getToken(),
  ];
  $form['incoming'] = [
    '#title' => $this
      ->t('Incoming Webhook Settings'),
    '#type' => 'details',
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#states' => [
      'expanded' => [
        ':input[name="type"]' => [
          'value' => 'incoming',
        ],
      ],
      'enabled' => [
        ':input[name="type"]' => [
          'value' => 'incoming',
        ],
      ],
      'required' => [
        ':input[name="type"]' => [
          'value' => 'incoming',
        ],
      ],
      'collapsed' => [
        ':input[name="type"]' => [
          'value' => 'outgoing',
        ],
      ],
      'disabled' => [
        ':input[name="type"]' => [
          'value' => 'outgoing',
        ],
      ],
      'optional' => [
        ':input[name="type"]' => [
          'value' => 'outgoing',
        ],
      ],
    ],
  ];
  $form['incoming']['non_blocking'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Non-blocking'),
    '#default_value' => $webhook_config
      ->isNonBlocking(),
    '#description' => $this
      ->t('Non-blocking <strong>incoming webhooks</strong> are stored in a queue for later processing.'),
  ];
  $form['outgoing'] = [
    '#title' => $this
      ->t('Outgoing Webhook Settings'),
    '#type' => 'details',
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#states' => [
      'expanded' => [
        ':input[name="type"]' => [
          'value' => 'outgoing',
        ],
      ],
      'enabled' => [
        ':input[name="type"]' => [
          'value' => 'outgoing',
        ],
      ],
      'required' => [
        ':input[name="type"]' => [
          'value' => 'outgoing',
        ],
      ],
      'collapsed' => [
        ':input[name="type"]' => [
          'value' => 'incoming',
        ],
      ],
      'disabled' => [
        ':input[name="type"]' => [
          'value' => 'incoming',
        ],
      ],
      'optional' => [
        ':input[name="type"]' => [
          'value' => 'incoming',
        ],
      ],
    ],
  ];
  $form['outgoing']['payload_url'] = [
    '#type' => 'url',
    '#title' => $this
      ->t('Payload URL'),
    '#attributes' => [
      'placeholder' => $this
        ->t('http://example.com/post'),
    ],
    '#default_value' => $webhook_config
      ->getPayloadUrl(),
    '#maxlength' => 255,
    '#description' => $this
      ->t('Target URL for your payload. Only used on <strong>outgoing webhooks</strong>.'),
  ];
  $form['outgoing']['events'] = [
    '#title' => $this
      ->t('Enabled Events'),
    '#type' => 'tableselect',
    '#header' => [
      'type' => $this
        ->t('Hook / Event'),
      'event' => $this
        ->t('Machine name'),
    ],
    '#description' => $this
      ->t("The Events you want to send to the endpoint."),
    '#options' => $this
      ->eventOptions(),
    '#default_value' => $webhook_config
      ->isNew() ? [] : $webhook_config
      ->getEvents(),
  ];
  if ($webhook_config
    ->getType() === 'incoming') {
    unset($form['outgoing']);
  }
  if ($webhook_config
    ->getType() === 'outgoing') {
    unset($form['incoming']);
  }
  $form['status'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t("Active"),
    '#description' => $this
      ->t("Shows if the webhook is active or not."),
    '#default_value' => $webhook_config
      ->isNew() ? TRUE : $webhook_config
      ->status(),
  ];
  return $form;
}