function FieldStorageReuseForm::getExistingFieldDefaults

Same name and namespace in other branches
  1. 10 core/modules/field_ui/src/Form/FieldStorageReuseForm.php \Drupal\field_ui\Form\FieldStorageReuseForm::getExistingFieldDefaults()

Get default options from an existing field and bundle.

Parameters

string $field_name: The machine name of the field.

Return value

array An array of settings with keys 'field_config', 'entity_form_display', and 'entity_view_display' if these are defined for an existing field instance. If the field is not defined for the specified bundle (or for any bundle if $existing_bundle is omitted) then return an empty array.

1 call to FieldStorageReuseForm::getExistingFieldDefaults()
FieldStorageReuseForm::reuseCallback in core/modules/field_ui/src/Form/FieldStorageReuseForm.php
Callback function to handle re-using an existing field.

File

core/modules/field_ui/src/Form/FieldStorageReuseForm.php, line 306

Class

FieldStorageReuseForm
Provides a form for the "field storage" add page.

Namespace

Drupal\field_ui\Form

Code

protected function getExistingFieldDefaults(string $field_name) : array {
    $default_options = [];
    $field_map = $this->entityFieldManager
        ->getFieldMap();
    if (empty($field_map[$this->entityTypeId][$field_name]['bundles'])) {
        return [];
    }
    $bundles = $field_map[$this->entityTypeId][$field_name]['bundles'];
    // Sort bundles to ensure deterministic behavior.
    sort($bundles);
    $existing_bundle = reset($bundles);
    // Copy field configuration.
    $existing_field = $this->entityFieldManager
        ->getFieldDefinitions($this->entityTypeId, $existing_bundle)[$field_name];
    $default_options['field_config'] = [
        'description' => $existing_field->getDescription(),
        'settings' => $existing_field->getSettings(),
        'required' => $existing_field->isRequired(),
        'default_value' => $existing_field->getDefaultValueLiteral(),
        'default_value_callback' => $existing_field->getDefaultValueCallback(),
    ];
    // Copy form and view mode configuration.
    $properties = [
        'targetEntityType' => $this->entityTypeId,
        'bundle' => $existing_bundle,
    ];
    
    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $existing_forms */
    $existing_forms = $this->entityTypeManager
        ->getStorage('entity_form_display')
        ->loadByProperties($properties);
    foreach ($existing_forms as $form) {
        if ($settings = $form->getComponent($field_name)) {
            $default_options['entity_form_display'][$form->getMode()] = $settings;
        }
    }
    
    /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface $existing_views */
    $existing_views = $this->entityTypeManager
        ->getStorage('entity_view_display')
        ->loadByProperties($properties);
    foreach ($existing_views as $view) {
        if ($settings = $view->getComponent($field_name)) {
            $default_options['entity_view_display'][$view->getMode()] = $settings;
        }
    }
    return $default_options;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.