You are here

webform_test_third_party_settings.webform.inc in Webform 6.x

Integrates third party settings for the Webform module.

File

tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.webform.inc
View source
<?php

/**
 * @file
 * Integrates third party settings for the Webform module.
 */
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\MessengerInterface;

/**
 * Implements hook_webform_admin_third_party_settings_form_alter().
 */
function webform_test_third_party_settings_webform_admin_third_party_settings_form_alter(&$form, FormStateInterface $form_state) {

  /** @var \Drupal\webform\WebformThirdPartySettingsManagerInterface $third_party_settings_manager */
  $third_party_settings_manager = \Drupal::service('webform.third_party_settings_manager');
  $form['third_party_settings']['webform_test_third_party_settings'] = [
    '#type' => 'details',
    '#title' => t('Webform test third party admin settings'),
    '#open' => TRUE,
  ];
  $form['third_party_settings']['webform_test_third_party_settings']['message'] = [
    '#type' => 'textfield',
    '#title' => t('Display the below message on every webform'),
    '#default_value' => $third_party_settings_manager
      ->getThirdPartySetting('webform_test_third_party_settings', 'message'),
  ];
  $form['third_party_settings']['webform_test_third_party_settings']['error'] = [
    '#type' => 'checkbox',
    '#title' => t('Display as error'),
    '#default_value' => $third_party_settings_manager
      ->getThirdPartySetting('webform_test_third_party_settings', 'error'),
    '#return_value' => TRUE,
    '#states' => [
      'visible' => [
        ':input[name="third_party_settings[webform_test_third_party_settings][message]"]' => [
          'filled' => TRUE,
        ],
      ],
    ],
  ];
  $form['#validate'][] = '_webform_test_third_party_settings_form_validate';
}

/**
 * Implements hook_webform_third_party_settings_form_alter().
 */
function webform_test_third_party_settings_webform_third_party_settings_form_alter(&$form, FormStateInterface $form_state) {

  /** @var \Drupal\webform\WebformInterface $webform */
  $webform = $form_state
    ->getFormObject()
    ->getEntity();
  $form['third_party_settings']['webform_test_third_party_settings'] = [
    '#type' => 'details',
    '#title' => t('Webform test third party settings'),
    '#open' => TRUE,
  ];
  $form['third_party_settings']['webform_test_third_party_settings']['message'] = [
    '#type' => 'textfield',
    '#title' => t('Display the below message'),
    '#default_value' => $webform
      ->getThirdPartySetting('webform_test_third_party_settings', 'message'),
  ];
  $form['third_party_settings']['webform_test_third_party_settings']['error'] = [
    '#type' => 'checkbox',
    '#title' => t('Display as error'),
    '#default_value' => $webform
      ->getThirdPartySetting('webform_test_third_party_settings', 'error'),
    '#return_value' => TRUE,
    '#states' => [
      'visible' => [
        ':input[name="third_party_settings[webform_test_third_party_settings][message]"]' => [
          'filled' => TRUE,
        ],
      ],
    ],
  ];
  $form['#validate'][] = '_webform_test_third_party_settings_form_validate';
}

/**
 * Validate callback; Cleans up third party settings.
 */
function _webform_test_third_party_settings_form_validate(&$form, FormStateInterface $form_state) {
  $third_party_settings = $form_state
    ->getValue('third_party_settings');
  if (empty($third_party_settings['webform_test_third_party_settings']['message'])) {
    $third_party_settings['webform_test_third_party_settings'] = NULL;
  }
  $form_state
    ->setValue('third_party_settings', $third_party_settings);
}

/**
 * Implements hook_webform_submission_form_alter().
 */
function webform_test_third_party_settings_webform_submission_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if (!empty($_POST)) {
    return;
  }

  /** @var \Drupal\webform\WebformThirdPartySettingsManagerInterface $third_party_settings_manager */
  $third_party_settings_manager = \Drupal::service('webform.third_party_settings_manager');

  /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
  $webform_submission = $form_state
    ->getFormObject()
    ->getEntity();
  $webform = $webform_submission
    ->getWebform();

  // Get message from the webform settings or the webform admin settings.
  $message = $webform
    ->getThirdPartySetting('webform_test_third_party_settings', 'message') ?: $third_party_settings_manager
    ->getThirdPartySetting('webform_test_third_party_settings', 'message');
  $error = $webform
    ->getThirdPartySetting('webform_test_third_party_settings', 'error') ?: $third_party_settings_manager
    ->getThirdPartySetting('webform_test_third_party_settings', 'error');

  // If a message is set, display it.
  if ($message) {
    \Drupal::messenger()
      ->addMessage($message, $error ? MessengerInterface::TYPE_ERROR : MessengerInterface::TYPE_STATUS);
  }
}