Diff for /loncom/interface/loncommon.pm between versions 1.222 and 1.231

version 1.222, 2004/10/21 11:17:00 version 1.231, 2004/11/13 21:06:27
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::Constants qw(:common :http :methods);  use Apache::Constants qw(:common :http :methods);
 use Apache::lonmsg();  
 use Apache::lonmenu();  use Apache::lonmenu();
 use Apache::lonlocal;  use Apache::lonlocal;
 use HTML::Entities;  use HTML::Entities;
Line 376  sub selectstudent_link { Line 375  sub selectstudent_link {
 }  }
   
 sub coursebrowser_javascript {  sub coursebrowser_javascript {
     my ($domainfilter)=@_;      my ($domainfilter,$roleelement)=@_;
    return (<<ENDSTDBRW);     return (<<ENDSTDBRW);
 <script type="text/javascript" language="Javascript" >  <script type="text/javascript" language="Javascript" >
       var extra_element = "$roleelement" 
     var stdeditbrowser;      var stdeditbrowser;
     function opencrsbrowser(formname,uname,udom,desc) {      function opencrsbrowser(formname,uname,udom,desc) {
         var url = '/adm/pickcourse?';          var url = '/adm/pickcourse?';
Line 397  sub coursebrowser_javascript { Line 397  sub coursebrowser_javascript {
         url += 'form=' + formname + '&cnumelement='+uname+          url += 'form=' + formname + '&cnumelement='+uname+
                             '&cdomelement='+udom+                              '&cdomelement='+udom+
                                     '&cnameelement='+desc;                                      '&cnameelement='+desc;
           if (extra_element != '') {
               url += '&roleelement=$roleelement';
           }
         var title = 'Course_Browser';          var title = 'Course_Browser';
         var options = 'scrollbars=1,resizable=1,menubar=0';          var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';          options += ',width=700,height=600';
Line 663  sub help_open_menu { Line 666  sub help_open_menu {
     my $link='';      my $link='';
     my $title = &mt('Get help');      my $title = &mt('Get help');
     my $origurl = $ENV{'REQUEST_URI'};      my $origurl = $ENV{'REQUEST_URI'};
       $origurl=~s|^/~|/priv/|;
     my $timestamp = time;      my $timestamp = time;
     foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) {      foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) {
         $$_ = &Apache::lonnet::escape($$_);          $$_ = &Apache::lonnet::escape($$_);
Line 1741  sub get_related_words { Line 1745  sub get_related_words {
   
 =over 4  =over 4
   
 =item * plainname($uname,$udom)  =item * plainname($uname,$udom,$first)
   
 Takes a users logon name and returns it as a string in  Takes a users logon name and returns it as a string in
 "first middle last generation" form  "first middle last generation" form 
   if $first is set to 'lastname' then it returns it as
   'lastname generation, firstname middlename' if their is a lastname
   
 =cut  =cut
   
 ###############################################################  ###############################################################
 sub plainname {  sub plainname {
     my ($uname,$udom)=@_;      my ($uname,$udom,$first)=@_;
     my %names=&Apache::lonnet::get('environment',      my %names=&Apache::lonnet::get('environment',
                     ['firstname','middlename','lastname','generation'],                      ['firstname','middlename','lastname','generation'],
  $udom,$uname);   $udom,$uname);
     my $name=$names{'firstname'}.' '.$names{'middlename'}.' '.      my $name=&Apache::lonnet::format_name($names{'firstname'},
  $names{'lastname'}.' '.$names{'generation'};    $names{'middlename'},
     $names{'lastname'},
     $names{'generation'},$first);
       $name=~s/^\s+//;
     $name=~s/\s+$//;      $name=~s/\s+$//;
     $name=~s/\s+/ /g;      $name=~s/\s+/ /g;
     if ($name !~ /\S/) { $name=$uname.'@'.$udom; }      if ($name !~ /\S/) { $name=$uname.'@'.$udom; }
Line 2518  other decorations will be returned. Line 2527  other decorations will be returned.
 =cut  =cut
   
 sub bodytag {  sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain,$forcereg)=@_;      my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle)=@_;
     $title=&mt($title);      $title=&mt($title);
     $function = &get_users_function() if (!$function);      $function = &get_users_function() if (!$function);
     my $img=&designparm($function.'.img',$domain);      my $img=&designparm($function.'.img',$domain);
Line 2551  sub bodytag { Line 2560  sub bodytag {
     if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }      if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
 # construct main body tag  # construct main body tag
     my $bodytag = <<END;      my $bodytag = <<END;
 <style>  <style type="text/css">
 h1, h2, h3, th { font-family: Arial, Helvetica, sans-serif }  h1, h2, h3, th { font-family: Arial, Helvetica, sans-serif }
 a:focus { color: red; background: yellow }   a:focus { color: red; background: yellow } 
 </style>  </style>
Line 2564  END Line 2573  END
         return $bodytag;          return $bodytag;
     } elsif ($ENV{'browser.interface'} eq 'textual') {      } elsif ($ENV{'browser.interface'} eq 'textual') {
 # Accessibility  # Accessibility
             
         return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web',          return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web',
                                                       $forcereg).                                                        $forcereg).
                '<h1>LON-CAPA: '.$title.'</h1>';                 '<h1>LON-CAPA: '.$title.'</h1>';
Line 2571  END Line 2581  END
 # No Remote  # No Remote
  my $roleinfo=(<<ENDROLE);   my $roleinfo=(<<ENDROLE);
 <td bgcolor="$tabbg" align="right">  <td bgcolor="$tabbg" align="right">
 <p>  
 <font size="2" face="Arial, Helvetica, sans-serif">  <font size="2" face="Arial, Helvetica, sans-serif">
     $ENV{'environment.firstname'}      $ENV{'environment.firstname'}
     $ENV{'environment.middlename'}      $ENV{'environment.middlename'}
Line 2582  END Line 2591  END
 <font size="2" face="Arial, Helvetica, sans-serif">$role</font>&nbsp;  <font size="2" face="Arial, Helvetica, sans-serif">$role</font>&nbsp;
 <br />  <br />
 <font size="2" face="Arial, Helvetica, sans-serif">$realm</font>&nbsp;  <font size="2" face="Arial, Helvetica, sans-serif">$realm</font>&nbsp;
 </p>  
 </td>  </td>
 ENDROLE  ENDROLE
           my $titleinfo = '<font face="Arial, Helvetica, sans-serif" size="+3" color="'.
    $font.'"><b>'.$title.'</b></font>';
           if ($customtitle) {
               $titleinfo = $customtitle;
           } 
    if ($ENV{'request.state'} eq 'construct') {
       my ($uname,$thisdisfn)=
    ($ENV{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);
       my $formaction='/priv/'.$uname.'/'.$thisdisfn;
       $formaction=~s/\/+/\//g;
       $titleinfo = '<form name="dirs" method="post" action="'.$formaction
    .'" target="_top">'
    .&Apache::lonhtmlcommon::crumbs($uname.'/'.$thisdisfn,'_top','/priv','',-1,1)."<br />"
    .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
    .'</form>'
    .&Apache::lonmenu::constspaceform();
   
       &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction);
       if ($thisdisfn!~m|/$|) {  $forcereg=1; }
    }
   
    &Apache::lonnet::logthis("hrrm");
         return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web',          return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web',
                                                       $forcereg).                                                        $forcereg).
       '<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td rowspan="3" bgcolor="'.$tabbg.'"><font face="Arial, Helvetica, sans-serif" size="+3" color="'.$font.'"><b>'.$title.        '<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td rowspan="3" bgcolor="'.$tabbg.'">'.$titleinfo.'</td>'.$roleinfo.'</tr></table>';
 '</b></font></td>'.$roleinfo.'</tr></table>';  
     }      }
   
 #  #
 # Top frame rendering, Remote is up  # Top frame rendering, Remote is up
 #  #
       my $titleinfo = '&nbsp;<font size="5" face="Arial, Helvetica, sans-serif"><b>'.$title.'</b></font>';
       if ($customtitle) {
           $titleinfo = $customtitle;
       }
     return(<<ENDBODY);      return(<<ENDBODY);
 $bodytag  $bodytag
 <table width="100%" cellspacing="0" border="0" cellpadding="0">  <table width="100%" cellspacing="0" border="0" cellpadding="0">
Line 2603  $upperleft</td> Line 2636  $upperleft</td>
 </tr>  </tr>
 <tr>  <tr>
 <td rowspan="3" bgcolor="$tabbg">  <td rowspan="3" bgcolor="$tabbg">
 &nbsp;<font size="5" face="Arial, Helvetica, sans-serif"><b>$title</b></font>  $titleinfo
 <td bgcolor="$tabbg" align="right">  <td bgcolor="$tabbg" align="right">
 <font size="2" face="Arial, Helvetica, sans-serif">  <font size="2" face="Arial, Helvetica, sans-serif">
     $ENV{'environment.firstname'}      $ENV{'environment.firstname'}
Line 3277  sub DrawBarGraph { Line 3310  sub DrawBarGraph {
                   '#66ccff', '#ff9999', '#cccc33', '#660000', '#33cc66',                    '#66ccff', '#ff9999', '#cccc33', '#660000', '#33cc66',
                   ];                     ]; 
     }      }
       my $extra_settings = {};
       if (ref($Values[-1]) eq 'HASH') {
           $extra_settings = pop(@Values);
       }
     #      #
     my $identifier = &get_cgi_id();      my $identifier = &get_cgi_id();
     my $id = 'cgi.'.$identifier;              my $id = 'cgi.'.$identifier;        
     if (! @Values || ref($Values[0]) ne 'ARRAY') {      if (! @Values || ref($Values[0]) ne 'ARRAY') {
         return '';          return '';
     }      }
       #
       my @Labels;
       if (defined($labels)) {
           @Labels = @$labels;
       } else {
           for (my $i=0;$i<@{$Values[0]};$i++) {
               push (@Labels,$i+1);
           }
       }
       #
     my $NumBars = scalar(@{$Values[0]});      my $NumBars = scalar(@{$Values[0]});
       if ($NumBars < scalar(@Labels)) { $NumBars = scalar(@Labels); }
     my %ValuesHash;      my %ValuesHash;
     my $NumSets=1;      my $NumSets=1;
     foreach my $array (@Values) {      foreach my $array (@Values) {
Line 3293  sub DrawBarGraph { Line 3341  sub DrawBarGraph {
     }      }
     #      #
     my ($height,$width,$xskip,$bar_width) = (200,120,1,15);      my ($height,$width,$xskip,$bar_width) = (200,120,1,15);
     if ($NumBars < 5) {      if ($NumBars < 3) {
         $width = 120+$NumBars*25;          $width = 120+$NumBars*32;
           $xskip = 1;
           $bar_width = 30;
       } elsif ($NumBars < 5) {
           $width = 120+$NumBars*20;
         $xskip = 1;          $xskip = 1;
         $bar_width = 25;          $bar_width = 20;
     } elsif ($NumBars < 10) {      } elsif ($NumBars < 10) {
         $width = 120+$NumBars*15;          $width = 120+$NumBars*15;
         $xskip = 1;          $xskip = 1;
Line 3315  sub DrawBarGraph { Line 3367  sub DrawBarGraph {
         $bar_width = 4;          $bar_width = 4;
     }      }
     #      #
     my @Labels;  
     if (defined($labels)) {  
         @Labels = @$labels;  
     } else {  
         for (my $i=0;$i<@{$Values[0]};$i++) {  
             push (@Labels,$i+1);  
         }  
     }  
     #  
     $Max = 1 if ($Max < 1);      $Max = 1 if ($Max < 1);
     if ( int($Max) < $Max ) {      if ( int($Max) < $Max ) {
         $Max++;          $Max++;
Line 3346  sub DrawBarGraph { Line 3389  sub DrawBarGraph {
     $ValuesHash{$id.'.bar_width'} = $bar_width;      $ValuesHash{$id.'.bar_width'} = $bar_width;
     $ValuesHash{$id.'.labels'} = join(',',@Labels);      $ValuesHash{$id.'.labels'} = join(',',@Labels);
     #      #
       # Deal with other parameters
       while (my ($key,$value) = each(%$extra_settings)) {
           $ValuesHash{$id.'.'.$key} = $value;
       }
       #
     &Apache::lonnet::appenv(%ValuesHash);      &Apache::lonnet::appenv(%ValuesHash);
     return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />';      return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />';
 }  }
Line 3732  sub connection_aborted { Line 3780  sub connection_aborted {
     return $c->aborted();      return $c->aborted();
 }  }
   
 #  
 #    Escapes strings that may have embedded 's that will be put into  #    Escapes strings that may have embedded 's that will be put into
 #    strings as 'strings'.  #    strings as 'strings'.
 #    The assumptions are:  
 #       There has been no effort to escape ' with \'  
 #       Any \'s in the string are intended to be there as part of the URL  
 #        and must also be escaped.  
 # Parameters:  
 #     input     - The string to escape.  
 # Returns:  
 #     The escaped string (' replaced by \' and \ replaced by \\).  
 #  
 sub escape_single {  sub escape_single {
     my ($input) = @_;      my ($input) = @_;
       $input =~ s/\\/\\\\/g; # Escape the \'s..(must be first)>
     #  I imagine a regexp wizard could combine the two expressions below.  
     #  If you do you might want to comment the result.  
   
     $input =~ s/\\/\\\\/g; # Escape the /'s..(must be first)>  
     $input =~ s/\'/\\\'/g; # Esacpe the 's....      $input =~ s/\'/\\\'/g; # Esacpe the 's....
   
     return $input;      return $input;
 }  }
   
 #  Same as escape_single, but escape's "'s  This   #  Same as escape_single, but escape's "'s  This 
 #  can be used for  "strings"  #  can be used for  "strings"
 #  
 # Parameters:  
 #     input     - The string to escape.  
 # Returns:  
 #     The escaped string (" replaced by \" and \ replaced by \\).  
 #  
 sub escape_double {  sub escape_double {
     my ($input) = @_;      my ($input) = @_;
   
     #  I imagine a regexp wizard could combine the two expressions below.  
     #  If you do you might want to comment the result.  
   
     $input =~ s/\\/\\\\/g; # Escape the /'s..(must be first)>      $input =~ s/\\/\\\\/g; # Escape the /'s..(must be first)>
     $input =~ s/\"/\\\"/g; # Esacpe the "s....      $input =~ s/\"/\\\"/g; # Esacpe the "s....
   
     return $input;      return $input;
 }  }
 #   
 #   Escapes the last element of a full URL.  #   Escapes the last element of a full URL.
 #  
 # Parameters:  
 #    url    - The url to escape.  
 # Returns:  
 #    The url with the last element escaped via lonnet::escape.  
 #  
 sub escape_url {  sub escape_url {
     my ($url)   = @_;      my ($url)   = @_;
     my @urlslices = split(/\//, $url);      my @urlslices = split(/\//, $url);
       my $lastitem = &Apache::lonnet::escape(pop(@urlslices));
     my $lastitem  = $urlslices[scalar(@urlslices) -1];      return join('/',@urlslices).'/'.$lastitem;
     $lastitem     = &Apache::lonnet::escape($lastitem);  
       
     my $escaped_url;  
     for (my $i = 0; $i < scalar(@urlslices) -1; $i++) {  
  $escaped_url .= $urlslices[$i] .'/';  
     }  
     $escaped_url     .= $lastitem ;  
   
     return $escaped_url;  
 }  }
 =pod  =pod
   

Removed from v.1.222  
changed lines
  Added in v.1.231


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