Skip to content

Commit f5611e4

Browse files
authored
[Improvement] Default Asset Metadata should be in the index (#259)
* add default asset metadata to the index * fix: store default metadata values only when set
1 parent 6ff7c7e commit f5611e4

File tree

2 files changed

+39
-14
lines changed

2 files changed

+39
-14
lines changed

src/SearchIndexAdapter/DefaultSearch/Asset/PredefinedAssetMetadataProvider.php

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
*/
2828
final readonly class PredefinedAssetMetadataProvider implements MappingProviderInterface
2929
{
30+
private const DEFAULT_METADATA = ['title', 'alt', 'copyright'];
31+
3032
public function __construct(
3133
private LanguageServiceInterface $languageService,
3234
private FieldDefinitionServiceInterface $fieldDefinitionService
@@ -41,25 +43,15 @@ public function getMappingProperties(): array
4143
$languages = array_merge([MappingProperty::NOT_LOCALIZED_KEY], $this->languageService->getValidLanguages());
4244

4345
foreach ($predefinedMetaDataList as $predefinedMetaData) {
44-
$languageMapping = [
45-
'properties' => [],
46-
];
47-
48-
if ($typeMapping = $this->getTypeMapping($predefinedMetaData->getType())) {
49-
foreach ($languages as $language) {
50-
$languageMapping['properties'][$language] = $typeMapping;
51-
}
52-
}
53-
5446
$mappingProperties[] = new MappingProperty(
5547
$predefinedMetaData->getName(),
5648
$predefinedMetaData->getType(),
57-
$languageMapping,
49+
$this->getLanguageMappingByType($languages, $predefinedMetaData->getType()),
5850
$languages
5951
);
6052
}
6153

62-
return $mappingProperties;
54+
return array_merge($mappingProperties, $this->getDefaultMetadataMapping($languages));
6355
}
6456

6557
private function getTypeMapping(string $type): ?array
@@ -68,4 +60,37 @@ private function getTypeMapping(string $type): ?array
6860
->getFieldDefinitionAdapter($type)
6961
?->getIndexMapping();
7062
}
63+
64+
private function getLanguageMappingByType(array $languages, string $type): array
65+
{
66+
$languageMapping = [
67+
'properties' => [],
68+
];
69+
70+
if ($typeMapping = $this->getTypeMapping($type)) {
71+
foreach ($languages as $language) {
72+
$languageMapping['properties'][$language] = $typeMapping;
73+
}
74+
}
75+
76+
return $languageMapping;
77+
}
78+
79+
/**
80+
* @return MappingProperty[]
81+
*/
82+
private function getDefaultMetadataMapping(array $languages): array
83+
{
84+
$mappingProperties = [];
85+
foreach (self::DEFAULT_METADATA as $metadata) {
86+
$mappingProperties[] = new MappingProperty(
87+
$metadata,
88+
'input',
89+
$this->getLanguageMappingByType($languages, 'input'),
90+
$languages
91+
);
92+
}
93+
94+
return $mappingProperties;
95+
}
7196
}

src/Service/SearchIndex/Asset/MetadataProviderService.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ public function getSearchableMetaDataForAsset(Asset $asset): array
5252
if (is_array($metadata) && isset($metadata['data'], $metadata['name'], $metadata['type'])) {
5353
$mappingProperty = $metaDataMap[$metadata['name']] ?? null;
5454
$language = $metadata['language'] ?? null;
55-
$language = $language ?: MappingProperty::NOT_LOCALIZED_KEY;
55+
$metadata['language'] = $language ?: MappingProperty::NOT_LOCALIZED_KEY;
5656
if ($mappingProperty
5757
&& $mappingProperty->getType() === $metadata['type']
58-
&& in_array($language, $mappingProperty->getLanguages(), true)
58+
&& in_array($metadata['language'], $mappingProperty->getLanguages(), true)
5959
) {
6060
$result[] = $metadata;
6161
}

0 commit comments

Comments
 (0)