Diff for /loncom/homework/grades.pm between versions 1.117 and 1.118

version 1.117, 2003/07/16 19:28:08 version 1.118, 2003/07/17 22:08:25
Line 106  sub response_type { Line 106  sub response_type {
  if (/^\w+response_\w+.*/) {   if (/^\w+response_\w+.*/) {
     my ($responsetype,$part) = split(/_/,$_,2);      my ($responsetype,$part) = split(/_/,$_,2);
     my ($partid,$respid) = split(/_/,$part);      my ($partid,$respid) = split(/_/,$part);
       $responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!!
     $handgrade{$part} = $responsetype.':'.($allkeys =~ /parameter_$part\_handgrade/ ? 'yes' : 'no');      $handgrade{$part} = $responsetype.':'.($allkeys =~ /parameter_$part\_handgrade/ ? 'yes' : 'no');
     next if ($seen{$partid} > 0);      next if ($seen{$partid} > 0);
     $seen{$partid}++;      $seen{$partid}++;
Line 115  sub response_type { Line 116  sub response_type {
     return \@partlist,\%handgrade;      return \@partlist,\%handgrade;
 }  }
   
   #--- Show resource title
   #--- and parts and response type
   sub showResourceInfo {
       my ($url,$probTitle) = @_;
       my $result ='<table border="0">'.
    '<tr><td colspan=3><font size=+1><b>Current Resource: </b>'.$probTitle.'</font></td></tr>'."\n";
       my ($partlist,$handgrade) = &response_type($url);
       my ($resptype,$hdgrade)=('','no');
       for (sort keys(%$handgrade)) {
    my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});
    $resptype = $responsetype;
    $hdgrade = $handgrade if ($handgrade eq 'yes');
    $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.
       '<td><b>Type: </b>'.$responsetype.'</td></tr>';
   #    '<td><b>Handgrade: </b>'.$handgrade.'</td></tr>';
       }
       $result.='</table>'."\n";
       return $result,$resptype,$hdgrade,$partlist,$handgrade;
   }
   
   #--- Clean response type for display
   #--- Currently filters option response type only.
   sub cleanRecord {
       my ($answer,$response) = @_;
       $answer =~ s|^<br />||;
       if ($response eq 'option') {
    my (@IDs,@ans);
    foreach (split(/\&/,&Apache::lonnet::unescape($answer))) {
       my ($optionID,$ans) = split(/=/);
       push @IDs,$optionID.'</font>';
       push @ans,$ans;
    }
    my $grayFont = '<font color="#999999">';
    return '<table border="1">'.
       '<tr valign="top"><td>Answer</td><td>'.
       (join '</td><td>',@ans).'</td></tr>'.
       '<tr valign="top"><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont.
       (join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'.
       '</table>';
       }
       return $answer;
   }
   
   #-- A couple of common js functions
   sub commonJSfunctions {
       my $request = shift;
       $request->print(<<COMMONJSFUNCTIONS);
   <script type="text/javascript" language="javascript">
       function radioSelection(radioButton) {
    var selection=null;
    if (radioButton.length > 1) {
       for (var i=0; i<radioButton.length; i++) {
    if (radioButton[i].checked) {
       return radioButton[i].value;
    }
       }
    } else {
       if (radioButton.checked) return radioButton.value;
    }
    return selection;
       }
   
       function pullDownSelection(selectOne) {
    var selection="";
    if (selectOne.length > 1) {
       for (var i=0; i<selectOne.length; i++) {
    if (selectOne[i].selected) {
       return selectOne[i].value;
    }
       }
    } else {
       if (selectOne.selected) return selectOne.value;
    }
       }
   </script>
   COMMONJSFUNCTIONS
   }
   
 #--- Dumps the class list with usernames,list of sections,  #--- Dumps the class list with usernames,list of sections,
 #--- section, ids and fullnames for each user.  #--- section, ids and fullnames for each user.
 sub getclasslist {  sub getclasslist {
Line 297  sub verifyreceipt { Line 376  sub verifyreceipt {
   
     my $title.='<h3><font color="#339933">Verifying Submission Receipt '.      my $title.='<h3><font color="#339933">Verifying Submission Receipt '.
  $receipt.'</h3></font>'."\n".   $receipt.'</h3></font>'."\n".
  '<font size=+1><b>Problem: </b>'.$ENV{'form.probTitle'}.'</font><br><br>'."\n";   '<font size=+1><b>Resource: </b>'.$ENV{'form.probTitle'}.'</font><br><br>'."\n";
   
     my ($string,$contents,$matches) = ('','',0);      my ($string,$contents,$matches) = ('','',0);
     my (undef,undef,$fullname) = &getclasslist('all','0');      my (undef,undef,$fullname) = &getclasslist('all','0');
Line 345  sub listStudents { Line 424  sub listStudents {
     my $getsec    = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};      my $getsec    = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};
     my $submitonly= $ENV{'form.submitonly'} eq '' ? 'all' : $ENV{'form.submitonly'};      my $submitonly= $ENV{'form.submitonly'} eq '' ? 'all' : $ENV{'form.submitonly'};
   
     my $result;      my $viewgrade = $ENV{'form.showgrading'} eq 'yes' ? 'View/Grade/Regrade' : 'View';
     my ($partlist,$handgrade) = &response_type($url);  
     for (sort keys(%$handgrade)) {  
  my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});  
  $ENV{'form.handgrade'} = 'yes' if ($handgrade eq 'yes');  
  $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.  
     '<td><b>Type: </b>'.$responsetype.'</td>'.  
     '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';  
     }  
     $result.='</table>'."\n";  
   
     my $viewgrade = $ENV{'form.handgrade'} eq 'yes' ? 'View/Grade' : 'View';  
     $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ?       $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ? 
  &Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'};   &Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'};
   
     $result='<h3><font color="#339933">&nbsp;'.      my $result='<h3><font color="#339933">&nbsp;'.$viewgrade.
  $viewgrade.   ' Submissions for a Student or a Group of Students</font></h3>';
     ' Submissions for a Student or a Group of Students</font></h3>'.  
     '<table border="0"><tr><td colspan=3><font size=+1>'.      my ($table,$resptype,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'});
     '<b>Problem: </b>'.$ENV{'form.probTitle'}.'</font></td></tr>'.$result;      $result.=$table;
   
     $request->print(<<LISTJAVASCRIPT);      $request->print(<<LISTJAVASCRIPT);
 <script type="text/javascript" language="javascript">  <script type="text/javascript" language="javascript">
Line 396  sub listStudents { Line 464  sub listStudents {
  formname.command.value = 'submission';   formname.command.value = 'submission';
  formname.submit();   formname.submit();
     }      }
   
     function pullDownSelection(selectOne) {  
  var selection="";  
  if (selectOne.length > 1) {  
     for (var i=0; i<selectOne.length; i++) {  
  if (selectOne[i].selected) {  
     return selectOne[i].value;  
  }  
     }  
  } else {  
     if (selectOne.selected) return selectOne.value;  
  }  
     }  
 </script>  </script>
 LISTJAVASCRIPT  LISTJAVASCRIPT
   
       &commonJSfunctions($request);
     $request->print($result);      $request->print($result);
   
     my $checkhdgrade = $ENV{'form.handgrade'} eq 'yes' ? 'checked' : '';      my $checkhdgrade = ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked' : '';
     my $checklastsub = $ENV{'form.handgrade'} eq 'yes' ? '' : 'checked';      my $checklastsub = ($ENV{'form.handgrade'} eq 'no') ? 'checked' : '';
       $checklastsub = 'checked' if ($checkhdgrade eq '' && $checklastsub eq '');
     my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n".      my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n".
  '&nbsp;<b>View Problem Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n".   '&nbsp;<b>View Problem Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n".
  '<input type="radio" name="vProb" value="yes" /> one student '."\n".   '<input type="radio" name="vProb" value="yes" /> one student '."\n".
  '<input type="radio" name="vProb" value="all" /> all students <br />'."\n".   '<input type="radio" name="vProb" value="all" /> all students <br />'."\n".
  '&nbsp;<b>Submissions: </b>'."\n";   '&nbsp;<b>Submissions: </b>'."\n";
     if ($ENV{'form.handgrade'} eq 'yes') {      if ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) {
  $gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> handgrade only'."\n";   $gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> essay part only'."\n";
     }      }
   
     my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'};      my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'};
Line 654  sub sub_page_js { Line 710  sub sub_page_js {
   
     function checkSolved(formname,id) {      function checkSolved(formname,id) {
  if (eval("formname.solved"+id+".value") == "correct_by_student") {   if (eval("formname.solved"+id+".value") == "correct_by_student") {
     alert("This problem has been graded correct by the computer. The score cannot be changed.");      var reply = confirm("This problem has been graded correct by the computer. Do you want to change the score?");
     return "noupdate";      if (!reply) {return "noupdate";}
  }   }
  return "update";   return "update";
     }      }
Line 738  SUBJAVASCRIPT Line 794  SUBJAVASCRIPT
 sub sub_page_kw_js {  sub sub_page_kw_js {
     my $request = shift;      my $request = shift;
     my $iconpath = $request->dir_config('lonIconsURL');      my $iconpath = $request->dir_config('lonIconsURL');
       &commonJSfunctions($request);
     $request->print(<<SUBJAVASCRIPT);      $request->print(<<SUBJAVASCRIPT);
 <script type="text/javascript" language="javascript">  <script type="text/javascript" language="javascript">
   
Line 818  sub sub_page_kw_js { Line 875  sub sub_page_kw_js {
     return;      return;
   }    }
   
 //  var pWin = null;  
   function savedMsgHeader(Nmsg,usrctr,fullname) {    function savedMsgHeader(Nmsg,usrctr,fullname) {
     var height = 70*Nmsg+250;      var height = 70*Nmsg+250;
     var scrollbar = "no";      var scrollbar = "no";
Line 827  sub sub_page_kw_js { Line 883  sub sub_page_kw_js {
  scrollbar = "yes";   scrollbar = "yes";
     }      }
 //    if (window.pWin) {window.pWin.close(); window.pWin=null}  //    if (window.pWin) {window.pWin.close(); window.pWin=null}
     pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx=70,screeny=75,width=600,height='+height);      var xpos = (screen.width-600)/2;
       xpos = (xpos < 0) ? '0' : xpos;
       var ypos = (screen.height-height)/2-30;
       ypos = (ypos < 0) ? '0' : ypos;
   
       pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height);
     pWin.focus();      pWin.focus();
     pDoc = pWin.document;      pDoc = pWin.document;
     pDoc.write("<html><head>");      pDoc.write("<html><head>");
Line 947  sub sub_page_kw_js { Line 1008  sub sub_page_kw_js {
     return;      return;
   }    }
   
 //  var hwdWin = null;  
   function highlightCentral() {    function highlightCentral() {
 //    if (window.hwdWin) window.hwdWin.close();  //    if (window.hwdWin) window.hwdWin.close();
     hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx=100,screeny=75');      var xpos = (screen.width-400)/2;
       xpos = (xpos < 0) ? '0' : xpos;
       var ypos = (screen.height-330)/2-30;
       ypos = (ypos < 0) ? '0' : ypos;
   
       hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos);
     hwdWin.focus();      hwdWin.focus();
     var hDoc = hwdWin.document;      var hDoc = hwdWin.document;
     hDoc.write("<html><head>");      hDoc.write("<html><head>");
Line 958  sub sub_page_kw_js { Line 1023  sub sub_page_kw_js {
   
     hDoc.write("<script language=javascript>");      hDoc.write("<script language=javascript>");
     hDoc.write("function updateChoice(flag) {");      hDoc.write("function updateChoice(flag) {");
     hDoc.write("  opener.document.SCORE.kwclr.value = radioSelection(document.hlCenter.kwdclr);");      hDoc.write("  opener.document.SCORE.kwclr.value = opener.radioSelection(document.hlCenter.kwdclr);");
     hDoc.write("  opener.document.SCORE.kwsize.value = radioSelection(document.hlCenter.kwdsize);");      hDoc.write("  opener.document.SCORE.kwsize.value = opener.radioSelection(document.hlCenter.kwdsize);");
     hDoc.write("  opener.document.SCORE.kwstyle.value = radioSelection(document.hlCenter.kwdstyle);");      hDoc.write("  opener.document.SCORE.kwstyle.value = opener.radioSelection(document.hlCenter.kwdstyle);");
     hDoc.write("  opener.document.SCORE.refresh.value = \\"on\\";");      hDoc.write("  opener.document.SCORE.refresh.value = \\"on\\";");
     hDoc.write("  if (opener.document.SCORE.keywords.value!=\\"\\"){");      hDoc.write("  if (opener.document.SCORE.keywords.value!=\\"\\"){");
     hDoc.write("     opener.document.SCORE.submit();");      hDoc.write("     opener.document.SCORE.submit();");
Line 968  sub sub_page_kw_js { Line 1033  sub sub_page_kw_js {
     hDoc.write("  self.close()");      hDoc.write("  self.close()");
     hDoc.write("}");      hDoc.write("}");
   
     hDoc.write("function radioSelection(radioButton) {");  /*    hDoc.write("function radioSelection(radioButton) {");
     hDoc.write("    var selection=null;");      hDoc.write("    var selection=null;");
     hDoc.write("    for (var i=0; i<radioButton.length; i++) {");      hDoc.write("    for (var i=0; i<radioButton.length; i++) {");
     hDoc.write("        if (radioButton[i].checked) {");      hDoc.write("        if (radioButton[i].checked) {");
Line 976  sub sub_page_kw_js { Line 1041  sub sub_page_kw_js {
     hDoc.write("            return selection;");      hDoc.write("            return selection;");
     hDoc.write("        }");      hDoc.write("        }");
     hDoc.write("    }");      hDoc.write("    }");
     hDoc.write("}");      hDoc.write("}"); */
   
     hDoc.write("<");      hDoc.write("<");
     hDoc.write("/script>");      hDoc.write("/script>");
Line 1125  sub submission { Line 1190  sub submission {
     # header info      # header info
     if ($counter == 0) {      if ($counter == 0) {
  &sub_page_js($request);   &sub_page_js($request);
  &sub_page_kw_js($request);   &sub_page_kw_js($request) if ($ENV{'form.handgrade'} eq 'yes');
  $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ?    $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ? 
     &Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'};      &Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'};
   
  $request->print('<h3>&nbsp;<font color="#339933">Submission Record</font></h3>'."\n".   $request->print('<h3>&nbsp;<font color="#339933">Submission Record</font></h3>'."\n".
  '<font size=+1>&nbsp;<b>Problem: </b>'.$ENV{'form.probTitle'}.'</font>'."\n");   '<font size=+1>&nbsp;<b>Resource: </b>'.$ENV{'form.probTitle'}.'</font>'."\n");
   
    if ($ENV{'form.handgrade'} eq 'no') {
       my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL').
    '/check.gif" height="16" border="0" />';
       my $checkMark='<br /><br />&nbsp;<b>Note:</b> Part(s) graded correct by the computer is marked with a '.
    $checkIcon.' symbol.'."\n";
       $request->print($checkMark);
    }
   
  # option to display problem, only once else it cause problems    # option to display problem, only once else it cause problems 
         # with the form later since the problem has a form.          # with the form later since the problem has a form.
Line 1141  sub submission { Line 1214  sub submission {
  # kwclr is the only variable that is guaranteed to be non blank    # kwclr is the only variable that is guaranteed to be non blank 
         # if this subroutine has been called once.          # if this subroutine has been called once.
  my %keyhash = ();   my %keyhash = ();
  if ($ENV{'form.kwclr'} eq '') {   if ($ENV{'form.kwclr'} eq '' && $ENV{'form.handgrade'} eq 'yes') {
     %keyhash = &Apache::lonnet::dump('nohist_handgrade',      %keyhash = &Apache::lonnet::dump('nohist_handgrade',
      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},       $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});       $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
Line 1229  KEYWORDS Line 1302  KEYWORDS
     $result.='<b>Fullname: </b>'.$ENV{'form.fullname'}.      $result.='<b>Fullname: </b>'.$ENV{'form.fullname'}.
  '<font color="#999999">&nbsp; &nbsp;Username: '.$uname.   '<font color="#999999">&nbsp; &nbsp;Username: '.$uname.
  ($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').'</font><br />'."\n";   ($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').'</font><br />'."\n";
 # '<font color="#999999">&nbsp; &nbsp;Domain: '.$udom.'</font><br />'."\n";  
     $result.='<input type="hidden" name="name'.$counter.      $result.='<input type="hidden" name="name'.$counter.
  '" value="'.$ENV{'form.fullname'}.'" />'."\n";   '" value="'.$ENV{'form.fullname'}.'" />'."\n";
   
     # If this is an essay-response part(handgraded), then check for collaborators      # If any part of the problem is an essay-response (handgraded), then check for collaborators
     my @col_fullnames;      my @col_fullnames;
     my ($classlist,$fullname);      my ($classlist,$fullname);
     if ($ENV{'form.handgrade'} eq 'yes') {      if ($ENV{'form.handgrade'} eq 'yes') {
Line 1309  KEYWORDS Line 1381  KEYWORDS
  &get_last_submission (%record);   &get_last_submission (%record);
     my $lastsubonly=''.      my $lastsubonly=''.
  ($$timestamp eq '' ? '' : '<b>Date Submitted:</b> '.   ($$timestamp eq '' ? '' : '<b>Date Submitted:</b> '.
  $$timestamp).'';   $$timestamp)."</td></tr>\n";
     if ($$timestamp eq '') {      if ($$timestamp eq '') {
  $lastsubonly.='<tr><td bgcolor="#ffffe6">'.$$string[0].'</td></tr>'."\n";   $lastsubonly.='<tr><td bgcolor="#ffffe6">'.$$string[0]; 
     } else {      } else {
  for my $part (sort keys(%$handgrade)) {   for my $part (sort keys(%$handgrade)) {
     foreach (@$string) {      my ($responsetype,$foo) = split(/:/,$$handgrade{$part});
  my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/;      my ($partid,$respid) = split(/_/,$part);
  if ($part eq ($partid.'_'.$respid)) {      if (!exists($record{'resource.'.$partid.'.'.$respid.'.submission'})) {
     my ($ressub,$subval) = split(/:/,$_,2);   $lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '.
 # Similarity check      $partid.'</b> <font color="#999999">( ID '.$respid.
                             my $similar='';      ' )</font>&nbsp; &nbsp;Nothing submitted<br /><br />';
                             my ($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval);       } else {
                             if ($osim) {   foreach (@$string) {
  $osim=int($osim*100.0);      my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/;
  $similar='<hr /><h3><font color="#FF0000">Essay is '.$osim.      if ($part eq ($partid.'_'.$respid)) {
     '% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom).   my ($ressub,$subval) = split(/:/,$_,2);
                                 '</font></h3><blockquote><i>'.                              # Similarity check
                                 &keywords_highlight($oessay).'</i></blockquote><hr />';   my $similar='';
                             }   my ($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval);
     $lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '.   if ($osim) {
  $partid.'</b> <font color="#999999">( ID '.$respid.      $osim=int($osim*100.0);
  ' )</font>&nbsp; &nbsp;'.      $similar='<hr /><h3><font color="#FF0000">Essay is '.$osim.
                                 ($record{"resource.$partid.$respid.uploadedurl"}?   '% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom).
                                 '<a href="'.   '</font></h3><blockquote><i>'.
                                 &Apache::lonnet::tokenwrapper($record{"resource.$partid.$respid.uploadedurl"}).   &keywords_highlight($oessay).'</i></blockquote><hr />';
  '"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '.   }
  '<font color="red" size="1">Like all files provided by users, '.   $lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '.
  'this file may contain virusses</font><br />':'').      $partid.'</b> <font color="#999999">( ID '.$respid.
                                 '<b>Answer: </b><blockquote>'.      ' )</font>&nbsp; &nbsp;'.
  &keywords_highlight($subval).'</blockquote><br />&nbsp;'.$similar.'</td></tr>'."\n"      ($record{"resource.$partid.$respid.uploadedurl"}?
  if ($ENV{'form.lastSub'} eq 'lastonly' ||        '<a href="'.
     ($ENV{'form.lastSub'} eq 'hdgrade' &&        &Apache::lonnet::tokenwrapper($record{"resource.$partid.$respid.uploadedurl"}).
      $$handgrade{$part} =~ /:yes$/));       '"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '.
        '<font color="red" size="1">Like all files provided by users, '.
        'this file may contain virusses</font><br />':'').
        '<b>Submitted Answer: </b>'.($responsetype eq 'essay' ? '<blockquote>' : '').
        &cleanRecord(&keywords_highlight($subval),$responsetype).
        ($responsetype eq 'essay' ? '</blockquote><br />' : '<br /><br />').$similar."\n"
        if ($ENV{'form.lastSub'} eq 'lastonly' || 
    ($ENV{'form.lastSub'} eq 'hdgrade' && 
     $$handgrade{$part} =~ /:yes$/));
       }
  }   }
     }      }
  }   }
     }      }
     $lastsubonly.='</td></tr>'."\n";      $lastsubonly.='</td></tr><tr bgcolor="#ffffff"><td>'."\n";
     $request->print($lastsubonly);      $request->print($lastsubonly);
  }   }
     } else {      } else {
Line 1357  KEYWORDS Line 1438  KEYWORDS
     }      }
           
     # return if view submission with no grading option      # return if view submission with no grading option
 #    if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) {      if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) {
     if (!&canmodify($usec)) {  #    if (!&canmodify($usec)) {
  $request->print('</td></tr></table></td></tr></table></form>'."\n");   $request->print('</td></tr></table></td></tr></table></form>'."\n");
  $request->print(&show_grading_menu_form($symb,$url))    $request->print(&show_grading_menu_form($symb,$url)) 
     if (($ENV{'form.command'} eq 'submission') ||       if (($ENV{'form.command'} eq 'submission') || 
Line 1366  KEYWORDS Line 1447  KEYWORDS
  return;   return;
     }      }
   
     # Grading options      # essay grading options
     $result='<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n".      if ($ENV{'form.handgrade'} eq 'yes') {
  '<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n".   $result='<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n".
  '<input type="hidden" name="unamedom'.$counter.'" value="'.$uname.':'      '<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n".
  .$udom.'" />'."\n";      '<input type="hidden" name="unamedom'.$counter.'" value="'.$uname.':'
     my ($lastname,$givenn) = split(/,/,$ENV{'form.fullname'});      .$udom.'" />'."\n";
     my $msgfor = $givenn.' '.$lastname;   my ($lastname,$givenn) = split(/,/,$ENV{'form.fullname'});
     if (scalar(@col_fullnames) > 0) {   my $msgfor = $givenn.' '.$lastname;
  my $lastone = pop @col_fullnames;   if (scalar(@col_fullnames) > 0) {
  $msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.';      my $lastone = pop @col_fullnames;
     }      $msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.';
     $msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript   }
     $result.='<tr><td bgcolor="#ffffff">'."\n".   $msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript
  '&nbsp;<a href="javascript:msgCenter(document.SCORE,'.$counter.  # $result.='<tr><td bgcolor="#ffffff">'."\n".
  ',\''.$msgfor.'\')"; TARGET=_self>'.   $result.='&nbsp;<a href="javascript:msgCenter(document.SCORE,'.$counter.
  'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> &nbsp;'.      ',\''.$msgfor.'\')"; TARGET=_self>'.
  '<img src="'.$request->dir_config('lonIconsURL').      'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> &nbsp;'.
  '/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n".      '<img src="'.$request->dir_config('lonIconsURL').
  '<br />&nbsp;(Message will be sent when you click on Save & Next below.)'."\n"       '/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n".
  if ($ENV{'form.handgrade'} eq 'yes');      '<br />&nbsp;(Message will be sent when you click on Save & Next below.)'."\n" 
     $request->print($result);      if ($ENV{'form.handgrade'} eq 'yes');
    $request->print($result);
       }
   
     my %seen = ();      my %seen = ();
     my @partlist;      my @partlist;
Line 1394  KEYWORDS Line 1477  KEYWORDS
  my ($partid,$respid) = split(/_/);   my ($partid,$respid) = split(/_/);
  next if ($seen{$partid} > 0);   next if ($seen{$partid} > 0);
  $seen{$partid}++;   $seen{$partid}++;
 # next if ($$handgrade{$_} =~ /:no$/);   next if ($$handgrade{$_} =~ /:no$/ && $ENV{'form.lastSub'} =~ /^(hdgrade)$/);
  push @partlist,$partid;   push @partlist,$partid;
   
  $request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record));   $request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record));
Line 1413  KEYWORDS Line 1496  KEYWORDS
     if ($counter == $total) {      if ($counter == $total) {
  my $endform='<table border="0"><tr><td>'.   my $endform='<table border="0"><tr><td>'.
     '<input type="hidden" name="gradeOpt" value="" />'."\n";      '<input type="hidden" name="gradeOpt" value="" />'."\n";
  if ($ENV{'form.handgrade'} eq 'yes') {  # if ($ENV{'form.handgrade'} eq 'yes') {
     $endform.='<input type="button" value="Save & Next" '.      $endform.='<input type="button" value="Save & Next" '.
  'onClick="javascript:checksubmit(this.form,\'Save & Next\','.   'onClick="javascript:checksubmit(this.form,\'Save & Next\','.
  $total.','.scalar(@partlist).');" TARGET=_self> &nbsp;'."\n";   $total.','.scalar(@partlist).');" TARGET=_self> &nbsp;'."\n";
Line 1424  KEYWORDS Line 1507  KEYWORDS
     my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1');      my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1');
     $ntstu =~ s/<option>$nsel</<option selected="on">$nsel</;      $ntstu =~ s/<option>$nsel</<option selected="on">$nsel</;
     $endform.=$ntstu.'student(s) &nbsp;&nbsp;';      $endform.=$ntstu.'student(s) &nbsp;&nbsp;';
  } else {  # } else {
     $endform.='<input type="hidden" name="NTSTU" value="1" />'."\n";  #    $endform.='<input type="hidden" name="NTSTU" value="1" />'."\n";
  }  # }
  $endform.='<input type="button" value="Next" '.   $endform.='<input type="button" value="Next" '.
     'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> &nbsp;'."\n".      'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> &nbsp;'."\n".
     '<input type="button" value="Previous" '.      '<input type="button" value="Previous" '.
     'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> &nbsp;';      'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> &nbsp;';
  $endform.='(Next and Previous do not save the scores.)'."\n"    $endform.='(Next and Previous do not save the scores.)'."\n" ;
     if ($ENV{'form.handgrade'} eq 'yes');  #    if ($ENV{'form.handgrade'} eq 'yes');
  $endform.='</td><tr></table></form>';   $endform.='</td><tr></table></form>';
  $endform.=&show_grading_menu_form($symb,$url);   $endform.=&show_grading_menu_form($symb,$url);
  $request->print($endform);   $request->print($endform);
Line 1895  sub viewgrades { Line 1978  sub viewgrades {
     my ($symb,$url) = ($ENV{'form.symb'},$ENV{'form.url'});       my ($symb,$url) = ($ENV{'form.symb'},$ENV{'form.url'}); 
     my $result='<h3><font color="#339933">Manual Grading</font></h3>';      my $result='<h3><font color="#339933">Manual Grading</font></h3>';
   
     $result.='<font size=+1><b>Problem: </b>'.$ENV{'form.probTitle'}.'</font>'."\n";      $result.='<font size=+1><b>Current Resource: </b>'.$ENV{'form.probTitle'}.'</font>'."\n";
   
     #view individual student submission form - called using Javascript viewOneStudent      #view individual student submission form - called using Javascript viewOneStudent
     $result.=&jscriptNform($url,$symb);      $result.=&jscriptNform($url,$symb);
Line 2076  sub editgrades { Line 2159  sub editgrades {
     my $symb=$ENV{'form.symb'};      my $symb=$ENV{'form.symb'};
     my $url =$ENV{'form.url'};      my $url =$ENV{'form.url'};
     my $title='<h3><font color="#339933">Current Grade Status</font></h3>';      my $title='<h3><font color="#339933">Current Grade Status</font></h3>';
     $title.='<font size=+1><b>Problem: </b>'.$ENV{'form.probTitle'}.'</font><br />'."\n";      $title.='<font size=+1><b>Current Resource: </b>'.$ENV{'form.probTitle'}.'</font><br />'."\n";
     $title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n";      $title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n";
     my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n";      my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n";
     $result.= '<table border="0"><tr bgcolor="#deffff">'.      $result.= '<table border="0"><tr bgcolor="#deffff">'.
Line 2314  sub csvuploadmap_header { Line 2397  sub csvuploadmap_header {
  $javascript=&csvupload_javascript_forward_associate();   $javascript=&csvupload_javascript_forward_associate();
     }      }
   
     my $result='<table border="0">';      my ($result,$resptype,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'});
     $result.='<tr><td colspan=3><font size=+1><b>Problem: </b>'.$ENV{'form.probTitle'}.'</font></td></tr>';  
     my ($partlist,$handgrade) = &response_type($url);  
     my ($resptype,$hdgrade)=('','no');  
     for (sort keys(%$handgrade)) {  
  my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});  
  $resptype = $responsetype;  
  $hdgrade = $handgrade if ($handgrade eq 'yes');  
  $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.  
     '<td><b>Type: </b>'.$responsetype.'</td>'.  
     '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';  
     }  
     $result.='</table>';  
     $request->print(<<ENDPICK);      $request->print(<<ENDPICK);
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">  <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
 <h3><font color="#339933">Uploading Class Grades</font></h3>  <h3><font color="#339933">Uploading Class Grades</font></h3>
Line 2354  to this page if the data selected is ins Line 2426  to this page if the data selected is ins
 $javascript  $javascript
 </script>  </script>
 ENDPICK  ENDPICK
 return '';      $request->print(&show_grading_menu_form($symb,$url));
       return '';
   
 }  }
   
Line 2400  sub upcsvScores_form { Line 2473  sub upcsvScores_form {
     </script>      </script>
 CSVFORMJS  CSVFORMJS
     $ENV{'form.probTitle'} = &Apache::lonnet::gettitle($symb);      $ENV{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
       my ($table) = &showResourceInfo($url,$ENV{'form.probTitle'});
       $result.=$table;
     $result.='<br /><table width=100% border=0><tr><td bgcolor="#777777">'."\n";      $result.='<br /><table width=100% border=0><tr><td bgcolor="#777777">'."\n";
     $result.='<table width=100% border=0><tr bgcolor="#e6ffff"><td>'."\n";      $result.='<table width=100% border=0><tr bgcolor="#e6ffff"><td>'."\n";
     $result.='&nbsp;<b>Specify a file containing the class scores for problem - '.$ENV{'form.probTitle'}.      $result.='&nbsp;<b>Specify a file containing the class scores for current resource'.
  '.</b></td></tr>'."\n";   '.</b></td></tr>'."\n";
     $result.='<tr bgcolor=#ffffe6><td>'."\n";      $result.='<tr bgcolor=#ffffe6><td>'."\n";
     my $upfile_select=&Apache::loncommon::upfile_select_html();      my $upfile_select=&Apache::loncommon::upfile_select_html();
Line 2421  ENDUPFORM Line 2496  ENDUPFORM
     $result.='</td></tr></table>'."\n";      $result.='</td></tr></table>'."\n";
     $result.='</td></tr></table><br /><br />'."\n";      $result.='</td></tr></table><br /><br />'."\n";
     $result.=&show_grading_menu_form($symb,$url);      $result.=&show_grading_menu_form($symb,$url);
   
     return $result;      return $result;
 }  }
   
Line 2555  function checkPickOne(formname) { Line 2629  function checkPickOne(formname) {
     formname.submit();      formname.submit();
 }  }
   
 function radioSelection(radioButton) {  
     var selection=null;  
     if (radioButton.length > 1) {  
  for (var i=0; i<radioButton.length; i++) {  
     if (radioButton[i].checked) {  
  return radioButton[i].value;  
     }  
  }  
     } else {  
  if (radioButton.checked) return radioButton.value;  
     }  
     return selection;  
 }  
       
 function pullDownSelection(selectOne) {  
     var selection="";  
     if (selectOne.length > 1) {  
  for (var i=0; i<selectOne.length; i++) {  
     if (selectOne[i].selected) {  
  return selectOne[i].value;  
     }  
  }  
     } else {  
  if (selectOne.selected) return selectOne.value;  
     }  
 }  
 </script>  </script>
 LISTJAVASCRIPT  LISTJAVASCRIPT
       &commonJSfunctions($request);
     my ($symb,$url) = &get_symb_and_url($request);      my ($symb,$url) = &get_symb_and_url($request);
     my $cdom      = $ENV{"course.$ENV{'request.course.id'}.domain"};      my $cdom      = $ENV{"course.$ENV{'request.course.id'}.domain"};
     my $cnum      = $ENV{"course.$ENV{'request.course.id'}.num"};      my $cnum      = $ENV{"course.$ENV{'request.course.id'}.num"};
Line 2624  LISTJAVASCRIPT Line 2672  LISTJAVASCRIPT
  '<input type="radio" name="lastSub" value="all" /> all details'."\n";   '<input type="radio" name="lastSub" value="all" /> all details'."\n";
   
     $result.='<input type="hidden" name="section"     value="'.$getsec.'" />'."\n".      $result.='<input type="hidden" name="section"     value="'.$getsec.'" />'."\n".
  '<input type="hidden" name="Status"     value="'.$ENV{'form.Status'}.'" />'."\n".   '<input type="hidden" name="Status"  value="'.$ENV{'form.Status'}.'" />'."\n".
  '<input type="hidden" name="command" value="displayPage" />'."\n".   '<input type="hidden" name="command" value="displayPage" />'."\n".
  '<input type="hidden" name="url"     value="'.$url.'" />'."\n".   '<input type="hidden" name="url"     value="'.$url.'" />'."\n".
  '<input type="hidden" name="symb"    value="'.$symb.'" />'."\n".   '<input type="hidden" name="symb"    value="'.$symb.'" />'."\n".
Line 2736  sub displayPage { Line 2784  sub displayPage {
     my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL').      my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL').
  '/check.gif" height="16" border="0" />';   '/check.gif" height="16" border="0" />';
   
     $studentTable.='&nbsp;<b>Note:</b> A problem graded correct ('.$checkIcon.      $studentTable.='&nbsp;<b>Note:</b> Problems graded correct by the computer are marked with a '.$checkIcon.
  ') by the computer cannot be changed.'."\n".   ' symbol.'."\n".
  '<table border="0"><tr><td bgcolor="#777777">'.   '<table border="0"><tr><td bgcolor="#777777">'.
  '<table border="0"><tr bgcolor="#e6ffff">'.   '<table border="0"><tr bgcolor="#e6ffff">'.
  '<td align="center"><b>&nbsp;No&nbsp;</b></td>'.   '<td align="center"><b>&nbsp;Prob.&nbsp;</b></td>'.
  '<td><b>&nbsp;'.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem View').'/Grade</b></td></tr>';   '<td><b>&nbsp;'.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem Text').'/Grade</b></td></tr>';
   
     my ($depth,$question) = (1,1);      my ($depth,$question) = (1,1);
     $iterator->next(); # skip the first BEGIN_MAP      $iterator->next(); # skip the first BEGIN_MAP
Line 2786  sub displayPage { Line 2834  sub displayPage {
  $responseType{$partid} = $curRes->responseType($partid);   $responseType{$partid} = $curRes->responseType($partid);
     }      }
     my ($version);      my ($version);
       my %mark;
       $mark{'correct_by_student'} = $checkIcon;
     for ($version=1;$version<=$record{'version'};$version++) {      for ($version=1;$version<=$record{'version'};$version++) {
  my $timestamp = scalar(localtime($record{$version.':timestamp'}));   my $timestamp = scalar(localtime($record{$version.':timestamp'}));
  $studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>';   $studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>';
Line 2801  sub displayPage { Line 2851  sub displayPage {
  &cleanRecord($record{$version.':'.$matchKey[0]},$responseType{$partid}).'<br />' : '';   &cleanRecord($record{$version.':'.$matchKey[0]},$responseType{$partid}).'<br />' : '';
     $displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ?      $displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ?
  '<b>Part&nbsp;'.$partid.'</b> &nbsp;'.   '<b>Part&nbsp;'.$partid.'</b> &nbsp;'.
  $record{"$version:resource.$partid.award"}.'/'.   lc($record{"$version:resource.$partid.award"}).' '.
  $record{"$version:resource.$partid.solved"}.'<br />' : '';   $mark{$record{"$version:resource.$partid.solved"}}.'<br />' : '';
   # $record{"$version:resource.$partid.solved"}.'<br />' : '';
     $displaySub[2].=(exists $record{"$version:resource.$partid.regrader"}) ?      $displaySub[2].=(exists $record{"$version:resource.$partid.regrader"}) ?
  $record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : '';   $record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : '';
  }   }
Line 2845  sub displayPage { Line 2896  sub displayPage {
     return '';      return '';
 }  }
   
 sub cleanRecord {  
     my ($answer,$response) = @_;  
     if ($response eq 'option') {  
  my (@IDs,@ans);  
  foreach (split(/\&/,&Apache::lonnet::unescape($answer))) {  
     my ($optionID,$ans) = split(/=/);  
     push @IDs,$optionID.'</font>';  
     push @ans,$ans;  
  }  
  my $grayFont = '<font color="#999999">';  
  return '<table border="1">'.  
     '<tr valign="top"><td>Answer</td><td>'.  
     (join '</td><td>',@ans).'</td></tr>'.  
     '<tr><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont.  
     (join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'.  
     '</table>';  
     }  
     return $answer;  
 }  
   
 sub updateGradeByPage {  sub updateGradeByPage {
     my ($request) = shift;      my ($request) = shift;
   
Line 3335  sub gradingmenu { Line 3366  sub gradingmenu {
     function checkChoice(formname,val,cmdx) {      function checkChoice(formname,val,cmdx) {
  if (val <= 2) {   if (val <= 2) {
     var cmd = radioSelection(formname.radioChoice);      var cmd = radioSelection(formname.radioChoice);
       var cmdsave = cmd;
  } else {   } else {
     cmd = cmdx;      cmd = cmdx;
       cmdsave = 'submission';
  }   }
  formname.command.value = cmd;   formname.command.value = cmd;
  formname.saveState.value = "saveCmd="+cmd+":saveSec="+pullDownSelection(formname.section)+   formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+
     ":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status);      ":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status);
  if (val < 5) formname.submit();   if (val < 5) formname.submit();
  if (val == 5) {   if (val == 5) {
Line 3361  sub gradingmenu { Line 3394  sub gradingmenu {
  }   }
  return true;   return true;
     }      }
   
     function radioSelection(radioButton) {  
  var selection=null;  
  if (radioButton.length > 1) {  
     for (var i=0; i<radioButton.length; i++) {  
  if (radioButton[i].checked) {  
     return radioButton[i].value;  
  }  
     }  
  } else {  
     if (radioButton.checked) return radioButton.value;  
  }  
  return selection;  
     }  
   
     function pullDownSelection(selectOne) {  
  var selection="";  
  if (selectOne.length > 1) {  
     for (var i=0; i<selectOne.length; i++) {  
  if (selectOne[i].selected) {  
     return selectOne[i].value;  
  }  
     }  
  } else {  
     if (selectOne.selected) return selectOne.value;  
  }  
     }  
   
 </script>  </script>
 GRADINGMENUJS  GRADINGMENUJS
       &commonJSfunctions($request);
     my $result='<h3>&nbsp;<font color="#339933">Manual Grading/View Submission</font></h3>'.      my $result='<h3>&nbsp;<font color="#339933">Manual Grading/View Submission</font></h3>';
  '<table border="0">'.      my ($table,$resptype,$hdgrade) = &showResourceInfo($url,$probTitle);
  '<tr><td colspan=3><font size=+1><b>Problem: </b>'.$probTitle.'</font></td></tr>'."\n";      $result.=$table;
     my ($partlist,$handgrade) = &response_type($url);  
     my ($resptype,$hdgrade)=('','no');  
     for (sort keys(%$handgrade)) {  
  my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});  
  $resptype = $responsetype;  
  $hdgrade = $handgrade if ($handgrade eq 'yes');  
  $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.  
     '<td><b>Type: </b>'.$responsetype.'</td></tr>';  
 #    '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';  
     }  
     $result.='</table>'."\n";  
   
     my (undef,$sections) = &getclasslist('all','0');      my (undef,$sections) = &getclasslist('all','0');
     my $savedState = &savedState();      my $savedState = &savedState();
     my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'pickStudentPage' : $$savedState{'saveCmd'});      my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'});
     my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'});      my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'});
     my $saveSub = ($$savedState{'saveSub'} eq '' ? 'yes' : $$savedState{'saveSub'});      my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'});
     my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'});      my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'});
   
     $result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".      $result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
Line 3431  GRADINGMENUJS Line 3424  GRADINGMENUJS
   
     $result.='<table width="100%" border=0>';      $result.='<table width="100%" border=0>';
     $result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n".      $result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n".
  '&nbsp;Section: <select name="section">'."\n";   '&nbsp;Select Section: <select name="section">'."\n";
     if (ref($sections)) {      if (ref($sections)) {
  foreach (sort (@$sections)) {$result.='<option value="'.$_.'" '.   foreach (sort (@$sections)) {$result.='<option value="'.$_.'" '.
  ($saveSec eq $_ ? 'selected="on"' : '').'>'.$_.'</option>'."\n";}   ($saveSec eq $_ ? 'selected="on"' : '').'>'.$_.'</option>'."\n";}
Line 3446  GRADINGMENUJS Line 3439  GRADINGMENUJS
     }      }
     $result.='</td></tr>';      $result.='</td></tr>';
   
     $result.='<tr bgcolor="#ffffe6" valign="top"><td>'.      $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
  '<input type="radio" name="radioChoice" value="pickStudentPage" '.   '<input type="radio" name="radioChoice" value="submission" '.
  ($saveCmd eq 'pickStudentPage' ? 'checked' : '').'> '.   ($saveCmd eq 'submission' ? 'checked' : '').'> '.'<b>Current Resource:</b> For one or more students'.
  'One student for whole page/sequence/folder</td></tr>'."\n";   '<br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;-->For students with '.
    '<input type="radio" name="submitonly" value="yes" '.
    ($saveSub eq 'yes' ? 'checked' : '').' /> submissions or '.
    '<input type="radio" name="submitonly" value="all" '.
    ($saveSub eq 'all' ? 'checked' : '').' /> for all</td></tr>'."\n";
   
     $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.      $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
  '<input type="radio" name="radioChoice" value="viewgrades" '.   '<input type="radio" name="radioChoice" value="viewgrades" '.
  ($saveCmd eq 'viewgrades' ? 'checked' : '').'> '.   ($saveCmd eq 'viewgrades' ? 'checked' : '').'> '.
  'All students in section/course for current resource</td></tr>'."\n";   '<b>Current Resource:</b> For all students in selected section or course</td></tr>'."\n";
   
     $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.      $result.='<tr bgcolor="#ffffe6" valign="top"><td>'.
  '<input type="radio" name="radioChoice" value="submission" '.   '<input type="radio" name="radioChoice" value="pickStudentPage" '.
  ($saveCmd eq 'submission' ? 'checked' : '').'> '.'One or more students for current resource'.   ($saveCmd eq 'pickStudentPage' ? 'checked' : '').'> '.
  '<br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;-->For students who has: '.   'The <b>complete</b> set/page/sequence: For one student</td></tr>'."\n";
  '<input type="radio" name="submitonly" value="yes" '.  
  ($saveSub eq 'yes' ? 'checked' : '').' /> submitted'.  
  '<input type="radio" name="submitonly" value="all" '.  
  ($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n";  
   
     $result.='<tr bgcolor="#ffffe6"><td><br />'.      $result.='<tr bgcolor="#ffffe6"><td><br />'.
  '<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="View/Grade/Regrade" />'.   '<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="View/Grade/Regrade" />'.

Removed from v.1.117  
changed lines
  Added in v.1.118


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