Diff for /loncom/homework/grades.pm between versions 1.73 and 1.80

version 1.73, 2003/03/17 19:08:50 version 1.80, 2003/03/28 20:49:55
Line 113  sub response_type { Line 113  sub response_type {
 #--- 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 {
     my ($getsec,$hideexpired) = @_;      my ($getsec,$filterlist) = @_;
     my $classlist=&Apache::loncoursedata::get_classlist();      my $classlist=&Apache::loncoursedata::get_classlist();
     # Bail out if we were unable to get the classlist      # Bail out if we were unable to get the classlist
     return if (! defined($classlist));      return if (! defined($classlist));
Line 124  sub getclasslist { Line 124  sub getclasslist {
         # the following undefs are for 'domain', and 'username' respectively.          # the following undefs are for 'domain', and 'username' respectively.
  my (undef,undef,$end,$start,$id,$section,$fullname,$status)=   my (undef,undef,$end,$start,$id,$section,$fullname,$status)=
             @{$classlist->{$_}};              @{$classlist->{$_}};
  # still a student?   # filter students according to status selected
  if (($hideexpired) && ($status ne 'Active')) {   if ($filterlist && $ENV{'form.status'} ne 'Any') {
             delete ($classlist->{$_});      if ($ENV{'form.status'} ne $status) {
             next;   delete ($classlist->{$_});
         }   next;
       }
    }
  $section = ($section ne '' ? $section : 'no');   $section = ($section ne '' ? $section : 'no');
  if ($getsec eq 'all' || $getsec eq $section) {   if ($getsec eq 'all' || $getsec eq $section) {
             $sections{$section}++;              $sections{$section}++;
Line 209  sub jscriptNform { Line 211  sub jscriptNform {
     $jscript.= '<form action="/adm/grades" method="post" name="onestudent">'."\n".      $jscript.= '<form action="/adm/grades" method="post" name="onestudent">'."\n".
  '<input type="hidden" name="symb"    value="'.$symb.'" />'."\n".   '<input type="hidden" name="symb"    value="'.$symb.'" />'."\n".
  '<input type="hidden" name="url"     value="'.$url.'" />'."\n".   '<input type="hidden" name="url"     value="'.$url.'" />'."\n".
  '<input type="hidden" name="lastCmd" value="'.$ENV{'form.lastCmd'}.'" />'."\n".   '<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n".
  '<input type="hidden" name="lastSec" value="'.$ENV{'form.lastSec'}.'" />'."\n".  
  '<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n".   '<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n".
  '<input type="hidden" name="command" value="submission" />'."\n".   '<input type="hidden" name="command" value="submission" />'."\n".
  '<input type="hidden" name="student" value="" />'."\n".   '<input type="hidden" name="student" value="" />'."\n".
Line 297  sub listStudents { Line 298  sub listStudents {
     '<td><b>Type: </b>'.$responsetype.'</td>'.      '<td><b>Type: </b>'.$responsetype.'</td>'.
     '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';      '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';
     }      }
     $result.='</table>';      $result.='</table>'."\n";
   
     my $viewgrade = $ENV{'form.handgrade'} eq 'yes' ? 'View/Grade' : 'View';      my $viewgrade = $ENV{'form.handgrade'} eq 'yes' ? 'View/Grade' : 'View';
       $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ? 
    &Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'};
   
     $result='<h3><font color="#339933">&nbsp;'.      $result='<h3><font color="#339933">&nbsp;'.
  $viewgrade.   $viewgrade.
Line 340  LISTJAVASCRIPT Line 343  LISTJAVASCRIPT
     my $checklastsub = $ENV{'form.handgrade'} eq 'yes' ? '' : 'checked';      my $checklastsub = $ENV{'form.handgrade'} eq 'yes' ? '' : 'checked';
   
     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: </b><input type="radio" name="vProb" value="no" /> no '."\n".   '&nbsp;<b>View Problem: </b><input type="radio" name="vProb" value="no" checked /> no '."\n".
  '<input type="radio" name="vProb" value="yes" checked /> 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') {
Line 355  LISTJAVASCRIPT Line 358  LISTJAVASCRIPT
  '<input type="hidden" name="response"    value="'.$ENV{'form.response'}.'" />'."\n".   '<input type="hidden" name="response"    value="'.$ENV{'form.response'}.'" />'."\n".
  '<input type="hidden" name="handgrade"   value="'.$ENV{'form.handgrade'}.'" /><br />'."\n".   '<input type="hidden" name="handgrade"   value="'.$ENV{'form.handgrade'}.'" /><br />'."\n".
  '<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" /><br />'."\n".   '<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" /><br />'."\n".
  '<input type="hidden" name="lastCmd"     value="'.$ENV{'form.lastCmd'}.'" />'."\n".   '<input type="hidden" name="saveState"   value="'.$ENV{'form.saveState'}.'" />'."\n".
  '<input type="hidden" name="lastSec"     value="'.$ENV{'form.lastSec'}.'" />'."\n".  
  '<input type="hidden" name="probTitle"   value="'.$ENV{'form.probTitle'}.'" />'."\n".   '<input type="hidden" name="probTitle"   value="'.$ENV{'form.probTitle'}.'" />'."\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 368  LISTJAVASCRIPT Line 370  LISTJAVASCRIPT
  'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n".   'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n".
  'value="'.$viewgrade.'" />'."\n";   'value="'.$viewgrade.'" />'."\n";
     
     my (undef,undef,$fullname) = &getclasslist($getsec,'0');      my (undef,undef,$fullname) = &getclasslist($getsec,$ENV{'form.showgrading'} eq 'yes' ? '1' : '0');
           
     $gradeTable.='<table border="0"><tr><td bgcolor="#777777">'.      $gradeTable.='<table border="0"><tr><td bgcolor="#777777">'.
  '<table border="0"><tr bgcolor="#e6ffff">'.   '<table border="0"><tr bgcolor="#e6ffff">'.
Line 626  SUBJAVASCRIPT Line 628  SUBJAVASCRIPT
 #--- javascript for essay type problem --  #--- javascript for essay type problem --
 sub sub_page_kw_js {  sub sub_page_kw_js {
     my $request = shift;      my $request = shift;
       my $iconpath = $request->dir_config('lonIconsURL');
     $request->print(<<SUBJAVASCRIPT);      $request->print(<<SUBJAVASCRIPT);
 <script type="text/javascript" language="javascript">  <script type="text/javascript" language="javascript">
   
 //===================== Show list of keywords ====================  //===================== Show list of keywords ====================
   function keywords(keyform) {    function keywords(keyform) {
     var keywds = keyform.value;      var nret = prompt("Keywords list, separated by a space. Add/delete to list if desired.",keyform.value);
     var nret = prompt("Keywords list, separated by a space. Add/delete to list if desired.",keywds);  
     if (nret==null) return;      if (nret==null) return;
     keyform.value = nret;      keyform.value = nret;
   
Line 674  sub sub_page_kw_js { Line 676  sub sub_page_kw_js {
   }    }
   
 //====================== Script for composing message ==============  //====================== Script for composing message ==============
      // preload images
      img1 = new Image();
      img1.src = "$iconpath/mailbkgrd.gif";
      img2 = new Image();
      img2.src = "$iconpath/mailto.gif";
   
   function msgCenter(msgform,usrctr,fullname) {    function msgCenter(msgform,usrctr,fullname) {
     var Nmsg  = msgform.savemsgN.value;      var Nmsg  = msgform.savemsgN.value;
     savedMsgHeader(Nmsg,usrctr,fullname);      savedMsgHeader(Nmsg,usrctr,fullname);
Line 701  sub sub_page_kw_js { Line 709  sub sub_page_kw_js {
     return;      return;
   }    }
   
   //  var pWin = null;
   function savedMsgHeader(Nmsg,usrctr,fullname) {    function savedMsgHeader(Nmsg,usrctr,fullname) {
     var height = 50*Nmsg+250;      var height = 70*Nmsg+250;
     var scrollbar = "no";      var scrollbar = "no";
     if (height > 600) {      if (height > 600) {
  height = 600;   height = 600;
  scrollbar = "yes";   scrollbar = "yes";
     }      }
 /*    if (window.pWin)  //    if (window.pWin) window.pWin.close();
  window.pWin.close(); */  
     pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx=70,screeny=75,width=600,height='+height);      pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx=70,screeny=75,width=600,height='+height);
     pWin.document.write("<html><head>");      pWin.focus();
     pWin.document.write("<title>Message Central</title>");      pDoc = pWin.document;
       pDoc.write("<html><head>");
     pWin.document.write("<script language=javascript>");      pDoc.write("<title>Message Central</title>");
     pWin.document.write("function checkInput() {");  
     pWin.document.write("  opener.document.SCORE.msgsub.value = document.msgcenter.msgsub.value;");      pDoc.write("<script language=javascript>");
     pWin.document.write("  var nmsg   = opener.document.SCORE.savemsgN.value;");      pDoc.write("function checkInput() {");
     pWin.document.write("  var usrctr = document.msgcenter.usrctr.value;");      pDoc.write("  opener.document.SCORE.msgsub.value = document.msgcenter.msgsub.value;");
     pWin.document.write("  var newval = eval(\\"opener.document.SCORE.newmsg\\"+usrctr);");      pDoc.write("  var nmsg   = opener.document.SCORE.savemsgN.value;");
     pWin.document.write("  newval.value = document.msgcenter.newmsg.value;");      pDoc.write("  var usrctr = document.msgcenter.usrctr.value;");
       pDoc.write("  var newval = eval(\\"opener.document.SCORE.newmsg\\"+usrctr);");
     pWin.document.write("  var msgchk = \\"\\";");      pDoc.write("  newval.value = document.msgcenter.newmsg.value;");
     pWin.document.write("  if (document.msgcenter.subchk.checked) {");  
     pWin.document.write("     msgchk = \\"msgsub,\\";");      pDoc.write("  var msgchk = \\"\\";");
     pWin.document.write("  }");      pDoc.write("  if (document.msgcenter.subchk.checked) {");
     pWin.document.write(   "for (var i=1; i<=nmsg; i++) {");      pDoc.write("     msgchk = \\"msgsub,\\";");
     pWin.document.write("      var opnmsg = eval(\\"opener.document.SCORE.savemsg\\"+i);");      pDoc.write("  }");
     pWin.document.write("      var frmmsg = eval(\\"document.msgcenter.msg\\"+i);");      pDoc.write("  var includemsg = 0;");
     pWin.document.write("      opnmsg.value = frmmsg.value;");      pDoc.write("  for (var i=1; i<=nmsg; i++) {");
     pWin.document.write("      var chkbox = eval(\\"document.msgcenter.msgn\\"+i);");      pDoc.write("      var opnmsg = eval(\\"opener.document.SCORE.savemsg\\"+i);");
     pWin.document.write("      if (chkbox.checked) {");      pDoc.write("      var frmmsg = eval(\\"document.msgcenter.msg\\"+i);");
     pWin.document.write("         msgchk += \\"savemsg\\"+i+\\",\\";");      pDoc.write("      opnmsg.value = frmmsg.value;");
     pWin.document.write("      }");      pDoc.write("      var chkbox = eval(\\"document.msgcenter.msgn\\"+i);");
     pWin.document.write("  }");      pDoc.write("      if (chkbox.checked) {");
     pWin.document.write("  if (document.msgcenter.newmsgchk.checked) {");      pDoc.write("         msgchk += \\"savemsg\\"+i+\\",\\";");
     pWin.document.write("     msgchk += \\"newmsg\\"+usrctr;");      pDoc.write("         includemsg = 1;");
     pWin.document.write("  }");      pDoc.write("      }");
     pWin.document.write("  var includemsg = eval(\\"opener.document.SCORE.includemsg\\"+usrctr);");      pDoc.write("  }");
     pWin.document.write("  includemsg.value = msgchk;");      pDoc.write("  if (document.msgcenter.newmsgchk.checked) {");
       pDoc.write("     msgchk += \\"newmsg\\"+usrctr;");
     pWin.document.write("  self.close()");      pDoc.write("     includemsg = 1;");
       pDoc.write("  }");
     pWin.document.write("}");      pDoc.write("  imgformname = eval(\\"opener.document.SCORE.mailicon\\"+usrctr);");
       pDoc.write("  if (includemsg) {");
     pWin.document.write("<");      pDoc.write("     imgformname.src = \\"$iconpath/mailto.gif\\";");
     pWin.document.write("/script>");      pDoc.write("  } else {");
       pDoc.write("     imgformname.src = \\"$iconpath/mailbkgrd.gif\\";");
     pWin.document.write("</head><body bgcolor=white>");      pDoc.write("  }");
       pDoc.write("  var includemsg = eval(\\"opener.document.SCORE.includemsg\\"+usrctr);");
     pWin.document.write("<form action=\\"inactive\\" name=\\"msgcenter\\">");      pDoc.write("  includemsg.value = msgchk;");
     pWin.document.write("<input value=\\""+usrctr+"\\" name=\\"usrctr\\" type=\\"hidden\\">");  
     pWin.document.write("<font color=\\"green\\" size=+1>&nbsp;Compose Message for \"+fullname+\"</font><br><br>");      pDoc.write("  self.close()");
   
     pWin.document.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">");      pDoc.write("}");
     pWin.document.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">");  
     pWin.document.write("<td><b>Type</b></td><td><b>Include</b></td><td><b>Message</td></tr>");      pDoc.write("<");
       pDoc.write("/script>");
   
       pDoc.write("</head><body bgcolor=white>");
   
       pDoc.write("<form action=\\"inactive\\" name=\\"msgcenter\\">");
       pDoc.write("<input value=\\""+usrctr+"\\" name=\\"usrctr\\" type=\\"hidden\\">");
       pDoc.write("<font color=\\"green\\" size=+1>&nbsp;Compose Message for \"+fullname+\"</font><br><br>");
   
       pDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">");
       pDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">");
       pDoc.write("<td><b>Type</b></td><td><b>Include</b></td><td><b>Message</td></tr>");
 }  }
     function displaySubject(msg,shwsel) {      function displaySubject(msg,shwsel) {
     pWin.document.write("<tr bgcolor=\\"#ffffdd\\">");      pDoc = pWin.document;
     pWin.document.write("<td>Subject</td>");      pDoc.write("<tr bgcolor=\\"#ffffdd\\">");
     pWin.document.write("<td align=\\"center\\"><input name=\\"subchk\\" type=\\"checkbox\\"" +shwsel+"></td>");      pDoc.write("<td>Subject</td>");
     pWin.document.write("<td><input name=\\"msgsub\\" type=\\"text\\" value=\\""+msg+"\\"size=\\"60\\" maxlength=\\"80\\"></td></tr>");      pDoc.write("<td align=\\"center\\"><input name=\\"subchk\\" type=\\"checkbox\\"" +shwsel+"></td>");
       pDoc.write("<td><input name=\\"msgsub\\" type=\\"text\\" value=\\""+msg+"\\"size=\\"60\\" maxlength=\\"80\\"></td></tr>");
 }  }
   
   function displaySavedMsg(ctr,msg,shwsel) {    function displaySavedMsg(ctr,msg,shwsel) {
     pWin.document.write("<tr bgcolor=\\"#ffffdd\\">");      pDoc = pWin.document;
     pWin.document.write("<td align=\\"center\\">"+ctr+"</td>");      pDoc.write("<tr bgcolor=\\"#ffffdd\\">");
     pWin.document.write("<td align=\\"center\\"><input name=\\"msgn"+ctr+"\\" type=\\"checkbox\\"" +shwsel+"></td>");      pDoc.write("<td align=\\"center\\">"+ctr+"</td>");
     pWin.document.write("<td><textarea name=\\"msg"+ctr+"\\" cols=\\"60\\" rows=\\"3\\">"+msg+"</textarea></td></tr>");      pDoc.write("<td align=\\"center\\"><input name=\\"msgn"+ctr+"\\" type=\\"checkbox\\"" +shwsel+"></td>");
       pDoc.write("<td><textarea name=\\"msg"+ctr+"\\" cols=\\"60\\" rows=\\"3\\">"+msg+"</textarea></td></tr>");
 }  }
   
   function newMsg(newmsg,shwsel) {    function newMsg(newmsg,shwsel) {
     pWin.document.write("<tr bgcolor=\\"#ffffdd\\">");      pDoc = pWin.document;
     pWin.document.write("<td align=\\"center\\">New</td>");      pDoc.write("<tr bgcolor=\\"#ffffdd\\">");
     pWin.document.write("<td align=\\"center\\"><input name=\\"newmsgchk\\" type=\\"checkbox\\"" +shwsel+"></td>");      pDoc.write("<td align=\\"center\\">New</td>");
     pWin.document.write("<td><textarea name=\\"newmsg\\" cols=\\"60\\" rows=\\"3\\" onchange=\\"javascript:this.form.newmsgchk.checked=true\\" >"+newmsg+"</textarea></td></tr>");      pDoc.write("<td align=\\"center\\"><input name=\\"newmsgchk\\" type=\\"checkbox\\"" +shwsel+"></td>");
       pDoc.write("<td><textarea name=\\"newmsg\\" cols=\\"60\\" rows=\\"3\\" onchange=\\"javascript:this.form.newmsgchk.checked=true\\" >"+newmsg+"</textarea></td></tr>");
 }  }
   
   function msgTail() {    function msgTail() {
     pWin.document.write("</table>");      pDoc = pWin.document;
     pWin.document.write("</td></tr></table>&nbsp;");      pDoc.write("</table>");
     pWin.document.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:checkInput()\\">&nbsp;&nbsp;");      pDoc.write("</td></tr></table>&nbsp;");
     pWin.document.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>");      pDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:checkInput()\\">&nbsp;&nbsp;");
     pWin.document.write("</form>");      pDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>");
     pWin.document.write("</body></html>");      pDoc.write("</form>");
       pDoc.write("</body></html>");
 }  }
   
 //====================== Script for keyword highlight options ==============  //====================== Script for keyword highlight options ==============
Line 819  sub sub_page_kw_js { Line 842  sub sub_page_kw_js {
     return;      return;
   }    }
   
   //  var hwdWin = null;
   function highlightCentral() {    function highlightCentral() {
   //    if (window.hwdWin) window.hwdWin.close();
     hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx=100,screeny=75');      hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx=100,screeny=75');
     hwdWin.document.write("<html><head>");      hwdWin.focus();
     hwdWin.document.write("<title>Highlight Central</title>");      var hDoc = hwdWin.document;
       hDoc.write("<html><head>");
     hwdWin.document.write("<script language=javascript>");      hDoc.write("<title>Highlight Central</title>");
     hwdWin.document.write("function updateChoice(flag) {");  
     hwdWin.document.write("  opener.document.SCORE.kwclr.value = radioSelection(document.hlCenter.kwdclr);");      hDoc.write("<script language=javascript>");
     hwdWin.document.write("  opener.document.SCORE.kwsize.value = radioSelection(document.hlCenter.kwdsize);");      hDoc.write("function updateChoice(flag) {");
     hwdWin.document.write("  opener.document.SCORE.kwstyle.value = radioSelection(document.hlCenter.kwdstyle);");      hDoc.write("  opener.document.SCORE.kwclr.value = radioSelection(document.hlCenter.kwdclr);");
     hwdWin.document.write("  opener.document.SCORE.refresh.value = \\"on\\";");      hDoc.write("  opener.document.SCORE.kwsize.value = radioSelection(document.hlCenter.kwdsize);");
     hwdWin.document.write("  if (opener.document.SCORE.keywords.value!=\\"\\"){");      hDoc.write("  opener.document.SCORE.kwstyle.value = radioSelection(document.hlCenter.kwdstyle);");
     hwdWin.document.write("     opener.document.SCORE.submit();");      hDoc.write("  opener.document.SCORE.refresh.value = \\"on\\";");
     hwdWin.document.write("  }");      hDoc.write("  if (opener.document.SCORE.keywords.value!=\\"\\"){");
     hwdWin.document.write("  self.close()");      hDoc.write("     opener.document.SCORE.submit();");
     hwdWin.document.write("}");      hDoc.write("  }");
       hDoc.write("  self.close()");
     hwdWin.document.write("function radioSelection(radioButton) {");      hDoc.write("}");
     hwdWin.document.write("    var selection=null;");  
     hwdWin.document.write("    for (var i=0; i<radioButton.length; i++) {");      hDoc.write("function radioSelection(radioButton) {");
     hwdWin.document.write("        if (radioButton[i].checked) {");      hDoc.write("    var selection=null;");
     hwdWin.document.write("            selection=radioButton[i].value;");      hDoc.write("    for (var i=0; i<radioButton.length; i++) {");
     hwdWin.document.write("            return selection;");      hDoc.write("        if (radioButton[i].checked) {");
     hwdWin.document.write("        }");      hDoc.write("            selection=radioButton[i].value;");
     hwdWin.document.write("    }");      hDoc.write("            return selection;");
     hwdWin.document.write("}");      hDoc.write("        }");
       hDoc.write("    }");
     hwdWin.document.write("<");      hDoc.write("}");
     hwdWin.document.write("/script>");  
       hDoc.write("<");
     hwdWin.document.write("</head><body bgcolor=white>");      hDoc.write("/script>");
   
     hwdWin.document.write("<form action=\\"inactive\\" name=\\"hlCenter\\">");      hDoc.write("</head><body bgcolor=white>");
     hwdWin.document.write("<font color=\\"green\\" size=+1>&nbsp;Keyword Highlight Options</font><br><br>");  
       hDoc.write("<form action=\\"inactive\\" name=\\"hlCenter\\">");
     hwdWin.document.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">");      hDoc.write("<font color=\\"green\\" size=+1>&nbsp;Keyword Highlight Options</font><br><br>");
     hwdWin.document.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">");  
     hwdWin.document.write("<td><b>Text Color</b></td><td><b>Font Size</b></td><td><b>Font Style</td></tr>");      hDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">");
       hDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">");
       hDoc.write("<td><b>Text Color</b></td><td><b>Font Size</b></td><td><b>Font Style</td></tr>");
   }    }
   
   function highlightbody(clrval,clrtxt,clrsel,szval,sztxt,szsel,syval,sytxt,sysel) {     function highlightbody(clrval,clrtxt,clrsel,szval,sztxt,szsel,syval,sytxt,sysel) { 
     hwdWin.document.write("<tr bgcolor=\\"#ffffdd\\">");      var hDoc = hwdWin.document;
     hwdWin.document.write("<td align=\\"left\\">");      hDoc.write("<tr bgcolor=\\"#ffffdd\\">");
     hwdWin.document.write("<input name=\\"kwdclr\\" type=\\"radio\\" value=\\""+clrval+"\\" "+clrsel+">&nbsp;"+clrtxt+"</td>");      hDoc.write("<td align=\\"left\\">");
     hwdWin.document.write("<td align=\\"left\\">");      hDoc.write("<input name=\\"kwdclr\\" type=\\"radio\\" value=\\""+clrval+"\\" "+clrsel+">&nbsp;"+clrtxt+"</td>");
     hwdWin.document.write("<input name=\\"kwdsize\\" type=\\"radio\\" value=\\""+szval+"\\" "+szsel+">&nbsp;"+sztxt+"</td>");      hDoc.write("<td align=\\"left\\">");
     hwdWin.document.write("<td align=\\"left\\">");      hDoc.write("<input name=\\"kwdsize\\" type=\\"radio\\" value=\\""+szval+"\\" "+szsel+">&nbsp;"+sztxt+"</td>");
     hwdWin.document.write("<input name=\\"kwdstyle\\" type=\\"radio\\" value=\\""+syval+"\\" "+sysel+">&nbsp;"+sytxt+"</td>");      hDoc.write("<td align=\\"left\\">");
     hwdWin.document.write("</tr>");      hDoc.write("<input name=\\"kwdstyle\\" type=\\"radio\\" value=\\""+syval+"\\" "+sysel+">&nbsp;"+sytxt+"</td>");
       hDoc.write("</tr>");
   }    }
   
   function highlightend() {     function highlightend() { 
     hwdWin.document.write("</table>");      var hDoc = hwdWin.document;
     hwdWin.document.write("</td></tr></table>&nbsp;");      hDoc.write("</table>");
     hwdWin.document.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:updateChoice(1)\\">&nbsp;&nbsp;");      hDoc.write("</td></tr></table>&nbsp;");
     hwdWin.document.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>");      hDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:updateChoice(1)\\">&nbsp;&nbsp;");
     hwdWin.document.write("</form>");      hDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>");
     hwdWin.document.write("</body></html>");      hDoc.write("</form>");
       hDoc.write("</body></html>");
   }    }
   
 </script>  </script>
Line 985  sub submission { Line 1013  sub submission {
     if ($counter == 0) {      if ($counter == 0) {
  &sub_page_js($request);   &sub_page_js($request);
  &sub_page_kw_js($request);   &sub_page_kw_js($request);
    $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ? 
       &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>Problem: </b>'.$ENV{'form.probTitle'}.'</font>'."\n");
   
Line 1015  sub submission { Line 1046  sub submission {
   
  $request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n".   $request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n".
  '<input type="hidden" name="command"    value="handgrade" />'."\n".   '<input type="hidden" name="command"    value="handgrade" />'."\n".
  '<input type="hidden" name="lastCmd"    value="'.$ENV{'form.lastCmd'}.'" />'."\n".   '<input type="hidden" name="saveState"  value="'.$ENV{'form.saveState'}.'" />'."\n".
  '<input type="hidden" name="lastSec"    value="'.$ENV{'form.lastSec'}.'" />'."\n".  
  '<input type="hidden" name="probTitle"  value="'.$ENV{'form.probTitle'}.'" />'."\n".   '<input type="hidden" name="probTitle"  value="'.$ENV{'form.probTitle'}.'" />'."\n".
  '<input type="hidden" name="refresh"    value="off" />'."\n".   '<input type="hidden" name="refresh"    value="off" />'."\n".
  '<input type="hidden" name="symb"       value="'.$symb.'" />'."\n".   '<input type="hidden" name="symb"       value="'.$symb.'" />'."\n".
Line 1040  sub submission { Line 1070  sub submission {
  my ($cts,$prnmsg) = (1,'');   my ($cts,$prnmsg) = (1,'');
  while ($cts <= $ENV{'form.savemsgN'}) {   while ($cts <= $ENV{'form.savemsgN'}) {
     $prnmsg.='<input type="hidden" name="savemsg'.$cts.'" value="'.      $prnmsg.='<input type="hidden" name="savemsg'.$cts.'" value="'.
  ($keyhash{$symb.'_savemsg'.$cts} eq '' ? $ENV{'form.savemsg'.$cts} : $keyhash{$symb.'_savemsg'.$cts}).   ($keyhash{$symb.'_savemsg'.$cts} eq '' ? 
    &Apache::lonfeedback::clear_out_html($ENV{'form.savemsg'.$cts}) :
    &Apache::lonfeedback::clear_out_html($keyhash{$symb.'_savemsg'.$cts})).
  '" />'."\n";   '" />'."\n";
     $cts++;      $cts++;
  }   }
Line 1089  KEYWORDS Line 1121  KEYWORDS
     next if ($ncol <= 0);      next if ($ncol <= 0);
             s/\_/\./g;              s/\_/\./g;
             next if ($record{'resource.'.$_.'.collaborators'} eq '');              next if ($record{'resource.'.$_.'.collaborators'} eq '');
             my (@collaborators) = split(/,?\s+/,              my (@colList) = split(/,?\s+/,
                                    $record{'resource.'.$_.'.collaborators'});                                     $record{'resource.'.$_.'.collaborators'});
               my @collaborators = ();
       foreach (@colList) { #pre-filter list - throw out submitter
    my ($co_name,$co_dom) = split /\@|:/,$_;
    $co_dom = $udom if (! defined($co_dom));
    next if ($co_name eq $uname && $co_dom eq $udom);
    push @collaborators, $_;
       }
             my (@badcollaborators);              my (@badcollaborators);
             if (scalar(@collaborators) != 0) {              if (scalar(@collaborators) != 0) {
                 $result.='<b>Collaborators: </b>';                  $result.='<b>Collaborators: </b>';
                 foreach my $collaborator (@collaborators) {                  foreach my $collaborator (@collaborators) {
                     my ($co_name,$co_dom) = split /\@|:/,$collaborator;                      my ($co_name,$co_dom) = split /\@|:/,$collaborator;
                     $co_dom = $udom if (! defined($co_dom));                      $co_dom = $udom if (! defined($co_dom));
                     next if ($co_name eq $uname && $co_dom eq $udom);  
                     # Doing this grep allows 'fuzzy' specification                      # Doing this grep allows 'fuzzy' specification
                     my @Matches = grep /^$co_name:$co_dom/i,                      my @Matches = grep /^$co_name:$co_dom$/i,
                     keys %$classlist;                      keys %$classlist;
                     if (! scalar(@Matches)) {      if (! scalar(@Matches)) {
                         push @badcollaborators,$collaborator;                          push @badcollaborators,':'.$collaborator.':';
                         next;                          next;
                     }                      }
                     push @col_list, @Matches;                      push @col_list, @Matches;
Line 1122  KEYWORDS Line 1160  KEYWORDS
                         $result .= 'invalid collaborators';                          $result .= 'invalid collaborators';
                     }                      }
                     $result .= ': '.join(', ',@badcollaborators);                      $result .= ': '.join(', ',@badcollaborators);
                           $result .= '</td></tr></table>';                 
                 }                  }
                 if (scalar(@collaborators > $ncol)) {                  if (scalar(@collaborators > $ncol)) {
                     $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>';                      $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>';
                     $result .= 'This student has sumbitted too many '.                      $result .= 'This student has submitted too many '.
                         'collaborators.  Maximum is '.$ncol;                          'collaborators.  Maximum is '.$ncol;
                     $result .= '</td></tr></table>';                      $result .= '</td></tr></table>';
                 }                  }
Line 1215  KEYWORDS Line 1253  KEYWORDS
     $result.='<tr><td bgcolor="#ffffff">'."\n".      $result.='<tr><td bgcolor="#ffffff">'."\n".
  '&nbsp;<a href="javascript:msgCenter(document.SCORE,'.$counter.   '&nbsp;<a href="javascript:msgCenter(document.SCORE,'.$counter.
  ',\''.$msgfor.'\')"; TARGET=_self>'.   ',\''.$msgfor.'\')"; TARGET=_self>'.
  'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a>'.   'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> &nbsp;'.
    '<img src="'.$request->dir_config('lonIconsURL').
    '/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n".
  '<br />&nbsp;(Message will be sent when you click on Save & Next below.)'."\n"    '<br />&nbsp;(Message will be sent when you click on Save & Next below.)'."\n" 
  if ($ENV{'form.handgrade'} eq 'yes');   if ($ENV{'form.handgrade'} eq 'yes');
     $request->print($result);      $request->print($result);
Line 1329  sub processHandGrade { Line 1369  sub processHandGrade {
  my $ctr = 0;   my $ctr = 0;
  while ($ctr < $ngrade) {   while ($ctr < $ngrade) {
     my ($uname,$udom) = split(/:/,$ENV{'form.unamedom'.$ctr});      my ($uname,$udom) = split(/:/,$ENV{'form.unamedom'.$ctr});
     my ($errorflag) = &saveHandGrade($request,$url,$symb,$uname,$udom,$ctr);      my ($errorflag,$pts,$wgt) = &saveHandGrade($request,$url,$symb,$uname,$udom,$ctr);
     if ($errorflag eq 'no_score') {      if ($errorflag eq 'no_score') {
  $ctr++;   $ctr++;
  next;   next;
     }      }
   
     my $includemsg = $ENV{'form.includemsg'.$ctr};      my $includemsg = $ENV{'form.includemsg'.$ctr};
     my ($subject,$message,$msgstatus) = ('','','');      my ($subject,$message,$msgstatus) = ('','','');
     if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) {      if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) {
Line 1343  sub processHandGrade { Line 1382  sub processHandGrade {
  foreach (@msgnum) {   foreach (@msgnum) {
     $message.=$ENV{'form.'.$_} if ($_ =~ /savemsg|newmsg/ && $_ ne '');      $message.=$ENV{'form.'.$_} if ($_ =~ /savemsg|newmsg/ && $_ ne '');
  }   }
  #$message =~ s/\s+/ /g;   $message =&Apache::lonfeedback::clear_out_html($message);
    $message.="\n\nPoint".($pts > 1 ? 's':'').' awarded = '.$pts.' out of '.$wgt;
    $message.=" for <a href=\"".
       &Apache::lonnet::clutter($url).
       "?symb=$symb\">$ENV{'form.probTitle'}</a>";
  $msgstatus = &Apache::lonmsg::user_normal_msg ($uname,$udom,   $msgstatus = &Apache::lonmsg::user_normal_msg ($uname,$udom,
        $ENV{'form.msgsub'},$message);         $ENV{'form.msgsub'},$message);
     }      }
Line 1481  sub processHandGrade { Line 1524  sub processHandGrade {
 #---- Save the score and award for each student, if changed  #---- Save the score and award for each student, if changed
 sub saveHandGrade {  sub saveHandGrade {
     my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter) = @_;      my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter) = @_;
     my %record=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},$domain,$stuname);      my %record     = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$domain,$stuname);
     my %newrecord;      my %newrecord  = ();
       my ($pts,$wgt) = ('','');
     foreach (split(/:/,$ENV{'form.partlist'.$newflg})) {      foreach (split(/:/,$ENV{'form.partlist'.$newflg})) {
  if ($ENV{'form.GD_SEL'.$newflg.'_'.$_} eq 'excused') {   if ($ENV{'form.GD_SEL'.$newflg.'_'.$_} eq 'excused') {
     if ($record{'resource.'.$_.'.solved'} ne 'excused') {      if ($record{'resource.'.$_.'.solved'} ne 'excused') {
Line 1492  sub saveHandGrade { Line 1536  sub saveHandGrade {
  }   }
     }      }
  } else {   } else {
     my $pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ?       $pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? 
        $ENV{'form.GD_BOX'.$newflg.'_'.$_} :       $ENV{'form.GD_BOX'.$newflg.'_'.$_} : 
        $ENV{'form.RADVAL'.$newflg.'_'.$_});      $ENV{'form.RADVAL'.$newflg.'_'.$_});
     return 'no_score' if ($pts eq '' && $ENV{'form.GD_SEL'.$newflg.'_'.$_} eq '');      return 'no_score' if ($pts eq '' && $ENV{'form.GD_SEL'.$newflg.'_'.$_} eq '');
     my $wgt = $ENV{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 :       $wgt = $ENV{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 : 
  $ENV{'form.WGT'.$newflg.'_'.$_};   $ENV{'form.WGT'.$newflg.'_'.$_};
     my $partial= $pts/$wgt;      my $partial= $pts/$wgt;
     $newrecord{'resource.'.$_.'.awarded'}  = $partial       $newrecord{'resource.'.$_.'.awarded'}  = $partial 
Line 1519  sub saveHandGrade { Line 1563  sub saveHandGrade {
  &Apache::lonnet::cstore(\%newrecord,$symb,   &Apache::lonnet::cstore(\%newrecord,$symb,
  $ENV{'request.course.id'},$domain,$stuname);   $ENV{'request.course.id'},$domain,$stuname);
     }      }
     return '';      return '',$pts,$wgt;
 }  }
   
 #--------------------------------------------------------------------------------------  #--------------------------------------------------------------------------------------
Line 1715  sub viewgrades { Line 1759  sub viewgrades {
  '<input type="hidden" name="url"     value="'.$url.'" />'."\n".   '<input type="hidden" name="url"     value="'.$url.'" />'."\n".
  '<input type="hidden" name="command" value="editgrades" />'."\n".   '<input type="hidden" name="command" value="editgrades" />'."\n".
  '<input type="hidden" name="section" value="'.$ENV{'form.section'}.'" />'."\n".   '<input type="hidden" name="section" value="'.$ENV{'form.section'}.'" />'."\n".
  '<input type="hidden" name="lastCmd" value="'.$ENV{'form.lastCmd'}.'" />'."\n".   '<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n".
  '<input type="hidden" name="lastSec" value="'.$ENV{'form.lastSec'}.'" />'."\n".  
  '<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n";   '<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n";
   
     $result.='<h3>Assign Common Grade To ';      $result.='<h3>Assign Common Grade To ';
Line 1807  sub viewgrades { Line 1850  sub viewgrades {
   
     #get info for each student      #get info for each student
     #list all the students - with points and grade status      #list all the students - with points and grade status
     my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');      my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1');
     my $ctr = 0;      my $ctr = 0;
     foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {      foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
  my ($uname,$udom) = split(/:/);   my ($uname,$udom) = split(/:/);
Line 2018  sub split_part_type { Line 2061  sub split_part_type {
 #  #
 #-------------------------- Next few routines handles grading by csv upload  #-------------------------- Next few routines handles grading by csv upload
 #  #
 #--- Menu to upload a csv scores ---  
 sub upcsvScores_form {  
     my ($request) = shift;  
     my ($symb,$url)=&get_symb_and_url($request);  
     if (!$symb) {return '';}  
     my $result =<<CSVFORMJS;  
 <script type="text/javascript" language="javascript">  
     function checkUpload(formname) {  
  if (formname.upfile.value == "") {  
     alert("Please use the browse button to select a file from your local directory.");  
     return false;  
  }  
  formname.submit();  
  if (navigator.appName !="Netscape") {self.close()}; //if netscape if appears to close before submit!!!  
     // any suggestion how to get around this??  
     }  
     </script>  
 CSVFORMJS  
     $ENV{'form.probTitle'} = &Apache::lonnet::metadata($url,'title');  
     $result.='<table width=100% border=0><tr><td bgcolor=#777777>'."\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'}.  
  '.</b></td></tr>'."\n";  
     $result.='<tr bgcolor=#ffffe6><td>'."\n";  
     my $upfile_select=&Apache::loncommon::upfile_select_html();  
     $result.=<<ENDUPFORM;  
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload" target="LONcatInfo">  
 <input type="hidden" name="symb" value="$symb" />  
 <input type="hidden" name="url" value="$url" />  
 <input type="hidden" name="command" value="csvuploadmap" />  
 <input type="hidden" name="probTitle" value="$ENV{'form.probTitle'}" />  
 $upfile_select  
 <br /><input type="button" onClick="javascript:checkUpload(this.form);" value="Upload Scores" />&nbsp;  
 <input type="button" value="Cancel" onClick="self.close()">  
   
 </form>  
 ENDUPFORM  
     $result.='</td></tr></table>'."\n";  
     $result.='</td></tr></table>'."\n";  
     return $result;  
 }  
   
 #--- Javascript to handle csv upload  #--- Javascript to handle csv upload
 sub csvupload_javascript_reverse_associate {  sub csvupload_javascript_reverse_associate {
   return(<<ENDPICK);    return(<<ENDPICK);
Line 2175  to this page if the data selected is ins Line 2176  to this page if the data selected is ins
                                        value="$ENV{'form.upfile_associate'}" />                                         value="$ENV{'form.upfile_associate'}" />
 <input type="hidden" name="symb"       value="$symb" />  <input type="hidden" name="symb"       value="$symb" />
 <input type="hidden" name="url"        value="$url" />  <input type="hidden" name="url"        value="$url" />
 <input type="hidden" name="lastCmd"    value="$ENV{'form.lastCmd'}" />  <input type="hidden" name="saveState"  value="$ENV{'form.saveState'}" />
 <input type="hidden" name="lastSec"    value="$ENV{'form.lastSec'}" />  
 <input type="hidden" name="probTitle"  value="$ENV{'form.probTitle'}" />  <input type="hidden" name="probTitle"  value="$ENV{'form.probTitle'}" />
 <input type="hidden" name="command"    value="csvuploadassign" />  <input type="hidden" name="command"    value="csvuploadassign" />
 <hr />  <hr />
Line 2323  sub pickStudentPage { Line 2323  sub pickStudentPage {
 <script type="text/javascript" language="javascript">  <script type="text/javascript" language="javascript">
   
 function checkPickOne(formname) {  function checkPickOne(formname) {
     var user = radioSelection(formname.student);      if (radioSelection(formname.student) == null) {
     if (user == null) {  
  alert("Please select the student you wish to grade.");   alert("Please select the student you wish to grade.");
  return;   return;
     }      }
Line 2336  function checkPickOne(formname) { Line 2335  function checkPickOne(formname) {
   
 function radioSelection(radioButton) {  function radioSelection(radioButton) {
     var selection=null;      var selection=null;
     for (var i=0; i<radioButton.length; i++) {      if (radioButton.length > 1) {
         if (radioButton[i].checked) {   for (var i=0; i<radioButton.length; i++) {
             return radioButton[i].value;      if (radioButton[i].checked) {
         }   return radioButton[i].value;
       }
    }
       } else {
    if (radioButton.checked) return radioButton.value;
     }      }
     return selection;      return selection;
 }  }
       
 function pullDownSelection(selectOne) {  function pullDownSelection(selectOne) {
     var selection=null;      var selection="";
     for (var i=0; i<selectOne.length; i++) {      if (selectOne.length > 1) {
         if (selectOne[i].selected) {   for (var i=0; i<selectOne.length; i++) {
             return selectOne[i].value;      if (selectOne[i].selected) {
         }   return selectOne[i].value;
       }
    }
       } else {
    if (selectOne.selected) return selectOne.value;
     }      }
 }  }
 </script>  </script>
Line 2363  LISTJAVASCRIPT Line 2370  LISTJAVASCRIPT
     my $result='<h3><font color="#339933">&nbsp;'.      my $result='<h3><font color="#339933">&nbsp;'.
  'Manual Grading by Page or Sequence</font></h3>';   'Manual Grading by Page or Sequence</font></h3>';
   
     $result.='<form action="/adm/grades" method="post" name="displayPage">'."<br>\n";      $result.='<form action="/adm/grades" method="post" name="displayPage">'."\n";
     $result.='&nbsp;<b>Problems from:</b> <select name="selectpage">'."\n";      $result.='&nbsp;<b>Problems from:</b> <select name="selectpage">'."\n";
     my ($titles,$symbx) = &getSymbMap();      my ($titles,$symbx) = &getSymbMap($request);
     my ($curpage,$type,$mapId) = ($symb =~ /(.*?\.(page|sequence))___(\d+)___/);       my ($curpage,$type,$mapId) = ($symb =~ /(.*?\.(page|sequence))___(\d+)___/); 
     my $ctr=0;      my $ctr=0;
     foreach (@$titles) {      foreach (@$titles) {
Line 2397  LISTJAVASCRIPT Line 2404  LISTJAVASCRIPT
     $result.='<input type="hidden" name="section"     value="'.$getsec.'" />'."\n".      $result.='<input type="hidden" name="section"     value="'.$getsec.'" />'."\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.'" />'."<br><br>\n".   '<input type="hidden" name="symb"    value="'.$symb.'" />'."\n".
  '<input type="hidden" name="lastCmd" value="'.$ENV{'form.lastCmd'}.'" />'."\n".   '<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."<br />\n";
  '<input type="hidden" name="lastSec" value="'.$ENV{'form.lastSec'}.'" />'."\n";  
   
     $result.='<br />&nbsp;<input type="button" '.      $result.='&nbsp;<input type="button" '.
  'onClick="javascript:checkPickOne(this.form);"value="Submit" /><br />'."\n";   'onClick="javascript:checkPickOne(this.form);"value="Submit" /><br />'."\n";
   
     $request->print($result);      $request->print($result);
   
     my $studentTable.='&nbsp;<b>Select a Student you wish to grade</b><br>'.      my $studentTable.='&nbsp;<b>Select a student you wish to grade</b><br>'.
  '<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><b>&nbsp;Fullname <font color="#999999">(username)</font></b></td>'.   '<td><b>&nbsp;Fullname <font color="#999999">(username)</font></b></td>'.
Line 2414  LISTJAVASCRIPT Line 2420  LISTJAVASCRIPT
  '<td><b>&nbsp;Fullname <font color="#999999">(username)</font></b></td>'.   '<td><b>&nbsp;Fullname <font color="#999999">(username)</font></b></td>'.
  '<td><b>&nbsp;Fullname <font color="#999999">(username)</font></b></td></tr>';   '<td><b>&nbsp;Fullname <font color="#999999">(username)</font></b></td></tr>';
     
     my (undef,undef,$fullname) = &getclasslist($getsec,'0');      my (undef,undef,$fullname) = &getclasslist($getsec,'1');
     my $ptr = 1;      my $ptr = 1;
     foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {      foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
  my ($uname,$udom) = split(/:/,$student);   my ($uname,$udom) = split(/:/,$student);
Line 2438  LISTJAVASCRIPT Line 2444  LISTJAVASCRIPT
 }  }
   
 sub getSymbMap {  sub getSymbMap {
     my $navmap = Apache::lonnavmaps::navmap-> new(      my ($request) = @_;
   $ENV{'request.course.fn'}.'.db',      my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db',
   $ENV{'request.course.fn'}.'_parms.db',1, 1);    $ENV{'request.course.fn'}.'_parms.db',1, 1);
   
     my $res = $navmap->firstResource(); # temp resource to access constants      my $res = $navmap->firstResource(); # temp resource to access constants
Line 2504  sub displayPage { Line 2510  sub displayPage {
     my $cnum      = $ENV{"course.$ENV{'request.course.id'}.num"};      my $cnum      = $ENV{"course.$ENV{'request.course.id'}.num"};
     my $getsec    = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};      my $getsec    = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};
     my $pageTitle = $ENV{'form.page'};      my $pageTitle = $ENV{'form.page'};
     my (undef,undef,$fullname) = &getclasslist($getsec,'0');      my (undef,undef,$fullname) = &getclasslist($getsec,'1');
     my ($uname,$udom) = split(/:/,$ENV{'form.student'});      my ($uname,$udom) = split(/:/,$ENV{'form.student'});
   
     my $result='<h3><font color="#339933">&nbsp;'.$ENV{'form.title'}.'</font></h3>';      my $result='<h3><font color="#339933">&nbsp;'.$ENV{'form.title'}.'</font></h3>';
Line 2514  sub displayPage { Line 2520  sub displayPage {
     &sub_page_js($request);      &sub_page_js($request);
     $request->print($result);      $request->print($result);
   
     my $navmap = Apache::lonnavmaps::navmap-> new(      my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db',
   $ENV{'request.course.fn'}.'.db',  
   $ENV{'request.course.fn'}.'_parms.db',1, 1);    $ENV{'request.course.fn'}.'_parms.db',1, 1);
     my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});      my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});
     my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps      my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
Line 2530  sub displayPage { Line 2535  sub displayPage {
  '<input type="hidden" name="title"   value="'.$ENV{'form.title'}.'" />'."\n".   '<input type="hidden" name="title"   value="'.$ENV{'form.title'}.'" />'."\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".
  '<input type="hidden" name="lastCmd" value="'.$ENV{'form.lastCmd'}.'" />'."\n".   '<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n";
  '<input type="hidden" name="lastSec" value="'.$ENV{'form.lastSec'}.'" />'."\n";  
   
     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" />';
Line 2563  sub displayPage { Line 2567  sub displayPage {
     } else {      } else {
  my $companswer = &Apache::loncommon::get_student_answers(   my $companswer = &Apache::loncommon::get_student_answers(
  $symbx,$uname,$udom,$ENV{'request.course.id'});   $symbx,$uname,$udom,$ENV{'request.course.id'});
  $companswer=~s|<form(.*?)>||g;   $companswer =~ s|<form(.*?)>||g;
  $companswer=~s|</form>||g;   $companswer =~ s|</form>||g;
   
 # while ($companswer =~ /(<a href\=\"javascript:newWindow.*?Script Vars<\/a>)/s) { #<a href="javascript:newWindow</a>  # while ($companswer =~ /(<a href\=\"javascript:newWindow.*?Script Vars<\/a>)/s) { #<a href="javascript:newWindow</a>
 #    $request->print('match='.$1.'<br>');  #    $request->print('match='.$1.'<br>');
Line 2593  sub displayPage { Line 2597  sub displayPage {
  my @displaySub = ();   my @displaySub = ();
  foreach my $partid (@{$parts}) {   foreach my $partid (@{$parts}) {
     my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys;      my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys;
       next if ($record{"$version:resource.$partid.solved"} eq '');
   #    next if ($record{"$version:resource.$partid.award"} eq 'APPROX_ANS' && 
   #     $record{"$version:resource.$partid.solved"} eq '');
     $displaySub[0].=(exists $record{$version.':'.$matchKey[0]}) ?       $displaySub[0].=(exists $record{$version.':'.$matchKey[0]}) ? 
  '<b>Part:</b> '.$partid.'&nbsp;<b>Submission:</b>&nbsp;'   '<b>Part&nbsp;'.$partid.'&nbsp;'.
  .$record{$version.':'.$matchKey[0]}.'<br />' : '';   ($record{"$version:resource.$partid.tries"} eq '' ? 'Trial&nbsp;not&nbsp;counted' :
    'Trial&nbsp;'.$record{"$version:resource.$partid.tries"}).'</b>&nbsp; '.
    $record{$version.':'.$matchKey[0]}.'<br />' : '';
     $displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ?      $displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ?
  '<b>Part:</b> '.$partid.'&nbsp;'.   '<b>Part&nbsp;'.$partid.'</b> &nbsp;'.
  $record{"$version:resource.$partid.award"}.'/'.   $record{"$version:resource.$partid.award"}.'/'.
  $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"}) ?
Line 2659  sub updateGradeByPage { Line 2668  sub updateGradeByPage {
     my $cnum      = $ENV{"course.$ENV{'request.course.id'}.num"};      my $cnum      = $ENV{"course.$ENV{'request.course.id'}.num"};
     my $getsec    = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};      my $getsec    = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};
     my $pageTitle = $ENV{'form.page'};      my $pageTitle = $ENV{'form.page'};
     my (undef,undef,$fullname) = &getclasslist($getsec,'0');      my (undef,undef,$fullname) = &getclasslist($getsec,'1');
     my ($uname,$udom) = split(/:/,$ENV{'form.student'});      my ($uname,$udom) = split(/:/,$ENV{'form.student'});
   
     my $result='<h3><font color="#339933">&nbsp;'.$ENV{'form.title'}.'</font></h3>';      my $result='<h3><font color="#339933">&nbsp;'.$ENV{'form.title'}.'</font></h3>';
Line 2668  sub updateGradeByPage { Line 2677  sub updateGradeByPage {
   
     $request->print($result);      $request->print($result);
   
     my $navmap = Apache::lonnavmaps::navmap-> new(      my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db',
   $ENV{'request.course.fn'}.'.db',  
   $ENV{'request.course.fn'}.'_parms.db',1, 1);    $ENV{'request.course.fn'}.'_parms.db',1, 1);
     my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});      my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});
     my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps      my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
Line 2754  sub updateGradeByPage { Line 2762  sub updateGradeByPage {
     }      }
   
     $studentTable.='</td></tr></table></td></tr></table>';      $studentTable.='</td></tr></table></td></tr></table>';
     $studentTable.=($changeflag == 0 ? 'No score was changed or updated.' :  
     'The scores were changed for '.  
     $changeflag.' problem'.($changeflag == 1 ? '.' : 's.'));  
     $studentTable.=&show_grading_menu_form($ENV{'form.symb'},$ENV{'form.url'});      $studentTable.=&show_grading_menu_form($ENV{'form.symb'},$ENV{'form.url'});
     $request->print($studentTable);      my $grademsg=($changeflag == 0 ? 'No score was changed or updated.' :
     'The scores were changed for '.
     $changeflag.' problem'.($changeflag == 1 ? '.' : 's.'));
       $request->print($grademsg.$studentTable);
   
     return '';      return '';
 }  }
Line 2767  sub updateGradeByPage { Line 2775  sub updateGradeByPage {
 #  #
 #-------------------------------------------------------------------  #-------------------------------------------------------------------
   
   #--------------------Scantron Grading-----------------------------------
   #
   #------ start of section for handling grading by page/sequence ---------
   
   sub getSequenceDropDown {
       my ($request,$symb)=@_;
       my $result='<select name="selectpage">'."\n";
       my ($titles,$symbx) = &getSymbMap($request);
       my ($curpage,$type,$mapId) = ($symb =~ /(.*?\.(page|sequence))___(\d+)___/); 
       my $ctr=0;
       foreach (@$titles) {
    my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/);
    $result.='<option value="'.$$symbx{$_}.'" '.
       ($$symbx{$_} =~ /$curpage$/ ? 'selected="on"' : '').
       '>'.$showtitle.'</option>'."\n";
    $ctr++;
       }
       $result.= '</select>';
       return $result;
   }
   
   sub scantron_selectphase {
       my ($r) = @_;
       my ($symb,$url)=&get_symb_and_url($r);
       if (!$symb) {return '';}
       my $sequence_selector=&getSequenceDropDown($r,$symb);
       my $result;
       $result.= <<SCANTRONFORM;
   <form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantronupload">
     <input type="hidden" name="symb" value="$symb" />
     <input type="hidden" name="url" value="$url" />
     <input type="hidden" name="command" value="scantron_configphase" />
     <table width="100%" border="0">
       <tr>
         <td bgcolor="#777777">
           <table width="100%" border="0">
             <tr bgcolor="#e6ffff">
               <td>
                 &nbsp;<b>Specify file location and which Folder/Sequence to grade</b>
               </td>
             </tr>
             <tr bgcolor="#ffffe6">
               <td>
                  Sequence to grade: $sequence_selector
       </td>
             </tr>
             <tr bgcolor="#ffffe6">
               <td>
    <!-- FIXME I need to present a list of files from a specfic directory that has been configured, or any existing delay queues -->
    Filename of scoring office file:
    <select name="selectfile">
       <option value="filname1">filename1</option>
       <option value="filname2">filename2</option>
    </select>
       </td>
             </tr>
           </table>
         </td>
       </tr>
     </table>
     <input type="submit" value="Submit" />
   </form>
   SCANTRONFORM
   
       return $result;
   }
   
   sub scantron_configphase {
       my ($r) = @_;
       my $sequence=$ENV{'form.selectpage'};
       my $result;
       $result.="got page $sequence";
       $Apache::lonxml::debug=1;
       &Apache::lonhomework::showhash(%ENV);
       $Apache::lonxml::debug=0;
       #FIXME Needs to present some lines from the file and allow the instructor to specify which columns represent what data, possibly have some nice defaults setup, probably should do a pass through all problems for a student to get an idea of how many questions there are, and homw many lines we'll have,
       return $result;
   }
   
   sub scantron_process_students {
       #FIXME
       #   loop through students, {
       #      Check if studnet info valid, if not add line to delay queue
       #      foreach question 'submit' the students answer to the server
       #             through grade target {
       #         generate data to pass back that includes grade recevied
       #      }
       #   }
       #   loop through delay queue {
       #      print out each delayed student with interface to select how
       #          to repair student provided info
       #       Expected errors include
       #           1 bad/no stuid/username
       #           2 invalid bubblings
       #   }
       # if delay queue exists 2 submits one to process delayed students one
       #     to ignore delayed students, possibly saving the delay queue for later
   
   }
   #-------- end of section for handling grading scantron forms -------
   #
   #-------------------------------------------------------------------
   
   
 #-------------------------- Menu interface -------------------------  #-------------------------- Menu interface -------------------------
 #  #
 #--- Show a Grading Menu button - Calls the next routine ---  #--- Show a Grading Menu button - Calls the next routine ---
Line 2775  sub show_grading_menu_form { Line 2887  sub show_grading_menu_form {
     my $result.='<form action="/adm/grades" method="post">'."\n".      my $result.='<form action="/adm/grades" method="post">'."\n".
  '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".   '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
  '<input type="hidden" name="url" value="'.$url.'" />'."\n".   '<input type="hidden" name="url" value="'.$url.'" />'."\n".
  '<input type="hidden" name="lastCmd" value="'.$ENV{'form.lastCmd'}.'" />'."\n".   '<input type="hidden" name="saveState"  value="'.$ENV{'form.saveState'}.'" />'."\n".
  '<input type="hidden" name="lastSec" value="'.$ENV{'form.lastSec'}.'" />'."\n".  
  '<input type="hidden" name="command" value="gradingmenu" />'."\n".   '<input type="hidden" name="command" value="gradingmenu" />'."\n".
  '<input type="submit" name="submit" value="Grading Menu" />'."\n".   '<input type="submit" name="submit" value="Grading Menu" />'."\n".
  '</form>'."\n";   '</form>'."\n";
     return $result;      return $result;
 }  }
   
   # -- Retrieve choices for grading form
   sub savedState {
       my %savedState = ();
       if ($ENV{'form.saveState'}) {
    foreach (split(/:/,$ENV{'form.saveState'})) {
       my ($key,$value) = split(/=/,$_,2);
       $savedState{$key} = $value;
    }
       }
       return \%savedState;
   }
   
 #--- Displays the main menu page -------  #--- Displays the main menu page -------
 sub gradingmenu {  sub gradingmenu {
     my ($request) = @_;      my ($request) = @_;
     my ($symb,$url)=&get_symb_and_url($request);      my ($symb,$url)=&get_symb_and_url($request);
     if (!$symb) {return '';}      if (!$symb) {return '';}
       my $probTitle = &Apache::lonnet::gettitle($symb);
   
     $request->print(<<GRADINGMENUJS);      $request->print(<<GRADINGMENUJS);
 <script type="text/javascript" language="javascript">  <script type="text/javascript" language="javascript">
     function checkChoice(formname) {      function checkChoice(formname) {
  var cmd = formname.command;   var cmd = formname.command;
  formname.lastCmd.value = radioSelection(formname.command);   formname.saveState.value = "saveCmd="+radioSelection(cmd)+":saveSec="+pullDownSelection(formname.section)+
  formname.lastSec.value = pullDownSelection(formname.section);      ":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.status);
  if (cmd[0].checked || cmd[1].checked || cmd[2].checked) {   if (cmd[0].checked || cmd[1].checked || cmd[2].checked || cmd[4].checked) formname.submit();
     formname.submit();  
  }  
   
  if (cmd[3].checked) {   if (cmd[3].checked) browseAndUpload();
     var url = "/adm/grades?command=csvform&symb="+formname.symb.value+"&url="+formname.url.value;  
     var options = "width=620,height=340,screenx=70,screeny=75,";  
     options += "resizable=no,scrollbars=no,status=no,";  
     options += "menubar=no,toolbar=no,location=no,directories=no";  
     var newWin = window.open(url, "CSVFile", options);  
     newWin.focus();  
  }  
   
  if (cmd[4].checked) {   if (cmd[5].checked) {
     if (!checkReceiptNo(formname,'notOK')) { return false;}      if (!checkReceiptNo(formname,'notOK')) { return false;}
     formname.submit();      formname.submit();
  }   }
Line 2825  sub gradingmenu { Line 2940  sub gradingmenu {
     formname.receipt.focus();      formname.receipt.focus();
     return false;      return false;
  }   }
  formname.command[4].checked = true;   formname.command[5].checked = true;
  return true;   return true;
     }      }
   
     function radioSelection(radioButton) {      function radioSelection(radioButton) {
  var selection=null;   var selection=null;
  for (var i=0; i<radioButton.length; i++) {   if (radioButton.length > 1) {
     if (radioButton[i].checked) {      for (var i=0; i<radioButton.length; i++) {
  return radioButton[i].value;   if (radioButton[i].checked) {
       return radioButton[i].value;
    }
     }      }
    } else {
       if (radioButton.checked) return radioButton.value;
  }   }
  return selection;   return selection;
     }      }
   
     function pullDownSelection(selectOne) {      function pullDownSelection(selectOne) {
  var selection="";   var selection="";
  for (var i=0; i<selectOne.length; i++) {   if (selectOne.length > 1) {
     if (selectOne[i].selected) {      for (var i=0; i<selectOne.length; i++) {
  return selectOne[i].value;   if (selectOne[i].selected) {
       return selectOne[i].value;
    }
     }      }
    } else {
       if (selectOne.selected) return selectOne.value;
  }   }
     }      }
   
       function browseAndUpload() {
    bNLoad = window.open('', 'BrowseAndUpload', 'toolbar=no,location=no,scrollbars=no,width=550,height=200,screenx=100,screeny=75');
    bNLoad.focus();
    var lDoc = bNLoad.document;
    lDoc.write("<html><head>");
    lDoc.write("<title>Browse And Upload</title>");
   
    lDoc.write("<script language=javascript>");
    lDoc.write("function checkUpload(formname) {");
   
    lDoc.write("  if (formname.upfile.value == \\"\\") {");
    lDoc.write("     alert(\\"Please use the browse button to select a file from your local directory.\\");");
    lDoc.write("     return false;");
    lDoc.write("   }");
    lDoc.write("   var openformname = opener.document.gradingMenu;");
    lDoc.write("   formname.saveState.value = \\"saveCmd=\\"+opener.radioSelection(openformname.command)+\\":saveSec=\\"+opener.pullDownSelection(openformname.section)+\\":saveSub=\\"+opener.radioSelection(openformname.submitonly)+\\":saveStatus=\\"+opener.pullDownSelection(openformname.status);");
    lDoc.write("   document.gradesupload.submit();");
    lDoc.write("   if (navigator.appName !=\\"Netscape\\") {self.close()};");
    lDoc.write("   setTimeout('self.close()',750)"); 
    lDoc.write("}");
   
    lDoc.write("<");
    lDoc.write("/script>");
   
    lDoc.write("</head><body bgcolor=white>");
    lDoc.write("<form method=\\"post\\" enctype=\\"multipart/form-data\\" action=\\"/adm/grades\\" name=\\"gradesupload\\" target=\\"LONcatInfo\\">");
    lDoc.write("<input type=\\"hidden\\" name=\\"symb\\"       value=\\"$symb\\">");
    lDoc.write("<input type=\\"hidden\\" name=\\"url\\"        value=\\"$url\\">");
    lDoc.write("<input type=\\"hidden\\" name=\\"probTitle\\"  value=\\"$probTitle\\">");
    lDoc.write("<input type=\\"hidden\\" name=\\"saveState\\"  value=\\"\\">");
    lDoc.write("<input type=\\"hidden\\" name=\\"command\\"    value=\\"csvuploadmap\\">");
   
    lDoc.write("<font color=\\"green\\" size=+1>&nbsp;<b>Specify a file containing the class scores for problem - $probTitle</b></font><br><br>");
   
    lDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">");
    lDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">");
    lDoc.write("<td>");
    lDoc.write("<input type=\\"file\\" name=\\"upfile\\" size=\\"50\\" />");
    lDoc.write("<br />Type: <select name=\\"upfiletype\\">");
           lDoc.write("<option value=\\"csv\\">CSV (comma separated values, spreadsheet)</option>");
           lDoc.write("<option value=\\"space\\">Space separated</option>");
           lDoc.write("<option value=\\"tab\\">Tabulator separated</option>");
           lDoc.write("<option value=\\"xml\\">HTML/XML</option>");
           lDoc.write("</select>");
           lDoc.write("</td></tr></table>");
           lDoc.write("</td></tr></table>&nbsp;");
           lDoc.write("<input type=\\"button\\" value=\\"Upload Scores\\" onClick=\\"javascript:checkUpload(this.form)\\">&nbsp;&nbsp;");
           lDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>");
           lDoc.write("</form>");
           lDoc.write("</body></html>");
     }
 </script>  </script>
 GRADINGMENUJS  GRADINGMENUJS
   
     my $probTitle = &Apache::lonnet::metadata($ENV{'form.url'},'title');  
     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">'.   '<table border="0">'.
  '<tr><td colspan=3><font size=+1><b>Problem: </b>'.$probTitle.'</font></td></tr>';   '<tr><td colspan=3><font size=+1><b>Problem: </b>'.$probTitle.'</font></td></tr>'."\n";
     my ($partlist,$handgrade) = &response_type($url);      my ($partlist,$handgrade) = &response_type($url);
     my ($resptype,$hdgrade)=('','no');      my ($resptype,$hdgrade)=('','no');
     for (sort keys(%$handgrade)) {      for (sort keys(%$handgrade)) {
Line 2864  GRADINGMENUJS Line 3038  GRADINGMENUJS
     '<td><b>Type: </b>'.$responsetype.'</td>'.      '<td><b>Type: </b>'.$responsetype.'</td>'.
     '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';      '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';
     }      }
     $result.='</table>';      $result.='</table>'."\n";
   
     my ($classlist,$sections) = &getclasslist('all','0');      my (undef,$sections) = &getclasslist('all','0');
     my $lastCmd = ($ENV{'form.lastCmd'} eq '' ? 'pickStudentPage' : $ENV{'form.lastCmd'});      my $savedState = &savedState();
     my $lastSec = ($ENV{'form.lastSec'} eq '' ? 'all' : $ENV{'form.lastSec'});      my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'pickStudentPage' : $$savedState{'saveCmd'});
       my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'});
       my $saveSub = ($$savedState{'saveSub'} eq '' ? 'yes' : $$savedState{'saveSub'});
       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".
  '<input type="hidden" name="symb"        value="'.$symb.'" />'."\n".   '<input type="hidden" name="symb"        value="'.$symb.'" />'."\n".
Line 2876  GRADINGMENUJS Line 3053  GRADINGMENUJS
  '<input type="hidden" name="response"    value="'.$resptype.'" />'."\n".   '<input type="hidden" name="response"    value="'.$resptype.'" />'."\n".
  '<input type="hidden" name="handgrade"   value="'.$hdgrade.'" />'."\n".   '<input type="hidden" name="handgrade"   value="'.$hdgrade.'" />'."\n".
  '<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".   '<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".
  '<input type="hidden" name="lastCmd"     value="" />'."\n".   '<input type="hidden" name="saveState"   value="" />'."\n".
  '<input type="hidden" name="lastSec"     value="" />'."\n".  
  '<input type="hidden" name="showgrading" value="yes" />'."\n";   '<input type="hidden" name="showgrading" value="yes" />'."\n";
   
     $result.='<table width=100% border=0><tr><td bgcolor=#777777>'."\n".      $result.='<table width=100% border=0><tr><td bgcolor=#777777>'."\n".
Line 2888  GRADINGMENUJS Line 3064  GRADINGMENUJS
     $result.='<table width=100% border=0>'.      $result.='<table width=100% border=0>'.
  '<tr bgcolor="#ffffe6" valign="top"><td colspan="2">'.   '<tr bgcolor="#ffffe6" valign="top"><td colspan="2">'.
  '<input type="radio" name="command" value="pickStudentPage" '.   '<input type="radio" name="command" value="pickStudentPage" '.
  ($lastCmd eq 'pickStudentPage' ? 'checked' : '').'> '.   ($saveCmd eq 'pickStudentPage' ? 'checked' : '').'> '.
  'Handgrade/View Submission for a student by page/sequence</td></tr>'."\n".   'Handgrade/View Submission for a student by page/sequence</td></tr>'."\n".
   
  '<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.   '<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
  '<input type="radio" name="command" value="viewgrades" '.   '<input type="radio" name="command" value="viewgrades" '.
  ($lastCmd eq 'viewgrades' ? 'checked' : '').'> '.   ($saveCmd eq 'viewgrades' ? 'checked' : '').'> '.
  'Grade by section or class</td></tr>'."\n".   'Grade by section or class</td></tr>'."\n".
   
  '<tr bgcolor="#ffffe6"valign="top"><td><input type="radio" name="command" value="submission" '.   '<tr bgcolor="#ffffe6"valign="top"><td><input type="radio" name="command" value="submission" '.
  ($lastCmd eq 'submission' ? 'checked' : '').'> '.   ($saveCmd eq 'submission' ? 'checked' : '').'> '.
  ($hdgrade eq 'yes' ? 'View/Grade essay response of' : 'View').   ($hdgrade eq 'yes' ? 'View/Grade essay response of' : 'View').
  ' an individual student </td>'."\n".   ' an individual student </td>'."\n".
  '<td>-->&nbsp;For students who has: '.   '<td>-->&nbsp;For students who has: '.
  '<input type="radio" name="submitonly" value="yes" checked> submitted'.   '<input type="radio" name="submitonly" value="yes" '.
  '<input type="radio" name="submitonly" value="all"> everybody</td></tr>'."\n".   ($saveSub eq 'yes' ? 'checked' : '').' /> submitted'.
    '<input type="radio" name="submitonly" value="all" '.
    ($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n".
   
  '<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.   '<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
  '<input type="radio" name="command" value="csvupload" '.   '<input type="radio" name="command" value="csvupload" '.
  ($lastCmd eq 'csvupload' ? 'checked' : '').'> '.   ($saveCmd eq 'csvupload' ? 'checked' : '').'> '.
  'Upload scores from file</td></tr>'."\n";   'Upload scores from file</td></tr>'."\n";
   
       $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
    '<input type="radio" name="command" value="scantron_selectphase" /> '.
           'Grade scantron forms</td></tr>'."\n";
   
     if ((&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) && ($symb)) {      if ((&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) && ($symb)) {
  $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.   $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
     '<input type="radio" name="command" value="verify" onSelect="javascript:this.form.receipt.focus()" '.      '<input type="radio" name="command" value="verify" onChecked="javascript:this.form.receipt.focus()" '.
     ($lastCmd eq 'verify' ? 'checked' : '').'> '.      ($saveCmd eq 'verify' ? 'checked' : '').'> '.
     'Verify a submission receipt issued by this server</td>'.      'Verify a submission receipt issued by this server</td>'.
     '<td>-->&nbsp;Receipt no: '.unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}).      '<td>-->&nbsp;Receipt no: '.unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}).
     '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')">'.      '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')">'.
Line 2920  GRADINGMENUJS Line 3102  GRADINGMENUJS
     }       } 
   
     $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2"><br />'."\n".      $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2"><br />'."\n".
  '&nbsp;Select section:</b> <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="'.$_.'" '.
  ($lastSec eq $_ ? 'selected="on"' : '').'>'.$_.'</option>'."\n";}   ($saveSec eq $_ ? 'selected="on"' : '').'>'.$_.'</option>'."\n";}
     }      }
     $result.= '<option value="all" '.($lastSec eq 'all' ? 'selected="on"' : ''). '>all</select> &nbsp; '.      $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="on"' : ''). '>all</select> &nbsp; ';
  '<font color="red">(Applies to the first three options only.)</font>'."\n";  
       $result.='Student Status:</b><select name="status">'.
    '<option value="Active" '.($saveStatus eq 'Active' ? 'selected' : '').'>Active</option>'.
    '<option value="Expired" '.($saveStatus eq 'Expired' ? 'selected' : '').'>Expired</option>'.
    '<option value="Any" '.($saveStatus eq 'Any' ? 'selected' : '').'>Any</option>'.
    '</select>';
   
       $result.=' &nbsp; <font color="red">(Applies to the first three options only.)</font>'."\n";
   
     if (ref($sections)) {      if (ref($sections)) {
  $result.='&nbsp;(Section "no" implies the students were not assigned a section.)<br />'    $result.='&nbsp;(Section "no" implies the students were not assigned a section.)<br />' 
     if (grep /no/,@$sections);      if (grep /no/,@$sections);
Line 3029  sub handler { Line 3219  sub handler {
  }   }
  $request->print(&csvuploadmap($request));   $request->print(&csvuploadmap($request));
     }      }
    } elsif ($command eq 'scantron_selectphase') {
       $request->print(&scantron_selectphase($request));
    } elsif ($command eq 'scantron_configphase') {
       $request->print(&scantron_configphase($request));
  } else {   } else {
     $request->print("Unknown action: $command:");      $request->print("Unknown action: $command:");
  }   }

Removed from v.1.73  
changed lines
  Added in v.1.80


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.