Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / lib / Drupal / Core / Entity / EntityLastInstalledSchemaRepository.php
1 <?php
2
3 namespace Drupal\Core\Entity;
4
5 use Drupal\Core\Field\FieldStorageDefinitionInterface;
6 use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
7
8 /**
9  * Provides a repository for installed entity definitions.
10  */
11 class EntityLastInstalledSchemaRepository implements EntityLastInstalledSchemaRepositoryInterface {
12
13   /**
14    * The key-value factory.
15    *
16    * @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface
17    */
18   protected $keyValueFactory;
19
20   /**
21    * Constructs a new EntityLastInstalledSchemaRepository.
22    *
23    * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory
24    *   The key-value factory.
25    */
26   public function __construct(KeyValueFactoryInterface $key_value_factory) {
27     $this->keyValueFactory = $key_value_factory;
28   }
29
30   /**
31    * {@inheritdoc}
32    */
33   public function getLastInstalledDefinition($entity_type_id) {
34     return $this->keyValueFactory->get('entity.definitions.installed')->get($entity_type_id . '.entity_type');
35   }
36
37   /**
38    * {@inheritdoc}
39    */
40   public function getLastInstalledDefinitions() {
41     $all_definitions = $this->keyValueFactory->get('entity.definitions.installed')->getAll();
42
43     // Filter out field storage definitions.
44     $filtered_keys = array_filter(array_keys($all_definitions), function ($key) {
45         return substr($key, -12) === '.entity_type';
46     });
47     $entity_type_definitions = array_intersect_key($all_definitions, array_flip($filtered_keys));
48
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);
53       return $parts[0];
54     }, $keys);
55
56     return array_combine($keys, $entity_type_definitions);
57   }
58
59   /**
60    * {@inheritdoc}
61    */
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);
65     return $this;
66   }
67
68   /**
69    * {@inheritdoc}
70    */
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');
77     return $this;
78   }
79
80   /**
81    * {@inheritdoc}
82    */
83   public function getLastInstalledFieldStorageDefinitions($entity_type_id) {
84     return $this->keyValueFactory->get('entity.definitions.installed')->get($entity_type_id . '.field_storage_definitions', []);
85   }
86
87   /**
88    * {@inheritdoc}
89    */
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);
92   }
93
94   /**
95    * {@inheritdoc}
96    */
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);
102   }
103
104   /**
105    * {@inheritdoc}
106    */
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);
112   }
113
114 }