From fd541348d928582dca249254a0688bc25ad15dc1 Mon Sep 17 00:00:00 2001 From: Jan Kvetina Date: Thu, 3 Feb 2022 22:50:01 +0100 Subject: [PATCH] Retrieve translation fot item/page/app/lang --- packages/app.spec.sql | 16 +++++++++++++++- packages/app.sql | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/packages/app.spec.sql b/packages/app.spec.sql index e10cb2b..b987939 100644 --- a/packages/app.spec.sql +++ b/packages/app.spec.sql @@ -199,12 +199,26 @@ CREATE OR REPLACE PACKAGE app AS -- Get user language -- FUNCTION get_user_lang - RETURN users.lang_id%TYPE; + RETURN users.lang_id%TYPE + RESULT_CACHE; -- + -- Translate page item -- + FUNCTION get_translation ( + in_name translations.name%TYPE, + in_page_id translations.page_id%TYPE := NULL, + in_app_id translations.app_id%TYPE := NULL, + in_lang users.lang_id%TYPE := NULL + ) + RETURN translations.value_en%TYPE; + + + + -- + -- Auth function to check if users account is active -- FUNCTION is_active_user ( in_user_id users.user_id%TYPE := NULL diff --git a/packages/app.sql b/packages/app.sql index 46e3511..b548bab 100644 --- a/packages/app.sql +++ b/packages/app.sql @@ -232,6 +232,7 @@ CREATE OR REPLACE PACKAGE BODY app AS FUNCTION get_user_lang RETURN users.lang_id%TYPE + RESULT_CACHE AS out_lang users.lang_id%TYPE; BEGIN @@ -247,6 +248,39 @@ CREATE OR REPLACE PACKAGE BODY app AS + FUNCTION get_translation ( + in_name translations.name%TYPE, + in_page_id translations.page_id%TYPE := NULL, + in_app_id translations.app_id%TYPE := NULL, + in_lang users.lang_id%TYPE := NULL + ) + RETURN translations.value_en%TYPE + AS + out_value translations.value_en%TYPE; + BEGIN + SELECT + CASE COALESCE(in_lang, app.get_user_lang(), 'EN') + WHEN 'CZ' THEN MIN(t.value_cz) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) + WHEN 'SK' THEN MIN(t.value_sk) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) + WHEN 'PL' THEN MIN(t.value_pl) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) + WHEN 'HU' THEN MIN(t.value_hu) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) + ELSE MIN(t.value_en) KEEP (DENSE_RANK FIRST ORDER BY t.page_id DESC) END + INTO out_value + FROM translations t + WHERE t.app_id = COALESCE(in_app_id, app.get_app_id()) + AND t.page_id IN (0, COALESCE(in_page_id, app.get_page_id())) + AND t.name = in_name; + -- + RETURN out_value; + EXCEPTION + WHEN NO_DATA_FOUND THEN + -- app.log_warning() ? + -- create translation ? + RETURN NULL; + END; + + + FUNCTION is_active_user ( in_user_id users.user_id%TYPE := NULL )