3 namespace Drupal\Core\Entity;
5 use Drupal\Core\Field\FieldStorageDefinitionInterface;
6 use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
9 * Provides a repository for installed entity definitions.
11 class EntityLastInstalledSchemaRepository implements EntityLastInstalledSchemaRepositoryInterface {
14 * The key-value factory.
16 * @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface
18 protected $keyValueFactory;
21 * Constructs a new EntityLastInstalledSchemaRepository.
23 * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory
24 * The key-value factory.
26 public function __construct(KeyValueFactoryInterface $key_value_factory) {
27 $this->keyValueFactory = $key_value_factory;
33 public function getLastInstalledDefinition($entity_type_id) {
34 return $this->keyValueFactory->get('entity.definitions.installed')->get($entity_type_id . '.entity_type');
40 public function getLastInstalledDefinitions() {
41 $all_definitions = $this->keyValueFactory->get('entity.definitions.installed')->getAll();
43 // Filter out field storage definitions.
44 $filtered_keys = array_filter(array_keys($all_definitions), function ($key) {
45 return substr($key, -12) === '.entity_type';
47 $entity_type_definitions = array_intersect_key($all_definitions, array_flip($filtered_keys));
49 // Ensure that the returned array is keyed by the entity type ID.
50 $keys = array_keys($entity_type_definitions);
51 $keys = array_map(function ($key) {
52 $parts = explode('.', $key);
56 return array_combine($keys, $entity_type_definitions);
62 public function setLastInstalledDefinition(EntityTypeInterface $entity_type) {
63 $entity_type_id = $entity_type->id();
64 $this->keyValueFactory->get('entity.definitions.installed')->set($entity_type_id . '.entity_type', $entity_type);
71 public function deleteLastInstalledDefinition($entity_type_id) {
72 $this->keyValueFactory->get('entity.definitions.installed')->delete($entity_type_id . '.entity_type');
73 // Clean up field storage definitions as well. Even if the entity type
74 // isn't currently fieldable, there might be legacy definitions or an
75 // empty array stored from when it was.
76 $this->keyValueFactory->get('entity.definitions.installed')->delete($entity_type_id . '.field_storage_definitions');
83 public function getLastInstalledFieldStorageDefinitions($entity_type_id) {
84 return $this->keyValueFactory->get('entity.definitions.installed')->get($entity_type_id . '.field_storage_definitions', []);
90 public function setLastInstalledFieldStorageDefinitions($entity_type_id, array $storage_definitions) {
91 $this->keyValueFactory->get('entity.definitions.installed')->set($entity_type_id . '.field_storage_definitions', $storage_definitions);
97 public function setLastInstalledFieldStorageDefinition(FieldStorageDefinitionInterface $storage_definition) {
98 $entity_type_id = $storage_definition->getTargetEntityTypeId();
99 $definitions = $this->getLastInstalledFieldStorageDefinitions($entity_type_id);
100 $definitions[$storage_definition->getName()] = $storage_definition;
101 $this->setLastInstalledFieldStorageDefinitions($entity_type_id, $definitions);
107 public function deleteLastInstalledFieldStorageDefinition(FieldStorageDefinitionInterface $storage_definition) {
108 $entity_type_id = $storage_definition->getTargetEntityTypeId();
109 $definitions = $this->getLastInstalledFieldStorageDefinitions($entity_type_id);
110 unset($definitions[$storage_definition->getName()]);
111 $this->setLastInstalledFieldStorageDefinitions($entity_type_id, $definitions);