version 1.58, 2009/05/04 21:44:00
|
version 1.60.4.3, 2010/12/06 17:52:20
|
Line 242 sub current_language {
|
Line 242 sub current_language {
|
} |
} |
|
|
sub preferred_languages { |
sub preferred_languages { |
|
my $defdom = &Apache::lonnet::default_login_domain(); |
|
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'},$defdom) { |
|
next if ($domtype eq ''); |
|
if ($domtype =~ /^(\w{2})\w?i$/) { |
|
return ($1.'i'); |
|
} elsif ($domtype =~ /^(\w{2})\w?itest$/) { |
|
return ($1.'t'); |
|
} else { |
|
return ('gci'); |
|
} |
|
} |
my @languages=(); |
my @languages=(); |
if (($Apache::lonnet::env{'request.role.adv'}) && ($Apache::lonnet::env{'form.languages'})) { |
if (($Apache::lonnet::env{'request.role.adv'}) && ($Apache::lonnet::env{'form.languages'})) { |
@languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$Apache::lonnet::env{'form.languages'})); |
@languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$Apache::lonnet::env{'form.languages'})); |
Line 262 sub preferred_languages {
|
Line 273 sub preferred_languages {
|
push(@languages,@browser); |
push(@languages,@browser); |
} |
} |
|
|
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'}, |
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'},$defdom) { |
$Apache::lonnet::perlvar{'lonDefDomain'}) { |
|
if ($domtype ne '') { |
if ($domtype ne '') { |
my %domdefs = &Apache::lonnet::get_domain_defaults($domtype); |
my %domdefs = &Apache::lonnet::get_domain_defaults($domtype); |
if ($domdefs{'lang_def'} ne '') { |
if ($domdefs{'lang_def'} ne '') { |
Line 393 sub gettimezone {
|
Line 403 sub gettimezone {
|
return 'local'; |
return 'local'; |
} |
} |
|
|
our $timezone_local; |
|
|
|
sub locallocaltime { |
sub locallocaltime { |
my ($thistime,$timezone,$datetime) = @_; |
my ($thistime,$timezone) = @_; |
|
|
if (!defined($thistime) || $thistime eq '') { |
if (!defined($thistime) || $thistime eq '') { |
return &mt('Never'); |
return &mt('Never'); |
Line 410 sub locallocaltime {
|
Line 418 sub locallocaltime {
|
return &mt('Never'); |
return &mt('Never'); |
} |
} |
|
|
my $dt; |
my $dt = DateTime->from_epoch(epoch => $thistime) |
my $convert_time; |
->set_time_zone(gettimezone($timezone)); |
|
|
#### START # Speed up if this function is called often #### |
# TimeZone tries to determine the 'local' timezone from $ENV{TZ} if this |
|
# fails it searches through various system files. Under certain |
# Is a $datetime parameter set? |
# circumstances this is an extremly expensive operation. |
if(defined($datetime)) { |
# So after the first run we store the timezone in $ENV{TZ} to significantly |
# Check for an instance of a DateTime object |
# speed up future lookups. |
if(!(defined $$datetime)) { |
$ENV{TZ} = $dt->time_zone()->name() |
# No object, create one |
if (! $ENV{TZ} && gettimezone($timezone) eq 'local'); |
$$datetime = DateTime->from_epoch(epoch => $thistime) |
|
->set_time_zone(&gettimezone($timezone)); |
|
$dt = $$datetime; |
|
} else { |
|
# If the return-value is "local", we have to convert it for DateTime |
|
|
|
# Converts the "local"-String only once |
|
if(!defined($timezone_local)) |
|
{ |
|
$timezone_local = DateTime::TimeZone->new( name => gettimezone('local'))->name(); |
|
} |
|
|
|
my $timezone_now; |
|
|
|
if(gettimezone($timezone) == 'local') |
|
{ |
|
$timezone_now = $timezone_local; |
|
} else { |
|
$timezone_now = gettimezone($timezone); |
|
} |
|
|
|
# Has the timezone changed? |
|
if($timezone_now eq $$datetime->time_zone_short_name() || |
|
$timezone_now eq $$datetime->time_zone_long_name()) |
|
{ |
|
# There is already an object (dereference) |
|
$dt = $$datetime; |
|
|
|
# We need this as temporary value |
|
$convert_time = DateTime->from_epoch( epoch => $thistime ); |
|
#->set_time_zone('floating'); |
|
|
|
# Preventing a set_time_zone call (time consuming) |
|
# Using old instance of DateTime with timezone |
|
$dt->set( year => $convert_time->year(), |
|
month => $convert_time->month(), |
|
day => $convert_time->day(), |
|
hour => $convert_time->hour(), |
|
minute => $convert_time->minute(), |
|
second => $convert_time->second() ); |
|
} else { |
|
# The timezone has changed since last time |
|
$$datetime = DateTime->from_epoch(epoch => $thistime) |
|
->set_time_zone(&gettimezone($timezone)); |
|
$dt = $$datetime; |
|
} |
|
} |
|
} else { |
|
# There is no $datetime parameter |
|
$dt = DateTime->from_epoch(epoch => $thistime) |
|
->set_time_zone(&gettimezone($timezone)); |
|
} |
|
#### END # Speed up if this function is called often #### |
|
|
|
if ((¤t_language=~/^en/) || (!$lh)) { |
if ((¤t_language=~/^en/) || (!$lh)) { |
|
|