Implements Drupal\Core\Entity\EntityStorageControllerInterface::getFieldDefinitions().
Overrides EntityStorageControllerInterface::getFieldDefinitions
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;
}