9 use Contracts\FactoryInterface;
10 use Drupal\Core\Cache\Cache;
11 use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
12 use Drupal\Core\Extension\ModuleHandlerInterface;
13 use RootedData\RootedJsonData;
44 CacheTagsInvalidatorInterface $invalidator,
45 ModuleHandlerInterface $moduleHandler
49 $this->invalidator = $invalidator;
50 $this->moduleHandler = $moduleHandler;
58 public function getReferencers(
string $schemaId,
string $referenceId,
string $propertyId) {
60 $metastoreItems = $this->metastoreStorage->getInstance($schemaId)->retrieveContains($referenceId);
63 foreach ($metastoreItems as $item) {
65 $propertyValue = $metadata->{$propertyId};
67 $idIsValue = $referenceId == $propertyValue;
68 $idInArray = is_array($propertyValue) && in_array($referenceId, $propertyValue);
69 if ($idIsValue || $idInArray) {
70 $referencers[] = $identifier;
88 $referencers = $this->getReferencers($schemaId, $referenceId, $propertyId);
90 foreach ($referencers as $identifier) {
91 $item = $this->metastoreItemFactory->getInstance($identifier);
92 $tags = Cache::mergeTags($tags, $item->getCacheTags());
94 $this->invalidator->invalidateTags($tags);
108 $metadata = json_decode($json);
110 $module_path = $this->moduleHandler->getModule(get_module_name())->getPath();
111 $legacy_schema_path = $module_path .
'/docs/legacy_metadata.json';
113 $legacy_schema = file_get_contents($legacy_schema_path);
115 $identifier = $metadata->identifier;
117 $metadata = $this->metastoreItemFactory->getInstance($identifier)->getRawMetadata();
119 $validation_result = RootedJsonData::validate(json_encode($metadata), $legacy_schema);
122 if ($validation_result->isValid()) {
123 $metadata = $metadata->data;
126 return [$identifier, $metadata];