Diff for /loncom/interface/loncommon.pm between versions 1.329 and 1.337

version 1.329, 2006/04/10 19:54:54 version 1.337, 2006/04/14 20:16:02
Line 61  use POSIX qw(strftime mktime); Line 61  use POSIX qw(strftime mktime);
 use Apache::lonmenu();  use Apache::lonmenu();
 use Apache::lonlocal;  use Apache::lonlocal;
 use HTML::Entities;  use HTML::Entities;
   use Apache::lonhtmlcommon();
   use Apache::loncoursedata();
   
 my $readit;  my $readit;
   
Line 720  sub help_open_menu { Line 722  sub help_open_menu {
   "<td bgcolor='#CC6600'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#CC6600'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
     my $nothing=&Apache::lonhtmlcommon::javascript_nothing();      my $nothing=&Apache::lonhtmlcommon::javascript_nothing();
     my $html=&Apache::lonxml::xmlbegin();  
     my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif");      my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif");
       my $start_page =
           &Apache::loncommon::start_page('Help Menu', undef,
          {'frameset'    => 1,
    'js_ready'    => 1,
    'add_entries' => {
       'border' => '0',
       'rows'   => "105,*",},});
       my $end_page =
           &Apache::loncommon::end_page({'frameset' => 1,
         'js_ready' => 1,});
   
     $template .= <<"ENDTEMPLATE";      $template .= <<"ENDTEMPLATE";
  <script type="text/javascript">   <script type="text/javascript">
 // <!-- BEGIN LON-CAPA Internal  // <!-- BEGIN LON-CAPA Internal
Line 745  function helpMenu(target) { Line 757  function helpMenu(target) {
     return;      return;
 }  }
 function writeHelp(caller) {  function writeHelp(caller) {
     caller.document.writeln('$html<head><title>LON-CAPA Help Menu</title><meta http-equiv="pragma" content="no-cache"></head>')      caller.document.writeln('$start_page<frame name="bannerframe"  src="$banner_link" /><frame name="bodyframe" src="$details_link" /> $end_page')
     caller.document.writeln("<frameset rows='105,*' border='0'><frame name='bannerframe'  src='$banner_link'><frame name='bodyframe' src='$details_link'></frameset>")  
     caller.document.writeln("</html>")  
     caller.document.close()      caller.document.close()
     caller.focus()      caller.focus()
 }  }
Line 2756  other decorations will be returned. Line 2766  other decorations will be returned.
   
 sub bodytag {  sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle,      my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle,
  $notopbar,$bgcolor)=@_;   $notopbar,$bgcolor,$hidetitle)=@_;
     $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 2786  sub bodytag { Line 2796  sub bodytag {
 # Port for miniserver  # Port for miniserver
     my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};      my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
     if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }      if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
     my $extra_body_attr;  
     if ($forcereg) {      my $extra_body_attr = &make_attr_string($forcereg,$addentries);
  if (ref($addentries)) {  
     $addentries->{'onload'}   = &Apache::lonmenu::loadevents().  
  $addentries->{'onload'};  
     $addentries->{'onunload'} = &Apache::lonmenu::unloadevents().  
  $addentries->{'onunload'};  
  } else {  
     $extra_body_attr.=' onload="'.&Apache::lonmenu::loadevents().  
  '" onunload="'.&Apache::lonmenu::unloadevents().'"';  
  }  
     }  
     if (!ref($addentries)) {  
  $extra_body_attr .= $addentries;  
     } else {  
  foreach my $attr (keys(%$addentries)) {  
     $extra_body_attr .= " $attr=\"".$addentries->{$attr}.'" ';  
  }  
     }  
   
 # construct main body tag  # construct main body tag
     my $bodytag = <<END;      my $bodytag = <<END;
Line 2820  form, .inline { display: inline; } Line 2813  form, .inline { display: inline; }
 <body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link"  <body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link"
 style="margin-top: 0px;$addstyle" $extra_body_attr>  style="margin-top: 0px;$addstyle" $extra_body_attr>
 END  END
     &Apache::lontexconvert::jsMath_reset();  
     if ($env{'environment.texengine'} eq 'jsMath' ||      $bodytag .= &Apache::lontexconvert::init_math_support();
  $env{'form.texengine'}        eq 'jsMath' ) {  
  $bodytag.=&Apache::lontexconvert::jsMath_header();  
     }  
   
     my $upperleft='<img src="http://'.$ENV{'HTTP_HOST'}.':'.      my $upperleft='<img src="http://'.$ENV{'HTTP_HOST'}.':'.
                    $lonhttpdPort.$img.'" alt="'.$function.'" />';                     $lonhttpdPort.$img.'" alt="'.$function.'" />';
     if ($bodyonly) {      if ($bodyonly 
    || ($env{'request.state'} eq 'construct' 
       && $env{'environment.remote'} ne 'off' )) {
         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',   $bodytag.=&Apache::lonmenu::menubuttons($forcereg,$forcereg);
                                                       $forcereg).   if (!$hidetitle) {
                '<h1>LON-CAPA: '.$title.'</h1>';      $bodytag.='<h1>LON-CAPA: '.$title.'</h1>';
    }
    return $bodytag;
     } elsif ($env{'environment.remote'} eq 'off') {      } elsif ($env{'environment.remote'} eq 'off') {
 # No Remote  # No Remote
  my $roleinfo=(<<ENDROLE);   my $roleinfo=(<<ENDROLE);
Line 2884  ENDROLE Line 2878  ENDROLE
             }              }
     $forcereg=1;      $forcereg=1;
         }          }
         my $titletable = '<table bgcolor="'.$pgbg.'" width="100%" border="0" '.          my $titletable;
    if (!$hidetitle) {
       $titletable =
    '<table bgcolor="'.$pgbg.'" width="100%" border="0" '.
                          'cellspacing="3" cellpadding="3">'.                           'cellspacing="3" cellpadding="3">'.
                          '<tr><td bgcolor="'.$tabbg.'">'.                           '<tr><td bgcolor="'.$tabbg.'">'.
                          $titleinfo.'</td>'.$roleinfo.'</tr></table>';                           $titleinfo.'</td>'.$roleinfo.'</tr></table>';
         if ($env{'request.state'} eq 'construct') {   }
    if ($env{'request.state'} eq 'construct') {
             if ($notopbar) {              if ($notopbar) {
                 $bodytag .= $titletable;                  $bodytag .= $titletable;
             } else {              } else {
                 $bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg,$titletable);                  $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg,
     $titletable);
             }              }
  } else {   } else {
             if ($notopbar) {              if ($notopbar) {
                 $bodytag .= $titletable;                  $bodytag .= $titletable;
             } else {              } else {
                 $bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg).                  $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg).
                         $titletable;                          $titletable;
             }              }
         }          }
Line 2925  ENDROLE Line 2924  ENDROLE
     # Explicit link to get inline menu      # Explicit link to get inline menu
     my $menu='<br /><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;<a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a></font>';      my $menu='<br /><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;<a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a></font>';
     #      #
       if ($hidetitle) {
    return $bodytag;
       }
     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 2953  $titleinfo $dc_info $menu Line 2955  $titleinfo $dc_info $menu
 ENDBODY  ENDBODY
 }  }
   
   sub make_attr_string {
       my ($register,$attr_ref) = @_;
   
       if ($attr_ref && !ref($attr_ref)) {
    die("addentries Must be a hash ref ".
       join(':',caller(1))." ".
       join(':',caller(0))." ");
       }
   
       if ($register) {
    $attr_ref->{'onload'}   = &Apache::lonmenu::loadevents().
       $attr_ref->{'onload'};
    $attr_ref->{'onunload'} = &Apache::lonmenu::unloadevents().
       $attr_ref->{'onunload'};
       }
       my $attr_string;
       foreach my $attr (keys(%$attr_ref)) {
    $attr_string .= " $attr=\"".$attr_ref->{$attr}.'" ';
       }
       return $attr_string;
   }
   
   
 ###############################################  ###############################################
 ###############################################  ###############################################
   
Line 2999  Inputs: $title - optional title for the Line 3024  Inputs: $title - optional title for the
         $args - optional arguments          $args - optional arguments
             force_register - if is true call registerurl so the remote is               force_register - if is true call registerurl so the remote is 
                              informed                               informed
                                
             redirect - array ref of seconds before redirect occurs              redirect - array ref of seconds before redirect occurs
                                     url to redirect to                                      url to redirect to
                            (side effect of setting                              (side effect of setting 
Line 3105  Inputs: $title - optional title for the Line 3129  Inputs: $title - optional title for the
                   body_title     -> alternate text to use instead of $title                    body_title     -> alternate text to use instead of $title
                                     in the title box that appears, this text                                      in the title box that appears, this text
                                     is not auto translated like the $title is                                      is not auto translated like the $title is
                     frameset       -> if true will start with a <frameset>
                                       rather than <body>
   
 =back  =back
   
Line 3123  sub start_page { Line 3149  sub start_page {
     $env{'internal.start_page'}++;      $env{'internal.start_page'}++;
     my $result =       my $result = 
  &Apache::lonxml::xmlbegin().   &Apache::lonxml::xmlbegin().
  &headtag($title,$head_extra,\%head_args).&endheadtag().   &headtag($title,$head_extra,\%head_args).&endheadtag();
  &bodytag($title,       if ($args->{'frameset'}) {
  $args->{'function'},       $args->{'add_entries'},   my $attr_string = &make_attr_string($args->{'force_register'},
  $args->{'only_body'},      $args->{'domain'},      $args->{'add_entries'});
  $args->{'force_register'}, $args->{'body_title'},   $result .= "\n<frameset $attr_string>\n";
  $args->{'no_nav_bar'},     $args->{'bgcolor'});      } else {
    $result .=
       &bodytag($title, 
        $args->{'function'},       $args->{'add_entries'},
        $args->{'only_body'},      $args->{'domain'},
        $args->{'force_register'}, $args->{'body_title'},
        $args->{'no_nav_bar'},     $args->{'bgcolor'});
       }
     if ($args->{'js_ready'}) {      if ($args->{'js_ready'}) {
  $result = &js_ready($result);   $result = &js_ready($result);
     }      }
Line 3138  sub start_page { Line 3171  sub start_page {
     return $result;      return $result;
 }  }
   
   
 =pod  =pod
   
 =over 4  =over 4
Line 3151  Inputs:         $args - additional optio Line 3185  Inputs:         $args - additional optio
                                  a javascript writeln                                   a javascript writeln
                  html_encode  -> return a string ready for being used in                    html_encode  -> return a string ready for being used in 
                                  a html attribute                                   a html attribute
                    frameset     -> if true will start with a <frameset>
                                    rather than <body>
 =back  =back
   
 =cut  =cut
Line 3159  sub end_page { Line 3195  sub end_page {
     my ($args) = @_;      my ($args) = @_;
     #&Apache::lonnet::logthis("end_page ".join(':',caller(0)));      #&Apache::lonnet::logthis("end_page ".join(':',caller(0)));
     $env{'internal.end_page'}++;      $env{'internal.end_page'}++;
     my $result = &endbodytag()."\n</html>";      my $result;
       if ($args->{'discussion'}) {
    my ($target,$parser);
    if (ref($args->{'discussion'})) {
       ($target,$parser) =($args->{'discussion'}{'target'},
    $args->{'discussion'}{'parser'});
    }
    $result .= &Apache::lonxml::xmlend($target,$parser);
       }
   
       if ($args->{'frameset'}) {
    $result .= '</frameset>';
       } else {
    $result .= &endbodytag();
       }
       $result .= "\n</html>";
   
     if ($args->{'js_ready'}) {      if ($args->{'js_ready'}) {
  $result = &js_ready($result);   $result = &js_ready($result);
     }      }
   
     if ($args->{'html_encode'}) {      if ($args->{'html_encode'}) {
  $result = &html_encode($result);   $result = &html_encode($result);
     }      }
   
     return $result;      return $result;
 }  }
   
Line 3642  sub get_user_info { Line 3696  sub get_user_info {
     return;      return;
 }  }
   
 ###############################################  
   
 sub get_posted_cgi {  
     my $r=shift;  
   
     my $buffer;  
     if ($r->header_in('Content-length')) {  
  $r->read($buffer,$r->header_in('Content-length'),0);  
     }  
     unless ($buffer=~/^(\-+\w+)\s+Content\-Disposition\:\s*form\-data/si) {  
  my @pairs=split(/&/,$buffer);  
  my $pair;  
  foreach $pair (@pairs) {  
     my ($name,$value) = split(/=/,$pair);  
     $value =~ tr/+/ /;  
     $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  
     $name  =~ tr/+/ /;  
     $name  =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  
     &add_to_env("form.$name",$value);  
  }  
     } else {  
  my $contentsep=$1;  
  my @lines = split (/\n/,$buffer);  
  my $name='';  
  my $value='';  
  my $fname='';  
  my $fmime='';  
  my $i;  
  for ($i=0;$i<=$#lines;$i++) {  
     if ($lines[$i]=~/^$contentsep/) {  
  if ($name) {  
     chomp($value);  
     if ($fname) {  
  $env{"form.$name.filename"}=$fname;  
  $env{"form.$name.mimetype"}=$fmime;  
     } else {  
  $value=~s/\s+$//s;  
     }  
     &add_to_env("form.$name",$value);  
  }  
  if ($i<$#lines) {  
     $i++;  
     $lines[$i]=~  
  /Content\-Disposition\:\s*form\-data\;\s*name\=\"([^\"]+)\"/i;  
     $name=$1;  
     $value='';  
     if ($lines[$i]=~/filename\=\"([^\"]+)\"/i) {  
  $fname=$1;  
  if   
                             ($lines[$i+1]=~/Content\-Type\:\s*([\w\-\/]+)/i) {  
  $fmime=$1;  
  $i++;  
     } else {  
  $fmime='';  
     }  
     } else {  
  $fname='';  
  $fmime='';  
     }  
     $i++;  
  }  
     } else {  
  $value.=$lines[$i]."\n";  
     }  
  }  
     }  
 #  
 # Digested POSTed values  
 #  
 # Remember the way this was originally done (GET or POST)  
 #  
     $env{'request.method'}=$ENV{'REQUEST_METHOD'};  
 #  
 # There may also be stuff in the query string  
 # Tell subsequent handlers that this was GET, not POST, so they can access query string.  
 # Also, unset POSTed content length to cover all tracks.  
 #  
   
 # This does not work, because M_GET is not defined (if it's defined, it is just 0).   
 # Commenting out for now ... not sure if harm is done.  
 #    $r->method_number(M_GET);  
   
     $r->method('GET');  
     $r->headers_in->unset('Content-length');  
 }  
   
 =pod  =pod
   
 =item * get_unprocessed_cgi($query,$possible_names)  =item * get_unprocessed_cgi($query,$possible_names)

Removed from v.1.329  
changed lines
  Added in v.1.337


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