EntityLastInstalledSchemaRepository.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Drupal\Core\Entity;
  3. use Drupal\Core\Field\FieldStorageDefinitionInterface;
  4. use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
  5. /**
  6. * Provides a repository for installed entity definitions.
  7. */
  8. class EntityLastInstalledSchemaRepository implements EntityLastInstalledSchemaRepositoryInterface {
  9. /**
  10. * The key-value factory.
  11. *
  12. * @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface
  13. */
  14. protected $keyValueFactory;
  15. /**
  16. * Constructs a new EntityLastInstalledSchemaRepository.
  17. *
  18. * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory
  19. * The key-value factory.
  20. */
  21. public function __construct(KeyValueFactoryInterface $key_value_factory) {
  22. $this->keyValueFactory = $key_value_factory;
  23. }
  24. /**
  25. * {@inheritdoc}
  26. */
  27. public function getLastInstalledDefinition($entity_type_id) {
  28. return $this->keyValueFactory->get('entity.definitions.installed')->get($entity_type_id . '.entity_type');
  29. }
  30. /**
  31. * {@inheritdoc}
  32. */
  33. public function setLastInstalledDefinition(EntityTypeInterface $entity_type) {
  34. $entity_type_id = $entity_type->id();
  35. $this->keyValueFactory->get('entity.definitions.installed')->set($entity_type_id . '.entity_type', $entity_type);
  36. return $this;
  37. }
  38. /**
  39. * {@inheritdoc}
  40. */
  41. public function deleteLastInstalledDefinition($entity_type_id) {
  42. $this->keyValueFactory->get('entity.definitions.installed')->delete($entity_type_id . '.entity_type');
  43. // Clean up field storage definitions as well. Even if the entity type
  44. // isn't currently fieldable, there might be legacy definitions or an
  45. // empty array stored from when it was.
  46. $this->keyValueFactory->get('entity.definitions.installed')->delete($entity_type_id . '.field_storage_definitions');
  47. return $this;
  48. }
  49. /**
  50. * {@inheritdoc}
  51. */
  52. public function getLastInstalledFieldStorageDefinitions($entity_type_id) {
  53. return $this->keyValueFactory->get('entity.definitions.installed')->get($entity_type_id . '.field_storage_definitions', []);
  54. }
  55. /**
  56. * {@inheritdoc}
  57. */
  58. public function setLastInstalledFieldStorageDefinitions($entity_type_id, array $storage_definitions) {
  59. $this->keyValueFactory->get('entity.definitions.installed')->set($entity_type_id . '.field_storage_definitions', $storage_definitions);
  60. }
  61. /**
  62. * {@inheritdoc}
  63. */
  64. public function setLastInstalledFieldStorageDefinition(FieldStorageDefinitionInterface $storage_definition) {
  65. $entity_type_id = $storage_definition->getTargetEntityTypeId();
  66. $definitions = $this->getLastInstalledFieldStorageDefinitions($entity_type_id);
  67. $definitions[$storage_definition->getName()] = $storage_definition;
  68. $this->setLastInstalledFieldStorageDefinitions($entity_type_id, $definitions);
  69. }
  70. /**
  71. * {@inheritdoc}
  72. */
  73. public function deleteLastInstalledFieldStorageDefinition(FieldStorageDefinitionInterface $storage_definition) {
  74. $entity_type_id = $storage_definition->getTargetEntityTypeId();
  75. $definitions = $this->getLastInstalledFieldStorageDefinitions($entity_type_id);
  76. unset($definitions[$storage_definition->getName()]);
  77. $this->setLastInstalledFieldStorageDefinitions($entity_type_id, $definitions);
  78. }
  79. }