Diff for /loncom/interface/loncommon.pm between versions 1.62 and 1.83

version 1.62, 2002/08/28 14:11:27 version 1.83, 2003/02/24 23:32:32
Line 27 Line 27
 #  #
 # YEAR=2001  # YEAR=2001
 # 2/13-12/7 Guy Albertelli  # 2/13-12/7 Guy Albertelli
 # 12/11,12/12,12/17 Scott Harrison  
 # 12/21 Gerd Kortemeyer  # 12/21 Gerd Kortemeyer
 # 12/21 Scott Harrison  
 # 12/25,12/28 Gerd Kortemeyer  # 12/25,12/28 Gerd Kortemeyer
 # YEAR=2002  # YEAR=2002
 # 1/4 Gerd Kortemeyer  # 1/4 Gerd Kortemeyer
Line 83  use GDBM_File; Line 81  use GDBM_File;
 use POSIX qw(strftime mktime);  use POSIX qw(strftime mktime);
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::lonmsg();  use Apache::lonmsg();
   use Apache::lonmenu();
 my $readit;  my $readit;
   
 =pod   =pod 
Line 98  my %cprtag; Line 97  my %cprtag;
 my %fe; my %fd;  my %fe; my %fd;
 my %category_extensions;  my %category_extensions;
   
   # ---------------------------------------------- Designs
   
   my %designhash;
   
 # ---------------------------------------------- Thesaurus variables  # ---------------------------------------------- Thesaurus variables
   
 =pod  =pod
Line 166  BEGIN { Line 169  BEGIN {
     }      }
  }   }
     }      }
   
   # -------------------------------------------------------------- domain designs
   
       my $filename;
       my $designdir=$Apache::lonnet::perlvar{'lonTabDir'}.'/lonDomColors';
       opendir(DIR,$designdir);
       while ($filename=readdir(DIR)) {
    my ($domain)=($filename=~/^(\w+)\./);
       {
    my $fh=Apache::File->new($designdir.'/'.$filename);
    if ($fh) {
       while (<$fh>) {
    next if /^\#/;
    chomp;
    my ($key,$val)=(split(/\=/,$_));
    if ($val) { $designhash{$domain.'.'.$key}=$val; }
       }
    }
       }
   
       }
       closedir(DIR);
   
   
 # ------------------------------------------------------------- file categories  # ------------------------------------------------------------- file categories
     {      {
  my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.   my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.
Line 283  sub browser_and_searcher_javascript { Line 310  sub browser_and_searcher_javascript {
 END  END
 }  }
   
   sub studentbrowser_javascript {
      unless ($ENV{'request.course.id'}) { return ''; }  
      unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
           return '';
      }
      return (<<'ENDSTDBRW');
   <script type="text/javascript" language="Javascript" >
       var stdeditbrowser;
       function openstdbrowser(formname,uname,udom) {
           var url = '/adm/pickstudent?';
           var filter;
           eval('filter=document.'+formname+'.'+uname+'.value;');
           if (filter != null) {
              if (filter != '') {
                  url += 'filter='+filter+'&';
      }
           }
           url += 'form=' + formname + '&unameelement='+uname+
                                       '&udomelement='+udom;
           var title = 'Student Browser';
           var options = 'scrollbars=1,resizable=1,menubar=0';
           options += ',width=700,height=600';
           stdeditbrowser = open(url,title,options,'1');
           stdeditbrowser.focus();
       }
   </script>
   ENDSTDBRW
   }
   
   sub selectstudent_link {
       my ($form,$unameele,$udomele)=@_;
      unless ($ENV{'request.course.id'}) { return ''; }  
      unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
           return '';
      }
       return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.
           '","'.$udomele.'");'."'>Select</a>";
   }
   
 ###############################################################  ###############################################################
   
Line 455  sub help_open_topic { Line 519  sub help_open_topic {
     my ($topic, $text, $stayOnPage, $width, $height) = @_;      my ($topic, $text, $stayOnPage, $width, $height) = @_;
     $text = "" if (not defined $text);      $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);      $stayOnPage = 0 if (not defined $stayOnPage);
       if ($ENV{'browser.interface'} eq 'textual') {
    $stayOnPage=1;
       }
     $width = 350 if (not defined $width);      $width = 350 if (not defined $width);
     $height = 400 if (not defined $height);      $height = 400 if (not defined $height);
     my $filename = $topic;      my $filename = $topic;
Line 465  sub help_open_topic { Line 532  sub help_open_topic {
   
     if (!$stayOnPage)      if (!$stayOnPage)
     {      {
  $link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height'))";   $link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))";
     }      }
     else      else
     {      {
Line 475  sub help_open_topic { Line 542  sub help_open_topic {
     # Add the text      # Add the text
     if ($text ne "")      if ($text ne "")
     {      {
  $template .= "<a href=\"$link\">$text</a> ";   $template .= 
     "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".
     "<td bgcolor='#5555FF'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
   
     # Add the graphic      # Add the graphic
     $template .= <<"ENDTEMPLATE";      $template .= <<"ENDTEMPLATE";
 <a href="$link"><image src="/adm/help/gif/smallHelp.gif" border="0" alt="(Help: $topic)" /></a>   <a href="$link"><image src="/adm/help/gif/smallHelp.gif" border="0" alt="(Help: $topic)" /></a>
 ENDTEMPLATE  ENDTEMPLATE
       if ($text ne '') { $template.='</td></tr></table>' };
     return $template;      return $template;
   
 }  }
Line 646  See loncreateuser.pm for invocation and Line 715  See loncreateuser.pm for invocation and
 sub authform_header{    sub authform_header{  
     my %in = (      my %in = (
         formname => 'cu',          formname => 'cu',
         kerb_def_dom => 'MSU.EDU',          kerb_def_dom => '',
         @_,          @_,
     );      );
     $in{'formname'} = 'document.' . $in{'formname'};      $in{'formname'} = 'document.' . $in{'formname'};
     my $result='';      my $result='';
   
   #---------------------------------------------- Code for upper case translation
       my $Javascript_toUpperCase;
       unless ($in{kerb_def_dom}) {
           $Javascript_toUpperCase =<<"END";
           switch (choice) {
              case 'krb': currentform.elements[choicearg].value =
                  currentform.elements[choicearg].value.toUpperCase();
                  break;
              default:
           }
   END
       } else {
           $Javascript_toUpperCase = "";
       }
   
     $result.=<<"END";      $result.=<<"END";
 var current = new Object();  var current = new Object();
 current.radiovalue = 'nochange';  current.radiovalue = 'nochange';
Line 684  function changed_radio(choice,currentfor Line 769  function changed_radio(choice,currentfor
 function changed_text(choice,currentform) {  function changed_text(choice,currentform) {
     var choicearg = choice + 'arg';      var choicearg = choice + 'arg';
     if (currentform.elements[choicearg].value !='') {      if (currentform.elements[choicearg].value !='') {
         switch (choice) {          $Javascript_toUpperCase
             case 'krb': currentform.elements[choicearg].value =  
                 currentform.elements[choicearg].value.toUpperCase();  
                 break;  
             default:  
         }  
         // clear old field          // clear old field
         if ((current.argfield != choicearg) && (current.argfield != null)) {          if ((current.argfield != choicearg) && (current.argfield != null)) {
             currentform.elements[current.argfield].value = '';              currentform.elements[current.argfield].value = '';
Line 745  sub authform_kerberos{ Line 825  sub authform_kerberos{
     my %in = (      my %in = (
               formname => 'document.cu',                formname => 'document.cu',
               kerb_def_dom => 'MSU.EDU',                kerb_def_dom => 'MSU.EDU',
                 kerb_def_auth => 'krb4',
               @_,                @_,
               );                );
     my $result='';      my $result='';
       my $check4;
       my $check5;
       if ($in{'kerb_def_auth'} eq 'krb5') {
          $check5 = " checked=\"on\"";
       } else {
          $check4 = " checked=\"on\"";
       }
     $result.=<<"END";      $result.=<<"END";
 <input type="radio" name="login" value="krb"   <input type="radio" name="login" value="krb" 
        onclick="javascript:changed_radio('krb',$in{'formname'});"         onclick="javascript:changed_radio('krb',$in{'formname'});"
        onchange="javascript:changed_radio('krb',$in{'formname'});" />         onchange="javascript:changed_radio('krb',$in{'formname'});" />
 Kerberos authenticated with domain  Kerberos authenticated with domain
 <input type="text" size="10" name="krbarg" value=""  <input type="text" size="10" name="krbarg" value="$in{'kerb_def_dom'}"
        onchange="javascript:changed_text('krb',$in{'formname'});" />         onchange="javascript:changed_text('krb',$in{'formname'});" />
 <input type="radio" name="krbver" value="4" checked="on" />Version 4  <input type="radio" name="krbver" value="4" $check4 />Version 4
 <input type="radio" name="krbver" value="5" />Version 5  <input type="radio" name="krbver" value="5" $check5 />Version 5
 END  END
     return $result;      return $result;
 }  }
Line 774  sub authform_internal{ Line 862  sub authform_internal{
        onclick="javascript:changed_radio('int',$args{'formname'});" />         onclick="javascript:changed_radio('int',$args{'formname'});" />
 Internally authenticated (with initial password   Internally authenticated (with initial password 
 <input type="text" size="10" name="intarg" value=""  <input type="text" size="10" name="intarg" value=""
        onchange="javascript:changed_text('int',$args{'formname'});" />         onchange="javascript:changed_text('int',$args{'formname'});" />)
 END  END
     return $result;      return $result;
 }  }
Line 810  sub authform_filesystem{ Line 898  sub authform_filesystem{
        onclick="javascript:changed_radio('fsys',$in{'formname'});" />         onclick="javascript:changed_radio('fsys',$in{'formname'});" />
 Filesystem authenticated (with initial password   Filesystem authenticated (with initial password 
 <input type="text" size="10" name="fsysarg" value=""  <input type="text" size="10" name="fsysarg" value=""
        onchange="javascript:changed_text('fsys',$in{'formname'});">         onchange="javascript:changed_text('fsys',$in{'formname'});">)
 END  END
     return $result;      return $result;
 }  }
Line 820  END Line 908  END
 ###############################################################  ###############################################################
   
 ###############################################################  ###############################################################
   ##    Get Authentication Defaults for Domain                 ##
   ###############################################################
   ##
   ## Returns default authentication type and an associated argument
   ## as listed in file domain.tab
   ##
   #-------------------------------------------
   
   =pod
   
   =item get_auth_defaults
   
   get_auth_defaults($target_domain) returns the default authentication
   type and an associated argument (initial password or a kerberos domain).
   These values are stored in lonTabs/domain.tab
   
   ($def_auth, $def_arg) = &get_auth_defaults($target_domain);
   
   If target_domain is not found in domain.tab, returns nothing ('').
   
   =over 4
   
   =item get_auth_defaults
   
   =back
   
   =cut
   
   #-------------------------------------------
   sub get_auth_defaults {
       my $domain=shift;
       return ($Apache::lonnet::domain_auth_def{$domain},$Apache::lonnet::domain_auth_arg_def{$domain});
   }
   ###############################################################
   ##   End Get Authentication Defaults for Domain              ##
   ###############################################################
   
   ###############################################################
   ##    Get Kerberos Defaults for Domain                 ##
   ###############################################################
   ##
   ## Returns default kerberos version and an associated argument
   ## as listed in file domain.tab. If not listed, provides
   ## appropriate default domain and kerberos version.
   ##
   #-------------------------------------------
   
   =pod
   
   =item get_kerberos_defaults
   
   get_kerberos_defaults($target_domain) returns the default kerberos
   version and domain. If not found in domain.tabs, it defaults to
   version 4 and the domain of the server.
   
   ($def_version, $def_krb_domain) = &get_kerberos_defaults($target_domain);
   
   =over 4
   
   =item get_kerberos_defaults
   
   =back
   
   =cut
   
   #-------------------------------------------
   sub get_kerberos_defaults {
       my $domain=shift;
       my ($krbdef,$krbdefdom) =
           &Apache::loncommon::get_auth_defaults($domain);
       unless ($krbdef =~/^krb/ && $krbdefdom) {
           $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
           my $krbdefdom=$1;
           $krbdefdom=~tr/a-z/A-Z/;
           $krbdef = "krb4";
       }
       return ($krbdef,$krbdefdom);
   }
   ###############################################################
   ##   End Get Kerberos Defaults for Domain              ##
   ###############################################################
   
   ###############################################################
 ##                Thesaurus Functions                        ##  ##                Thesaurus Functions                        ##
 ###############################################################  ###############################################################
   
Line 933  sub get_related_words { Line 1104  sub get_related_words {
 ###############################################################  ###############################################################
   
 # -------------------------------------------------------------- Plaintext name  # -------------------------------------------------------------- Plaintext name
   =pod
   
   =item plainname($uname,$udom)
   
   Gets a users name and returns it as a string in
   "first middle last generation"
   form
   
   =cut
   
   ###############################################################
 sub plainname {  sub plainname {
     my ($uname,$udom)=@_;      my ($uname,$udom)=@_;
     my %names=&Apache::lonnet::get('environment',      my %names=&Apache::lonnet::get('environment',
Line 946  sub plainname { Line 1127  sub plainname {
     return $name;      return $name;
 }  }
   
   # -------------------------------------------------------------------- Nickname
   =pod
   
   =item nickname($uname,$udom)
   
   Gets a users name and returns it as a string as
   
   "&quot;nickname&quot;"
   
   if the user has a nickname or
   
   "first middle last generation"
   
   if the user does not
   
   =cut
   
   sub nickname {
       my ($uname,$udom)=@_;
       my %names=&Apache::lonnet::get('environment',
     ['nickname','firstname','middlename','lastname','generation'],$udom,$uname);
       my $name=$names{'nickname'};
       if ($name) {
          $name='&quot;'.$name.'&quot;'; 
       } else {
          $name=$names{'firstname'}.' '.$names{'middlename'}.' '.
        $names{'lastname'}.' '.$names{'generation'};
          $name=~s/\s+$//;
          $name=~s/\s+/ /g;
       }
       return $name;
   }
   
   
 # ------------------------------------------------------------------ Screenname  # ------------------------------------------------------------------ Screenname
   
   =pod
   
   =item screenname($uname,$udom)
   
   Gets a users screenname and returns it as a string
   
   =cut
   
 sub screenname {  sub screenname {
     my ($uname,$udom)=@_;      my ($uname,$udom)=@_;
     my %names=      my %names=
Line 962  sub messagewrapper { Line 1185  sub messagewrapper {
     return       return 
 "<a href='/adm/email?compose=individual&recname=$un&recdom=$do'>$link</a>";  "<a href='/adm/email?compose=individual&recname=$un&recdom=$do'>$link</a>";
 }  }
   # --------------------------------------------------------------- Notes Wrapper
   
   sub noteswrapper {
       my ($link,$un,$do)=@_;
       return 
   "<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";
   }
 # ------------------------------------------------------------- Aboutme Wrapper  # ------------------------------------------------------------- Aboutme Wrapper
   
 sub aboutmewrapper {  sub aboutmewrapper {
     my ($link,$un,$do)=@_;      my ($link,$username,$domain)=@_;
     return "<a href='/adm/$do/$un/aboutme'>$link</a>";      return "<a href='/adm/$domain/$username/aboutme'>$link</a>";
 }  }
   
 # ------------------------------------------------------------ Syllabus Wrapper  # ------------------------------------------------------------ Syllabus Wrapper
   
   
 sub syllabuswrapper {  sub syllabuswrapper {
     my ($link,$un,$do)=@_;      my ($link,$un,$do,$tf)=@_;
       if ($tf) { $link='<font color="'.$tf.'">'.$link.'</font>'; }
     return "<a href='/public/$do/$un/syllabus'>$link</a>";      return "<a href='/public/$do/$un/syllabus'>$link</a>";
 }  }
   
Line 1106  sub get_previous_attempt { Line 1337  sub get_previous_attempt {
 }  }
   
 sub get_student_view {  sub get_student_view {
   my ($symb,$username,$domain,$courseid) = @_;    my ($symb,$username,$domain,$courseid,$target) = @_;
   my ($map,$id,$feedurl) = split(/___/,$symb);    my ($map,$id,$feedurl) = split(/___/,$symb);
   my (%old,%moreenv);    my (%old,%moreenv);
   my @elements=('symb','courseid','domain','username');    my @elements=('symb','courseid','domain','username');
Line 1114  sub get_student_view { Line 1345  sub get_student_view {
     $old{$element}=$ENV{'form.grade_'.$element};      $old{$element}=$ENV{'form.grade_'.$element};
     $moreenv{'form.grade_'.$element}=eval '$'.$element #'      $moreenv{'form.grade_'.$element}=eval '$'.$element #'
   }    }
     if ($target eq 'tex') {$moreenv{'form.grade_target'} = 'tex';}
   &Apache::lonnet::appenv(%moreenv);    &Apache::lonnet::appenv(%moreenv);
   my $userview=&Apache::lonnet::ssi('/res/'.$feedurl);    my $userview=&Apache::lonnet::ssi('/res/'.$feedurl);
   &Apache::lonnet::delenv('form.grade_');    &Apache::lonnet::delenv('form.grade_');
Line 1173  sub maketime { Line 1405  sub maketime {
 }  }
   
   
   #########################################
   #
   # Retro-fixing of un-backward-compatible time format
   
   sub unsqltime {
       my $timestamp=shift;
       if ($timestamp=~/^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/) {
          $timestamp=&maketime(
      'year'=>$1,'month'=>$2,'day'=>$3,
              'hours'=>$4,'minutes'=>$5,'seconds'=>$6);
       }
       return $timestamp;
   }
   
   #########################################
   
 sub findallcourses {  sub findallcourses {
     my %courses=();      my %courses=();
     my $now=time;      my $now=time;
Line 1197  sub findallcourses { Line 1445  sub findallcourses {
   
 =pod  =pod
   
 =item &domainlogo()  =item &determinedomain()
   
 Inputs: $domain (usually will be undef)  Inputs: $domain (usually will be undef)
   
 Returns: A link to a domain logo, if the domain logo exists.  Returns: Determines which domain should be used for designs
 If the domain logo does not exist, a description of the domain.  
   
 =cut  =cut
   
 ###############################################  ###############################################
 ###############################################  sub determinedomain {
 sub domainlogo {      my $domain=shift;
     my ($domain) = @_;         if (! $domain) {
     if (! $domain) {  
         # Determine domain if we have not been given one          # Determine domain if we have not been given one
         $domain = $Apache::lonnet::perlvar{'lonDefDomain'};          $domain = $Apache::lonnet::perlvar{'lonDefDomain'};
         if ($ENV{'user.domain'}) { $domain=$ENV{'user.domain'}; }          if ($ENV{'user.domain'}) { $domain=$ENV{'user.domain'}; }
Line 1218  sub domainlogo { Line 1464  sub domainlogo {
             $domain=$ENV{'request.role.domain'};               $domain=$ENV{'request.role.domain'}; 
         }          }
     }      }
     # See if there is a logo      return $domain;
   }
   ###############################################
   =pod
   
   =item &domainlogo()
   
   Inputs: $domain (usually will be undef)
   
   Returns: A link to a domain logo, if the domain logo exists.
   If the domain logo does not exist, a description of the domain.
   
   =cut
   ###############################################
   sub domainlogo {
       my $domain = &determinedomain(shift);    
        # See if there is a logo
     if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') {      if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') {
         return '<img src="/adm/lonDomLogos/'.$domain.'.gif" />';   my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
    if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
           return '<img src="http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort.
       '/adm/lonDomLogos/'.$domain.'.gif" />';
     } elsif(exists($Apache::lonnet::domaindescription{$domain})) {      } elsif(exists($Apache::lonnet::domaindescription{$domain})) {
         return $Apache::lonnet::domaindescription{$domain};          return $Apache::lonnet::domaindescription{$domain};
     } else {      } else {
         return '';          return '';
     }      }
 }  }
   ##############################################
   
   =pod
   
   =item &designparm()
   
   Inputs: $which parameter; $domain (usually will be undef)
   
   Returns: value of designparamter $which
   
   =cut
   ##############################################
   sub designparm {
       my ($which,$domain)=@_;
       $domain=&determinedomain($domain);
       if ($designhash{$domain.'.'.$which}) {
    return $designhash{$domain.'.'.$which};
       } else {
           return $designhash{'default.'.$which};
       }
   }
   
 ###############################################  ###############################################
 ###############################################  ###############################################
Line 1253  other decorations will be returned. Line 1539  other decorations will be returned.
 =cut  =cut
   
 ###############################################  ###############################################
   
   
 ###############################################  ###############################################
 sub bodytag {  sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain)=@_;      my ($title,$function,$addentries,$bodyonly,$domain)=@_;
Line 1269  sub bodytag { Line 1557  sub bodytag {
             $function='author';              $function='author';
         }          }
     }      }
     my $img='';      my $img=&designparm($function.'.img',$domain);
     my $pgbg='';      my $pgbg=&designparm($function.'.pgbg',$domain);
     my $tabbg='';      my $tabbg=&designparm($function.'.tabbg',$domain);
     my $font='';      my $font=&designparm($function.'.font',$domain);
     my $link='';      my $link=&designparm($function.'.link',$domain);
     my $alink='#CC0000';      my $alink=&designparm($function.'.alink',$domain);
     my $vlink='';      my $vlink=&designparm($function.'.vlink',$domain);
     if ($function eq 'admin') {      my $sidebg=&designparm($function.'.sidebg',$domain);
         $img='admin';  
         $pgbg='#FFFFCC';   # role and realm
         $tabbg='#CCCC99';  
         $font='#772200';  
         $link='#663300';  
         $vlink='#666600';  
     } elsif ($function eq 'coordinator') {  
         $img='coordinator';  
         $pgbg='#CCFFFF';  
         $tabbg='#CCCCFF';  
         $font='#000044';  
         $link='#003333';  
         $vlink='#006633';  
    } elsif ($function eq 'author') {  
         $img='author';  
         $pgbg='#CCFFFF';  
         $tabbg='#CCFFCC';  
         $font='#004400';  
         $link='#003333';  
         $vlink='#006666';  
     } else {  
         $img='student';  
         $pgbg='#FFFFAA';  
         $tabbg='#FF9900';  
         $font='#991100';  
         $link='#993300';  
         $vlink='#996600';  
     }  
 # role and realm  
     my ($role,$realm)      my ($role,$realm)
        =&Apache::lonnet::plaintext((split(/\./,$ENV{'request.role'}))[0]);         =&Apache::lonnet::plaintext((split(/\./,$ENV{'request.role'}))[0]);
 # realm  # realm
Line 1317  sub bodytag { Line 1578  sub bodytag {
 # Set messages  # Set messages
     my $messages=&domainlogo($domain);      my $messages=&domainlogo($domain);
 # Output  # Output
       my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
       if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
     my $bodytag = <<END;      my $bodytag = <<END;
 <body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link"  <body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link"
 $addentries>  $addentries>
 END  END
     if ($bodyonly) {      if ($bodyonly) {
         return $bodytag;          return $bodytag;
       } elsif ($ENV{'browser.interface'} eq 'textual') {
           return $bodytag.&Apache::lonmenu::menubuttons(undef,'web').
                  '<h1>LON-CAPA: '.$title.'</h1>';
     } else {      } else {
         return(<<ENDBODY);          return(<<ENDBODY);
 $bodytag  $bodytag
 <table width="100%" cellspacing="0" border="0" cellpadding="0">  <table width="100%" cellspacing="0" border="0" cellpadding="0">
 <tr><td bgcolor="$font">  <tr><td bgcolor="$font">
 <img src="/adm/lonInterFace/$img.jpg" /></td>  <img src="http://$ENV{'HTTP_HOST'}:$lonhttpdPort$img" /></td>
 <td bgcolor="$font"><font color='$pgbg'>$messages</font></td>  <td bgcolor="$font"><font color='$sidebg'>$messages</font></td>
 </tr>  </tr>
 <tr>  <tr>
 <td rowspan="3" bgcolor="$tabbg">  <td rowspan="3" bgcolor="$tabbg">
Line 1742  will result in $ENV{'form.uname'} and $E Line 2008  will result in $ENV{'form.uname'} and $E
   
 returns cache-controlling header code  returns cache-controlling header code
   
 =item nocache()   =item no_cache($r) 
   
 specifies header code to not have cache  specifies header code to not have cache
   

Removed from v.1.62  
changed lines
  Added in v.1.83


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