You are here

public function DynamicEntityReferenceFieldItemList::defaultValuesFormSubmit in Dynamic Entity Reference 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/Field/FieldType/DynamicEntityReferenceFieldItemList.php \Drupal\dynamic_entity_reference\Plugin\Field\FieldType\DynamicEntityReferenceFieldItemList::defaultValuesFormSubmit()

Processes the submitted default value.

Invoked from \Drupal\field_ui\Form\FieldConfigEditForm to allow administrators to configure instance-level default value.

Parameters

array $element: The default value form element.

array $form: The form where the settings form is being included in.

\Drupal\Core\Form\FormStateInterface $form_state: The form state of the (entire) configuration form.

Return value

array The field default value.

Overrides EntityReferenceFieldItemList::defaultValuesFormSubmit

File

src/Plugin/Field/FieldType/DynamicEntityReferenceFieldItemList.php, line 124

Class

DynamicEntityReferenceFieldItemList
Defines a item list class for dynamic entity reference fields.

Namespace

Drupal\dynamic_entity_reference\Plugin\Field\FieldType

Code

public function defaultValuesFormSubmit(array $element, array &$form, FormStateInterface $form_state) {
  $manager = \Drupal::entityTypeManager();
  $default_value = [];

  // We want to bypass the EntityReferenceItem::defaultValuesFormSubmit() so
  // we duplicate FieldItemList::defaultValuesFormSubmit() here.
  // Extract the submitted value, and store it as an array.
  if ($widget = $this
    ->defaultValueWidget($form_state)) {
    $widget
      ->extractFormValues($this, $element, $form_state);
    $default_value = $this
      ->getValue();
  }

  // Convert numeric IDs to UUIDs to ensure config deployability.
  $all_ids = [];
  foreach ($default_value as $delta => $properties) {
    if (isset($properties['entity']) && $properties['entity']
      ->isNew()) {

      // This may be a newly created term.
      $properties['entity']
        ->save();
      $default_value[$delta]['target_id'] = $properties['entity']
        ->id();
      $default_value[$delta]['target_type'] = $properties['entity']
        ->getEntityTypeId();
      unset($default_value[$delta]['entity']);
    }
    $all_ids[$default_value[$delta]['target_type']][] = $default_value[$delta]['target_id'];
  }
  $entities = [];
  foreach ($all_ids as $target_type => $ids) {
    $entities[$target_type] = $manager
      ->getStorage($target_type)
      ->loadMultiple($ids);
  }
  foreach ($default_value as $delta => $properties) {
    unset($default_value[$delta]['target_id']);
    $default_value[$delta]['target_uuid'] = $entities[$properties['target_type']][$properties['target_id']]
      ->uuid();
  }
  return $default_value;
}