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\FormCode
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;
}