You are here

public static function ScheduledUpdate::bundleFieldDefinitions in Scheduled Updates 8

Provides field definitions for a specific bundle.

This function can return definitions both for bundle fields (fields that are not defined in $base_field_definitions, and therefore might not exist on some bundles) as well as bundle-specific overrides of base fields (fields that are defined in $base_field_definitions, and therefore exist for all bundles). However, bundle-specific base field overrides can also be provided by 'base_field_override' configuration entities, and that is the recommended approach except in cases where an entity type needs to provide a bundle-specific base field override that is decoupled from configuration. Note that for most entity types, the bundles themselves are derived from configuration (e.g., 'node' bundles are managed via 'node_type' configuration entities), so decoupling bundle-specific base field overrides from configuration only makes sense for entity types that also decouple their bundles from configuration. In cases where both this function returns a bundle-specific override of a base field and a 'base_field_override' configuration entity exists, the latter takes precedence.

@todo WARNING: This method will be changed in https://www.drupal.org/node/2346347.

Parameters

\Drupal\Core\Entity\EntityTypeInterface $entity_type: The entity type definition. Useful when a single class is used for multiple, possibly dynamic entity types.

string $bundle: The bundle.

\Drupal\Core\Field\FieldDefinitionInterface[] $base_field_definitions: The list of base field definitions.

Return value

\Drupal\Core\Field\FieldDefinitionInterface[] An array of bundle field definitions, keyed by field name.

Overrides ContentEntityBase::bundleFieldDefinitions

See also

\Drupal\Core\Entity\EntityFieldManagerInterface::getFieldDefinitions()

\Drupal\Core\Entity\FieldableEntityInterface::baseFieldDefinitions()

File

src/Entity/ScheduledUpdate.php, line 227
Contains \Drupal\scheduled_updates\Entity\ScheduledUpdate.

Class

ScheduledUpdate
Defines the Scheduled update entity.

Namespace

Drupal\scheduled_updates\Entity

Code

public static function bundleFieldDefinitions(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {

  /** @var ScheduledUpdateType $update_type */
  if ($update_type = ScheduledUpdateType::load($bundle)) {
    $fields['entity_ids'] = clone $base_field_definitions['entity_ids'];

    /** @var BaseFieldDefinition $definition */
    $definition =& $fields['entity_ids'];
    if ($update_type
      ->isIndependentType()) {

      // @TODO Update other settings: cardinality, required, default display..
      // @TODO Add reference field settings on Type edit page.
      $definition
        ->setSetting('target_type', $update_type
        ->getUpdateEntityType());
      $definition
        ->setDisplayOptions('form', [
        'type' => 'entity_reference_autocomplete',
        'weight' => -10,
      ]);
      $runner_settings = $update_type
        ->getUpdateRunnerSettings();
      if (isset($runner_settings['bundles'])) {
        $bundles = array_filter($runner_settings['bundles']);
        $definition
          ->setSetting('handler_settings', [
          'target_bundles' => $bundles,
        ]);
      }
    }
    else {
      $definition
        ->setDisplayConfigurable('form', FALSE);
      $definition
        ->setDisplayConfigurable('view', FALSE);
    }
    return $fields;
  }
  return [];
}