[Koha-patches] [PATCH] Performance enhancing : C4/Languages.pm

Henri-Damien LAURENT henridamien.laurent at biblibre.com
Wed Apr 7 15:01:23 CEST 2010


removing a call unused to getAllLanguages
Doing better job at enabled languages

Signed-off-by: Henri-Damien LAURENT <henridamien.laurent at biblibre.com>
---
 C4/Languages.pm |   76 +++++++++++++++++-------------------------------------
 1 files changed, 24 insertions(+), 52 deletions(-)

diff --git a/C4/Languages.pm b/C4/Languages.pm
index c09f37b..de75142 100644
--- a/C4/Languages.pm
+++ b/C4/Languages.pm
@@ -23,7 +23,7 @@ use strict;
 #use warnings;   #FIXME: turn on warnings before release
 use Carp;
 use C4::Context;
-use List::MoreUtils qw/any/;
+use List::MoreUtils qw/any uniq/;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
 
 eval {
@@ -119,52 +119,35 @@ Returns a reference to an array of hashes:
 sub getTranslatedLanguages {
     my ($interface, $theme, $current_language, $which) = @_;
     my $htdocs;
-    my $all_languages = getAllLanguages();
     my @languages;
     my @enabled_languages;
  
-    if ($interface && $interface eq 'opac' ) {
-        my $languages= C4::Context->preference('opaclanguage') ||'en';
-        @enabled_languages = split ",", $languages;
-        $htdocs = C4::Context->config('opachtdocs');
-        if ( $theme and -d "$htdocs/$theme" ) {
-            (@languages) = _get_language_dirs($htdocs,$theme);
-        }
-        else {
-            for my $theme ( _get_themes('opac') ) {
-                push @languages, _get_language_dirs($htdocs,$theme);
-            }
-        }
+    my ($preference,$config);
+    if ($interface && $interface eq 'intranet' ) {
+        $preference="language";
+        $config='intrahtdocs';
     }
-    elsif ($interface && $interface eq 'intranet' ) {
-        my $languages= C4::Context->preference('language') ||'en';
-        @enabled_languages = split ",", $languages;
-        $htdocs = C4::Context->config('intrahtdocs');
-        if ( $theme and -d "$htdocs/$theme" ) {
-            @languages = _get_language_dirs($htdocs,$theme);
-        }
-        else {
-            foreach my $theme ( _get_themes('intranet') ) {
-                push @languages, _get_language_dirs($htdocs,$theme);
-            }
-        }
+    else {
+        $preference="opaclanguages";
+        $config='opachtdocs';
+        $interface ||='opac';
+
+    }
+
+    my $languages= C4::Context->preference($preference) ||'en';
+    @enabled_languages = split ",", $languages;
+    $htdocs = C4::Context->config($config);
+    if ( $theme and -d "$htdocs/$theme" ) {
+        (@languages) = _get_language_dirs($htdocs,$theme);
     }
     else {
-        my $languages= C4::Context->preference('opaclanguage') ||'en';
-        @enabled_languages = split ",", $languages;
-        my $htdocs = C4::Context->config('intrahtdocs');
-        foreach my $theme ( _get_themes('intranet') ) {
+        for my $theme ( _get_themes($interface) ) {
             push @languages, _get_language_dirs($htdocs,$theme);
         }
-        $htdocs = C4::Context->config('opachtdocs');
-        foreach my $theme ( _get_themes('opac') ) {
-            push @languages, _get_language_dirs($htdocs,$theme);
-        }
-        my %seen;
-        $seen{$_}++ for @languages;
-        @languages = keys %seen;
+        @languages=uniq @languages;
     }
-    return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
+    @enabled_languages=grep{my $enabled_language=$_;any{$_ eq $enabled_language}@languages}@enabled_languages;
+    return _build_languages_arrayref(\@enabled_languages,$current_language);
 }
 
 =head2 getAllLanguages
@@ -281,10 +264,9 @@ FIXME: this could be rewritten and simplified using map
 =cut
 
 sub _build_languages_arrayref {
-        my ($all_languages,$translated_languages,$current_language,$enabled_languages) = @_;
+        my ($translated_languages,$current_language) = @_;
         my @translated_languages = @$translated_languages;
         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;
@@ -296,15 +278,10 @@ sub _build_languages_arrayref {
             # separate the language string into its subtag types
             my $language_subtags_hashref = regex_lang_subtags($translated_language);
 
-            # is this language string 'enabled'?
-            for my $enabled_language (@enabled_languages) {
-                #warn "Checking out if $translated_language eq $enabled_language";
-                $language_subtags_hashref->{'enabled'} = 1 if $translated_language eq $enabled_language;
-            }
-            
             # group this language, key by langtag
             $language_subtags_hashref->{'sublanguage_current'} = 1 if $translated_language eq $current_language;
             $language_subtags_hashref->{'rfc4646_subtag'} = $translated_language;
+            $language_subtags_hashref->{'enabled'} = 1;
             $language_subtags_hashref->{'native_description'} = language_get_description($language_subtags_hashref->{language},$language_subtags_hashref->{language},'language');
             $language_subtags_hashref->{'script_description'} = language_get_description($language_subtags_hashref->{script},$language_subtags_hashref->{'language'},'script');
             $language_subtags_hashref->{'region_description'} = language_get_description($language_subtags_hashref->{region},$language_subtags_hashref->{'language'},'region');
@@ -316,11 +293,6 @@ sub _build_languages_arrayref {
         while( my ($key, $value) = each %$language_groups) {
 
             # is this language group enabled? are any of the languages within it enabled?
-            my $enabled;
-            for my $enabled_language (@enabled_languages) {
-                my $regex_enabled_language = regex_lang_subtags($enabled_language);
-                $enabled = 1 if $key eq $regex_enabled_language->{language};
-            }
             push @languages_loop,  {
                             # this is only use if there is one
                             rfc4646_subtag => @$value[0]->{rfc4646_subtag},
@@ -329,7 +301,7 @@ sub _build_languages_arrayref {
                             sublanguages_loop => $value,
                             plural => $track_language_groups->{$key} >1 ? 1 : 0,
                             current => $current_language_regex->{language} eq $key ? 1 : 0,
-                            group_enabled => $enabled,
+                            group_enabled=>1
                            };
         }
         return \@languages_loop;
-- 
1.6.3.3




More information about the Koha-patches mailing list