Diff for /loncom/interface/loncommon.pm between versions 1.490 and 1.511

version 1.490, 2006/12/11 03:43:15 version 1.511, 2007/03/02 23:17:58
Line 59  use Apache::lonnet; Line 59  use Apache::lonnet;
 use GDBM_File;  use GDBM_File;
 use POSIX qw(strftime mktime);  use POSIX qw(strftime mktime);
 use Apache::lonmenu();  use Apache::lonmenu();
   use Apache::lonenc();
 use Apache::lonlocal;  use Apache::lonlocal;
 use HTML::Entities;  use HTML::Entities;
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
Line 515  function setSect(sectionlist) { Line 516  function setSect(sectionlist) {
   
 sub selectcourse_link {  sub selectcourse_link {
    my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;     my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
     return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.     return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.
         '","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select [_1]',$selecttype)."</a>";          '","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select Course')."</a>";
 }  }
   
 sub check_uncheck_jscript {  sub check_uncheck_jscript {
Line 1314  Returns a string containing a <select> e Line 1315  Returns a string containing a <select> e
   
 Args:  Args:
   $name - name of the <select> element    $name - name of the <select> element
   $value - sclara or array ref of values that should already be selected    $value - scalar or array ref of values that should already be selected
   $size - number of rows long the select element is    $size - number of rows long the select element is
   $hash - the elements should be 'option' => 'shown text'    $hash - the elements should be 'option' => 'shown text'
           (shown text should already have been &mt())            (shown text should already have been &mt())
   $order - (optional) array ref of the order to show the elments in    $order - (optional) array ref of the order to show the elements in
   
 =cut  =cut
   
Line 1334  sub multiple_select_form { Line 1335  sub multiple_select_form {
         }          }
     }      }
     $output.="\n<select name='$name' size='$size' multiple='1'>";      $output.="\n<select name='$name' size='$size' multiple='1'>";
     my @order = ref($order) ? @$order      my @order;
                             : sort(keys(%$hash));      if (ref($order) eq 'ARRAY')  {
           @order = @{$order};
       } else {
           @order = sort(keys(%$hash));
       }
       if (exists($$hash{'select_form_order'})) {
           @order = @{$$hash{'select_form_order'}};
       }
           
     foreach my $key (@order) {      foreach my $key (@order) {
         $output.='<option value="'.&HTML::Entities::encode($key,'"<>&').'" ';          $output.='<option value="'.&HTML::Entities::encode($key,'"<>&').'" ';
         $output.='selected="selected" ' if ($selected{$key});          $output.='selected="selected" ' if ($selected{$key});
Line 1480  sub get_library_servers { Line 1489  sub get_library_servers {
     my %library_servers;      my %library_servers;
     foreach my $hostid (keys(%Apache::lonnet::libserv)) {      foreach my $hostid (keys(%Apache::lonnet::libserv)) {
         if ($Apache::lonnet::hostdom{$hostid} eq $domain) {          if ($Apache::lonnet::hostdom{$hostid} eq $domain) {
             $library_servers{$hostid} = $Apache::lonnet::hostname{$hostid};              $library_servers{$hostid} = &Apache::lonnet::hostname($hostid);
         }          }
     }      }
     return %library_servers;      return %library_servers;
Line 2258  sub track_student_link { Line 2267  sub track_student_link {
  &help_open_topic('View_recent_activity');   &help_open_topic('View_recent_activity');
 }  }
   
   # ===================================================== Display a student photo
   
   
   sub student_image_tag {
       my ($domain,$user)=@_;
       my $imgsrc=&Apache::lonnet::studentphoto($domain,$user,'jpg');
       if (($imgsrc) && ($imgsrc ne '/adm/lonKaputt/lonlogo_broken.gif')) {
    return '<img src="'.$imgsrc.'" align="right" />';
       } else {
    return '';
       }
   }
   
 =pod  =pod
   
 =back  =back
Line 2690  sub get_student_answers { Line 2712  sub get_student_answers {
   }    }
   $moreenv{'grade_target'}='answer';    $moreenv{'grade_target'}='answer';
   %moreenv=(%form,%moreenv);    %moreenv=(%form,%moreenv);
   my $userview=&Apache::lonnet::ssi('/res/'.$feedurl,%moreenv);    $feedurl = &Apache::lonnet::clutter($feedurl);
     &Apache::lonenc::check_encrypt(\$feedurl);
     my $userview=&Apache::lonnet::ssi($feedurl,%moreenv);
   return $userview;    return $userview;
 }  }
   
Line 2893  sub blockcheck { Line 2917  sub blockcheck {
         $uname = $env{'user.name'};          $uname = $env{'user.name'};
     }      }
   
     my ($startblock,$endblock);  
   
     # If uname and udom are for a course, check for blocks in the course.      # If uname and udom are for a course, check for blocks in the course.
   
     if (&Apache::lonnet::is_course($udom,$uname)) {      if (&Apache::lonnet::is_course($udom,$uname)) {
         my %records = &Apache::lonnet::dump('comm_block',$udom,$uname);          my %records = &Apache::lonnet::dump('comm_block',$udom,$uname);
         ($startblock,$endblock)=&get_blocks($setters,$activity,$udom,$uname);          my ($startblock,$endblock)=&get_blocks($setters,$activity,$udom,$uname);
         return ($startblock,$endblock);          return ($startblock,$endblock);
     }      }
   
       my $startblock = 0;
       my $endblock = 0;
     my %live_courses = &findallcourses(undef,$uname,$udom);      my %live_courses = &findallcourses(undef,$uname,$udom);
   
     # If uname is for a user, and activity is course-specific, i.e.,      # If uname is for a user, and activity is course-specific, i.e.,
Line 2963  sub blockcheck { Line 2987  sub blockcheck {
             if ($sec ne 'none') {              if ($sec ne 'none') {
                 $checkrole .= '/'.$sec;                  $checkrole .= '/'.$sec;
             }              }
             # Resource belongs to user other than current user.  
             # Assemble privs for that user, and check for 'evb' priv.    
             if ($otheruser) {              if ($otheruser) {
                 # Resource belongs to user other than current user.                  # Resource belongs to user other than current user.
                 # Assemble privs for that user, and check for 'evb' priv.                  # Assemble privs for that user, and check for 'evb' priv.
Line 3009  sub blockcheck { Line 3031  sub blockcheck {
         }          }
         # if they have the evb priv and are currently not playing student          # if they have the evb priv and are currently not playing student
         next if (($no_ownblock) &&          next if (($no_ownblock) &&
                  ($env{'request.role'} !~ m{^st\./$cdom/$cnum}));                   ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E}));
         next if ($no_userblock);          next if ($no_userblock);
   
         # Retrieve blocking times and identity of blocker for course          # Retrieve blocking times and identity of blocker for course
         # of specified user, unless user has 'evb' privilege.          # of specified user, unless user has 'evb' privilege.
           
         ($startblock,$endblock)=&get_blocks($setters,$activity,$cdom,$cnum);          my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum);
           if (($start != 0) && 
               (($startblock == 0) || ($startblock > $start))) {
               $startblock = $start;
           }
           if (($end != 0)  &&
               (($endblock == 0) || ($endblock < $end))) {
               $endblock = $end;
           }
     }      }
     return ($startblock,$endblock);      return ($startblock,$endblock);
 }  }
Line 3037  sub get_blocks { Line 3067  sub get_blocks {
             if ($blocks->{$activity} eq 'on') {              if ($blocks->{$activity} eq 'on') {
                 push(@{$$setters{$course}{'staff'}},[$staff_name,$staff_dom]);                  push(@{$$setters{$course}{'staff'}},[$staff_name,$staff_dom]);
                 push(@{$$setters{$course}{'times'}}, [$start,$end]);                  push(@{$$setters{$course}{'times'}}, [$start,$end]);
                 if ( ($startblock == 0) || ($startblock > $1) ) {                  if ( ($startblock == 0) || ($startblock > $start) ) {
                     $startblock = $1;                      $startblock = $start;
                 }                  }
                 if ( ($endblock == 0) || ($endblock < $2) ) {                  if ( ($endblock == 0) || ($endblock < $end) ) {
                     $endblock = $2;                      $endblock = $end;
                 }                  }
             }              }
         }          }
Line 3341  sub bodytag { Line 3371  sub bodytag {
     my ($role,$realm) = split(/\./,$env{'request.role'},2);      my ($role,$realm) = split(/\./,$env{'request.role'},2);
     if ($role  eq 'ca') {      if ($role  eq 'ca') {
         my ($rdom,$rname) = ($realm =~ m{^/($match_domain)/($match_username)$});          my ($rdom,$rname) = ($realm =~ m{^/($match_domain)/($match_username)$});
         $realm = &plainname($rname,$rdom).':'.$rdom;          $realm = &plainname($rname,$rdom);
     }       } 
 # realm  # realm
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
Line 3645  sub standard_css { Line 3675  sub standard_css {
     return <<END;      return <<END;
 h1, h2, h3, th { font-family: $sans }  h1, h2, h3, th { font-family: $sans }
 a:focus { color: red; background: yellow }   a:focus { color: red; background: yellow } 
 table.thinborder { border-collapse: collapse; }  table.thinborder,
 table.thinborder tr th {  border-style: solid; border-width: 1px; background: $tabbg;}  table.LC_optres_prior {
 table.thinborder tr td { border-style: solid; border-width: 1px}    border-collapse: collapse;
   }
   table.thinborder tr th {
     border-style: solid;
     border-width: 1px;
     background: $tabbg;
   }
   table.thinborder tr td, 
   table.LC_optres_prior tr td {
     border-style: solid;
     border-width: 1px
   }
   
 form, .inline { display: inline; }  form, .inline { display: inline; }
 .center { text-align: center; }  .center { text-align: center; }
Line 3819  table.LC_data_table, table.LC_mail_list Line 3860  table.LC_data_table, table.LC_mail_list
 .LC_data_table_dense {  .LC_data_table_dense {
   font-size: small;    font-size: small;
 }  }
   table.LC_nested_outer {
     border: 1px solid #000000;
     border-collapse: separate;
     border-spacing: 0px;
     width: 100%;
   }
   table.LC_nested {
     border: 0px;
     border-collapse: separate;
     border-spacing: 0px;
     width: 100%;
   }
 table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th {  table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th {
   font-weight: bold;    font-weight: bold;
   background-color: $data_table_head;    background-color: $data_table_head;
Line 3837  table.LC_data_table tr.LC_data_table_hig Line 3890  table.LC_data_table tr.LC_data_table_hig
   background-color: $data_table_darker;    background-color: $data_table_darker;
 }  }
 table.LC_data_table tr.LC_empty_row td,  table.LC_data_table tr.LC_empty_row td,
 table.LC_whatsnew tr.LC_empty_row td {  table.LC_nested tr.LC_empty_row td {
   background-color: #FFFFFF;    background-color: #FFFFFF;
   font-weight: bold;    font-weight: bold;
   font-style: italic;    font-style: italic;
   text-align: center;    text-align: center;
   padding: 8px;    padding: 8px;
 }  }
 table.LC_whatsnew tr.LC_empty_row td {  table.LC_nested tr.LC_empty_row td {
   padding: 4ex    padding: 4ex
 }  }
 table.LC_whatsnew {  table.LC_nested_outer tr th {
     font-weight: bold;
     background-color: $data_table_head;
     font-size: smaller;
     border-bottom: 1px solid #000000;
 }  }
   table.LC_nested_outer tr td.LC_subheader {
 table.LC_whatsnew tr th,    background-color: $data_table_head;
 table.LC_whatsnew tr.LC_info_row td {  
   background-color: #CCC;  
   font-weight: bold;    font-weight: bold;
   font-size: small;    font-size: small;
     border-bottom: 1px solid #000000;
   text-align: right;    text-align: right;
 }  }
 table.LC_whatsnew tr td {  table.LC_nested tr.LC_info_row td {
   background-color: #FFF;    background-color: #CCC;
     font-weight: bold;
   font-size: small;    font-size: small;
   text-align: right;    text-align: center;
 }  }
 table.LC_whatsnew tr td.LC_first_item {  table.LC_nested tr.LC_info_row td.LC_left_item {
   text-align: left;    text-align: left;
 }  }
   table.LC_nested td {
     background-color: #FFF;
     font-size: small;
   }
   table.LC_nested_outer tr th.LC_right_item,
   table.LC_nested tr.LC_info_row td.LC_right_item,
   table.LC_nested tr.LC_odd_row td.LC_right_item,
   table.LC_nested tr td.LC_right_item {
     text-align: right;
   }
   
 table.LC_whatsnew tr.LC_odd_row td {  table.LC_nested tr.LC_odd_row td {
   background-color: #EEE;    background-color: #EEE;
 }  }
   
Line 3925  table.LC_mail_list tr.LC_mail_other { Line 3992  table.LC_mail_list tr.LC_mail_other {
 table.LC_mail_list tr.LC_mail_other:hover {  table.LC_mail_list tr.LC_mail_other:hover {
   background-color: $mail_other_hover;    background-color: $mail_other_hover;
 }  }
   table.LC_mail_list tr.LC_mail_even {
   }
   table.LC_mail_list tr.LC_mail_odd {
   }
   
   
 table#LC_portfolio_actions {  table#LC_portfolio_actions {
   width: auto;    width: auto;
Line 4468  Inputs:         $args - additional optio Line 4540  Inputs:         $args - additional optio
                                  a html attribute                                   a html attribute
                  frameset     -> if true will start with a <frameset>                   frameset     -> if true will start with a <frameset>
                                  rather than <body>                                   rather than <body>
                    dicsussion   -> if true will get discussion from
                                     lonxml::xmlend
                                    (you can pass the target and parser arguments
                                     through optional 'target' and 'parser' args
                                     to this routine)
   
 =cut  =cut
   
Line 4926  sub get_course_users { Line 5003  sub get_course_users {
                     $usec = 'none';                      $usec = 'none';
                 }                  }
                 if ($uname ne '' && $udom ne '') {                  if ($uname ne '' && $udom ne '') {
                     if ($end < $now) {                      if ($end > 0 && $end < $now) {
                         $status = 'previous';                          $status = 'previous';
                     } elsif ($start > $now) {                      } elsif ($start > $now) {
                         $status = 'future';                          $status = 'future';
Line 5368  sub record_sep { Line 5445  sub record_sep {
     } else {      } else {
         my @allfields;          my @allfields;
         if ($env{'form.upfiletype'} eq 'semisv') {          if ($env{'form.upfiletype'} eq 'semisv') {
             @allfields=split(/;/,$record);              @allfields=split(/;/,$record,-1);
         } else {          } else {
             @allfields=split(/\,/,$record);              @allfields=split(/\,/,$record,-1);
         }          }
         my $i=0;          my $i=0;
         my $j;          my $j;
Line 6064  Returns: both routines return nothing Line 6141  Returns: both routines return nothing
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub store_course_settings {  sub store_course_settings {
       return &store_settings($env{'request.course.id'},@_);
   }
   
   sub store_settings {
     # save to the environment      # save to the environment
     # appenv the same items, just to be safe      # appenv the same items, just to be safe
     my $courseid = $env{'request.course.id'};  
     my $udom  = $env{'user.domain'};      my $udom  = $env{'user.domain'};
     my $uname = $env{'user.name'};      my $uname = $env{'user.name'};
     my ($prefix,$Settings) = @_;      my ($context,$prefix,$Settings) = @_;
     my %SaveHash;      my %SaveHash;
     my %AppHash;      my %AppHash;
     while (my ($setting,$type) = each(%$Settings)) {      while (my ($setting,$type) = each(%$Settings)) {
         my $basename = join('.','internal',$courseid,$prefix,$setting);          my $basename = join('.','internal',$context,$prefix,$setting);
         my $envname = 'environment.'.$basename;          my $envname = 'environment.'.$basename;
         if (exists($env{'form.'.$setting})) {          if (exists($env{'form.'.$setting})) {
             # Save this value away              # Save this value away
Line 6113  sub store_course_settings { Line 6193  sub store_course_settings {
 }  }
   
 sub restore_course_settings {  sub restore_course_settings {
     my $courseid = $env{'request.course.id'};      return &restore_settings($env{'request.course.id'},@_);
     my ($prefix,$Settings) = @_;  }
   
   sub restore_settings {
       my ($context,$prefix,$Settings) = @_;
     while (my ($setting,$type) = each(%$Settings)) {      while (my ($setting,$type) = each(%$Settings)) {
         next if (exists($env{'form.'.$setting}));          next if (exists($env{'form.'.$setting}));
         my $envname = 'environment.internal.'.$courseid.'.'.$prefix.          my $envname = 'environment.internal.'.$context.'.'.$prefix.
             '.'.$setting;              '.'.$setting;
         if (exists($env{$envname})) {          if (exists($env{$envname})) {
             if ($type eq 'scalar') {              if ($type eq 'scalar') {
Line 6532  sub group_term { Line 6615  sub group_term {
   
 sub icon {  sub icon {
     my ($file)=@_;      my ($file)=@_;
     my $curfext = (split(/\./,$file))[-1];      my $curfext = lc((split(/\./,$file))[-1]);
     my $iconname=$Apache::lonnet::perlvar{'lonIconsURL'}.'/unknown.gif';      my $iconname=$Apache::lonnet::perlvar{'lonIconsURL'}.'/unknown.gif';
     my $embstyle = &Apache::loncommon::fileembstyle($curfext);      my $embstyle = &Apache::loncommon::fileembstyle($curfext);
     if (!(!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn')) {      if (!(!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn')) {

Removed from v.1.490  
changed lines
  Added in v.1.511


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