You are here

public function WebformEntityReferenceSelectWidget::getTargetIdElement in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php \Drupal\webform\Plugin\Field\FieldWidget\WebformEntityReferenceSelectWidget::getTargetIdElement()

Returns the target id element form for a single webform field widget.

Parameters

\Drupal\Core\Field\FieldItemListInterface $items: Array of default values for this field.

int $delta: The order of this item in the array of sub-elements (0, 1, 2, etc.).

array $element: A form element array containing basic properties for the widget.

array $form: The form structure where widgets are being attached to. This might be a full form structure, or a sub-element of a larger form.

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

Return value

array The form elements for a single widget for this field.

Overrides WebformEntityReferenceWidgetTrait::getTargetIdElement

File

src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php, line 43

Class

WebformEntityReferenceSelectWidget
Plugin implementation of the 'webform_entity_reference_select' widget.

Namespace

Drupal\webform\Plugin\Field\FieldWidget

Code

public function getTargetIdElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {

  // Get default value (webform ID).
  $referenced_entities = $items
    ->referencedEntities();
  $default_value = isset($referenced_entities[$delta]) ? $referenced_entities[$delta] : NULL;

  // Convert default_value's Webform to a simple entity_id.
  if ($default_value instanceof WebformInterface) {
    $default_value = $default_value
      ->id();
  }

  // Get options grouped by category.
  $options = $this
    ->getOptions($items
    ->getEntity());

  // Make sure if an archived webform is the #default_value always include
  // it as an option.
  if ($default_value && ($webform = Webform::load($default_value))) {
    if ($webform
      ->isArchived()) {
      $options[(string) $this
        ->t('Archived')][$webform
        ->id()] = $webform
        ->label();
    }
  }
  $target_element = [
    '#type' => 'webform_entity_select',
    '#options' => $options,
    '#default_value' => $default_value,
  ];

  // Set empty option.
  if (empty($element['#required'])) {
    $target_element['#empty_option'] = $this
      ->t('- Select -');
    $target_element['#empty_value'] = '';
  }

  // Set validation callback.
  $target_element['#element_validate'] = [
    [
      get_class($this),
      'validateWebformEntityReferenceSelectWidget',
    ],
  ];
  return $target_element;
}