From 5a2faa3ecc706ac7f19802757e3d6ea572974aea Mon Sep 17 00:00:00 2001 From: Tom Hempel Date: Wed, 27 May 2026 15:15:39 +0200 Subject: [PATCH] refactored translation mapping logic to streamline default handling and restricted option assignment based on layout type --- common.php | 23 +++-------------------- handlers/app_questionnaires.php | 7 +++++-- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/common.php b/common.php index c31aa30..224ca39 100644 --- a/common.php +++ b/common.php @@ -888,30 +888,13 @@ function qdb_build_app_translations_map(PDO $pdo): array { $translations = qdb_load_translations_for_entries($pdo, $entries); $defaults = qdb_app_string_catalog()['germanDefaults'] ?? []; $result = []; - - qdb_ensure_source_language($pdo); - $languageCodes = $pdo->query('SELECT languageCode FROM language ORDER BY languageCode') - ->fetchAll(PDO::FETCH_COLUMN); - if (!in_array(QDB_SOURCE_LANGUAGE, $languageCodes, true)) { - $languageCodes[] = QDB_SOURCE_LANGUAGE; - } - foreach ($entries as $e) { $key = $e['key']; foreach ($translations[$e['entityId']] ?? [] as $lang => $text) { - if ($text !== '') { - $result[$lang][$key] = $text; - } + $result[$lang][$key] = $text; } - $defaultDe = trim($defaults[$key] ?? ''); - if ($defaultDe === '') { - continue; - } - // New catalog keys: expose German default for every language until translated on the website. - foreach ($languageCodes as $lc) { - if (empty($result[$lc][$key] ?? '')) { - $result[$lc][$key] = $defaultDe; - } + if (!isset($result[QDB_SOURCE_LANGUAGE][$key]) && !empty($defaults[$key])) { + $result[QDB_SOURCE_LANGUAGE][$key] = $defaults[$key]; } } return $result; diff --git a/handlers/app_questionnaires.php b/handlers/app_questionnaires.php index 91173cf..f4dd198 100644 --- a/handlers/app_questionnaires.php +++ b/handlers/app_questionnaires.php @@ -339,8 +339,11 @@ if ($qnID) { $optionsArr[] = $o; $pointsMap[$opt['defaultText']] = (int)$opt['points']; } - $q['options'] = $optionsArr; - $q['pointsMap'] = $pointsMap; + // DB answer_option rows are for choice layouts only — do not overwrite string/value spinners. + if (in_array($layout, ['radio_question', 'multi_check_box_question', 'glass_scale_question'], true)) { + $q['options'] = $optionsArr; + $q['pointsMap'] = $pointsMap; + } } $questions[] = $q;