Diff for /loncom/interface/loncommon.pm between versions 1.686 and 1.692.2.3

version 1.686, 2008/09/13 02:37:26 version 1.692.2.3, 2008/12/11 18:46:14
Line 69  use Apache::lontexconvert(); Line 69  use Apache::lontexconvert();
 use Apache::lonclonecourse();  use Apache::lonclonecourse();
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use DateTime::TimeZone;  use DateTime::TimeZone;
   use DateTime::Locale::Catalog;
   
 # ---------------------------------------------- Designs  # ---------------------------------------------- Designs
 use vars qw(%defaultdesign);  use vars qw(%defaultdesign);
Line 658  sub select_timezone { Line 659  sub select_timezone {
    return $output;     return $output;
 }  }
   
   sub select_datelocale {
       my ($name,$selected,$onchange,$includeempty)=@_;
       my $output='<select name="'.$name.'" '.$onchange.'>'."\n";
       if ($includeempty) {
           $output .= '<option value=""';
           if ($selected eq '') {
               $output .= ' selected="selected" ';
           }
           $output .= '> </option>';
       }
       my (@possibles,%locale_names);
       my @locales = DateTime::Locale::Catalog::Locales;
       foreach my $locale (@locales) {
           if (ref($locale) eq 'HASH') {
               my $id = $locale->{'id'};
               if ($id ne '') {
                   my $en_terr = $locale->{'en_territory'};
                   my $native_terr = $locale->{'native_territory'};
                   my @languages = &Apache::lonlocal::preferred_languages();
                   if (grep(/^en$/,@languages) || !@languages) {
                       if ($en_terr ne '') {
                           $locale_names{$id} = '('.$en_terr.')';
                       } elsif ($native_terr ne '') {
                           $locale_names{$id} = $native_terr;
                       }
                   } else {
                       if ($native_terr ne '') {
                           $locale_names{$id} = $native_terr.' ';
                       } elsif ($en_terr ne '') {
                           $locale_names{$id} = '('.$en_terr.')';
                       }
                   }
                   push (@possibles,$id);
               }
           }
       }
       foreach my $item (sort(@possibles)) {
           $output.= '<option value="'.$item.'"';
           if ($item eq $selected) {
               $output.=' selected="selected"';
           }
           $output.=">$item";
           if ($locale_names{$item} ne '') {
               $output.="  $locale_names{$item}</option>\n";
           }
           $output.="</option>\n";
       }
       $output.="</select>";
       return $output;
   }
   
 =pod  =pod
   
 =item * &linked_select_forms(...)  =item * &linked_select_forms(...)
Line 874  sub help_open_topic { Line 926  sub help_open_topic {
     if ($text ne "") {      if ($text ne "") {
  $template .=    $template .= 
             "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".              "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".
             "<td bgcolor='#5555FF'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";              "<td bgcolor='#5555FF'><span class=\"LC_nobreak\"><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
   
     # Add the graphic      # Add the graphic
Line 883  sub help_open_topic { Line 935  sub help_open_topic {
     $template .= <<"ENDTEMPLATE";      $template .= <<"ENDTEMPLATE";
  <a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a>   <a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a>
 ENDTEMPLATE  ENDTEMPLATE
     if ($text ne '') { $template.='</td></tr></table>' };      if ($text ne '') { $template.='</span></td></tr></table>' };
     return $template;      return $template;
   
 }  }
Line 2946  sub fileextensions { Line 2998  sub fileextensions {
   
 sub display_languages {  sub display_languages {
     my %languages=();      my %languages=();
     foreach my $lang (&preferred_languages()) {      foreach my $lang (&Apache::lonlocal::preferred_languages()) {
  $languages{$lang}=1;   $languages{$lang}=1;
     }      }
     &get_unprocessed_cgi($ENV{'QUERY_STRING'},['displaylanguage']);      &get_unprocessed_cgi($ENV{'QUERY_STRING'},['displaylanguage']);
Line 2958  sub display_languages { Line 3010  sub display_languages {
     return %languages;      return %languages;
 }  }
   
 sub preferred_languages {  
     my @languages=();  
     if (($env{'request.role.adv'}) && ($env{'form.languages'})) {  
         @languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$env{'form.languages'}));  
     }  
     if ($env{'course.'.$env{'request.course.id'}.'.languages'}) {  
  @languages=(@languages,split(/\s*(\,|\;|\:)\s*/,  
          $env{'course.'.$env{'request.course.id'}.'.languages'}));  
     }  
   
     if ($env{'environment.languages'}) {  
  @languages=(@languages,  
     split(/\s*(\,|\;|\:)\s*/,$env{'environment.languages'}));  
     }  
     my $browser=$ENV{'HTTP_ACCEPT_LANGUAGE'};  
     if ($browser) {  
  my @browser =   
     map { (split(/\s*;\s*/,$_))[0] } (split(/\s*,\s*/,$browser));  
  push(@languages,@browser);  
     }  
   
     foreach my $domtype ($env{'user.domain'},$env{'request.role.domain'},  
                          $Apache::lonnet::perlvar{'lonDefDomain'}) {  
         if ($domtype ne '') {  
             my %domdefs = &Apache::lonnet::get_domain_defaults($domtype);  
             if ($domdefs{'lang_def'} ne '') {  
                 push(@languages,$domdefs{'lang_def'});  
             }  
         }  
     }  
     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]);  
         }  
     }  
     #uniqueify the languages list  
     my %count;  
     @genlanguages = map { $count{$_}++ == 0 ? $_ : () } @genlanguages;  
     return @genlanguages;  
 }  
   
 sub languages {  sub languages {
     my ($possible_langs) = @_;      my ($possible_langs) = @_;
     my @preferred_langs = &preferred_languages();      my @preferred_langs = &Apache::lonlocal::preferred_languages();
     if (!ref($possible_langs)) {      if (!ref($possible_langs)) {
  if( wantarray ) {   if( wantarray ) {
     return @preferred_langs;      return @preferred_langs;
Line 3354  sub pprmlink { Line 3356  sub pprmlink {
   
   
 sub timehash {  sub timehash {
     my @ltime=localtime(shift);      my ($thistime) = @_;
     return ( 'seconds' => $ltime[0],      my $timezone = &Apache::lonlocal::gettimezone();
              'minutes' => $ltime[1],      my $dt = DateTime->from_epoch(epoch => $thistime)
              'hours'   => $ltime[2],                       ->set_time_zone($timezone);
              'day'     => $ltime[3],      my $wday = $dt->day_of_week();
              'month'   => $ltime[4]+1,      if ($wday == 7) { $wday = 0; }
              'year'    => $ltime[5]+1900,      return ( 'second' => $dt->second(),
              'weekday' => $ltime[6],               'minute' => $dt->minute(),
              'dayyear' => $ltime[7]+1,               'hour'   => $dt->hour(),
              'dlsav'   => $ltime[8] );               '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 {  sub utc_string {
Line 3373  sub utc_string { Line 3380  sub utc_string {
   
 sub maketime {  sub maketime {
     my %th=@_;      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(      return POSIX::mktime(
         ($th{'seconds'},$th{'minutes'},$th{'hours'},          ($th{'seconds'},$th{'minutes'},$th{'hours'},
          $th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,-1));           $th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,-1));
Line 3855  sub get_domainconf { Line 3880  sub get_domainconf {
         if (ref($domconfig{'login'}) eq 'HASH') {          if (ref($domconfig{'login'}) eq 'HASH') {
             if (keys(%{$domconfig{'login'}})) {              if (keys(%{$domconfig{'login'}})) {
                 foreach my $key (keys(%{$domconfig{'login'}})) {                  foreach my $key (keys(%{$domconfig{'login'}})) {
                     $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};                      if (ref($domconfig{'login'}{$key}) eq 'HASH') {
                           foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
                               $designhash{$udom.'.login.'.$key.'_'.$img} =
                                   $domconfig{'login'}{$key}{$img};
                           }
                       } else {
                           $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};
                       }
                 }                  }
             } else {              } else {
                 $legacy{'login'} = 1;                  $legacy{'login'} = 1;
Line 4669  table.LC_prior_tries tr th { Line 4701  table.LC_prior_tries tr th {
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: smaller;    font-size: smaller;
 }  }
   table.LC_data_table tr.LC_info_row > td {
     background-color: #CCC;
     font-weight: bold;
     text-align: left;
   }
 table.LC_data_table tr.LC_odd_row > td,   table.LC_data_table tr.LC_odd_row > td, 
 table.LC_aboutme_port tr td {  table.LC_aboutme_port tr td {
   background-color: $data_table_light;    background-color: $data_table_light;
Line 6475  sub default_quota { Line 6512  sub default_quota {
         if ($inststatus ne '') {          if ($inststatus ne '') {
             my @statuses = split(/:/,$inststatus);              my @statuses = split(/:/,$inststatus);
             foreach my $item (@statuses) {              foreach my $item (@statuses) {
                 if ($quotahash{'quotas'}{$item} ne '') {                  if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
                     if ($defquota eq '') {                      if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') {
                         $defquota = $quotahash{'quotas'}{$item};                          if ($defquota eq '') {
                         $settingstatus = $item;                              $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};
                     } elsif ($quotahash{'quotas'}{$item} > $defquota) {                              $settingstatus = $item;
                         $defquota = $quotahash{'quotas'}{$item};                          } elsif ($quotahash{'quotas'}{'defaultquota'}{$item} > $defquota) {
                         $settingstatus = $item;                              $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};
                               $settingstatus = $item;
                           }
                       }
                   } else {
                       if ($quotahash{'quotas'}{$item} ne '') {
                           if ($defquota eq '') {
                               $defquota = $quotahash{'quotas'}{$item};
                               $settingstatus = $item;
                           } elsif ($quotahash{'quotas'}{$item} > $defquota) {
                               $defquota = $quotahash{'quotas'}{$item};
                               $settingstatus = $item;
                           }
                     }                      }
                 }                  }
             }              }
         }          }
         if ($defquota eq '') {          if ($defquota eq '') {
             $defquota = $quotahash{'quotas'}{'default'};              if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
                   $defquota = $quotahash{'quotas'}{'defaultquota'}{'default'};
               } else {
                   $defquota = $quotahash{'quotas'}{'default'};
               }
             $settingstatus = 'default';              $settingstatus = 'default';
         }          }
     } else {      } else {
Line 7632  sub csv_print_select_table { Line 7685  sub csv_print_select_table {
               &end_data_table_header_row()."\n");                &end_data_table_header_row()."\n");
     foreach my $array_ref (@$d) {      foreach my $array_ref (@$d) {
  my ($value,$display,$defaultcol)=@{ $array_ref };   my ($value,$display,$defaultcol)=@{ $array_ref };
  $r->print(&start_data_table_row().'<tr><td>'.$display.'</td>');   $r->print(&start_data_table_row().'<td>'.$display.'</td>');
   
  $r->print('<td><select name=f'.$i.   $r->print('<td><select name=f'.$i.
   ' onchange="javascript:flip(this.form,'.$i.');">');    ' onchange="javascript:flip(this.form,'.$i.');">');
Line 8329  sub build_recipient_list { Line 8382  sub build_recipient_list {
     } elsif ($origmail ne '') {      } elsif ($origmail ne '') {
         push(@recipients,$origmail);          push(@recipients,$origmail);
     }      }
     if ($defmail ne '') {      if (defined($defmail)) {
         push(@recipients,$defmail);          if ($defmail ne '') {
               push(@recipients,$defmail);
           }
     }      }
     if ($otheremails) {      if ($otheremails) {
         my @others;          my @others;
Line 9194  sub construct_course { Line 9249  sub construct_course {
         $outcome .= ($fatal?$errtext:'read ok').' - ';          $outcome .= ($fatal?$errtext:'read ok').' - ';
         my $title; my $url;          my $title; my $url;
         if ($args->{'firstres'} eq 'syl') {          if ($args->{'firstres'} eq 'syl') {
     $title='Syllabus';      $title=&mt('Syllabus');
             $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';              $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';
         } else {          } else {
             $title='Navigate Contents';              $title=&mt('Navigate Contents');
             $url='/adm/navmaps';              $url='/adm/navmaps';
         }          }
   
Line 9251  sub icon { Line 9306  sub icon {
     return &lonhttpdurl($iconname);      return &lonhttpdurl($iconname);
 }   } 
   
 sub lonhttpd_port {  
     my $lonhttpd_port=$Apache::lonnet::perlvar{'lonhttpdPort'};  
     if (!defined($lonhttpd_port)) { $lonhttpd_port='8080'; }  
     # IE doesn't like a secure page getting images from a non-secure  
     # port (when logging we haven't parsed the browser type so default  
     # back to secure  
     if ((!exists($env{'browser.type'}) || $env{'browser.type'} eq 'explorer')  
  && $ENV{'SERVER_PORT'} == 443) {  
  return 443;  
     }  
     return $lonhttpd_port;  
   
 }  
   
 sub lonhttpdurl {  sub lonhttpdurl {
   #
   # Had been used for "small fry" static images on separate port 8080.
   # Modify here if lightweight http functionality desired again.
   # Currently eliminated due to increasing firewall issues.
   #
     my ($url)=@_;      my ($url)=@_;
       return $url;
     my $lonhttpd_port = &lonhttpd_port();  
     if ($lonhttpd_port == 443) {  
  return 'https://'.$ENV{'SERVER_NAME'}.$url;  
     }  
     return 'http://'.$ENV{'SERVER_NAME'}.':'.$lonhttpd_port.$url;  
 }  }
   
 sub connection_aborted {  sub connection_aborted {

Removed from v.1.686  
changed lines
  Added in v.1.692.2.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>