Diff for /loncom/homework/grades.pm between versions 1.472 and 1.482

version 1.472, 2007/10/30 01:04:31 version 1.482, 2007/11/06 11:21:21
Line 865  LISTJAVASCRIPT Line 865  LISTJAVASCRIPT
     my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status;      my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status;
     $env{'form.Status'} = $saveStatus;      $env{'form.Status'} = $saveStatus;
     $gradeTable.='<label><input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last submission only </label>'."\n".      $gradeTable.='<label><input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last submission only </label>'."\n".
  '<label><input type="radio" name="lastSub" value="last" /> last submission & parts info </label>'."\n".   '<label><input type="radio" name="lastSub" value="last" /> last submission &amp; parts info </label>'."\n".
  '<label><input type="radio" name="lastSub" value="datesub" /> by dates and submissions </label>'."\n".   '<label><input type="radio" name="lastSub" value="datesub" /> by dates and submissions </label>'."\n".
  '<label><input type="radio" name="lastSub" value="all" /> all details</label><br />'."\n".   '<label><input type="radio" name="lastSub" value="all" /> all details</label><br />'."\n".
         '&nbsp;<b>Grading Increments:</b> <select name="increment">'.          '&nbsp;<b>Grading Increments:</b> <select name="increment">'.
Line 902  LISTJAVASCRIPT Line 902  LISTJAVASCRIPT
     $gradeTable.=&check_buttons();      $gradeTable.=&check_buttons();
     $gradeTable.='<label><input type="checkbox" name="checkPlag" checked="checked" />Check For Plagiarism</label>';      $gradeTable.='<label><input type="checkbox" name="checkPlag" checked="checked" />Check For Plagiarism</label>';
     my ($classlist, undef, $fullname) = &getclasslist($getsec,'1',$getgroup);      my ($classlist, undef, $fullname) = &getclasslist($getsec,'1',$getgroup);
     $gradeTable.='<table border="0"><tr><td bgcolor="#777777">'.      $gradeTable.= &Apache::loncommon::start_data_table().
  '<table border="0"><tr bgcolor="#e6ffff">';   &Apache::loncommon::start_data_table_header_row();
     my $loop = 0;      my $loop = 0;
     while ($loop < 2) {      while ($loop < 2) {
  $gradeTable.='<td><b>&nbsp;No.</b>&nbsp;</td><td><b>&nbsp;Select&nbsp;</b></td>'.   $gradeTable.='<th>No.</th><th>Select</th>'.
     '<td>'.&nameUserString('header').'&nbsp;Section/Group</td>';      '<th>'.&nameUserString('header').'&nbsp;'.'Section/Group</th>';
  if ($env{'form.showgrading'} eq 'yes'    if ($env{'form.showgrading'} eq 'yes' 
     && $submitonly ne 'queued'      && $submitonly ne 'queued'
     && $submitonly ne 'all') {      && $submitonly ne 'all') {
     foreach (sort(@$partlist)) {      foreach (sort(@$partlist)) {
  my $display_part=&get_display_part((split(/_/))[0],$symb);   my $display_part=&get_display_part((split(/_/))[0],$symb);
  $gradeTable.='<td><b>&nbsp;Part: '.$display_part.   $gradeTable.='<th>Part: '.$display_part.
     ' Status&nbsp;</b></td>';      ' Status</h>';
     }      }
  } elsif ($submitonly eq 'queued') {   } elsif ($submitonly eq 'queued') {
     $gradeTable.='<td><b>&nbsp;'.&mt('Queue Status').'&nbsp;</b></td>';      $gradeTable.='<th>'.&mt('Queue Status').'&nbsp;</th>';
  }   }
  $loop++;   $loop++;
 # $gradeTable.='<td></td>' if ($loop%2 ==1);  # $gradeTable.='<td></td>' if ($loop%2 ==1);
     }      }
     $gradeTable.='</tr>'."\n";      $gradeTable.=&Apache::loncommon::end_data_table_header_row()."\n";
   
     my $ctr = 0;      my $ctr = 0;
     foreach my $student (sort       foreach my $student (sort 
Line 978  LISTJAVASCRIPT Line 978  LISTJAVASCRIPT
  my $section = $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()];   my $section = $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()];
         my $group = $classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()];          my $group = $classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()];
  if ( $perm{'vgr'} eq 'F' ) {   if ( $perm{'vgr'} eq 'F' ) {
     $gradeTable.='<tr bgcolor="#ffffe6">' if ($ctr%2 ==1);      if ($ctr%2 ==1) {
    $gradeTable.= &Apache::loncommon::start_data_table_row();
       }
     $gradeTable.='<td align="right">'.$ctr.'&nbsp;</td>'.      $gradeTable.='<td align="right">'.$ctr.'&nbsp;</td>'.
                '<td align="center"><label><input type=checkbox name="stuinfo" value="'.                 '<td align="center"><label><input type=checkbox name="stuinfo" value="'.
                $student.':'.$$fullname{$student}.':::SECTION'.$section.                 $student.':'.$$fullname{$student}.':::SECTION'.$section.
        ')&nbsp;" />&nbsp;&nbsp;</label></td>'."\n".'<td>'.         ')&nbsp;" />&nbsp;&nbsp;</label></td>'."\n".'<td>'.
        &nameUserString(undef,$$fullname{$student},$uname,$udom).         &nameUserString(undef,$$fullname{$student},$uname,$udom).
        '&nbsp;'.$section.'/'.$group.'</td>'."\n";         '&nbsp;'.$section.($group ne '' ?'/'.$group:'').'</td>'."\n";
   
     if ($env{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {      if ($env{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
  foreach (sort keys(%status)) {   foreach (sort keys(%status)) {
Line 993  LISTJAVASCRIPT Line 995  LISTJAVASCRIPT
  }   }
     }      }
 #    $gradeTable.='<td></td>' if ($ctr%2 ==1);  #    $gradeTable.='<td></td>' if ($ctr%2 ==1);
     $gradeTable.='</tr>'."\n" if ($ctr%2 ==0);      if ($ctr%2 ==0) {
    $gradeTable.=&Apache::loncommon::end_data_table_row()."\n";
       }
  }   }
     }      }
     if ($ctr%2 ==1) {      if ($ctr%2 ==1) {
Line 1007  LISTJAVASCRIPT Line 1011  LISTJAVASCRIPT
     } elsif ($submitonly eq 'queued') {      } elsif ($submitonly eq 'queued') {
  $gradeTable.='<td>&nbsp;</td>';   $gradeTable.='<td>&nbsp;</td>';
     }      }
  $gradeTable.='</tr>';   $gradeTable.=&Apache::loncommon::end_data_table_row();
     }      }
   
     $gradeTable.='</table></td></tr></table>'."\n".      $gradeTable.=&Apache::loncommon::end_data_table()."\n".
  '<input type="button" '.   '<input type="button" '.
  'onClick="javascript:checkSelect(this.form.stuinfo);" '.   'onClick="javascript:checkSelect(this.form.stuinfo);" '.
  'value="Next->" /></form>'."\n";   'value="Next->" /></form>'."\n";
Line 1028  LISTJAVASCRIPT Line 1032  LISTJAVASCRIPT
  ' students checked for '.$submissions.')</span><br />';   ' students checked for '.$submissions.')</span><br />';
  }   }
     } elsif ($ctr == 1) {      } elsif ($ctr == 1) {
  $gradeTable =~ s/type=checkbox/type=checkbox checked/;   $gradeTable =~ s/type="checkbox"/type="checkbox" checked="checked"/;
     }      }
     $gradeTable.=&show_grading_menu_form($symb);      $gradeTable.=&show_grading_menu_form($symb);
     $request->print($gradeTable);      $request->print($gradeTable);
Line 1969  KEYWORDS Line 1973  KEYWORDS
     $mode='answer';      $mode='answer';
  }   }
  &Apache::lonxml::clear_problem_counter();   &Apache::lonxml::clear_problem_counter();
  $request->print(&show_problem($request,$symb,$uname,$udom,1,1,$mode));   $request->print(&show_problem($request,$symb,$uname,$udom,1,1,$mode,{'request.prefix' => 'ctr'.$counter}));
     }      }
   
     my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname);      my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname);
Line 3169  sub viewgrades { Line 3173  sub viewgrades {
  $sectionClass=&mt('Students in Section(s) [_1]',$section_display).'</h3>';   $sectionClass=&mt('Students in Section(s) [_1]',$section_display).'</h3>';
     }      }
     $result.='<h3>'.&mt('Assign Common Grade To [_1]',$sectionClass);      $result.='<h3>'.&mt('Assign Common Grade To [_1]',$sectionClass);
     $result.= '<table border=0><tr><td bgcolor="#777777">'."\n".      $result.= &Apache::loncommon::start_data_table();
  '<table border=0><tr bgcolor="#ffffdd"><td>';  
     #radio buttons/text box for assigning points for a section or class.      #radio buttons/text box for assigning points for a section or class.
     #handles different parts of a problem      #handles different parts of a problem
     my ($partlist,$handgrade,$responseType) = &response_type($symb);      my ($partlist,$handgrade,$responseType) = &response_type($symb);
     my %weight = ();      my %weight = ();
     my $ctsparts = 0;      my $ctsparts = 0;
     $result.='<table border="0">';  
     my %seen = ();      my %seen = ();
     my @part_response_id = &flatten_responseType($responseType);      my @part_response_id = &flatten_responseType($responseType);
     foreach my $part_response_id (@part_response_id) {      foreach my $part_response_id (@part_response_id) {
Line 3188  sub viewgrades { Line 3190  sub viewgrades {
  my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb);   my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb);
  $weight{$partid} = $wgt eq '' ? '1' : $wgt;   $weight{$partid} = $wgt eq '' ? '1' : $wgt;
   
    $result.=&Apache::loncommon::start_data_table_row().'<td>';
  $result.='<input type="hidden" name="partid_'.   $result.='<input type="hidden" name="partid_'.
     $ctsparts.'" value="'.$partid.'" />'."\n";      $ctsparts.'" value="'.$partid.'" />'."\n";
  $result.='<input type="hidden" name="weight_'.   $result.='<input type="hidden" name="weight_'.
     $partid.'" value="'.$weight{$partid}.'" />'."\n";      $partid.'" value="'.$weight{$partid}.'" />'."\n";
  my $display_part=&get_display_part($partid,$symb);   my $display_part=&get_display_part($partid,$symb);
  $result.='<tr><td><b>Part:</b> '.$display_part.'&nbsp; &nbsp;<b>Point:</b> </td><td>';   $result.=
       '<b>Part:</b> '.$display_part.'&nbsp; &nbsp;<b>Point:</b> </td><td>';
  $result.='<table border="0"><tr>';     $result.='<table border="0"><tr>';  
  my $ctr = 0;   my $ctr = 0;
  while ($ctr<=$weight{$partid}) { # display radio buttons in a nice table 10 across   while ($ctr<=$weight{$partid}) { # display radio buttons in a nice table 10 across
Line 3208  sub viewgrades { Line 3212  sub viewgrades {
     $partid.'" size="4" '.'onChange="javascript:writePoint(\''.      $partid.'" size="4" '.'onChange="javascript:writePoint(\''.
  $partid.'\','.$weight{$partid}.',\'textval\')" /> /'.   $partid.'\','.$weight{$partid}.',\'textval\')" /> /'.
     $weight{$partid}.' (problem weight)</td>'."\n";      $weight{$partid}.' (problem weight)</td>'."\n";
  $result.= '</td><td><select name="SELVAL_'.$partid.'"'.   $result.= '<td><select name="SELVAL_'.$partid.'"'.
     'onChange="javascript:writeRadText(\''.$partid.'\','.      'onChange="javascript:writeRadText(\''.$partid.'\','.
  $weight{$partid}.')"> '.   $weight{$partid}.')"> '.
     '<option selected="selected"> </option>'.      '<option selected="selected"> </option>'.
     '<option>excused</option>'.      '<option>excused</option>'.
     '<option>reset status</option></select></td>'.      '<option>reset status</option></select></td>'.
             '<td><label><input type="checkbox" name="FORCE_'.$partid.'" /> Override "Correct"</label></td></tr>'."\n";              '<td><label><input type="checkbox" name="FORCE_'.$partid.'" /> Override "Correct"</label></td>'.&Apache::loncommon::end_data_table_row()."\n";
  $ctsparts++;   $ctsparts++;
     }      }
     $result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n".      $result.=&Apache::loncommon::end_data_table()."\n".
  '<input type="hidden" name="totalparts" value="'.$ctsparts.'" />';   '<input type="hidden" name="totalparts" value="'.$ctsparts.'" />';
     $result.='<input type="button" value="Revert to Default" '.      $result.='<input type="button" value="Revert to Default" '.
  'onClick="javascript:resetEntry('.$ctsparts.');" target="_self" />';   'onClick="javascript:resetEntry('.$ctsparts.');" />';
   
     #table listing all the students in a section/class      #table listing all the students in a section/class
     #header of table      #header of table
     $result.= '<h3>Assign Grade to Specific Students in '.$sectionClass;      $result.= '<h3>Assign Grade to Specific Students in '.$sectionClass;
     $result.= '<table border=0><tr><td bgcolor="#777777">'."\n".      $result.= &Apache::loncommon::start_data_table().
  '<table border=0><tr bgcolor="#deffff"><td>&nbsp;<b>No.</b>&nbsp;</td>'.   &Apache::loncommon::start_data_table_header_row().
  '<td>'.&nameUserString('header')."</td>\n";   '<th>No.</th>'.
    '<th>'.&nameUserString('header')."</th>\n";
     my (@parts) = sort(&getpartlist($symb));      my (@parts) = sort(&getpartlist($symb));
     my (undef,undef,$url)=&Apache::lonnet::decode_symb($symb);      my (undef,undef,$url)=&Apache::lonnet::decode_symb($symb);
     my @partids = ();      my @partids = ();
Line 3239  sub viewgrades { Line 3244  sub viewgrades {
         push(@partids, $partid);          push(@partids, $partid);
  my $display_part=&get_display_part($partid,$symb);   my $display_part=&get_display_part($partid,$symb);
  if ($display =~ /^Partial Credit Factor/) {   if ($display =~ /^Partial Credit Factor/) {
     $result.='<td><b>Score Part:</b> '.$display_part.      $result.='<th>Score Part: '.$display_part.
  ' <br /><b>(weight = '.$weight{$partid}.')</b></td>'."\n";   ' <br />(weight = '.$weight{$partid}.')</th>'."\n";
     next;      next;
  } else {   } else {
     $display =~s/\[Part: \Q$partid\E\]/Part:<\/b> $display_part/;      $display =~s/\[Part: \Q$partid\E\]/Part:<\/b> $display_part/;
  }   }
  $display =~ s|Problem Status|Grade Status<br />|;   $display =~ s|Problem Status|Grade Status<br />|;
  $result.='<td><b>'.$display.'</td>'."\n";   $result.='<th>'.$display.'</th>'."\n";
     }      }
     $result.='</tr>';      $result.=&Apache::loncommon::end_data_table_header_row();
   
     my %last_resets =       my %last_resets = 
  &get_last_resets($symb,$env{'request.course.id'},\@partids);   &get_last_resets($symb,$env{'request.course.id'},\@partids);
Line 3268  sub viewgrades { Line 3273  sub viewgrades {
  $result.=&viewstudentgrade($symb,$env{'request.course.id'},   $result.=&viewstudentgrade($symb,$env{'request.course.id'},
    $_,$$fullname{$_},\@parts,\%weight,$ctr,\%last_resets);     $_,$$fullname{$_},\@parts,\%weight,$ctr,\%last_resets);
     }      }
     $result.='</table></td></tr></table>';      $result.=&Apache::loncommon::end_data_table();
     $result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n";      $result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n";
     $result.='<input type="button" value="Save" '.      $result.='<input type="button" value="Save" '.
  'onClick="javascript:submit();" target="_self" /></form>'."\n";   'onClick="javascript:submit();" target="_self" /></form>'."\n";
Line 3291  sub viewstudentgrade { Line 3296  sub viewstudentgrade {
     my ($uname,$udom) = split(/:/,$student);      my ($uname,$udom) = split(/:/,$student);
     my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname);      my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname);
     my %aggregates = ();       my %aggregates = (); 
     my $result='<tr bgcolor="#ffffdd"><td align="right">'.      my $result=&Apache::loncommon::start_data_table_row().'<td align="right">'.
  '<input type="hidden" name="ctr'.($ctr-1).'" value="'.$student.'" />'.   '<input type="hidden" name="ctr'.($ctr-1).'" value="'.$student.'" />'.
  "\n".$ctr.'&nbsp;</td><td>&nbsp;'.   "\n".$ctr.'&nbsp;</td><td>&nbsp;'.
  '<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom.   '<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom.
Line 3346  sub viewstudentgrade { Line 3351  sub viewstudentgrade {
  'value="'.$score.'" size="4" /></td>'."\n";   'value="'.$score.'" size="4" /></td>'."\n";
  }   }
     }      }
     $result.='</tr>';      $result.=&Apache::loncommon::end_data_table_row();
     return $result;      return $result;
 }  }
   
Line 3357  sub editgrades { Line 3362  sub editgrades {
   
     my $symb=&get_symb($request);      my $symb=&get_symb($request);
     my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section'));      my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section'));
     my $title='<h3><span class="LC_info">'.&mt('Current Grade Status').'</span></h3>';      my $title='<h2>'.&mt('Current Grade Status').'</h2>';
     $title.='<h4>'.&mt('<b>Current Resource: </b>[_1]',$env{'form.probTitle'}).'</h4><br />'."\n";      $title.='<h4>'.&mt('<b>Current Resource: </b>[_1]',$env{'form.probTitle'}).'</h4>'."\n";
     $title.='<h4>'.&mt('<b>Section: </b>[_1]',$section_display).'</h4>'."\n";      $title.='<h4>'.&mt('<b>Section: </b>[_1]',$section_display).'</h4>'."\n";
   
     my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n";      my $result= &Apache::loncommon::start_data_table().
     $result.= '<table border="0"><tr bgcolor="#deffff">'.   &Apache::loncommon::start_data_table_header_row().
  '<td rowspan=2 valign="center">&nbsp;<b>No.</b>&nbsp;</td>'.   '<th rowspan="2" valign="middle">'.&mt('No.').'</th>'.
  '<td rowspan=2 valign="center">'.&nameUserString('header')."</td>\n";   '<th rowspan="2" valign="middle">'.&nameUserString('header')."</th>\n";
   
     my %scoreptr = (      my %scoreptr = (
     'correct'  =>'correct_by_override',      'correct'  =>'correct_by_override',
     'incorrect'=>'incorrect_by_override',      'incorrect'=>'incorrect_by_override',
Line 3390  sub editgrades { Line 3394  sub editgrades {
     }      }
     my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb);      my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb);
     foreach my $partid (@partid) {      foreach my $partid (@partid) {
  $header .= '<td align="center">&nbsp;<b>Old Score</b>&nbsp;</td>'.   $header .= '<th align="center">'.&mt('Old Score').'</th>'.
     '<td align="center">&nbsp;<b>New Score</b>&nbsp;</td>';      '<th align="center">'.&mt('New Score').'</th>';
  $columns{$partid}=2;   $columns{$partid}=2;
  foreach my $stores (@parts) {   foreach my $stores (@parts) {
     my ($part,$type) = &split_part_type($stores);      my ($part,$type) = &split_part_type($stores);
Line 3400  sub editgrades { Line 3404  sub editgrades {
     my $display=&Apache::lonnet::metadata($url,$stores.'.display');      my $display=&Apache::lonnet::metadata($url,$stores.'.display');
     $display =~ s/\[Part: (\w)+\]//;      $display =~ s/\[Part: (\w)+\]//;
     $display =~ s/Number of Attempts/Tries/;      $display =~ s/Number of Attempts/Tries/;
     $header .= '<td align="center">&nbsp;<b>Old '.$display.'</b>&nbsp;</td>'.      $header .= '<th align="center">'.&mt('Old '.$display).'</th>'.
  '<td align="center">&nbsp;<b>New '.$display.'</b>&nbsp;</td>';   '<th align="center">'.&mt('New '.$display).'</th>';
     $columns{$partid}+=2;      $columns{$partid}+=2;
  }   }
     }      }
     foreach my $partid (@partid) {      foreach my $partid (@partid) {
  my $display_part=&get_display_part($partid,$symb);   my $display_part=&get_display_part($partid,$symb);
  $result .= '<td colspan="'.$columns{$partid}.   $result .= '<th colspan="'.$columns{$partid}.'" align="center">'.
     '" align="center"><b>Part:</b> '.$display_part.      &mt('Part: [_1] (Weight = [_2])',$display_part,$weight{$partid}).
     ' (Weight = '.$weight{$partid}.')</td>';      '</th>';
   
     }      }
     $result .= '</tr><tr bgcolor="#deffff">';      $result .= &Apache::loncommon::end_data_table_header_row().
     $result .= $header;   &Apache::loncommon::start_data_table_header_row().
     $result .= '</tr>'."\n";   $header.
     my $noupdate;   &Apache::loncommon::end_data_table_header_row();
       my @noupdate;
     my ($updateCtr,$noupdateCtr) = (1,1);      my ($updateCtr,$noupdateCtr) = (1,1);
     for ($i=0; $i<$env{'form.total'}; $i++) {      for ($i=0; $i<$env{'form.total'}; $i++) {
  my $line;   my $line;
Line 3427  sub editgrades { Line 3432  sub editgrades {
  my $usec=$classlist->{"$uname:$udom"}[5];   my $usec=$classlist->{"$uname:$udom"}[5];
  if (!&canmodify($usec)) {   if (!&canmodify($usec)) {
     my $numcols=scalar(@partid)*4+2;      my $numcols=scalar(@partid)*4+2;
     $noupdate.=$line."<td colspan=\"$numcols\"><span class=\"LC_warning\">Not allowed to modify student</span></td></tr>";      push(@noupdate,
    $line."<td colspan=\"$numcols\"><span class=\"LC_warning\">".
    &mt('Not allowed to modify student')."</span></td></tr>");
     next;      next;
  }   }
         my %aggregate = ();          my %aggregate = ();
Line 3496  sub editgrades { Line 3503  sub editgrades {
     '<td align="center">'.$awarded.'&nbsp;</td>';      '<td align="center">'.$awarded.'&nbsp;</td>';
     }      }
  }   }
  $line.='</tr>'."\n";   $line.="\n";
   
  my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};   my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
  my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};   my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
Line 3529  sub editgrades { Line 3536  sub editgrades {
  }   }
     }      }
   
     $result.='<tr bgcolor="#ffffde"><td align="right">&nbsp;'.$updateCtr.'&nbsp;</td>'.$line;      $result.=&Apache::loncommon::start_data_table_row().
    '<td align="right">&nbsp;'.$updateCtr.'&nbsp;</td>'.$line.
    &Apache::loncommon::end_data_table_row();
     $updateCtr++;      $updateCtr++;
  } else {   } else {
     $noupdate.='<tr bgcolor="#ffffde"><td align="right">&nbsp;'.$noupdateCtr.'&nbsp;</td>'.$line;      push(@noupdate,
    '<td align="right">&nbsp;'.$noupdateCtr.'&nbsp;</td>'.$line);
     $noupdateCtr++;      $noupdateCtr++;
  }   }
         if ($aggregateflag) {          if ($aggregateflag) {
Line 3540  sub editgrades { Line 3550  sub editgrades {
   $cdom,$cnum);    $cdom,$cnum);
         }          }
     }      }
     if ($noupdate) {      if (@noupdate) {
 # my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3;  # my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3;
  my $numcols=scalar(@partid)*4+2;   my $numcols=scalar(@partid)*4+2;
  $result .= '<tr bgcolor="#ffffff"><td align="center" colspan="'.$numcols.'">No Changes Occurred For the Students Below</td></tr><tr bgcolor="#ffffde">'.$noupdate;   $result .= &Apache::loncommon::start_data_table_row('LC_empty_row').
       '<td align="center" colspan="'.$numcols.'">'.
       &mt('No Changes Occurred For the Students Below').
       '</td>'.
       &Apache::loncommon::end_data_table_row();
    foreach my $line (@noupdate) {
       $result.=
    &Apache::loncommon::start_data_table_row().
    $line.
    &Apache::loncommon::end_data_table_row();
    }
     }      }
     $result .= '</table></td></tr></table>'."\n".      $result .= &Apache::loncommon::end_data_table().
  &show_grading_menu_form ($symb);   &show_grading_menu_form($symb);
     my $msg = '<br /><b>Number of records updated = '.$rec_update.      my $msg = '<p><b>'.
  ' for '.$count.' student'.($count <= 1 ? '' : 's').'.</b><br />'.   &mt('Number of records updated = [_1] for [quant,_2,student].',
  '<b>Total number of students = '.$env{'form.total'}.'</b><br />';      $rec_update,$count).'</b><br />'.
    '<b>'.&mt('Total number of students = [_1]',$env{'form.total'}).
    '</b></p>';
     return $title.$msg.$result;      return $title.$msg.$result;
 }  }
   
Line 5094  sub username_to_idmap { Line 5116  sub username_to_idmap {
   
 sub scantron_fixup_scanline {  sub scantron_fixup_scanline {
     my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_;      my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_;
       
       
     if ($field eq 'ID') {      if ($field eq 'ID') {
  if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) {   if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) {
     return ($line,1,'New value too large');      return ($line,1,'New value too large');
Line 5125  sub scantron_fixup_scanline { Line 5148  sub scantron_fixup_scanline {
    $$scantron_config{'CODElength'})=$args->{'CODE'};     $$scantron_config{'CODElength'})=$args->{'CODE'};
  }   }
     } elsif ($field eq 'answer') {      } elsif ($field eq 'answer') {
  my $length=$scantron_config->{'Qlength'};   &scantron_get_maxbubble(); # Need the bubble counter info.
    my $length =$scantron_config->{'Qlength'};
  my $off=$scantron_config->{'Qoff'};   my $off=$scantron_config->{'Qoff'};
  my $on=$scantron_config->{'Qon'};   my $on=$scantron_config->{'Qon'};
  my $answer=${off}x$length;          my $question_number = $args->{'question'} -1;
  if ($args->{'response'} eq 'none') {          my $first_position  = $first_bubble_line{$question_number};
     &scan_data($scan_data,   my $bubble_count    = $bubble_lines_per_response{$question_number};
        "$whichline.no_bubble.".$args->{'question'},'1');          my $bubbles_per_line= $$scantron_config{'Qlength'};
  } else {   my $answer=${off}x($bubbles_per_line*$bubble_count);
     if ($on eq 'letter') {          my $final_answer;
  my @alphabet=('A'..'Z');          if ($$scantron_config{'Qon'} eq 'letter'  ||
  $answer=$alphabet[$args->{'response'}];      $$scantron_config{'Qon'} eq 'number') { 
     } elsif ($on eq 'number') {      $bubbles_per_line = 10;
  $answer=$args->{'response'}+1;   }
  if ($answer == 10) { $answer = '0'; }   if (defined $args->{'response'}) {
       
       if ($args->{'response'} eq 'none') {
    &scan_data($scan_data,
      "$whichline.no_bubble.".$args->{'question'},'1');
     } else {      } else {
  substr($answer,$args->{'response'},1)=$on;   my ($bubble_line, $bubble_number) = split(/:/,$args->{'response'});
    if ($on eq 'letter') {
       my @alphabet=('A'..'Z');
       $answer=$alphabet[$bubble_number];
    } elsif ($on eq 'number') {
       $answer= $bubble_number+1;
       if ($answer == 10) { $answer = '0'; }
    } else {
       substr($answer,$bubble_number+$bubble_line*$bubbles_per_line,1)=$on;
       $final_answer = $answer;
    }
    &scan_data($scan_data,
      "$whichline.no_bubble.".$args->{'question'},undef,'1');
   
    # Positional notation already has the right final answer length..
   
    if (($on eq 'letter') || ($on eq 'number')) {
       for (my $l = 0; $l < $bubble_count; $l++) {
    if ($l eq $bubble_line) {
       $final_answer .= $answer;
    } else {
       $final_answer .= ' ';
    }
       }
    }
     }      }
     &scan_data($scan_data,      # $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'};
        "$whichline.no_bubble.".$args->{'question'},undef,'1');      #substr($line,$where-1,$length)=$answer;
       substr($line, 
      $scantron_config->{'Qstart'}+$first_position-1,
      $bubbles_per_line*$length) = $final_answer;
  }   }
  my $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'};  
  substr($line,$where-1,$length)=$answer;  
     }      }
     return $line;      return $line;
 }  }
Line 5393  sub scantron_parse_scanline { Line 5446  sub scantron_parse_scanline {
  if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) {   if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) {
     push(@{$record{"scantron.missingerror"}},$questnum);      push(@{$record{"scantron.missingerror"}},$questnum);
  }   }
     } elsif (scalar(@array) lt 2) {  
    #  If the bubble is not the last position, there will be
    # 2 elements.  If it is the last position, there will be 1 element.
   
       } elsif (scalar(@array) le 2) {
   
  my $location      = length($array[0]);   my $location      = length($array[0]);
  my $line_num      = $location / $$scantron_config{'Qlength'};   my $line_num      = $location / $$scantron_config{'Qlength'};
Line 6524  sub scantron_bubble_selector { Line 6581  sub scantron_bubble_selector {
   
     my $total_lines = $lines*2;      my $total_lines = $lines*2;
     my @alphabet=('A'..'Z');      my @alphabet=('A'..'Z');
   
     $r->print("<table border='1'><tr><td rowspan='".$total_lines."'>$quest</td>");      $r->print("<table border='1'><tr><td rowspan='".$total_lines."'>$quest</td>");
   
     for (my $l = 0; $l < $lines; $l++) {      for (my $l = 0; $l < $lines; $l++) {
Line 6557  sub scantron_bubble_selector { Line 6615  sub scantron_bubble_selector {
  #        multiline questions (different values e.g..).   #        multiline questions (different values e.g..).
   
  for (my $i=0;$i<$max;$i++) {   for (my $i=0;$i<$max;$i++) {
       my $value = "$l:$i"; # Relative bubble line #: Bubble in line.
     $r->print("\n".      $r->print("\n".
       '<td><label><input type="radio" name="scantron_correct_Q_'.        '<td><label><input type="radio" name="scantron_correct_Q_'.
       $quest.'" value="'.$i.'" />'.$alphabet[$i]."</label></td>");        $quest.'" value="'.$value.'" />'.$alphabet[$i]."</label></td>");
  }   }
  $r->print('</tr>');   $r->print('</tr>');
   
Line 7209  sub show_grading_menu_form { Line 7268  sub show_grading_menu_form {
  '<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".   '<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
  '<input type="hidden" name="saveState"  value="'.$env{'form.saveState'}.'" />'."\n".   '<input type="hidden" name="saveState"  value="'.$env{'form.saveState'}.'" />'."\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="'.&mt('Grading Menu').'" />'."\n".
  '</form>'."\n";   '</form>'."\n";
     return $result;      return $result;
 }  }
Line 7279  sub grading_menu { Line 7338  sub grading_menu {
     $Str .= '<input type="hidden" name="command" value="" />'.      $Str .= '<input type="hidden" name="command" value="" />'.
     '<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".      '<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
  '<input type="hidden" name="handgrade"   value="'.$hdgrade.'" />'."\n".   '<input type="hidden" name="handgrade"   value="'.$hdgrade.'" />'."\n".
  '<input type="hidden" name="probTitle"   value="'.$probTitle.'" ue="" />'."\n".   '<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".
  '<input type="hidden" name="saveState"   value="" />'."\n".   '<input type="hidden" name="saveState"   value="" />'."\n".
  '<input type="hidden" name="gradingMenu" value="1" />'."\n".   '<input type="hidden" name="gradingMenu" value="1" />'."\n".
  '<input type="hidden" name="showgrading" value="yes" />'."\n";   '<input type="hidden" name="showgrading" value="yes" />'."\n";
Line 7303  sub grading_menu { Line 7362  sub grading_menu {
         $Str .= '    '.('&nbsp;'x8).$menudata->{'short_description'}.          $Str .= '    '.('&nbsp;'x8).$menudata->{'short_description'}.
             "\n";              "\n";
     }      }
     $Str .="</dl>\n";  
     $Str .="</form>\n";      $Str .="</form>\n";
     $request->print(<<GRADINGMENUJS);      $request->print(<<GRADINGMENUJS);
 <script type="text/javascript" language="javascript">  <script type="text/javascript" language="javascript">
Line 7390  sub submit_options { Line 7448  sub submit_options {
 </script>  </script>
 GRADINGMENUJS  GRADINGMENUJS
     &commonJSfunctions($request);      &commonJSfunctions($request);
     my $result='<h3>&nbsp;<span class="LC_info">Manual Grading/View Submission</span></h3>';  
     my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);      my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
     $result.=$table;      my $result;
     my (undef,$sections) = &getclasslist('all','0');      my (undef,$sections) = &getclasslist('all','0');
     my $savedState = &savedState();      my $savedState = &savedState();
     my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'});      my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'});
Line 7411  GRADINGMENUJS Line 7468  GRADINGMENUJS
   
     $result.='      $result.='
     <div class="LC_grade_select_mode">      <div class="LC_grade_select_mode">
       <div class="LC_grade_select_mode_header">        <div class="LC_grade_select_mode_current">
         '.&mt('Select a Grading/Viewing Option').'          <h2>
       </div>            '.&mt('Grade Current Resource').'
       <div class="LC_grade_select_mode_body">          </h2>
         <div class="LC_grade_select_mode_selector">          <div class="LC_grade_select_mode_body">
            <div class="LC_grade_select_mode_selector_header">            <div class="LC_grades_resource_info">
               '.&mt('Sections').'             '.$table.'
            </div>            </div>
            <div class="LC_grade_select_mode_selector_body">            <div class="LC_grade_select_mode_selector">
     <select name="section" multiple="multiple" size="5">'."\n";               <div class="LC_grade_select_mode_selector_header">
                   '.&mt('Sections').'
                </div>
                <div class="LC_grade_select_mode_selector_body">
          <select name="section" multiple="multiple" size="5">'."\n";
     if (ref($sections)) {      if (ref($sections)) {
  foreach my $section (sort (@$sections)) {   foreach my $section (sort (@$sections)) {
     $result.='<option value="'.$section.'" '.      $result.='<option value="'.$section.'" '.
Line 7429  GRADINGMENUJS Line 7490  GRADINGMENUJS
     }      }
     $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> &nbsp; ';      $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> &nbsp; ';
     $result.='      $result.='
            </div>               </div>
         </div>            </div>
         <div class="LC_grade_select_mode_selector">            <div class="LC_grade_select_mode_selector">
            <div class="LC_grade_select_mode_selector_header">               <div class="LC_grade_select_mode_selector_header">
               '.&mt('Groups').'                  '.&mt('Groups').'
            </div>               </div>
            <div class="LC_grade_select_mode_selector_body">               <div class="LC_grade_select_mode_selector_body">
               '.&Apache::lonstatistics::GroupSelect('group','multiple',5).'                  '.&Apache::lonstatistics::GroupSelect('group','multiple',5).'
            </div>               </div>
         </div>  
         <div class="LC_grade_select_mode_selector">  
            <div class="LC_grade_select_mode_selector_header">  
               '.&mt('Access Status').'  
            </div>  
            <div class="LC_grade_select_mode_selector_body">  
               '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').'  
            </div>  
         </div>  
         <div class="LC_grade_select_mode_selector">  
            <div class="LC_grade_select_mode_selector_header">  
               '.&mt('Submission Status').'  
            </div>  
            <div class="LC_grade_select_mode_selector_body">  
              <select name="submitonly" size="5">  
        <option value="yes" '.      ($saveSub eq 'yes'       ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>  
        <option value="queued" '.   ($saveSub eq 'queued'    ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option>  
        <option value="graded" '.   ($saveSub eq 'graded'    ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option>  
        <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>  
        <option value="all" '.      ($saveSub eq 'all'       ? 'selected="selected"' : '').'>'.&mt('with any status').'</option>  
              </select>  
            </div>  
         </div>  
         <div class="LC_grade_select_mode_type_body">  
           <div class="LC_grade_select_mode_type">  
             <label>  
               <input type="radio" name="radioChoice" value="submission" '.  
   ($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.&mt('<b>Current Resource:</b> For one or more students').'  
     </label>   
           </div>            </div>
           <div class="LC_grade_select_mode_type">            <div class="LC_grade_select_mode_selector">
     <label>               <div class="LC_grade_select_mode_selector_header">
               <input type="radio" name="radioChoice" value="viewgrades" '.                  '.&mt('Access Status').'
  ($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '.               </div>
  &mt('<b>Current Resource:</b> For all students in selected section or course').'               <div class="LC_grade_select_mode_selector_body">
             </label>                  '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').'
                </div>
           </div>            </div>
           <div class="LC_grade_select_mode_type">            <div class="LC_grade_select_mode_selector">
     <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />               <div class="LC_grade_select_mode_selector_header">
                   '.&mt('Submission Status').'
                </div>
                <div class="LC_grade_select_mode_selector_body">
                  <select name="submitonly" size="5">
            <option value="yes" '.      ($saveSub eq 'yes'       ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>
            <option value="queued" '.   ($saveSub eq 'queued'    ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option>
            <option value="graded" '.   ($saveSub eq 'graded'    ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option>
            <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>
                    <option value="all" '.      ($saveSub eq 'all'       ? 'selected="selected"' : '').'>'.&mt('with any status').'</option>
                  </select>
                </div>
           </div>            </div>
           <div class="LC_grade_select_mode_type">            <div class="LC_grade_select_mode_type_body">
             <label>              <div class="LC_grade_select_mode_type">
               <input type="radio" name="radioChoice" value="pickStudentPage" '.                <label>
  ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.                  <input type="radio" name="radioChoice" value="submission" '.
  &mt('The <b>complete</b> set/page/sequence/folder: For one student').'                    ($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.
             </label>               &mt('Select individual students to grade and view submissions.').'
         </label> 
               </div>
               <div class="LC_grade_select_mode_type">
         <label>
                   <input type="radio" name="radioChoice" value="viewgrades" '.
                     ($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '.
                       &mt('Grade all selected students in a grading table.').'
                 </label>
               </div>
               <div class="LC_grade_select_mode_type">
         <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />
               </div>
           </div>            </div>
           <div class="LC_grade_select_mode_type">          </div>
     <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />        </div>
         <div class="LC_grade_select_mode_page">
           <h2>
            '.&mt('Grade Complete Folder for One Student').'
           </h2>
           <div class="LC_grades_select_mode_body">
             <div class="LC_grade_select_mode_type_body">
               <div class="LC_grade_select_mode_type">
                 <label>
                   <input type="radio" name="radioChoice" value="pickStudentPage" '.
     ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.
     &mt('The <b>complete</b> page/sequence/folder: For one student').'
                 </label>
               </div>
               <div class="LC_grade_select_mode_type">
         <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />
               </div>
           </div>            </div>
         </div>          </div>
       </div>        </div>

Removed from v.1.472  
changed lines
  Added in v.1.482


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.