You are here

class WebformTermsOfService in Webform 6.x

Same name in this branch
  1. 6.x src/Element/WebformTermsOfService.php \Drupal\webform\Element\WebformTermsOfService
  2. 6.x src/Plugin/WebformElement/WebformTermsOfService.php \Drupal\webform\Plugin\WebformElement\WebformTermsOfService
Same name and namespace in other branches
  1. 8.5 src/Element/WebformTermsOfService.php \Drupal\webform\Element\WebformTermsOfService

Provides a webform terms of service element.

Plugin annotation

@FormElement("webform_terms_of_service");

Hierarchy

Expanded class hierarchy of WebformTermsOfService

1 file declares its use of WebformTermsOfService
WebformTermsOfService.php in src/Plugin/WebformElement/WebformTermsOfService.php
1 #type use of WebformTermsOfService
WebformExampleCustomFormSettingsForm::buildForm in modules/webform_example_custom_form/src/Form/WebformExampleCustomFormSettingsForm.php
Form constructor.

File

src/Element/WebformTermsOfService.php, line 13

Namespace

Drupal\webform\Element
View source
class WebformTermsOfService extends Checkbox {

  /**
   * Display terms using slideout.
   *
   * @var string
   */
  const TERMS_SLIDEOUT = 'slideout';

  /**
   * Display terms in modal.
   *
   * @var string
   */
  const TERMS_MODAL = 'modal';

  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    return [
      '#return_value' => TRUE,
      '#terms_type' => static::TERMS_MODAL,
      '#terms_title' => '',
      '#terms_content' => '',
    ] + parent::getInfo();
  }

  /**
   * Sets the #checked property of a checkbox element.
   */
  public static function processCheckbox(&$element, FormStateInterface $form_state, &$complete_form) {
    $element = parent::processCheckbox($element, $form_state, $complete_form);

    // Remove curly brackets from the {terms of service} title.
    if (empty($element['#required_error'])) {
      $title = empty($element['#title']) ? (string) t('I agree to the {terms of service}.') : $element['#title'];
      $title = str_replace('{', '', $title);
      $title = str_replace('}', '', $title);
      $element['#required_error'] = t('@name field is required.', [
        '@name' => $title,
      ]);
    }
    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public static function preRenderCheckbox($element) {
    $element = parent::preRenderCheckbox($element);
    $id = 'webform-terms-of-service-' . implode('_', $element['#parents']);
    if (empty($element['#title'])) {
      $element['#title'] = (string) t('I agree to the {terms of service}.');
    }
    $element['#title'] = str_replace('{', '<a role="button" href="#terms">', $element['#title']);
    $element['#title'] = str_replace('}', '</a>', $element['#title']);

    // Change description to render array.
    if (isset($element['#description'])) {
      $element['#description'] = [
        'description' => is_array($element['#description']) ? $element['#description'] : [
          '#markup' => $element['#description'],
        ],
      ];
    }
    else {
      $element['#description'] = [];
    }

    // Add terms to #description.
    $element['#description']['terms'] = [
      '#type' => 'container',
      '#attributes' => [
        'id' => $id . '--description',
        'class' => [
          'webform-terms-of-service-details',
          'js-hide',
        ],
      ],
    ];
    if (!empty($element['#terms_title'])) {
      $element['#description']['terms']['title'] = [
        '#type' => 'container',
        '#markup' => $element['#terms_title'],
        '#attributes' => [
          'class' => [
            'webform-terms-of-service-details--title',
          ],
        ],
      ];
    }
    if (!empty($element['#terms_content'])) {
      $element['#description']['terms']['content'] = is_array($element['#terms_content']) ? $element['#terms_content'] : [
        '#markup' => $element['#terms_content'],
      ];
      $element['#description']['terms']['content'] += [
        '#type' => 'container',
        '#attributes' => [
          'class' => [
            'webform-terms-of-service-details--content',
          ],
        ],
      ];
    }

    // Add accessibility attributes to title and content.
    if ($element['#type'] === static::TERMS_SLIDEOUT) {
    }

    // Set type to data attribute.
    // @see Drupal.behaviors.webformTermsOfService.
    $element['#wrapper_attributes']['data-webform-terms-of-service-type'] = $element['#terms_type'];
    $element['#attached']['library'][] = 'webform/webform.element.terms_of_service';

    // Change #type to checkbox so that element is rendered correctly.
    $element['#type'] = 'checkbox';
    $element['#wrapper_attributes']['class'][] = 'form-type-webform-terms-of-service';
    $element['#wrapper_attributes']['class'][] = 'js-form-type-webform-terms-of-service';
    $element['#element_validate'][] = [
      get_called_class(),
      'validateWebformTermsOfService',
    ];
    return $element;
  }

  /**
   * Webform element validation handler for webform terms of service element.
   */
  public static function validateWebformTermsOfService(&$element, FormStateInterface $form_state, &$complete_form) {
    $value = (bool) $form_state
      ->getValue($element['#parents'], []);
    $element['#value'] = $value;
    $form_state
      ->setValueForElement($element, $value);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Checkbox::valueCallback public static function Determines how user input is mapped to an element's #value property. Overrides FormElement::valueCallback
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
FormElement::processAutocomplete public static function Adds autocomplete functionality to elements.
FormElement::processPattern public static function #process callback for #pattern form element property.
FormElement::validatePattern public static function #element_validate callback for #pattern form element property.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 2
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 98
RenderElement::preRenderAjaxForm public static function Adds Ajax information about an element to communicate with JavaScript.
RenderElement::preRenderGroup public static function Adds members of this group as actual elements for rendering.
RenderElement::processAjaxForm public static function Form element processing handler for the #ajax form property. 1
RenderElement::processGroup public static function Arranges elements into groups.
RenderElement::setAttributes public static function Sets a form element's class attribute. Overrides ElementInterface::setAttributes
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
WebformTermsOfService::getInfo public function Returns the element properties for this element. Overrides Checkbox::getInfo
WebformTermsOfService::preRenderCheckbox public static function Prepares a #type 'checkbox' render element for input.html.twig. Overrides Checkbox::preRenderCheckbox
WebformTermsOfService::processCheckbox public static function Sets the #checked property of a checkbox element. Overrides Checkbox::processCheckbox
WebformTermsOfService::TERMS_MODAL constant Display terms in modal.
WebformTermsOfService::TERMS_SLIDEOUT constant Display terms using slideout.
WebformTermsOfService::validateWebformTermsOfService public static function Webform element validation handler for webform terms of service element.