diff --git a/src/EntityKeysFieldsTrait.php b/src/EntityKeysFieldsTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..0c2fb023617b220e5043a4880a1486ee84cb0cb5 --- /dev/null +++ b/src/EntityKeysFieldsTrait.php @@ -0,0 +1,74 @@ +<?php + +/** + * @file + * Contains \Drupal\entity\EntityKeysFieldsTrait. + */ + +namespace Drupal\entity; + +use Drupal\Core\Entity\ContentEntityTypeInterface; +use Drupal\Core\Field\BaseFieldDefinition; + +/** + * Provides base fields for entity keys. + */ +trait EntityKeysFieldsTrait { + + /** + * Returns the base field definitions for entity keys. + * + * @param \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type + * The entity type. + * + * @return \Drupal\Core\Field\BaseFieldDefinition[] + */ + protected function entityKeysBaseFieldDefinitions(ContentEntityTypeInterface $entity_type) { + $fields = []; + + if ($entity_type->hasKey('id')) { + $fields[$entity_type->getKey('id')] = BaseFieldDefinition::create('integer') + ->setLabel(t('ID')) + ->setReadOnly(TRUE) + ->setSetting('unsigned', TRUE); + } + + if ($entity_type->hasKey('uuid')) { + $fields[$entity_type->getKey('uuid')] = BaseFieldDefinition::create('uuid') + ->setLabel(t('UUID')) + ->setReadOnly(TRUE); + } + + if ($entity_type->hasKey('revision')) { + $fields[$entity_type->getKey('revision')] = BaseFieldDefinition::create('integer') + ->setLabel(t('Revision ID')) + ->setReadOnly(TRUE) + ->setSetting('unsigned', TRUE); + } + + if ($entity_type->hasKey('langcode')) { + $fields[$entity_type->getKey('langcode')] = BaseFieldDefinition::create('language') + ->setLabel(t('Language')) + ->setTranslatable(TRUE) + ->setRevisionable(TRUE) + ->setDisplayOptions('view', [ + 'type' => 'hidden', + ]) + ->setDisplayOptions('form', [ + 'type' => 'language_select', + 'weight' => 2, + ]); + } + + if ($bundle_entity_type_id = $entity_type->getBundleEntityType() && $entity_type->hasKey('bundle')) { + $bundle_key = $entity_type->getKey('bundle'); + $fields[$bundle_key] = BaseFieldDefinition::create('entity_reference') + ->setLabel(t('Type')) + ->setSetting('target_type', $bundle_entity_type_id) + ->setReadOnly(TRUE); + } + + return $fields; + } + +}