Skip to content

Commit ca8da89

Browse files
committed
Reorganised the translations logic for the new way of the translations.
1 parent d64ca2c commit ca8da89

17 files changed

Lines changed: 312 additions & 454 deletions

src/Entity/ReassessmentTriggerSuperClass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ private function decodeTranslations(?string $value): array
189189
if ($value === null || $value === '') {
190190
return [];
191191
}
192-
193192
$decoded = json_decode($value, true);
193+
194194
return $this->normalizeTranslations($decoded);
195195
}
196196

src/Entity/RiskSourceSuperClass.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ private function decodeTranslations(string $value): array
113113
}
114114

115115
$decoded = json_decode($value, true);
116+
116117
return $this->normalizeTranslations($decoded);
117118
}
118119

src/Service/ConfigService.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ public function getLanguageCodes(): array
7272
return $this->languageCodes;
7373
}
7474

75+
public function getDefaultLanguageCode(): string
76+
{
77+
return $this->getLanguageCodes()[$this->config['defaultLanguageIndex'] ?? 1] ?? 'fr';
78+
}
79+
7580
public function getActiveLanguageCodes(): array
7681
{
7782
if (empty($this->activeLanguageCodes)) {

src/Service/ReassessmentTriggerService.php

Lines changed: 37 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,17 @@
1111
use Monarc\Core\Entity\UserSuperClass;
1212
use Monarc\Core\InputFormatter\FormattedInputParams;
1313
use Monarc\Core\Table\ReassessmentTriggerTable;
14+
use Monarc\Core\Traits\TranslationNormalizationTrait;
15+
use Monarc\Core\Traits\TranslationResolverTrait;
1416

1517
class ReassessmentTriggerService
1618
{
19+
use TranslationNormalizationTrait;
20+
use TranslationResolverTrait;
21+
1722
private UserSuperClass $connectedUser;
1823

24+
/* ConfigService is used in TranslationResolverTrait. */
1925
public function __construct(
2026
private ReassessmentTriggerTable $reassessmentTriggerTable,
2127
private ConfigService $configService,
@@ -48,9 +54,15 @@ public function get(int $id): ReassessmentTrigger
4854
public function create(array $data): ReassessmentTrigger
4955
{
5056
$reassessmentTrigger = (new ReassessmentTrigger())
51-
->setTriggerTypeTranslations($data['triggerTypes'])
52-
->setDescriptionTranslations($data['descriptions'])
53-
->setMonitoringApproachTranslations($data['monitoringApproaches'])
57+
->setTriggerTypeTranslations(
58+
$this->normalizeTranslations($data['triggerTypes'] ?? [], $this->getSupportedLanguageCodes())
59+
)
60+
->setDescriptionTranslations(
61+
$this->normalizeTranslations($data['descriptions'] ?? [], $this->getSupportedLanguageCodes())
62+
)
63+
->setMonitoringApproachTranslations(
64+
$this->normalizeTranslations($data['monitoringApproaches'] ?? [], $this->getSupportedLanguageCodes())
65+
)
5466
->setIsActive((bool)($data['isActive'] ?? true))
5567
->setCreator($this->connectedUser->getEmail());
5668

@@ -64,14 +76,19 @@ public function update(int $id, array $data): ReassessmentTrigger
6476
{
6577
$reassessmentTrigger = $this->get($id);
6678

67-
if (array_key_exists('triggerTypes', $data)) {
68-
$reassessmentTrigger->setTriggerTypeTranslations($data['triggerTypes']);
79+
if (!empty($data['triggerTypes'])) {
80+
$reassessmentTrigger->setTriggerTypeTranslations(
81+
$this->normalizeTranslations($data['triggerTypes'], $this->getSupportedLanguageCodes())
82+
);
6983
}
70-
if (array_key_exists('descriptions', $data)) {
71-
$reassessmentTrigger->setDescriptionTranslations($data['descriptions']);
84+
if (!empty($data['descriptions'])) {
85+
$reassessmentTrigger->setDescriptionTranslations(
86+
$this->normalizeTranslations($data['descriptions'], $this->getSupportedLanguageCodes()));
7287
}
73-
if (array_key_exists('monitoringApproaches', $data)) {
74-
$reassessmentTrigger->setMonitoringApproachTranslations($data['monitoringApproaches']);
88+
if (!empty($data['monitoringApproaches'])) {
89+
$reassessmentTrigger->setMonitoringApproachTranslations(
90+
$this->normalizeTranslations($data['monitoringApproaches'], $this->getSupportedLanguageCodes())
91+
);
7592
}
7693
if (isset($data['isActive'])) {
7794
$reassessmentTrigger->setIsActive((bool)$data['isActive']);
@@ -125,7 +142,7 @@ public function getSelectionData(string $languageCode, bool $includeInactive = f
125142

126143
public function getDisplayTriggerType(ReassessmentTrigger $reassessmentTrigger, ?string $languageCode = null): string
127144
{
128-
return $this->resolveDisplayValue(
145+
return $this->resolveTranslation(
129146
$reassessmentTrigger->getTriggerTypeTranslations(),
130147
$reassessmentTrigger->getTriggerType() ?? '',
131148
$languageCode
@@ -134,7 +151,7 @@ public function getDisplayTriggerType(ReassessmentTrigger $reassessmentTrigger,
134151

135152
public function getDisplayDescription(ReassessmentTrigger $reassessmentTrigger, ?string $languageCode = null): string
136153
{
137-
return $this->resolveDisplayValue(
154+
return $this->resolveTranslation(
138155
$reassessmentTrigger->getDescriptionTranslations(),
139156
$reassessmentTrigger->getDescription(),
140157
$languageCode
@@ -146,7 +163,7 @@ public function getDisplayDescription(ReassessmentTrigger $reassessmentTrigger,
146163
*/
147164
public function getTriggerTypes(ReassessmentTrigger $reassessmentTrigger): array
148165
{
149-
return $this->getEditableTranslations(
166+
return $this->resolveTranslations(
150167
$reassessmentTrigger->getTriggerTypeTranslations(),
151168
$reassessmentTrigger->getTriggerType() ?? ''
152169
);
@@ -157,7 +174,7 @@ public function getTriggerTypes(ReassessmentTrigger $reassessmentTrigger): array
157174
*/
158175
public function getDescriptions(ReassessmentTrigger $reassessmentTrigger): array
159176
{
160-
return $this->getEditableTranslations(
177+
return $this->resolveTranslations(
161178
$reassessmentTrigger->getDescriptionTranslations(),
162179
$reassessmentTrigger->getDescription()
163180
);
@@ -167,7 +184,7 @@ public function getDisplayMonitoringApproach(
167184
ReassessmentTrigger $reassessmentTrigger,
168185
?string $languageCode = null
169186
): string {
170-
return $this->resolveDisplayValue(
187+
return $this->resolveTranslation(
171188
$reassessmentTrigger->getMonitoringApproachTranslations(),
172189
$reassessmentTrigger->getMonitoringApproach() ?? '',
173190
$languageCode
@@ -179,66 +196,12 @@ public function getDisplayMonitoringApproach(
179196
*/
180197
public function getMonitoringApproaches(ReassessmentTrigger $reassessmentTrigger): array
181198
{
182-
return $this->getEditableTranslations(
199+
return $this->resolveTranslations(
183200
$reassessmentTrigger->getMonitoringApproachTranslations(),
184201
$reassessmentTrigger->getMonitoringApproach() ?? ''
185202
);
186203
}
187204

188-
/**
189-
* @param array<string, string> $translations
190-
*/
191-
private function resolveDisplayValue(array $translations, string $fallbackValue, ?string $languageCode = null): string
192-
{
193-
$languageCode ??= $this->getCurrentLanguageCode();
194-
if (isset($translations[$languageCode]) && $translations[$languageCode] !== '') {
195-
return $translations[$languageCode];
196-
}
197-
198-
$defaultLanguageCode = $this->configService->getLanguageCodes()[
199-
$this->configService->getConfigOption('defaultLanguageIndex', 1)
200-
] ?? null;
201-
if ($defaultLanguageCode !== null && isset($translations[$defaultLanguageCode])) {
202-
return $translations[$defaultLanguageCode];
203-
}
204-
205-
foreach ($translations as $translation) {
206-
if ($translation !== '') {
207-
return $translation;
208-
}
209-
}
210-
211-
return $fallbackValue;
212-
}
213-
214-
/**
215-
* @param array<string, string> $translations
216-
* @return array<string, string>
217-
*/
218-
private function getEditableTranslations(array $translations, string $fallbackValue): array
219-
{
220-
if ($translations !== []) {
221-
return $translations;
222-
}
223-
224-
$fallbackValue = trim($fallbackValue);
225-
if ($fallbackValue === '') {
226-
return [];
227-
}
228-
229-
return [
230-
$this->getCurrentLanguageCode() => $fallbackValue,
231-
];
232-
}
233-
234-
private function getCurrentLanguageCode(): string
235-
{
236-
return $this->configService->getLanguageCodes()[$this->connectedUser->getLanguage()]
237-
?? $this->configService->getLanguageCodes()[$this->configService
238-
->getConfigOption('defaultLanguageIndex', 1)]
239-
?? 'en';
240-
}
241-
242205
private function applyCreatePosition(ReassessmentTrigger $reassessmentTrigger, array $data): void
243206
{
244207
$position = isset($data['position']) ? (int)$data['position'] : 0;
@@ -250,13 +213,7 @@ private function applyCreatePosition(ReassessmentTrigger $reassessmentTrigger, a
250213
return;
251214
}
252215

253-
$this->reassessmentTriggerTable->incrementPositions(
254-
$position,
255-
-1,
256-
1,
257-
[],
258-
$this->connectedUser->getEmail()
259-
);
216+
$this->reassessmentTriggerTable->incrementPositions($position, -1, 1, [], $this->connectedUser->getEmail());
260217
$reassessmentTrigger->setPosition($position);
261218
}
262219

@@ -267,21 +224,11 @@ private function applyUpdatedPosition(ReassessmentTrigger $reassessmentTrigger,
267224
$newPosition = max(1, min($newPosition, $maxPosition));
268225

269226
if ($newPosition < $oldPosition) {
270-
$this->reassessmentTriggerTable->incrementPositions(
271-
$newPosition,
272-
$oldPosition - 1,
273-
1,
274-
[],
275-
$this->connectedUser->getEmail()
276-
);
227+
$this->reassessmentTriggerTable
228+
->incrementPositions($newPosition, $oldPosition - 1, 1, [], $this->connectedUser->getEmail());
277229
} elseif ($newPosition > $oldPosition) {
278-
$this->reassessmentTriggerTable->incrementPositions(
279-
$oldPosition + 1,
280-
$newPosition,
281-
-1,
282-
[],
283-
$this->connectedUser->getEmail()
284-
);
230+
$this->reassessmentTriggerTable
231+
->incrementPositions($oldPosition + 1, $newPosition, -1, [], $this->connectedUser->getEmail());
285232
}
286233

287234
$reassessmentTrigger->setPosition($newPosition);

src/Service/RiskSourceService.php

Lines changed: 15 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99

1010
use Monarc\Core\Entity\RiskSource;
1111
use Monarc\Core\Entity\UserSuperClass;
12-
use Monarc\Core\Exception\Exception;
1312
use Monarc\Core\InputFormatter\FormattedInputParams;
1413
use Monarc\Core\Table\RiskSourceTable;
14+
use Monarc\Core\Traits\TranslationNormalizationTrait;
15+
use Monarc\Core\Traits\TranslationResolverTrait;
1516

1617
class RiskSourceService
1718
{
19+
use TranslationNormalizationTrait;
20+
use TranslationResolverTrait;
21+
1822
private UserSuperClass $connectedUser;
1923

2024
public function __construct(
@@ -48,10 +52,10 @@ public function get(int $id): RiskSource
4852

4953
public function create(array $data): RiskSource
5054
{
51-
$labels = $this->normalizeLabels($data);
52-
5355
$riskSource = (new RiskSource())
54-
->setLabelTranslations($labels)
56+
->setLabelTranslations(
57+
$this->normalizeTranslations($data['labels'] ?? [], $this->getSupportedLanguageCodes())
58+
)
5559
->setIsDefault(false)
5660
->setIsActive((bool)($data['isActive'] ?? true))
5761
->setCreator($this->connectedUser->getEmail());
@@ -67,9 +71,10 @@ public function update(int $id, array $data): RiskSource
6771
if (isset($data['isActive'])) {
6872
$riskSource->setIsActive((bool)$data['isActive']);
6973
}
70-
if (!empty($data['labels']) || isset($data['label'])) {
71-
$labels = $this->normalizeLabels($data);
72-
$riskSource->setLabelTranslations($labels);
74+
if (!empty($data['labels'])) {
75+
$riskSource->setLabelTranslations(
76+
$this->normalizeTranslations($data['labels'], $this->getSupportedLanguageCodes())
77+
);
7378
}
7479

7580
$riskSource->setUpdater($this->connectedUser->getEmail());
@@ -83,10 +88,6 @@ public function delete(int $id): void
8388
{
8489
$riskSource = $this->get($id);
8590

86-
if ($riskSource->isDefault()) {
87-
throw new Exception('Default risk sources cannot be removed.', 412);
88-
}
89-
9091
$this->riskSourceTable->remove($riskSource);
9192
}
9293

@@ -98,7 +99,7 @@ public function getDisplayLabelsByRiskSourceId(array $riskSources): array
9899
{
99100
$labelsById = [];
100101
foreach ($riskSources as $riskSource) {
101-
$labelsById[$riskSource->getId()] = $this->resolveDisplayValue(
102+
$labelsById[$riskSource->getId()] = $this->resolveTranslation(
102103
$riskSource->getLabelTranslations(),
103104
$riskSource->getLabel(),
104105
$this->getCurrentLanguageCode()
@@ -110,7 +111,7 @@ public function getDisplayLabelsByRiskSourceId(array $riskSources): array
110111

111112
public function getDisplayLabel(RiskSource $riskSource): string
112113
{
113-
return $this->resolveDisplayValue(
114+
return $this->resolveTranslation(
114115
$riskSource->getLabelTranslations(),
115116
$riskSource->getLabel(),
116117
$this->getCurrentLanguageCode()
@@ -119,74 +120,6 @@ public function getDisplayLabel(RiskSource $riskSource): string
119120

120121
public function getLabels(RiskSource $riskSource): array
121122
{
122-
return $this->getLabelsWithFallback($riskSource->getLabelTranslations(), $riskSource->getLabel());
123-
}
124-
125-
private function normalizeLabels(array $data): array
126-
{
127-
$labels = [];
128-
if (isset($data['labels']) && is_array($data['labels'])) {
129-
foreach ($data['labels'] as $languageCode => $label) {
130-
$trimmedLabel = trim((string)$label);
131-
if ($trimmedLabel !== '') {
132-
$labels[(string)$languageCode] = $trimmedLabel;
133-
}
134-
}
135-
}
136-
137-
if ($labels === [] && isset($data['label'])) {
138-
$labels[$this->getCurrentLanguageCode()] = trim((string)$data['label']);
139-
}
140-
141-
return $labels;
142-
}
143-
144-
private function resolveDisplayValue(array $labels, string $fallbackLabel, ?string $languageCode = null): string
145-
{
146-
$languageCode ??= $this->getCurrentLanguageCode();
147-
if (isset($labels[$languageCode]) && $labels[$languageCode] !== '') {
148-
return $labels[$languageCode];
149-
}
150-
151-
$defaultLanguageCode = $this->configService
152-
->getLanguageCodes()[$this->configService->getConfigOption('defaultLanguageIndex', 1)] ?? null;
153-
if ($defaultLanguageCode !== null && isset($labels[$defaultLanguageCode])) {
154-
return $labels[$defaultLanguageCode];
155-
}
156-
157-
if ($labels !== []) {
158-
return (string)reset($labels);
159-
}
160-
161-
return $fallbackLabel;
162-
}
163-
164-
/**
165-
* @param array<string, string> $labels
166-
* @return array<string, string>
167-
*/
168-
private function getLabelsWithFallback(array $labels, string $fallbackLabel): array
169-
{
170-
$localizedLabels = [];
171-
foreach ($this->getSupportedLanguageCodes() as $languageCode) {
172-
$localizedLabels[$languageCode] = $this->resolveDisplayValue($labels, $fallbackLabel, $languageCode);
173-
}
174-
175-
return $localizedLabels;
176-
}
177-
178-
private function getCurrentLanguageCode(): string
179-
{
180-
return $this->configService->getLanguageCodes()[$this->connectedUser->getLanguage()]
181-
?? $this->configService->getLanguageCodes()[$this->configService
182-
->getConfigOption('defaultLanguageIndex', 1)]
183-
?? 'en';
184-
}
185-
186-
private function getSupportedLanguageCodes(): array
187-
{
188-
$languageCodes = $this->configService->getActiveLanguageCodes();
189-
190-
return $languageCodes !== [] ? $languageCodes : $this->configService->getLanguageCodes();
123+
return $this->resolveTranslations($riskSource->getLabelTranslations(), $riskSource->getLabel());
191124
}
192125
}

0 commit comments

Comments
 (0)