Lines 95.83% 23 / 24
Methods 0.00% 0 / 1
Classes 0.00% 0 / 1
Covered by tests of size
Name Lines Methods CRAP
 filterAndSortFormData 95.83% 23 / 24 0.00% 0 / 1 8
25final 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}