--- loncom/interface/lonquickgrades.pm 2011/05/26 18:02:22 1.93 +++ loncom/interface/lonquickgrades.pm 2011/05/27 19:32:10 1.94 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Quick Student Grades Display # -# $Id: lonquickgrades.pm,v 1.93 2011/05/26 18:02:22 www Exp $ +# $Id: lonquickgrades.pm,v 1.94 2011/05/27 19:32:10 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -745,16 +745,21 @@ ENDMOVE } } } elsif ($code eq 'droplow') { - ($totalcorrect,@individual)=&drop(0,0,$value,@individual); + ($totalpossible,$totalcorrect,@individual)=&drop(0,0,$value,@individual); } elsif ($code eq 'drophigh') { - ($totalcorrect,@individual)=&drop(1,0,$value,@individual); + ($totalpossible,$totalcorrect,@individual)=&drop(1,0,$value,@individual); } elsif ($code eq 'droplowperc') { - ($totalcorrect,@individual)=&drop(0,1,$value,@individual); + ($totalpossible,$totalcorrect,@individual)=&drop(0,1,$value,@individual); } elsif ($code eq 'drophighperc') { - ($totalcorrect,@individual)=&drop(1,1,$value,@individual); + ($totalpossible,$totalcorrect,@individual)=&drop(1,1,$value,@individual); } if ($output) { $r->print(''); } } +# Re-adjust total points if force total + if ($categories{$id.'_totaltype'} eq 'typein') { + $totalpossible=1.*$categories{$id.'_total'}; + } + if ($output) { $r->print(''); if ($cangrade) { $r->print('
'.&new_calc_rule_form($id)); } @@ -803,6 +808,7 @@ ENDMOVE sub drop { my ($high,$percent,$n,@individual)=@_; +# Sort assignments by points or percent my @newindividual=sort { my ($pa,$ca)=split(/\:/,$a); my ($pb,$cb)=split(/\:/,$b); @@ -816,6 +822,7 @@ sub drop { $ca<=>$cb; } } @individual; +# Drop the ones we don't want if ($#newindividual>=$n) { if ($high) { splice(@newindividual,$#newindividual+1-$n,$n); @@ -825,11 +832,15 @@ sub drop { } else { @newindividual=(); } +# Re-calculate how many points possible and achieved + my $newpossible=0; my $newcorrect=0; for my $score (@newindividual) { - $newcorrect+=(split(/\:/,$score))[1]; + my ($thispossible,$thiscorrect)=(split(/\:/,$score)); + $newpossible+=$thispossible; + $newcorrect+=$thiscorrect; } - return ($newcorrect,@newindividual); + return ($newpossible,$newcorrect,@newindividual); } # # Bottom line with grades