You are here

public function WebformElementManager::buildElement in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Plugin/WebformElementManager.php \Drupal\webform\Plugin\WebformElementManager::buildElement()

Build a Webform element.

Parameters

array $element: An associative array containing an element with a #type property.

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides WebformElementManagerInterface::buildElement

See also

hook_webform_element_alter()

hook_webform_element_ELEMENT_TYPE_alter()

\Drupal\webform\WebformSubmissionForm::prepareElements

File

src/Plugin/WebformElementManager.php, line 165

Class

WebformElementManager
Provides a plugin manager for webform element plugins.

Namespace

Drupal\webform\Plugin

Code

public function buildElement(array &$element, array $form, FormStateInterface $form_state) {

  // Get the webform submission.
  $form_object = $form_state
    ->getFormObject();

  /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
  $webform_submission = $form_object instanceof WebformSubmissionForm ? $form_object
    ->getEntity() : NULL;
  $webform = $webform_submission ? $webform_submission
    ->getWebform() : NULL;
  $element_plugin = $this
    ->getElementInstance($element, $webform_submission ?: $webform);
  $element_plugin
    ->prepare($element, $webform_submission);
  $element_plugin
    ->finalize($element, $webform_submission);
  $element_plugin
    ->setDefaultValue($element);

  // Allow modules to alter the webform element.
  // @see \Drupal\Core\Field\WidgetBase::formSingleElement()
  $hooks = [
    'webform_element',
  ];
  if (!empty($element['#type'])) {
    $hooks[] = 'webform_element_' . $element['#type'];
  }
  $context = [
    'form' => $form,
  ];
  $this->moduleHandler
    ->alter($hooks, $element, $form_state, $context);

  // Allow handlers to alter the webform element.
  if ($webform_submission) {
    $webform
      ->invokeHandlers('alterElement', $element, $form_state, $context);
  }
}