From ad6467561fff7ee90aed8ce185729549c11be6f8 Mon Sep 17 00:00:00 2001 From: Oleksandr Duts Date: Mon, 8 Nov 2021 17:50:52 +0200 Subject: [PATCH] TT#149650 UI language handling * Change UI language workaround. Priority: 1. Parameter "lang". 2. Cookie "ngcp_panel_lang". 3. Default english - "i-default". * Add parameter "lang_save" - save the "lang" value at "ngcp_panel_lang" cookie. Change-Id: I0abc9e3ab564ba56d2e3f9b0dee47d32c27e0049 --- lib/NGCP/Panel/Controller/Root.pm | 82 ++++++++++++++++++----------- lib/NGCP/Panel/Utils/Preferences.pm | 5 +- 2 files changed, 52 insertions(+), 35 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Root.pm b/lib/NGCP/Panel/Controller/Root.pm index 6c5b357254..23dffa13a0 100644 --- a/lib/NGCP/Panel/Controller/Root.pm +++ b/lib/NGCP/Panel/Controller/Root.pm @@ -26,6 +26,7 @@ use NGCP::Schema qw//; # __PACKAGE__->config(namespace => ''); + sub auto :Private { my($self, $c) = @_; @@ -42,37 +43,10 @@ sub auto :Private { NGCP::Panel::Form::dont_use_cache(1); } - if(defined $c->request->params->{lang} && $c->request->params->{lang} =~ /^\w+$/) { - $c->log->debug("checking language"); - if($c->request->params->{lang} eq "en") { - $c->log->debug("setting language ".$c->request->params->{lang}." to default"); - $c->request->params->{lang} = "i-default"; - } - if(exists $c->installed_languages->{$c->request->params->{lang}} || - $c->request->params->{lang} eq "i-default") { - unless ($is_api_request) { - $c->session->{lang} = $c->request->params->{lang}; - $c->response->cookies->{ngcp_panel_lang} = { value => $c->request->params->{lang}, expires => '+3M', }; - } - $c->log->debug("Setting language to ". $c->request->params->{lang}); - } - # clear form cache (they need to be properly re-translated) - NGCP::Panel::Form::clear_form_cache(); - } elsif (defined $c->session->{lang}) { - $c->languages([$c->session->{lang}, "i-default"]); - } elsif ( ! $is_api_request && $c->req->cookie('ngcp_panel_lang') ) { - $c->session->{lang} = $c->req->cookie('ngcp_panel_lang')->value; - $c->languages([$c->session->{lang}, 'i-default']); - } else { # if language has not yet be set, set it from config or browser - if (defined $c->config->{appearance}{force_language}) { - $c->log->debug("lang set by config: " . $c->config->{appearance}{force_language}); - $c->languages([$c->config->{appearance}{force_language}, 'i-default']); - } else { - $c->languages([ map { s/^en.*$/i-default/r } @{ $c->languages } ]); - $c->log->debug("lang set by browser: " . $c->language); - } - $c->session->{lang} = $c->language - if ! $is_api_request; + if ($is_api_request) { + $self->_handle_api_lang($c); + } else { + $self->_handle_ui_lang($c); } ################################################### timezone retrieval @@ -835,6 +809,52 @@ sub _set_session_tz_from_row { } } +sub _handle_api_lang { + my $self = shift; + my ($c) = @_; + + my $lang = 'i-default'; + if (defined $c->request->params->{lang} && $c->request->params->{lang} =~ /^\w+$/) { + $lang = $self->_resolve_lang($c, $c->request->params->{lang}); + } + + $c->languages([$lang]); +} + +sub _handle_ui_lang { + my $self = shift; + my ($c) = @_; + + my $lang; + if (defined $c->request->params->{lang} && $c->request->params->{lang} =~ /^\w+$/) { + $lang = $self->_resolve_lang($c, $c->request->params->{lang}); + if ($c->request->params->{lang_save}) { + $c->response->cookies->{ngcp_panel_lang} = {value => $lang, expires => '+3M',}; + } + } else { + $lang = defined $c->req->cookie('ngcp_panel_lang') ? + $c->req->cookie('ngcp_panel_lang')->value : + 'i-default'; + } + + $c->languages([$lang]); +} + +sub _resolve_lang { + my $self = shift; + my ($c, $lang) = @_; + + if (exists $c->installed_languages->{$lang}) { + return $lang; + } + + if (defined $c->config->{appearance}{force_language}) { + return $c->config->{appearance}{force_language}; + } + + return 'i-default'; +} + 1; diff --git a/lib/NGCP/Panel/Utils/Preferences.pm b/lib/NGCP/Panel/Utils/Preferences.pm index 6cf41eb7a6..19a73ce296 100644 --- a/lib/NGCP/Panel/Utils/Preferences.pm +++ b/lib/NGCP/Panel/Utils/Preferences.pm @@ -2694,16 +2694,13 @@ sub api_preferences_defs { if ($pref->attribute =~ m/^(cdr_export_sclidui_rwrs|rewrite_rule_set|ncos|adm_ncos|adm_cf_ncos|emergency_mapping_container|sound_set|contract_sound_set|header_rule_set)$/) { $fields->{data_type} = 'string'; } - my $language = $c->request->params->{lang} // undef; - my $old_languages = $c->languages; - $c->languages([$language]); + my $preference_group = $pref->voip_preference_group->name =~ s/([\[\]])/~$1/rg; my $label = $fields->{label} =~ s/([\[\]])/~$1/rg; my $description = $fields->{description} =~ s/([\[\]])/~$1/rg; $fields->{preference_group} = $c->loc($preference_group); $fields->{label} = $c->loc($label); $fields->{description} = $c->loc($description); - $c->languages($old_languages); $resource->{$pref->attribute} = $fields; } return $resource;