[open-ils-commits] [GIT] Evergreen ILS branch master updated. c1505ea06b6a20736d107ad267d449fd6e218030
Evergreen Git
git at git.evergreen-ils.org
Mon Aug 20 16:16:38 EDT 2012
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".
The branch, master has been updated
via c1505ea06b6a20736d107ad267d449fd6e218030 (commit)
via abc81e460aa2ca8c0a88f94adeedfe6f1508f998 (commit)
via a2521d36859d4062383e48e1bf5389ceb950c7e1 (commit)
via 7ddaf5917669985f80f5d737c75d24d3cdfd616e (commit)
from 7f7f88959224ed7941017a37adc45a19a98290d6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit c1505ea06b6a20736d107ad267d449fd6e218030
Author: Dan Scott <dscott at laurentian.ca>
Date: Fri Aug 17 15:06:59 2012 -0400
TPAC i18n: Turn UA locales into Evergreen locales
We need to convert the likes of fr_ca into fr-CA to be able to pull the
appropriate localized values from the database via CStoreEditor.
Signed-off-by: Dan Scott <dscott at laurentian.ca>
Signed-off-by: Bill Erickson <berick at esilibrary.com>
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm
index 02cf017..44c6018 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm
@@ -170,9 +170,8 @@ sub load_context {
$cgi->cookie(OILS_HTTP_COOKIE_LOCALE) ||
parse_accept_lang($r->headers_in->get('Accept-Language')) || 'en_us';
-
# set the editor default locale for each page load
- $OpenILS::Utils::CStoreEditor::default_locale = $ctx->{locale};
+ $OpenILS::Utils::CStoreEditor::default_locale = parse_eg_locale($ctx->{locale});
my $mprefix = $ctx->{media_prefix};
if($mprefix and $mprefix !~ /^http/ and $mprefix !~ /^\//) {
@@ -183,7 +182,7 @@ sub load_context {
return $ctx;
}
-# turn Accept-Language into sometihng EG can understand
+# turn Accept-Language into something EG can understand
# TODO: try all langs, not just the first
sub parse_accept_lang {
my $al = shift;
@@ -195,6 +194,18 @@ sub parse_accept_lang {
return $locale;
}
+# Accept-Language uses locales like 'en', 'fr', 'fr_fr', while Evergreen
+# internally uses 'en-US', 'fr-CA', 'fr-FR' (always with the 2 lowercase,
+# hyphen, 2 uppercase convention)
+sub parse_eg_locale {
+ my $ua_locale = shift || 'en_us';
+
+ $ua_locale =~ m/^(..).?(..)?$/;
+ my $lang_code = lc($1);
+ my $region_code = $2 ? uc($2) : uc($1);
+ return "$lang_code-$region_code";
+}
+
# Given a URI, finds the configured template and any extra page
# arguments (trailing path info). Any extra data is returned
# as page arguments, in the form of an array, one item per
commit abc81e460aa2ca8c0a88f94adeedfe6f1508f998
Author: Bill Erickson <berick at esilibrary.com>
Date: Fri Aug 17 10:11:50 2012 -0400
Make tpac cache locale-aware
Add a locale level to the TPAC object cache. Each component of the
cache now looks like $cache{$component}{$locale}{stuff...}
e.g. $cache{list}{en_ca}{aout} = [...] # en_ca-fetched org unit types
The calling code in the templates requires no changes (abstraction
FTW).
Signed-off-by: Bill Erickson <berick at esilibrary.com>
Signed-off-by: Dan Scott <dscott at laurentian.ca>
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
index eb0c703..e7e3bd1 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
@@ -11,12 +11,14 @@ my $U = 'OpenILS::Application::AppUtils';
my $ro_object_subs; # cached subs
our %cache = ( # cached data
- map => {aou => {}}, # others added dynamically as needed
- list => {},
- search => {},
- org_settings => {},
- eg_cache_hash => undef,
- search_filter_groups => {}
+ map => {en_us => {}},
+ list => {en_us => {}},
+ search => {en_us => {}},
+ org_settings => {en_us => {}},
+ search_filter_groups => {en_us => {}},
+ aou_tree => {en_us => undef},
+ aouct_tree => {},
+ eg_cache_hash => undef
);
sub init_ro_object_cache {
@@ -24,7 +26,7 @@ sub init_ro_object_cache {
my $e = $self->editor;
my $ctx = $self->ctx;
- # reset org unit setting cache on each page load to avoid the
+ # reset org unit setting cache on each page load to avoid the
# requirement of reloading apache with each org-setting change
$cache{org_settings} = {};
@@ -55,17 +57,17 @@ sub init_ro_object_cache {
# Retrieve the full set of objects with class $hint
$ro_object_subs->{$list_key} = sub {
my $method = "retrieve_all_$eclass";
- $cache{list}{$hint} = $e->$method() unless $cache{list}{$hint};
- return $cache{list}{$hint};
+ $cache{list}{$ctx->{locale}}{$hint} = $e->$method() unless $cache{list}{$ctx->{locale}}{$hint};
+ return $cache{list}{$ctx->{locale}}{$hint};
};
-
+
# locate object of class $hint with Ident field $id
$cache{map}{$hint} = {};
$ro_object_subs->{$get_key} = sub {
my $id = shift;
- return $cache{map}{$hint}{$id} if $cache{map}{$hint}{$id};
- ($cache{map}{$hint}{$id}) = grep { $_->$ident_field eq $id } @{$ro_object_subs->{$list_key}->()};
- return $cache{map}{$hint}{$id};
+ return $cache{map}{$ctx->{locale}}{$hint}{$id} if $cache{map}{$ctx->{locale}}{$hint}{$id};
+ ($cache{map}{$ctx->{locale}}{$hint}{$id}) = grep { $_->$ident_field eq $id } @{$ro_object_subs->{$list_key}->()};
+ return $cache{map}{$ctx->{locale}}{$hint}{$id};
};
# search for objects of class $hint where field=value
@@ -76,7 +78,7 @@ sub init_ro_object_cache {
my $cacheval = $val;
if (ref $val) {
$val = [sort(@$val)] if ref $val eq 'ARRAY';
- $cacheval = OpenSRF::Utils::JSON->perl2JSON($val);
+ $cacheval = OpenSRF::Utils::JSON->perl2JSON($val);
#$self->apache->log->info("cacheval : $cacheval");
}
my $search_obj = {$field => $val};
@@ -84,17 +86,17 @@ sub init_ro_object_cache {
$search_obj->{$filterfield} = $filterval;
$cacheval .= ':' . $filterfield . ':' . $filterval;
}
- $cache{search}{$hint}{$field} = {} unless $cache{search}{$hint}{$field};
- $cache{search}{$hint}{$field}{$cacheval} = $e->$method($search_obj)
- unless $cache{search}{$hint}{$field}{$cacheval};
- return $cache{search}{$hint}{$field}{$cacheval};
+ #$cache{search}{$ctx->{locale}}{$hint}{$field} = {} unless $cache{search}{$ctx->{locale}}{$hint}{$field};
+ $cache{search}{$ctx->{locale}}{$hint}{$field}{$cacheval} = $e->$method($search_obj)
+ unless $cache{search}{$ctx->{locale}}{$hint}{$field}{$cacheval};
+ return $cache{search}{$ctx->{locale}}{$hint}{$field}{$cacheval};
};
}
$ro_object_subs->{aou_tree} = sub {
# fetch the org unit tree
- unless($cache{aou_tree}) {
+ unless($cache{aou_tree}{$ctx->{locale}}) {
my $tree = $e->search_actor_org_unit([
{ parent_ou => undef},
{ flesh => -1,
@@ -108,16 +110,17 @@ sub init_ro_object_cache {
sub flesh_aout {
my $node = shift;
my $ro_object_subs = shift;
+ my $ctx = shift;
$node->ou_type( $ro_object_subs->{get_aout}->($node->ou_type) );
- $cache{map}{aou}{$node->id} = $node;
- flesh_aout($_, $ro_object_subs) foreach @{$node->children};
+ $cache{map}{$ctx->{locale}}{aou}{$node->id} = $node;
+ flesh_aout($_, $ro_object_subs, $ctx) foreach @{$node->children};
};
- flesh_aout($tree, $ro_object_subs);
+ flesh_aout($tree, $ro_object_subs, $ctx);
- $cache{aou_tree} = $tree;
+ $cache{aou_tree}{$ctx->{locale}} = $tree;
}
- return $cache{aou_tree};
+ return $cache{aou_tree}{$ctx->{locale}};
};
# Add a special handler for the tree-shaped org unit cache
@@ -125,20 +128,20 @@ sub init_ro_object_cache {
my $org_id = shift;
return undef unless defined $org_id;
$ro_object_subs->{aou_tree}->(); # force the org tree to load
- return $cache{map}{aou}{$org_id};
+ return $cache{map}{$ctx->{locale}}{aou}{$org_id};
};
# Returns a flat list of aou objects. often easier to manage than a tree.
$ro_object_subs->{aou_list} = sub {
$ro_object_subs->{aou_tree}->(); # force the org tree to load
- return [ values %{$cache{map}{aou}} ];
+ return [ values %{$cache{map}{$ctx->{locale}}{aou}} ];
};
$ro_object_subs->{aouct_tree} = sub {
# fetch the org unit tree
- unless(exists $cache{aouct_tree}) {
- $cache{aouct_tree} = undef;
+ unless(exists $cache{aouct_tree}{$ctx->{locale}}) {
+ $cache{aouct_tree}{$ctx->{locale}} = undef;
my $tree_id = $e->search_actor_org_unit_custom_tree(
{purpose => 'opac', active => 't'},
@@ -169,11 +172,11 @@ sub init_ro_object_cache {
}
}
- $cache{aouct_tree} = $node_tree->org_unit;
+ $cache{aouct_tree}{$ctx->{locale}} = $node_tree->org_unit;
}
}
- return $cache{aouct_tree};
+ return $cache{aouct_tree}{$ctx->{locale}};
};
# turns an ISO date into something TT can understand
@@ -195,14 +198,11 @@ sub init_ro_object_cache {
$ro_object_subs->{get_org_setting} = sub {
my($org_id, $setting) = @_;
- $cache{org_settings}{$org_id} = {}
- unless $cache{org_settings}{$org_id};
-
- $cache{org_settings}{$org_id}{$setting} =
+ $cache{org_settings}{$ctx->{locale}}{$org_id}{$setting} =
$U->ou_ancestor_setting_value($org_id, $setting)
- unless exists $cache{org_settings}{$org_id}{$setting};
+ unless exists $cache{org_settings}{$ctx->{locale}}{$org_id}{$setting};
- return $cache{org_settings}{$org_id}{$setting};
+ return $cache{org_settings}{$ctx->{locale}}{$org_id}{$setting};
};
$ctx->{$_} = $ro_object_subs->{$_} for keys %$ro_object_subs;
commit a2521d36859d4062383e48e1bf5389ceb950c7e1
Author: Bill Erickson <berick at esilibrary.com>
Date: Fri Aug 17 10:10:55 2012 -0400
Set the default CStoreEditor locale on page load
Ech CStoreEditor request will use the locale of the current
page as the default opensrf session locale.
Signed-off-by: Bill Erickson <berick at esilibrary.com>
Signed-off-by: Dan Scott <dscott at laurentian.ca>
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm
index 25285b1..02cf017 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm
@@ -170,6 +170,10 @@ sub load_context {
$cgi->cookie(OILS_HTTP_COOKIE_LOCALE) ||
parse_accept_lang($r->headers_in->get('Accept-Language')) || 'en_us';
+
+ # set the editor default locale for each page load
+ $OpenILS::Utils::CStoreEditor::default_locale = $ctx->{locale};
+
my $mprefix = $ctx->{media_prefix};
if($mprefix and $mprefix !~ /^http/ and $mprefix !~ /^\//) {
# if a hostname is provided /w no protocol, match the protocol to the current page
commit 7ddaf5917669985f80f5d737c75d24d3cdfd616e
Author: Bill Erickson <berick at esilibrary.com>
Date: Fri Aug 17 10:08:16 2012 -0400
CStoreEditor default session locale
Adds a new package-level variable:
$OpenILS::Utils::CStoreEditor::default_locale
If set, this value is used as the session_locale for new opensrf client
sessions. If unset, the session_locale remains untouched by
CStoreEditor.
Signed-off-by: Bill Erickson <berick at esilibrary.com>
Signed-off-by: Dan Scott <dscott at laurentian.ca>
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm
index d41e435..51854e3 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm
@@ -13,6 +13,10 @@ my %PERMS;
my $cache;
my %xact_ed_cache;
+# if set, we will use this locale for all new sessions
+# if unset, we rely on the existing opensrf locale propagation
+our $default_locale;
+
our $always_xact = 0;
our $_loaded = 1;
@@ -207,8 +211,17 @@ sub session {
my( $self, $session ) = @_;
$self->{session} = $session if $session;
+ # sessions can stick around longer than a single request/transaction.
+ # kill it if our default locale was altered since the last request
+ # and it does not match the locale of the existing session.
+ delete $self->{session} if
+ $default_locale and
+ $self->{session} and
+ $self->{session}->session_locale ne $default_locale;
+
if(!$self->{session}) {
$self->{session} = OpenSRF::AppSession->create($self->app);
+ $self->{session}->session_locale($default_locale) if $default_locale;
if( ! $self->{session} ) {
my $str = "Error creating cstore session with OpenSRF::AppSession->create()!";
-----------------------------------------------------------------------
Summary of changes:
.../src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm | 13 ++++
.../perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm | 72 ++++++++++----------
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm | 17 +++++-
3 files changed, 65 insertions(+), 37 deletions(-)
hooks/post-receive
--
Evergreen ILS
More information about the open-ils-commits
mailing list