Diff for /loncom/interface/loncommon.pm between versions 1.233 and 1.252

version 1.233, 2004/11/21 04:24:49 version 1.252, 2005/02/25 05:54:01
Line 375  sub selectstudent_link { Line 375  sub selectstudent_link {
 }  }
   
 sub coursebrowser_javascript {  sub coursebrowser_javascript {
     my ($domainfilter,$roleelement)=@_;      my ($domainfilter)=@_;
    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,extra_element) {
         var url = '/adm/pickcourse?';          var url = '/adm/pickcourse?';
         var filter;          var filter;
         if (filter != null) {          if (filter != null) {
Line 397  sub coursebrowser_javascript { Line 396  sub coursebrowser_javascript {
         url += 'form=' + formname + '&cnumelement='+uname+          url += 'form=' + formname + '&cnumelement='+uname+
                             '&cdomelement='+udom+                              '&cdomelement='+udom+
                                     '&cnameelement='+desc;                                      '&cnameelement='+desc;
         if (extra_element != '') {          if (extra_element !=null && extra_element != '' && formname == 'rolechoice') {
             url += '&roleelement=$roleelement';              url += '&roleelement='+extra_element;
               if (domainfilter == null || domainfilter == '') {
                   url += '&domainfilter='+extra_element;
               }
         }          }
         var title = 'Course_Browser';          var title = 'Course_Browser';
         var options = 'scrollbars=1,resizable=1,menubar=0';          var options = 'scrollbars=1,resizable=1,menubar=0';
Line 411  ENDSTDBRW Line 413  ENDSTDBRW
 }  }
   
 sub selectcourse_link {  sub selectcourse_link {
    my ($form,$unameele,$udomele,$desc)=@_;     my ($form,$unameele,$udomele,$desc,$extra_element)=@_;
     return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.      return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.
         '","'.$udomele.'","'.$desc.'");'."'>".&mt('Select Course')."</a>";          '","'.$udomele.'","'.$desc.'","'.$extra_element.'");'."'>".&mt('Select Course')."</a>";
 }  }
   
 =pod  =pod
Line 685  sub help_open_menu { Line 687  sub help_open_menu {
   "<table bgcolor='#773311' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#773311' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#886622'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#886622'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
       my $html=&Apache::lonxml::xmlbegin();
     my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif");      my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif");
     $template .= <<"ENDTEMPLATE";      $template .= <<"ENDTEMPLATE";
  <script type="text/javascript">   <script type="text/javascript">
 //<!-- BEGIN LON-CAPA Internal  //<!-- BEGIN LON-CAPA Internal
 function helpMenu(caller) {  function helpMenu(target) {
     if (caller == 'open') {      var caller = this;
         newWindow =  window.open("","helpmenu","HEIGHT=$height,WIDTH=$width,resize=yes,scrollbars=yes" )      if (target == 'open') {
         caller = newWindow.document          var newWindow = null;
     } else {          try {
         caller = this.document              newWindow =  window.open("/adm/rat/empty.html","helpmenu","HEIGHT=$height,WIDTH=$width,resizable=yes,scrollbars=yes" )
     }          }
     caller.write("<html><head><title>LON-CAPA Help Menu</title><meta http-equiv='pragma' content='no-cache'></head>")          catch(error) {
     caller.write("<frameset rows='105,*' border='0'><frame name='bannerframe'  src='$banner_link'><frame name='bodyframe' src='$details_link'></frameset>")              writeHelp(caller);
     caller.write("</html>")              return;
     caller.close()          }
     if (caller == newWindow.document) {          if (newWindow) {
         caller.focus()              caller = newWindow;
           }
     }      }
       writeHelp(caller);
       return;
   }
   function writeHelp(caller) {
       caller.document.write('$html<head><title>LON-CAPA Help Menu</title><meta http-equiv="pragma" content="no-cache"></head>')
       caller.document.write("<frameset rows='105,*' border='0'><frame name='bannerframe'  src='$banner_link'><frame name='bodyframe' src='$details_link'></frameset>")
       caller.document.write("</html>")
       caller.document.close()
       caller.focus()
 }  }
 // END LON-CAPA Internal -->  // END LON-CAPA Internal -->
  </script>   </script>
Line 882  sub define_excel_formats { Line 895  sub define_excel_formats {
     $format->{'h1'}   = $workbook->add_format(bold=>1, size=>18);      $format->{'h1'}   = $workbook->add_format(bold=>1, size=>18);
     $format->{'h2'}   = $workbook->add_format(bold=>1, size=>16);      $format->{'h2'}   = $workbook->add_format(bold=>1, size=>16);
     $format->{'h3'}   = $workbook->add_format(bold=>1, size=>14);      $format->{'h3'}   = $workbook->add_format(bold=>1, size=>14);
       $format->{'i'}    = $workbook->add_format(italic=>1);
     $format->{'date'} = $workbook->add_format(num_format=>      $format->{'date'} = $workbook->add_format(num_format=>
                                             'mm/dd/yyyy hh:mm:ss');                                              'mm/dd/yyyy hh:mm:ss');
     return $format;      return $format;
Line 1129  sub select_dom_form { Line 1143  sub select_dom_form {
     my $selectdomain = "<select name=\"$name\" size=\"1\">\n";      my $selectdomain = "<select name=\"$name\" size=\"1\">\n";
     foreach (@domains) {      foreach (@domains) {
         $selectdomain.="<option value=\"$_\" ".          $selectdomain.="<option value=\"$_\" ".
             ($_ eq $defdom ? 'selected' : '').              ($_ eq $defdom ? 'selected="selected"' : '').
                 ">$_</option>\n";                  ">$_</option>\n";
     }      }
     $selectdomain.="</select>";      $selectdomain.="</select>";
Line 1228  Outputs: Line 1242  Outputs:
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub decode_user_agent {  sub decode_user_agent {
       my ($r)=@_;
     my @browsertype=split(/\&/,$Apache::lonnet::perlvar{"lonBrowsDet"});      my @browsertype=split(/\&/,$Apache::lonnet::perlvar{"lonBrowsDet"});
     my %mathcap=split(/\&/,$$Apache::lonnet::perlvar{"lonMathML"});      my %mathcap=split(/\&/,$$Apache::lonnet::perlvar{"lonMathML"});
     my $httpbrowser=$ENV{"HTTP_USER_AGENT"};      my $httpbrowser=$ENV{"HTTP_USER_AGENT"};
       if (!$httpbrowser && $r) { $httpbrowser=$r->header_in('User-Agent'); }
     my $clientbrowser='unknown';      my $clientbrowser='unknown';
     my $clientversion='0';      my $clientversion='0';
     my $clientmathml='';      my $clientmathml='';
Line 2283  sub get_student_view { Line 2299  sub get_student_view {
   if (defined($moreenv)) {    if (defined($moreenv)) {
       %form=(%form,%{$moreenv});        %form=(%form,%{$moreenv});
   }    }
   if ($target eq 'tex') {$form{'grade_target'} = 'tex';}    if (defined($target)) { $form{'grade_target'} = $target; }
   $feedurl=&Apache::lonnet::clutter($feedurl);    $feedurl=&Apache::lonnet::clutter($feedurl);
   my $userview=&Apache::lonnet::ssi_body($feedurl,%form);    my $userview=&Apache::lonnet::ssi_body($feedurl,%form);
   $userview=~s/\<body[^\>]*\>//gi;    $userview=~s/\<body[^\>]*\>//gi;
Line 2323  sub get_student_answers { Line 2339  sub get_student_answers {
   
 =item * &submlink()  =item * &submlink()
   
 Inputs: $text $uname $udom $symb  Inputs: $text $uname $udom $symb $target
   
 Returns: A link to grades.pm such as to see the SUBM view of a student  Returns: A link to grades.pm such as to see the SUBM view of a student
   
Line 2331  Returns: A link to grades.pm such as to Line 2347  Returns: A link to grades.pm such as to
   
 ###############################################  ###############################################
 sub submlink {  sub submlink {
     my ($text,$uname,$udom,$symb)=@_;      my ($text,$uname,$udom,$symb,$target)=@_;
       if (!($uname && $udom)) {
    (my $cursymb, my $courseid,$udom,$uname)=
       &Apache::lonxml::whichuser($symb);
    if (!$symb) { $symb=$cursymb; }
       }
       if (!$symb) { $symb=&symbread(); }
       $symb=&Apache::lonnet::escape($symb);
       if ($target) { $target="target=\"$target\""; }
       return '<a href="/adm/grades?&command=submission&'.
    'symb='.$symb.'&student='.$uname.
    '&userdom='.$udom.'" '.$target.'>'.$text.'</a>';
   }
   ##############################################
   
   =pod
   
   =item * &pgrdlink()
   
   Inputs: $text $uname $udom $symb $target
   
   Returns: A link to grades.pm such as to see the PGRD view of a student
   
   =cut
   
   ###############################################
   sub pgrdlink {
       my $link=&submlink(@_);
       $link=~s/(&command=submission)/$1&showgrading=yes/;
       return $link;
   }
   ##############################################
   
   =pod
   
   =item * &pprmlink()
   
   Inputs: $text $uname $udom $symb $target
   
   Returns: A link to parmset.pm such as to see the PPRM view of a
   student andn resource
   
   =cut
   
   ###############################################
   sub pprmlink {
       my ($text,$uname,$udom,$symb,$target)=@_;
     if (!($uname && $udom)) {      if (!($uname && $udom)) {
  (my $cursymb, my $courseid,$udom,$uname)=   (my $cursymb, my $courseid,$udom,$uname)=
     &Apache::lonxml::whichuser($symb);      &Apache::lonxml::whichuser($symb);
  if (!$symb) { $symb=$cursymb; }   if (!$symb) { $symb=$cursymb; }
     }      }
     if (!$symb) { $symb=&symbread(); }      if (!$symb) { $symb=&symbread(); }
     return '<a href="/adm/grades?symb='.$symb.'&student='.$uname.      $symb=&Apache::lonnet::escape($symb);
  '&userdom='.$udom.'&command=submission">'.$text.'</a>';      if ($target) { $target="target=\"$target\""; }
       return '<a href="/adm/parmset?&command=set&'.
    'symb='.$symb.'&uname='.$uname.
    '&udom='.$udom.'" '.$target.'>'.$text.'</a>';
 }  }
 ##############################################  ##############################################
   
Line 2567  a:focus { color: red; background: yellow Line 2632  a:focus { color: red; background: yellow
 <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" $addentries>  style="margin-top: 0px;$addstyle" $addentries>
 END  END
       if ($ENV{'environment.texengine'} eq 'jsMath') {
    $bodytag.='<script type="text/javascript">
                        function NoFontMessage () {}
                      </script>'."\n".
       '<script src="/adm/jsMath/jsMath.js"></script>'."\n";
       }
   
     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) {
Line 2597  ENDROLE Line 2669  ENDROLE
  $font.'"><b>'.$title.'</b></font>';   $font.'"><b>'.$title.'</b></font>';
         if ($customtitle) {          if ($customtitle) {
             $titleinfo = $customtitle;              $titleinfo = $customtitle;
         }           }
   
  if ($ENV{'request.state'} eq 'construct') {   if ($ENV{'request.state'} eq 'construct') {
     my ($uname,$thisdisfn)=      my ($uname,$thisdisfn)=
  ($ENV{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);   ($ENV{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);
     my $formaction='/priv/'.$uname.'/'.$thisdisfn;      my $formaction='/priv/'.$uname.'/'.$thisdisfn;
     $formaction=~s/\/+/\//g;      $formaction=~s/\/+/\//g;
     $titleinfo = '<form name="dirs" method="post" action="'.$formaction              unless ($customtitle) {  #this is for resources; directories have customtitle, and crumbs and select recent are created in lonpubdir.pm  
  .'" target="_top">'                  my $parentpath = '';
  .&Apache::lonhtmlcommon::crumbs($uname.'/'.$thisdisfn,'_top','/priv','',-1,1)."<br />"                  my $lastitem = '';
  .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')                  if ($thisdisfn =~ m-(.+/)([^/]*)$-) {
  .'</form>'                      $parentpath = $1;
  .&Apache::lonmenu::constspaceform();                      $lastitem = $2;
                   } else {
     &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction);                      $lastitem = $thisdisfn;
     if ($thisdisfn!~m|/$|) {  $forcereg=1; }                  }
  }          $titleinfo = &Apache::loncommon::help_open_menu('','','','',3,'Authoring').
                         '<font face="Arial, Helvetica, sans-serif"><b>Construction Space</b>:</font>&nbsp;'. 
                         '<form name="dirs" method="post" action="'.$formaction
       .'" target="_top"><tt><b>'
       .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."<font size=\"+1\">$lastitem</font></b></tt><br />"
       .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
       .'</form>'
       .&Apache::lonmenu::constspaceform();
   
         return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web',              }
                                                       $forcereg).      $forcereg=1;
       '<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td rowspan="3" bgcolor="'.$tabbg.'">'.$titleinfo.'</td>'.$roleinfo.'</tr></table>';          }
           my $titletable = '<table bgcolor="'.$pgbg.'" width="100%" border="0" '.
                            'cellspacing="3" cellpadding="3">'.
                            '<tr><td rowspan="3" bgcolor="'.$tabbg.'">'.
                            $titleinfo.'</td>'.$roleinfo.'</tr></table>';
           if ($ENV{'request.state'} eq 'construct') {
               $bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg,$titletable);
    } else {
               $bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg).
                           $titletable;
           }
           return $bodytag;
     }      }
   
 #  #
Line 2626  ENDROLE Line 2717  ENDROLE
     if ($customtitle) {      if ($customtitle) {
         $titleinfo = $customtitle;          $titleinfo = $customtitle;
     }      }
       #
       # Extra info if you are the DC
       my $dc_info = '';
       if ($ENV{'user.adv'} && exists($ENV{'user.role.dc./'.
                           $ENV{'course.'.$ENV{'request.course.id'}.
                                    '.domain'}.'/'})) {
           my $cid = $ENV{'request.course.id'};
           $dc_info.= $cid.' '.$ENV{'course.'.$cid.'.internal.coursecode'};
           $dc_info = '('.$dc_info.')';
       }
       #
     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 2635  $upperleft</td> Line 2737  $upperleft</td>
 </tr>  </tr>
 <tr>  <tr>
 <td rowspan="3" bgcolor="$tabbg">  <td rowspan="3" bgcolor="$tabbg">
 $titleinfo  $titleinfo $dc_info
 <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 2655  ENDBODY Line 2757  ENDBODY
 }  }
   
 ###############################################  ###############################################
   ###############################################
   
   =pod
   
   =back
   
   =head1 HTTP Helpers
   
   =over 4
   
   =item * &endbodytag()
   
   Returns a uniform footer for LON-CAPA web pages.
   
   Inputs: 
   
   =over 4
   
   =back
   
   Returns: A uniform footer for LON-CAPA web pages.  
   
   =cut
   
   sub endbodytag {
       my $endbodytag='</body>';
       if ($ENV{'environment.texengine'} eq 'jsMath') {
    $endbodytag='<script type="text/javascript">jsMath.Process()</script>'.
       "\n".$endbodytag;
       }
       return $endbodytag;
   }
   
   ###############################################
   
 =pod  =pod
   
Line 2702  Returns number of sections. Line 2838  Returns number of sections.
 ###############################################  ###############################################
 sub get_sections {  sub get_sections {
     my ($cdom,$cnum,$sectioncount,$possible_roles) = @_;      my ($cdom,$cnum,$sectioncount,$possible_roles) = @_;
       if (!($cdom && $cnum)) { return 0; }
     my $cid = $cdom.'_'.$cnum;      my $cid = $cdom.'_'.$cnum;
     my $numsections = 0;      my $numsections = 0;
     if ($cdom && $cnum) {  
         if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) {      if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) {
             my ($classlist) = &Apache::loncoursedata::get_classlist($cid,$cdom,$cnum);   my ($classlist) = &Apache::loncoursedata::get_classlist($cid,$cdom,$cnum);
             my $sec_index = &Apache::loncoursedata::CL_SECTION();   my $sec_index = &Apache::loncoursedata::CL_SECTION();
             my $status_index = &Apache::loncoursedata::CL_STATUS();   my $status_index = &Apache::loncoursedata::CL_STATUS();
             while (my ($student,$data) = each %$classlist) {   while (my ($student,$data) = each %$classlist) {
                 my ($section,$status) = ($data->[$sec_index],      my ($section,$status) = ($data->[$sec_index],
                                          $data->[$status_index]);       $data->[$status_index]);
                 unless ($section eq '' || $section =~ /^\s*$/) {      unless ($section eq '-1' || $section =~ /^\s*$/) {
                     if (!defined($$sectioncount{$section})) {   if (!defined($$sectioncount{$section})) { $numsections++; }
                         $$sectioncount{$section} = 1;   $$sectioncount{$section}++;
                         $numsections ++;      }
                     } else {   }
                         $$sectioncount{$section} ++;      }
                     }      my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
                 }      foreach my $user (sort(keys(%courseroles))) {
             }   if ($user !~ /^(\w{2})/) { next; }
         }   my ($role) = ($user =~ /^(\w{2})/);
         my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);   if ($possible_roles && !(grep(/^$role$/,@$possible_roles))) { next; }
         foreach my $user (sort keys %courseroles) {   my $section;
             if ($user =~ /^(\w{2})/) {   if ($role eq 'cr' &&
                 my $role = $1;      $user =~ m-^$role/[^/]*/[^/]*/[^/]*:[^:]*:[^:]*:(\w+)-) {
                 if (!defined($possible_roles) || (grep/^$role$/,@$possible_roles)) {      $section=$1;
                     if ($role eq 'cr') {   }
                         if ($user =~ m-^$role/[^/]*/[^/]*/[^/]*:[^:]*:[^:]*:(\w+)-) {   if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { $section=$1; }
                             if (!defined($$sectioncount{$1})) {   if (!defined($section) || $section eq '-1') { next; }
                                 $$sectioncount{$1} = 1;   if (!defined($$sectioncount{$section})) { $numsections++; } 
                                 $numsections ++;   $$sectioncount{$section}++;
                             } else {  
                                 $$sectioncount{$1} ++;  
                             }  
                         }  
                     }  
                     if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) {  
                         if (!defined($$sectioncount{$1})) {  
                             $$sectioncount{$1} = 1;  
                             $numsections ++;  
                         } else {  
                             $$sectioncount{$1} ++;  
                         }  
                     }  
                 }  
             }  
         }  
     }      }
     return $numsections;      return $numsections;
 }  }
Line 3026  needs $ENV{'form.upfile'} and $ENV{'form Line 3147  needs $ENV{'form.upfile'} and $ENV{'form
 sub upfile_record_sep {  sub upfile_record_sep {
     if ($ENV{'form.upfiletype'} eq 'xml') {      if ($ENV{'form.upfiletype'} eq 'xml') {
     } else {      } else {
  return split(/\n/,$ENV{'form.upfile'});   my @records;
    foreach my $line (split(/\n/,$ENV{'form.upfile'})) {
       if ($line=~/^\s*$/) { next; }
       push(@records,$line);
    }
    return @records;
     }      }
 }  }
   
Line 3359  they are plotted.  If undefined, default Line 3485  they are plotted.  If undefined, default
 =item @Values: An array of array references.  Each array reference holds data  =item @Values: An array of array references.  Each array reference holds data
 to be plotted in a stacked bar chart.  to be plotted in a stacked bar chart.
   
   =item If the final element of @Values is a hash reference the key/value
   pairs will be added to the graph definition.
   
 =back  =back
   
 Returns:  Returns:
Line 3832  sub icon { Line 3961  sub icon {
  $curfext.".gif";   $curfext.".gif";
  }   }
     }      }
     return $iconname;      return &lonhttpdurl($iconname);
 }   } 
   
 sub lonhttpdurl {  sub lonhttpdurl {
Line 3870  sub escape_double { Line 3999  sub escape_double {
 #   Escapes the last element of a full URL.  #   Escapes the last element of a full URL.
 sub escape_url {  sub escape_url {
     my ($url)   = @_;      my ($url)   = @_;
     my @urlslices = split(/\//, $url);      my @urlslices = split(/\//, $url,-1);
     my $lastitem = &Apache::lonnet::escape(pop(@urlslices));      my $lastitem = &Apache::lonnet::escape(pop(@urlslices));
     return join('/',@urlslices).'/'.$lastitem;      return join('/',@urlslices).'/'.$lastitem;
 }  }

Removed from v.1.233  
changed lines
  Added in v.1.252


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