--- loncom/interface/loncommon.pm 2008/09/19 22:52:41 1.679.2.2 +++ loncom/interface/loncommon.pm 2008/09/29 22:58:41 1.679.2.6 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.679.2.2 2008/09/19 22:52:41 raeburn Exp $ +# $Id: loncommon.pm,v 1.679.2.6 2008/09/29 22:58:41 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2987,14 +2987,19 @@ sub preferred_languages { } } } + return &get_genlanguages(@languages); +} + +sub get_genlanguages { + my (@languages) = @_; # turn "en-ca" into "en-ca,en" my @genlanguages; foreach my $lang (@languages) { - unless ($lang=~/\w/) { next; } - push(@genlanguages,$lang); - if ($lang=~/(\-|\_)/) { - push(@genlanguages,(split(/(\-|\_)/,$lang))[0]); - } + unless ($lang=~/\w/) { next; } + push(@genlanguages,$lang); + if ($lang=~/(\-|\_)/) { + push(@genlanguages,(split(/(\-|\_)/,$lang))[0]); + } } #uniqueify the languages list my %count; @@ -3348,16 +3353,21 @@ sub pprmlink { sub timehash { - my @ltime=localtime(shift); - return ( 'seconds' => $ltime[0], - 'minutes' => $ltime[1], - 'hours' => $ltime[2], - 'day' => $ltime[3], - 'month' => $ltime[4]+1, - 'year' => $ltime[5]+1900, - 'weekday' => $ltime[6], - 'dayyear' => $ltime[7]+1, - 'dlsav' => $ltime[8] ); + my ($thistime) = @_; + my $timezone = &Apache::lonlocal::gettimezone(); + my $dt = DateTime->from_epoch(epoch => $thistime) + ->set_time_zone($timezone); + my $wday = $dt->day_of_week(); + if ($wday == 7) { $wday = 0; } + return ( 'second' => $dt->second(), + 'minute' => $dt->minute(), + 'hour' => $dt->hour(), + 'day' => $dt->day_of_month(), + 'month' => $dt->month(), + 'year' => $dt->year(), + 'weekday' => $wday, + 'dayyear' => $dt->day_of_year(), + 'dlsav' => $dt->is_dst() ); } sub utc_string { @@ -3367,6 +3377,24 @@ sub utc_string { sub maketime { my %th=@_; + my ($epoch_time,$timezone,$dt); + $timezone = &Apache::lonlocal::gettimezone(); + eval { + $dt = DateTime->new( year => $th{'year'}, + month => $th{'month'}, + day => $th{'day'}, + hour => $th{'hour'}, + minute => $th{'minute'}, + second => $th{'second'}, + time_zone => $timezone, + ); + }; + if (!$@) { + $epoch_time = $dt->epoch; + if ($epoch_time) { + return $epoch_time; + } + } return POSIX::mktime( ($th{'seconds'},$th{'minutes'},$th{'hours'}, $th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,-1)); @@ -8302,8 +8330,10 @@ sub build_recipient_list { } elsif ($origmail ne '') { push(@recipients,$origmail); } - if ($defmail ne '') { - push(@recipients,$defmail); + if (defined($defmail)) { + if ($defmail ne '') { + push(@recipients,$defmail); + } } if ($otheremails) { my @others; @@ -9323,7 +9353,7 @@ sub init_user_environment { } # Give them a new cookie my $id = ($args->{'robot'} ? 'robot'.$args->{'robot'} - : $now); + : $now.$$.int(rand(10000))); $cookie="$username\_$id\_$domain\_$authhost"; # Initialize roles