Bug 17600: Standardize our EXPORT_OK
[srvgit] / C4 / Languages.pm
index 0916dd4..b9c7e6d 100644 (file)
@@ -22,24 +22,24 @@ package C4::Languages;
 use strict;
 use warnings;
 
-use Carp;
+use Carp qw( carp );
 use CGI;
 use List::MoreUtils qw( any );
 use C4::Context;
+use Koha::Caches;
 use Koha::Cache::Memory::Lite;
-use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
 
+our (@ISA, @EXPORT_OK);
 BEGIN {
     require Exporter;
     @ISA    = qw(Exporter);
-    @EXPORT = qw(
-        &getFrameworkLanguages
-        &getTranslatedLanguages
-        &getLanguages
-        &getAllLanguages
+    @EXPORT_OK = qw(
+        getFrameworkLanguages
+        getTranslatedLanguages
+        getLanguages
+        getAllLanguages
     );
-    @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage);
-    $DEBUG = 0;
+    push @EXPORT_OK, qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage get_rfc4646_from_iso639);
 }
 
 =head1 NAME
@@ -115,15 +115,29 @@ sub getTranslatedLanguages {
     my @enabled_languages =
       ( $interface && $interface eq 'intranet' )
       ? split ",", C4::Context->preference('language')
-      : split ",", C4::Context->preference('opaclanguages');
+      : split ",", C4::Context->preference('OPACLanguages');
 
+    my $cache = Koha::Caches->get_instance;
+    my $cache_key = "languages_${interface}_${theme}";
     if ($interface && $interface eq 'opac' ) {
         my $htdocs = C4::Context->config('opachtdocs');
-        @languages = _get_opac_language_dirs( $htdocs, $theme );
+        my $cached = $cache->get_from_cache($cache_key);
+        if ( $cached ) {
+            @languages = @{$cached};
+        } else {
+            @languages = _get_opac_language_dirs( $htdocs, $theme );
+            $cache->set_in_cache($cache_key, \@languages );
+        }
     }
     elsif ($interface && $interface eq 'intranet' ) {
         my $htdocs = C4::Context->config('intrahtdocs');
-        @languages = _get_intranet_language_dirs( $htdocs, $theme );
+        my $cached = $cache->get_from_cache($cache_key);
+        if ( $cached ) {
+            @languages = @{$cached};
+        } else {
+            @languages = _get_intranet_language_dirs( $htdocs, $theme );
+            $cache->set_in_cache($cache_key, \@languages );
+        }
     }
     else {
         my $htdocs = C4::Context->config('intrahtdocs');
@@ -329,8 +343,6 @@ sub _build_languages_arrayref {
         my @languages_loop; # the final reference to an array of hashrefs
         my @enabled_languages = @$enabled_languages;
         # how many languages are enabled, if one, take note, some contexts won't need to display it
-        my %seen_languages; # the language tags we've seen
-        my %found_languages;
         my $language_groups;
         my $track_language_groups;
         my $current_language_regex = regex_lang_subtags($current_language);
@@ -570,7 +582,7 @@ sub accept_language {
     }
     # No primary matches. Secondary? (ie, en-us requested and en supported)
     return $secondaryMatch if $secondaryMatch;
-    return undef;   # else, we got nothing.
+    return;   # else, we got nothing.
 }
 
 =head2 getlanguage
@@ -590,13 +602,13 @@ sub getlanguage {
         return $cached if $cached;
     }
 
-    $cgi //= new CGI;
+    $cgi //= CGI->new;
     my $interface = C4::Context->interface;
     my $theme = C4::Context->preference( ( $interface eq 'opac' ) ? 'opacthemes' : 'template' );
     my $language;
 
     my $preference_to_check =
-      $interface eq 'intranet' ? 'language' : 'opaclanguages';
+      $interface eq 'intranet' ? 'language' : 'OPACLanguages';
     # Get the available/valid languages list
     my @languages;
     my $preference_value = C4::Context->preference($preference_to_check);