Lines
95.83%
23 / 24
Methods
0.00%
0 / 1
Classes
0.00%
0 / 1
| Name | Lines | Methods | CRAP | ||||
|---|---|---|---|---|---|---|---|
| filterAndSortFormData | 95.83% | 23 / 24 | 0.00% | 0 / 1 | 8 | ||
| 25 | final class FormsHelper | |
| 26 | { | |
| 27 | /** | |
| 28 | * @param \stdClass[] $formData | |
| 29 | * @return \stdClass[] | |
| 30 | */ | |
| 31 | public function filterAndSortFormData(array $formData, Translation $translation): array | |
| 32 | { | |
| 33 | foreach ($formData as $input) { | |
| 34 | if ($input->input_lang !== 'default') { | |
| 35 | continue; | |
| 36 | } | |
| 37 | ||
| 38 | $input->input_label = Translation::get((string) $input->input_label); | |
| 39 | } | |
| 40 | ||
| 41 | $filteredEntries = []; | |
| 42 | $fallbackCandidates = []; | |
| 43 | $seenIds = []; | |
| 44 | ||
| 45 | foreach ($formData as $entry) { | |
| 46 | if ($entry->input_lang === $translation->getCurrentLanguage()) { | |
| 47 | $filteredEntries[] = $entry; | |
| 48 | $seenIds[] = $entry->input_id; | |
| 49 | continue; | |
| 50 | } | |
| 51 | ||
| 52 | $fallbackCandidates[] = $entry; | |
| 53 | } | |
| 54 | ||
| 55 | foreach ($fallbackCandidates as $fallbackCandidate) { | |
| 56 | if ( | |
| 57 | !( | |
| 58 | $fallbackCandidate->input_lang === 'default' | |
| 59 | && !in_array($fallbackCandidate->input_id, $seenIds, strict: true) | |
| 60 | ) | |
| 61 | ) { | |
| 62 | continue; | |
| 63 | } | |
| 64 | ||
| 65 | $filteredEntries[] = $fallbackCandidate; | |
| 66 | } | |
| 67 | ||
| 68 | usort( | |
| 69 | $filteredEntries, | |
| 70 | static fn(\stdClass $a, \stdClass $b): int => (int) $a->input_id <=> (int) $b->input_id, | |
| 71 | ); | |
| 72 | return $filteredEntries; | |
| 73 | } | |
| 74 | } |