field.module

Same filename in other branches
  1. 7.x modules/field/field.module
  2. 9 core/modules/field/field.module
  3. 8.9.x core/modules/field/field.module
  4. 10 core/modules/field/field.module

File

core/modules/field/field.module

View source
<?php


/**
 * @file
 */
use Drupal\field\FieldConfigInterface;
use Drupal\field\FieldStorageConfigInterface;
use Drupal\Core\Form\FormStateInterface;

/*
 * Load all public Field API functions. Drupal currently has no
 * mechanism for auto-loading core APIs, so we have to load them on
 * every page request.
 */
require_once __DIR__ . '/field.purge.inc';

/**
 * @} End of "defgroup field".
 */

/**
 * Assembles a partial entity structure with initial IDs.
 *
 * @param object $ids
 *   An object with the properties entity_type (required), entity_id (required),
 *   revision_id (optional) and bundle (optional).
 *
 * @return \Drupal\Core\Entity\EntityInterface
 *   An entity, initialized with the provided IDs.
 */
function _field_create_entity_from_ids($ids) {
    $id_properties = [];
    $entity_type = \Drupal::entityTypeManager()->getDefinition($ids->entity_type);
    if ($id_key = $entity_type->getKey('id')) {
        $id_properties[$id_key] = $ids->entity_id;
    }
    if (isset($ids->revision_id) && ($revision_key = $entity_type->getKey('revision'))) {
        $id_properties[$revision_key] = $ids->revision_id;
    }
    if (isset($ids->bundle) && ($bundle_key = $entity_type->getKey('bundle'))) {
        $id_properties[$bundle_key] = $ids->bundle;
    }
    return \Drupal::entityTypeManager()->getStorage($ids->entity_type)
        ->create($id_properties);
}

/**
 * Entity form builder for field config edit form.
 *
 * @param string $entity_type_id
 *   The entity type identifier.
 * @param \Drupal\Core\Entity\EntityInterface $entity
 *   The entity updated with the submitted values.
 * @param array $form
 *   The complete form array.
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 *   The current state of the form.
 *
 * @see \Drupal\field_ui\Form\FieldConfigEditForm::form
 * @see \Drupal\field_ui\Form\FieldConfigEditForm::copyFormValuesToEntity
 */
function field_form_field_config_edit_form_entity_builder($entity_type_id, $entity, &$form, FormStateInterface $form_state) {
    assert($entity instanceof FieldConfigInterface);
    $previous_field_storage = $form_state->getFormObject()
        ->getEntity()
        ->getFieldStorageDefinition();
    assert($previous_field_storage instanceof FieldStorageConfigInterface);
    // Act on all sub-types of the entity_reference field type.
    
    /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
    $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
    $item_class = 'Drupal\\Core\\Field\\Plugin\\Field\\FieldType\\EntityReferenceItem';
    $class = $field_type_manager->getPluginClass($entity->getFieldStorageDefinition()
        ->getType());
    if ($class !== $item_class && !is_subclass_of($class, $item_class)) {
        return;
    }
    // Update handler settings when target_type is changed.
    if ($entity->getFieldStorageDefinition()
        ->getSetting('target_type') !== $previous_field_storage->getSetting('target_type')) {
        // @see field_field_storage_config_update().
        $entity->setSetting('handler_settings', []);
        // @see field_field_config_presave().
        \Drupal::moduleHandler()->invoke('field', 'field_config_create', [
            $entity,
        ]);
        // Store updated settings in form state so that the form state can be copied
        // directly to the entity.
        $form_state->setValue('settings', $entity->getSettings());
        // Unset user input for the settings because they are not valid after the
        // target type has changed.
        $user_input = $form_state->getUserInput();
        unset($user_input['settings']);
        $form_state->setUserInput($user_input);
    }
}

Functions

Title Deprecated Summary
field_form_field_config_edit_form_entity_builder Entity form builder for field config edit form.
_field_create_entity_from_ids Assembles a partial entity structure with initial IDs.

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