Skip to content

Commit

Permalink
fix(Serialization): Always falls back on default translation if no tr…
Browse files Browse the repository at this point in the history
…anslation for Tag, Folder and Document entities
  • Loading branch information
ambroisemaupate committed Jul 5, 2024
1 parent 0c6dbc1 commit 0f0ceed
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 3 deletions.
8 changes: 8 additions & 0 deletions lib/RoadizCoreBundle/src/Entity/Document.php
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,14 @@ public function getDocumentTranslationsByTranslation(TranslationInterface $trans
return $this->documentTranslations->matching($criteria);
}

#[SymfonySerializer\Ignore]
public function getDocumentTranslationsByDefaultTranslation(): ?DocumentTranslation
{
return $this->documentTranslations->findFirst(function (int $key, DocumentTranslation $documentTranslation) {
return $documentTranslation->getTranslation()->isDefaultTranslation();
});
}

/**
* @param DocumentTranslation $documentTranslation
* @return $this
Expand Down
8 changes: 8 additions & 0 deletions lib/RoadizCoreBundle/src/Entity/Folder.php
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,14 @@ public function getTranslatedFoldersByTranslation(TranslationInterface $translat
return $this->translatedFolders->matching($criteria);
}

#[SymfonySerializer\Ignore]
public function getTranslatedFoldersByDefaultTranslation(): ?FolderTranslation
{
return $this->translatedFolders->findFirst(function (int $key, FolderTranslation $translatedFolder) {
return $translatedFolder->getTranslation()->isDefaultTranslation();
});
}

/**
* @return string|null
* @Serializer\VirtualProperty
Expand Down
8 changes: 8 additions & 0 deletions lib/RoadizCoreBundle/src/Entity/Tag.php
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,14 @@ public function getTranslatedTagsByTranslation(TranslationInterface $translation
});
}

#[SymfonySerializer\Ignore]
public function getTranslatedTagsByDefaultTranslation(): ?TagTranslation
{
return $this->translatedTags->findFirst(function (int $key, TagTranslation $tagTranslation) {
return $tagTranslation->getTranslation()->isDefaultTranslation();
});
}

/**
* @return string
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,11 @@ public function normalize(mixed $object, ?string $format = null, array $context
}

if (isset($context['translation']) && $context['translation'] instanceof TranslationInterface) {
$translatedData = $object->getDocumentTranslationsByTranslation($context['translation'])->first() ?: null;
/*
* Always falls back on default translation if no translation is found for Documents entities
*/
$translatedData = $object->getDocumentTranslationsByTranslation($context['translation'])->first() ?:
$object->getDocumentTranslationsByDefaultTranslation();
if ($translatedData instanceof DocumentTranslation) {
$data['name'] = $translatedData->getName();
$data['description'] = $translatedData->getDescription();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ public function normalize(mixed $object, ?string $format = null, array $context
$data = $this->decorated->normalize($object, $format, $context);
if ($object instanceof Folder && is_array($data)) {
if (isset($context['translation']) && $context['translation'] instanceof TranslationInterface) {
$translatedData = $object->getTranslatedFoldersByTranslation($context['translation'])->first() ?: null;
/*
* Always falls back on default translation if no translation is found for Folders entities
*/
$translatedData = $object->getTranslatedFoldersByTranslation($context['translation'])->first() ?:
$object->getTranslatedFoldersByDefaultTranslation();
if ($translatedData instanceof FolderTranslation) {
$data['name'] = $translatedData->getName();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@ public function normalize(mixed $object, ?string $format = null, array $context
) {
/** @var array<string> $serializationGroups */
$serializationGroups = isset($context['groups']) && is_array($context['groups']) ? $context['groups'] : [];
$translatedData = $object->getTranslatedTagsByTranslation($context['translation'])->first() ?: null;
/*
* Always falls back on default translation if no translation is found for Tags entities
*/
$translatedData = $object->getTranslatedTagsByTranslation($context['translation'])->first() ?:
$object->getTranslatedTagsByDefaultTranslation();
if ($translatedData instanceof TagTranslation) {
$data['name'] = $translatedData->getName();
$data['description'] = $translatedData->getDescription();
Expand Down

0 comments on commit 0f0ceed

Please sign in to comment.