Diff for /loncom/homework/grades.pm between versions 1.104 and 1.110

version 1.104, 2003/06/20 21:28:18 version 1.110, 2003/07/11 12:54:07
Line 367  sub listStudents { Line 367  sub listStudents {
   
     $request->print(<<LISTJAVASCRIPT);      $request->print(<<LISTJAVASCRIPT);
 <script type="text/javascript" language="javascript">  <script type="text/javascript" language="javascript">
   function checkSelect(checkBox) {      function checkSelect(checkBox) {
     var ctr=0;   var ctr=0;
     var sense="";   var sense="";
     if (checkBox.length > 1) {   if (checkBox.length > 1) {
        for (var i=0; i<checkBox.length; i++) {      for (var i=0; i<checkBox.length; i++) {
   if (checkBox[i].checked) {   if (checkBox[i].checked) {
      ctr++;      ctr++;
   }   }
        }      }
        sense = "a student or group of students";      sense = "a student or group of students";
     } else {   } else {
        if (checkBox.checked) {      if (checkBox.checked) {
    ctr = 1;   ctr = 1;
        }      }
        sense = "the student";      sense = "the student";
    }
    if (ctr == 0) {
       alert("Please select "+sense+" before clicking on the $viewgrade button.");
       return false;
    }
    document.gradesub.submit();
     }      }
     if (ctr == 0) {  
        alert("Please select "+sense+" before clicking on the $viewgrade button.");      function reLoadList(formname) {
        return false;   if (formname.saveStatusOld.value == pullDownSelection(formname.status)) {return;}
    formname.command.value = 'submission';
    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;
    }
     }      }
     document.gradesub.submit();  
   }  
 </script>  </script>
 LISTJAVASCRIPT  LISTJAVASCRIPT
   
Line 405  LISTJAVASCRIPT Line 424  LISTJAVASCRIPT
     if ($ENV{'form.handgrade'} eq 'yes') {      if ($ENV{'form.handgrade'} eq 'yes') {
  $gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> handgrade only'."\n";   $gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> handgrade only'."\n";
     }      }
   
       my $saveStatus = $ENV{'form.status'} eq '' ? 'Active' : $ENV{'form.status'};
       $ENV{'form.status'} = $saveStatus;
   
     $gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last sub only'."\n".      $gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last sub only'."\n".
  '<input type="radio" name="lastSub" value="last" /> last sub & parts info'."\n".   '<input type="radio" name="lastSub" value="last" /> last sub & parts info'."\n".
  '<input type="radio" name="lastSub" value="all" /> all details'."\n".   '<input type="radio" name="lastSub" value="all" /> all details'."\n".
Line 417  LISTJAVASCRIPT Line 440  LISTJAVASCRIPT
  '<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".
  'To '.lc($viewgrade).' a submission, click on the check box next to the student\'s name. Then '."\n".   '<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n";
   
       $gradeTable.='<b>Student Status:</b> <select onchange="javascript:reLoadList(this.form);" 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><br />'."\n";
    
       $gradeTable.='To '.lc($viewgrade).' a submission, click on the check box next to the student\'s name. Then '."\n".
  'click on the '.$viewgrade.' button. To view the submissions for a group of students, click'."\n".   'click on the '.$viewgrade.' button. To view the submissions for a group of students, click'."\n".
  ' on the check boxes for the group of students.<br />'."\n".   ' on the check boxes for the group of students.<br />'."\n".
  '<input type="hidden" name="command" value="processGroup" />'."\n".   '<input type="hidden" name="command" value="processGroup" />'."\n";
  '<input type="button" '."\n".      $gradeTable.='<input type="button" '."\n".
  '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,$ENV{'form.showgrading'} eq 'yes' ? '1' : '0');      my (undef, undef, $fullname) = &getclasslist($getsec,'1');  
       
     $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">';
  '<td><b>&nbsp;Select&nbsp;</b></td><td><b>&nbsp;Fullname&nbsp;</b></td>'.      my $loop = 0;
  '<td><b>&nbsp;Username&nbsp;</b></td><td><b>&nbsp;Domain&nbsp;</b></td>';      while ($loop < 2) {
     foreach (sort(@$partlist)) {   $gradeTable.='<td><b>&nbsp;Select&nbsp;</b></td><td><b>&nbsp;Fullname&nbsp;</b>'.
  $gradeTable.='<td><b>&nbsp;Part '.(split(/_/))[0].' Status&nbsp;</b></td>';      '<font color="#999999">(Username)</font>&nbsp;</td>';
    if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
       foreach (sort(@$partlist)) {
    $gradeTable.='<td><b>&nbsp;Part '.(split(/_/))[0].' Status&nbsp;</b></td>';
       }
    }
    $loop++;
     }      }
     $gradeTable.='</tr>'."\n";      $gradeTable.='</tr>'."\n";
   
     my $ctr = 0;      my $ctr = 0;
     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);
  my (%status) =&student_gradeStatus($url,$symb,$udom,$uname,$partlist);   my %status = ();
  my $statusflg = '';   if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
  foreach (keys(%status)) {      (%status) =&student_gradeStatus($url,$symb,$udom,$uname,$partlist);
     $statusflg = 1 if ($status{$_} ne 'nothing');      my $statusflg = '';
     my ($foo,$partid,$foo1) = split(/\./,$_);      foreach (keys(%status)) {
     if ($status{'resource.'.$partid.'.submitted_by'} ne '') {   $statusflg = 1 if ($status{$_} ne 'nothing');
  $statusflg = '';   my ($foo,$partid,$foo1) = split(/\./,$_);
  $gradeTable.='<input type="hidden" name="'.   if ($status{'resource.'.$partid.'.submitted_by'} ne '') {
     $student.':submitted_by" value="'.      $statusflg = '';
     $status{'resource.'.$partid.'.submitted_by'}.'" />';      $gradeTable.='<input type="hidden" name="'.
    $student.':submitted_by" value="'.
    $status{'resource.'.$partid.'.submitted_by'}.'" />';
    }
     }      }
       next if ($statusflg eq '' && $submitonly eq 'yes');
  }   }
  next if ($statusflg eq '' && $submitonly eq 'yes');  
   
  $ctr++;   $ctr++;
  if ( $perm{'vgr'} eq 'F' ) {   if ( $perm{'vgr'} eq 'F' ) {
     $gradeTable.='<tr bgcolor="#ffffe6">'.      $gradeTable.='<tr bgcolor="#ffffe6">' if ($ctr%2 ==1);
  '<td align="center"><input type=checkbox name="stuinfo" value="'.      $gradeTable.='<td align="center"><input type=checkbox name="stuinfo" value="'.
  $student.':'.$$fullname{$student}.'"></td>'."\n".   $student.':'.$$fullname{$student}.'&nbsp;"></td>'."\n".
  '<td>&nbsp;'.$$fullname{$student}.'&nbsp;</td>'."\n".   '<td>&nbsp;'.$$fullname{$student}.'&nbsp;'."\n".
  '<td>&nbsp;'.$uname.'&nbsp;</td>'."\n".   '<font color="#999999">('.$uname.')</font></td>'."\n";
  '<td align="middle">&nbsp;'.$udom.'&nbsp;</td>'."\n";  
           if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
     foreach (sort keys(%status)) {   foreach (sort keys(%status)) {
  next if (/^resource.*?submitted_by$/);      next if (/^resource.*?submitted_by$/);
  $gradeTable.='<td align="middle">&nbsp;'.$status{$_}.'&nbsp;</td>'."\n";      $gradeTable.='<td align="middle">&nbsp;'.$status{$_}.'&nbsp;</td>'."\n";
    }
     }      }
     $gradeTable.='</tr>'."\n";      $gradeTable.='</tr>'."\n" if ($ctr%2 ==0);
  }   }
     }      }
       if ($ctr%2 ==1) {
    $gradeTable.='<td>&nbsp;</td><td>&nbsp;</td>';
       if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
    foreach (@$partlist) {
       $gradeTable.='<td>&nbsp;</td>';
    }
       }
    $gradeTable.='</tr>';
       }
   
     $gradeTable.='</table></td></tr></table>'.      $gradeTable.='</table></td></tr></table>'.
  '<input type="button" '.   '<input type="button" '.
  'onClick="javascript:checkSelect(this.form.stuinfo);" '.   'onClick="javascript:checkSelect(this.form.stuinfo);" '.
Line 479  LISTJAVASCRIPT Line 529  LISTJAVASCRIPT
     $gradeTable='<br />&nbsp;<font color="red">There are no students currently enrolled.</font>';      $gradeTable='<br />&nbsp;<font color="red">There are no students currently enrolled.</font>';
  } else {   } else {
     $gradeTable='<br />&nbsp;<font color="red">'.      $gradeTable='<br />&nbsp;<font color="red">'.
  'No submissions found for this resource for any students. ('.$num_students.' checked for submissions</font><br />';   'No submissions found for this resource for any students. ('.$num_students.
    ' checked for submissions</font><br />';
  }   }
     } elsif ($ctr == 1) {      } elsif ($ctr == 1) {
  $gradeTable =~ s/type=checkbox/type=checkbox checked/;   $gradeTable =~ s/type=checkbox/type=checkbox checked/;
Line 1264  KEYWORDS Line 1315  KEYWORDS
     } else {      } else {
  for my $part (sort keys(%$handgrade)) {   for my $part (sort keys(%$handgrade)) {
     foreach (@$string) {      foreach (@$string) {
  my ($partid,$respid) = /^resource\.(\d+)\.(\d+)\.submission/;   my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/;
  if ($part eq ($partid.'_'.$respid)) {   if ($part eq ($partid.'_'.$respid)) {
     my ($ressub,$subval) = split(/:/,$_,2);      my ($ressub,$subval) = split(/:/,$_,2);
 # Similarity check  # Similarity check
Line 1673  sub viewgrades_js { Line 1724  sub viewgrades_js {
  var textbox = eval("document.classgrade.TEXTVAL_"+partid);   var textbox = eval("document.classgrade.TEXTVAL_"+partid);
  if (point == "textval") {   if (point == "textval") {
     var point = eval("document.classgrade.TEXTVAL_"+partid+".value");      var point = eval("document.classgrade.TEXTVAL_"+partid+".value");
     if (isNaN(point) || point < 0) {      if (isNaN(point) || parseFloat(point) < 0) {
  alert("A number equal or greater than 0 is expected. Entered value = "+point);   alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point));
  var resetbox = false;   var resetbox = false;
  for (var i=0; i<radioButton.length; i++) {   for (var i=0; i<radioButton.length; i++) {
     if (radioButton[i].checked) {      if (radioButton[i].checked) {
Line 1687  sub viewgrades_js { Line 1738  sub viewgrades_js {
  }   }
  return;   return;
     }      }
     if (point > weight) {      if (parseFloat(point) > parseFloat(weight)) {
  var resp = confirm("You entered a value ("+point+   var resp = confirm("You entered a value ("+parseFloat(point)+
    ") greater than the weight for the part. Accept?");     ") greater than the weight for the part. Accept?");
  if (resp == false) {   if (resp == false) {
     textbox.value = "";      textbox.value = "";
Line 1697  sub viewgrades_js { Line 1748  sub viewgrades_js {
     }      }
     for (var i=0; i<radioButton.length; i++) {      for (var i=0; i<radioButton.length; i++) {
  radioButton[i].checked=false;   radioButton[i].checked=false;
  if (point == i) {   if (parseFloat(point) == i) {
     radioButton[i].checked=true;      radioButton[i].checked=true;
  }   }
     }      }
Line 1771  sub viewgrades_js { Line 1822  sub viewgrades_js {
  var point  = textbox.value;   var point  = textbox.value;
  var weight = eval("document.classgrade.weight_"+partid+".value");   var weight = eval("document.classgrade.weight_"+partid+".value");
   
  if (isNaN(point) || point < 0) {   if (isNaN(point) || parseFloat(point) < 0) {
     alert("A number equal or greater than 0 is expected. Entered value = "+point);      alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point));
     textbox.value = "";      textbox.value = "";
     return;      return;
  }   }
  if (point > weight) {   if (parseFloat(point) > parseFloat(weight)) {
     var resp = confirm("You entered a value ("+point+      var resp = confirm("You entered a value ("+parseFloat(point)+
        ") greater than the weight of the part. Accept?");         ") greater than the weight of the part. Accept?");
     if (resp == false) {      if (resp == false) {
  textbox.value = "";   textbox.value = "";
Line 2080  sub editgrades { Line 2131  sub editgrades {
  my ($uname,$udom)=split(/_/,$user);   my ($uname,$udom)=split(/_/,$user);
  my %newrecord;   my %newrecord;
  my $updateflag = 0;   my $updateflag = 0;
   
  $line .= '<tr bgcolor="#ffffde"><td>'.$uname.'&nbsp;</td><td>'.   $line .= '<tr bgcolor="#ffffde"><td>'.$uname.'&nbsp;</td><td>'.
     $udom.'&nbsp;</td><td>'.      $udom.'&nbsp;</td><td>'.
  $$fullname{$usercolon}.'&nbsp;</td>';   $$fullname{$usercolon}.'&nbsp;</td>';
    my $usec=$classlist->{"$uname:$udom"}[5];
    if (!&canmodify($usec)) {
       my $numcols=scalar(@partid)*(scalar(@parts)-1)*2;
       $noupdate.=$line."<td colspan=\"$numcols\"><font color=\"red\">Not allowed to modify student</font></td></tr>";
       next;
    }
  foreach (@partid) {   foreach (@partid) {
     my $old_aw    = $ENV{'form.GD_'.$user.'_'.$_.'_awarded_s'};      my $old_aw    = $ENV{'form.GD_'.$user.'_'.$_.'_awarded_s'};
     my $old_part_pcr = $old_aw/($weight{$_} ne '0' ? $weight{$_}:1);      my $old_part_pcr = $old_aw/($weight{$_} ne '0' ? $weight{$_}:1);
Line 2141  sub editgrades { Line 2197  sub editgrades {
  }   }
     }      }
     if ($noupdate) {      if ($noupdate) {
  $result .= '<tr bgcolor="#ffffff"><td align="center" colspan="7">No Changes Occured For the Students Below</td></tr>'.$noupdate;   my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3;
    $result .= '<tr bgcolor="#ffffff"><td align="center" colspan="'.$numcols.'">No Changes Occured For the Students Below</td></tr>'.$noupdate;
     }      }
     $result .= '</table></td></tr></table>'."\n".      $result .= '</table></td></tr></table>'."\n".
  &show_grading_menu_form ($symb,$url);   &show_grading_menu_form ($symb,$url);
Line 2344  CSVFORMJS Line 2401  CSVFORMJS
     $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();
     $result.=<<ENDUPFORM;      $result.=<<ENDUPFORM;
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload" target="LONcatInfo">  <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
 <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="command" value="csvuploadmap" />  <input type="hidden" name="command" value="csvuploadmap" />
Line 2423  sub csvuploadassign { Line 2480  sub csvuploadassign {
     $request->print('<h3>Assigning Grades</h3>');      $request->print('<h3>Assigning Grades</h3>');
     my $courseid=$ENV{'request.course.id'};      my $courseid=$ENV{'request.course.id'};
     my ($classlist) = &getclasslist('all',0);      my ($classlist) = &getclasslist('all',0);
       my @notallowed;
     my @skipped;      my @skipped;
     my $countdone=0;      my $countdone=0;
     foreach my $grade (@gradedata) {      foreach my $grade (@gradedata) {
Line 2433  sub csvuploadassign { Line 2491  sub csvuploadassign {
     push(@skipped,"$username:$domain");      push(@skipped,"$username:$domain");
     next;      next;
  }   }
    my $usec=$classlist->{"$username:$domain"}[5];
    if (!&canmodify($usec)) {
       push(@notallowed,"$username:$domain");
       next;
    }
  my %grades;   my %grades;
  foreach my $dest (keys(%fields)) {   foreach my $dest (keys(%fields)) {
     if ($dest eq 'username' || $dest eq 'domain') { next; }      if ($dest eq 'username' || $dest eq 'domain') { next; }
Line 2451  sub csvuploadassign { Line 2514  sub csvuploadassign {
     }      }
     $request->print("<br />Stored $countdone students\n");      $request->print("<br />Stored $countdone students\n");
     if (@skipped) {      if (@skipped) {
  $request->print('<br /><font size="+1"><b>Skipped Students</b></font><br />');   $request->print('<p<font size="+1"><b>Skipped Students</b></font></p>');
  foreach my $student (@skipped) { $request->print("<br />$student"); }   foreach my $student (@skipped) { $request->print("$student<br />\n"); }
       }
       if (@notallowed) {
    $request->print('<p><font size="+1" color="red"><b>Students Not Allowed to Modify</b></font></p>');
    foreach my $student (@notallowed) { $request->print("$student<br />\n"); }
     }      }
       $request->print("<br />\n");
     $request->print(&show_grading_menu_form($symb,$url));      $request->print(&show_grading_menu_form($symb,$url));
     return '';      return '';
 }  }
Line 3495  sub handler { Line 3563  sub handler {
  delete($perm{'mgr'});   delete($perm{'mgr'});
     }      }
  }   }
  #delete($perm{'mgr'});  
  #$Apache::lonxml::debug=1;  
  #&Apache::lonxml::debug("command is $command");  
   
  if ($command eq 'submission' && $perm{'vgr'}) {   if ($command eq 'submission' && $perm{'vgr'}) {
     ($ENV{'form.student'} eq '' ? &listStudents($request) : &submission($request,0,0));      ($ENV{'form.student'} eq '' ? &listStudents($request) : &submission($request,0,0));
Line 3515  sub handler { Line 3580  sub handler {
     $request->print(&viewgrades($request));      $request->print(&viewgrades($request));
  } elsif ($command eq 'handgrade' && $perm{'mgr'}) {   } elsif ($command eq 'handgrade' && $perm{'mgr'}) {
     $request->print(&processHandGrade($request));      $request->print(&processHandGrade($request));
  } elsif ($command eq 'editgrades') {   } elsif ($command eq 'editgrades' && $perm{'mgr'}) {
     $request->print(&editgrades($request));      $request->print(&editgrades($request));
  } elsif ($command eq 'verify') {   } elsif ($command eq 'verify' && $perm{'vgr'}) {
     $request->print(&verifyreceipt($request));      $request->print(&verifyreceipt($request));
  } elsif ($command eq 'csvform') {   } elsif ($command eq 'csvform' && $perm{'mgr'}) {
     $request->print(&upcsvScores_form($request));      $request->print(&upcsvScores_form($request));
  } elsif ($command eq 'csvupload') {   } elsif ($command eq 'csvupload' && $perm{'mgr'}) {
     $request->print(&csvupload($request));      $request->print(&csvupload($request));
  } elsif ($command eq 'viewclasslist') {   } elsif ($command eq 'csvuploadmap' && $perm{'mgr'} ) {
     $request->print(&viewclasslist($request));  
  } elsif ($command eq 'csvuploadmap') {  
     $request->print(&csvuploadmap($request));      $request->print(&csvuploadmap($request));
  } elsif ($command eq 'csvuploadassign') {   } elsif ($command eq 'csvuploadassign' && $perm{'mgr'}) {
     if ($ENV{'form.associate'} ne 'Reverse Association') {      if ($ENV{'form.associate'} ne 'Reverse Association') {
  $request->print(&csvuploadassign($request));   $request->print(&csvuploadassign($request));
     } else {      } else {
Line 3538  sub handler { Line 3601  sub handler {
  }   }
  $request->print(&csvuploadmap($request));   $request->print(&csvuploadmap($request));
     }      }
  } elsif ($command eq 'scantron_selectphase') {   } elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) {
     $request->print(&scantron_selectphase($request));      $request->print(&scantron_selectphase($request));
  } elsif ($command eq 'scantron_process') {   } elsif ($command eq 'scantron_process' && $perm{'mgr'}) {
     $request->print(&scantron_process_students($request));      $request->print(&scantron_process_students($request));
  } else {   } elsif ($command) {
     $request->print("Unknown action: $command:");      $request->print("Access Denied");
  }   }
     }      }
     &send_footer($request);      &send_footer($request);

Removed from v.1.104  
changed lines
  Added in v.1.110


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