From 12bb9ad2fa567e37074031ef5b31fe8c1aa39074 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Wed, 17 Jun 2020 12:20:36 +0200
Subject: [PATCH] Bug 18911: Add the ability to set the preferred lang for
 notice at the OPAC

Patron should be allowed to modify this setting without asking a staff
member.

The setting is not configurable and cannot be hidden via a syspref.

Test plan:
- Turn the pref TranslateNotices on
- Install some languages
- Edit your messaging settings at the OPAC
=> Notice the "Preferred language for notices" dropdown list
- Select one
=> Confirm that the value is saved in DB
---
 .../bootstrap/en/modules/opac-messaging.tt    | 29 +++++++++++++++++++
 opac/opac-messaging.pl                        | 12 ++++++++
 2 files changed, 41 insertions(+)

diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt
index 7fd4786503..a387ed4c29 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-messaging.tt
@@ -153,6 +153,35 @@
                                     <i>Please contact a library staff member if you are unsure of your mobile service provider, or you do not see your provider in this list.</i>
                                 </li></ol>
                             [% END %]
+
+                            [% IF Koha.Preference('TranslateNotices') %]
+                                <ol>
+                                    <li>
+                                        <label for="lang">Preferred language for notices: </label>
+                                        <select id="lang" name="lang">
+                                            <option value="default">Default</option>
+                                            [% FOR language IN languages %]
+                                                [% FOR sublanguage IN language.sublanguages_loop %]
+                                                    [% IF language.plural %]
+                                                        [% IF sublanguage.rfc4646_subtag == patron_lang %]
+                                                            <option value="[% sublanguage.rfc4646_subtag | html %]" selected="selected">[% sublanguage.native_description | html %] [% sublanguage.region_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>
+                                                        [% ELSE %]
+                                                            <option value="[% sublanguage.rfc4646_subtag | html %]">[% sublanguage.native_description | html %] [% sublanguage.region_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>
+                                                        [% END %]
+                                                    [% ELSE %]
+                                                        [% IF sublanguage.rfc4646_subtag == patron_lang %]
+                                                            <option value="[% sublanguage.rfc4646_subtag | html %]" selected="selected">[% sublanguage.native_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>
+                                                        [% ELSE %]
+                                                            <option value="[% sublanguage.rfc4646_subtag | html %]">[% sublanguage.native_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>
+                                                        [% END %]
+                                                    [% END # /IF language.plural %]
+                                                [% END # /FOR sublanguage %]
+                                            [% END #/FOR language %]
+                                        </select> <!-- /#lang -->
+                                    </li>
+                                </ol>
+                            [% END #/IF Koha.Preference('TranslateNotices') %]
+
                         </fieldset>
 
                         <fieldset class="action">
diff --git a/opac/opac-messaging.pl b/opac/opac-messaging.pl
index 210f9446c0..689ce94e09 100755
--- a/opac/opac-messaging.pl
+++ b/opac/opac-messaging.pl
@@ -69,6 +69,10 @@ if ( defined $query->param('modify') && $query->param('modify') eq 'yes' ) {
     })->store;
 
     C4::Form::MessagingPreferences::handle_form_action($query, { borrowernumber => $patron->borrowernumber }, $template);
+
+    if ( C4::Context->preference('TranslateNotices') ) {
+        $patron->set({ lang => scalar $query->param('lang') })->store;
+    }
 }
 
 C4::Form::MessagingPreferences::set_form_values({ borrowernumber     => $patron->borrowernumber }, $template);
@@ -91,4 +95,12 @@ $template->param(
         }),
 );
 
+if ( C4::Context->preference('TranslateNotices') ) {
+    my $translated_languages = C4::Languages::getTranslatedLanguages( 'opac', C4::Context->preference('template') );
+    $template->param(
+        languages => $translated_languages,
+        patron_lang => $patron->lang,
+    );
+}
+
 output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };
-- 
2.20.1