recaptcha_element-1.0.2/src/Plugin/WebformHandler/RecaptchaElementWebformHandler.php

src/Plugin/WebformHandler/RecaptchaElementWebformHandler.php
<?php

namespace Drupal\recaptcha_element\Plugin\WebformHandler;

use Drupal\recaptcha_element\Element\RecaptchaElement;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\WebformSubmissionInterface;
use Drupal\Core\Form\FormStateInterface;

/**
 * Webform submission handler plugin.
 *
 * @WebformHandler(
 *   id = "recaptcha_element",
 *   label = @Translation("reCAPTCHA Element"),
 *   category = @Translation("recaptcha_element"),
 *   description = @Translation("Adds reCaptcha protection to the webform."),
 *   cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
 *   results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_IGNORED,
 *   submission = \Drupal\webform\Plugin\WebformHandlerInterface::SUBMISSION_OPTIONAL,
 * )
 */
class RecaptchaElementWebformHandler extends WebformHandlerBase {

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'element_name' => NULL,
      'recaptcha' => [],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form['#after_build'][] = [static::class, 'afterBuildConfigurationForm'];

    $form['element_name_override'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Override the element name.'),
      '#description' => $this->t('When checked, a custom element name can be provided for the hidden input element used to store reCAPTCHA tokens, otherwise the system name of this handler will be used.'),
    ];

    $form['element_name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Element name'),
      '#pattern' => '^[a-z0-9_]*$',
      '#description' => $this->t('Unique element name. Please enter only lower-case letters, numbers and underscores.'),
    ];

    $form['recaptcha_defaults'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Use reCAPTCHA Element defaults.'),
      '#description' => $this->t('When checked, the reCAPTCHA Element defaults will be used.'),
      '#default_value' => empty($this->configuration['recaptcha']),
    ];

    $form['recaptcha'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('reCAPTCHA'),
      '#tree' => TRUE,
    ];

    $form['recaptcha'] = RecaptchaElement::buildConfigurationForm($form['recaptcha'], $this->configuration['recaptcha'] ?? []);

    return parent::buildConfigurationForm($form, $form_state);
  }

  /**
   * After build callback for the configuration form.
   */
  public static function afterBuildConfigurationForm(array $form, FormStateInterface $form_state) {
    $element_name_override = sprintf(':input[name="%s"]', $form['element_name_override']['#name']);
    $element_name_override_checked = [
      $element_name_override => ['checked' => TRUE],
    ];

    $form['element_name']['#states']['enbled'] = $element_name_override_checked;
    $form['element_name']['#states']['visible'] = $element_name_override_checked;

    $recaptcha_defaults = sprintf(':input[name="%s"]', $form['recaptcha_defaults']['#name']);
    $recaptcha_defaults_checked = [
      $recaptcha_defaults => ['checked' => TRUE],
    ];

    $form['recaptcha']['#states']['disabled'] = $recaptcha_defaults_checked;
    $form['recaptcha']['#states']['invisible'] = $recaptcha_defaults_checked;

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    parent::submitConfigurationForm($form, $form_state);
    $values = $form_state->getValues();

    $this->configuration['element_name'] = empty($values['element_name_override']) && !empty($values['element_name'])
      ? $values['element_name']
      : NULL;
    $this->configuration['recaptcha'] = empty($values['recaptcha_defaults']) ? $values['recaptcha'] : [];
  }

  /**
   * {@inheritdoc}
   */
  public function alterForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
    $element_name = empty($this->configuration['element_name'])
      ? $this->getHandlerId()
      : $this->configuration['element_name'];

    $form[$element_name] = [
      '#type' => 'recaptcha_element',
      '#recaptcha' => $this->configuration['recaptcha'],
    ];

    return $form;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc