public function DatabaseStorageController::getFieldDefinitions

Implements Drupal\Core\Entity\EntityStorageControllerInterface::getFieldDefinitions().

Overrides EntityStorageControllerInterface::getFieldDefinitions

File

drupal/core/lib/Drupal/Core/Entity/DatabaseStorageController.php, line 653
Definition of Drupal\Core\Entity\DatabaseStorageController.

Class

DatabaseStorageController
Defines a base entity controller class.

Namespace

Drupal\Core\Entity

Code

public function getFieldDefinitions(array $constraints) {

  // @todo: Add caching for $this->propertyInfo.
  if (!isset($this->entityFieldInfo)) {
    $this->entityFieldInfo = array(
      'definitions' => $this
        ->baseFieldDefinitions(),
      // Contains definitions of optional (per-bundle) properties.
      'optional' => array(),
      // An array keyed by bundle name containing the names of the per-bundle
      // properties.
      'bundle map' => array(),
    );

    // Invoke hooks.
    $result = module_invoke_all($this->entityType . '_property_info');
    $this->entityFieldInfo = array_merge_recursive($this->entityFieldInfo, $result);
    $result = module_invoke_all('entity_field_info', $this->entityType);
    $this->entityFieldInfo = array_merge_recursive($this->entityFieldInfo, $result);
    $hooks = array(
      'entity_field_info',
      $this->entityType . '_property_info',
    );
    drupal_alter($hooks, $this->entityFieldInfo, $this->entityType);

    // Enforce fields to be multiple by default.
    foreach ($this->entityFieldInfo['definitions'] as &$definition) {
      $definition['list'] = TRUE;
    }
    foreach ($this->entityFieldInfo['optional'] as &$definition) {
      $definition['list'] = TRUE;
    }
  }
  $definitions = $this->entityFieldInfo['definitions'];

  // Add in per-bundle properties.
  // @todo: Should this be statically cached as well?
  if (!empty($constraints['bundle']) && isset($this->entityFieldInfo['bundle map'][$constraints['bundle']])) {
    $definitions += array_intersect_key($this->entityFieldInfo['optional'], array_flip($this->entityFieldInfo['bundle map'][$constraints['bundle']]));
  }
  return $definitions;
}