5 use Drupal\Core\Config\ConfigFactoryInterface;
6 use Drupal\Core\Entity\EntityTypeManager;
36 private $dereferenceMethod;
38 private $entityTypeManager;
43 public function __construct(ConfigFactoryInterface $configService, EntityTypeManager $entityTypeManager) {
44 $this->setConfigService($configService);
45 $this->entityTypeManager = $entityTypeManager;
59 public function dereference(stdClass $data,
int $method = self::DEREFERENCE_OUTPUT_DEFAULT) {
61 $this->setDereferenceMethod($method);
63 foreach ($this->getPropertyList() as $property_id) {
64 if (isset($data->{$property_id})) {
65 $data->{$property_id} = $this->dereferenceProperty($property_id, $data->{$property_id});
80 private function setDereferenceMethod(
int $method) {
81 return $this->dereferenceMethod = $method;
95 private function dereferenceProperty(
string $property_id, $uuid) {
96 if (is_array($uuid)) {
97 return $this->dereferenceMultiple($property_id, $uuid);
99 elseif (is_string($uuid) && $this->getUuidService()->isValid($uuid)) {
100 return $this->dereferenceSingle($property_id, $uuid);
103 $this->log(
'value_referencer',
'Unexpected data type when dereferencing property_id: @property_id with uuid: @uuid',
105 '@property_id' => $property_id,
106 '@uuid' => var_export($uuid, TRUE),
123 private function dereferenceMultiple(
string $property_id, array $uuids) : array {
125 foreach ($uuids as $uuid) {
126 $data = $this->dereferenceSingle($property_id, $uuid);
127 if (NULL !== $data) {
148 private function dereferenceSingle(
string $property_id,
string $uuid) {
149 $nodes = $this->entityTypeManager
152 'field_data_type' => $property_id,
156 if ($node = reset($nodes)) {
157 if (isset($node->field_json_metadata->value)) {
158 $metadata = json_decode($node->field_json_metadata->value);
159 return ($this->dereferenceMethod == self::DEREFERENCE_OUTPUT_REFERENCE_IDS) ? $metadata : $metadata->data;
166 'Property @property_id reference @uuid not found',
168 '@property_id' => $property_id,
169 '@uuid' => var_export($uuid, TRUE),