--- loncom/interface/lonquickgrades.pm 2011/05/24 18:06:10 1.90
+++ loncom/interface/lonquickgrades.pm 2011/06/01 20:32:30 1.96
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Quick Student Grades Display
#
-# $Id: lonquickgrades.pm,v 1.90 2011/05/24 18:06:10 www Exp $
+# $Id: lonquickgrades.pm,v 1.96 2011/06/01 20:32:30 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -478,6 +478,33 @@ sub outputCategories {
# foreach (keys(%data)) {
# $r->print("\n
".$_.'='.$data{$_});
# }
+# my @debugarray=('5:1','4:3','1:1','5:5','6:7');
+# $r->print("Array: ".join(',',@debugarray).'
');
+# $r->print("0,0,0: ".join(',',&drop(0,0,0,@debugarray)).'
');
+# $r->print("1,0,0: ".join(',',&drop(1,0,0,@debugarray)).'
');
+# $r->print("0,1,0: ".join(',',&drop(0,1,0,@debugarray)).'
');
+# $r->print("1,1,0: ".join(',',&drop(1,1,0,@debugarray)).'
');
+#
+# $r->print("0,0,2: ".join(',',&drop(0,0,2,@debugarray)).'
');
+# $r->print("1,0,2: ".join(',',&drop(1,0,2,@debugarray)).'
');
+# $r->print("0,1,2: ".join(',',&drop(0,1,2,@debugarray)).'
');
+# $r->print("1,1,2: ".join(',',&drop(1,1,2,@debugarray)).'
');
+#
+# $r->print("0,0,4: ".join(',',&drop(0,0,4,@debugarray)).'
');
+# $r->print("1,0,4: ".join(',',&drop(1,0,4,@debugarray)).'
');
+# $r->print("0,1,4: ".join(',',&drop(0,1,4,@debugarray)).'
');
+# $r->print("1,1,4: ".join(',',&drop(1,1,4,@debugarray)).'
');
+#
+# $r->print("0,0,5: ".join(',',&drop(0,0,5,@debugarray)).'
');
+# $r->print("1,0,5: ".join(',',&drop(1,0,5,@debugarray)).'
');
+# $r->print("0,1,5: ".join(',',&drop(0,1,5,@debugarray)).'
');
+# $r->print("1,1,5: ".join(',',&drop(1,1,5,@debugarray)).'
');
+#
+# $r->print("0,0,7: ".join(',',&drop(0,0,7,@debugarray)).'
');
+# $r->print("1,0,7: ".join(',',&drop(1,0,7,@debugarray)).'
');
+# $r->print("0,1,7: ".join(',',&drop(0,1,7,@debugarray)).'
');
+# $r->print("1,1,7: ".join(',',&drop(1,1,7,@debugarray)).'
');
+
}
#
@@ -561,8 +588,10 @@ sub process_category_edits {
sub output_category_table {
my ($r,$cangrade,$navmaps,%categories)=@_;
- my $sum=0;
- my $total=0;
+
+ my $totalweight=0;
+ my $totalpoints=0;
+
$r->print(&Apache::loncommon::start_data_table());
#
&output_category_table_header($r,$cangrade);
@@ -572,15 +601,19 @@ sub output_category_table {
my %performance=&dumpdata($navmaps);
my $maxpos=$#order;
for (my $i=0;$i<=$maxpos;$i++) {
- my ($value,$weight)=&output_and_calc_category($r,$cangrade,$navmaps,$order[$i],$i,$maxpos,\%performance,1,%categories);
- $sum+=$value*$weight;
- $total+=$weight;
+ my ($correct,$possible,$type,$weight)=&output_and_calc_category($r,$cangrade,$navmaps,$order[$i],$i,$maxpos,\%performance,1,%categories);
+ unless ($possible) { next; }
+ $totalpoints+=$weight*$correct/$possible;
+ $totalweight+=$weight;
}
#
- &bottom_line_category($r,$cangrade,$sum,$total);
+ my $perc=0;
+ if ($totalweight) { $perc=100.*$totalpoints/$totalweight; }
+
+ &bottom_line_category($r,$cangrade,$perc);
#
$r->print(&Apache::loncommon::end_data_table());
- return $sum;
+ return $perc;
}
sub output_category_table_header {
@@ -605,8 +638,7 @@ sub output_category_table_header {
sub output_and_calc_category {
my ($r,$cangrade,$navmaps,$id,$currentpos,$maxpos,$performance,$output,%categories)=@_;
- my $value=0;
- my $weight=0;
+
my $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");
my %lt=&Apache::lonlocal::texthash(
'up' => 'Move Up',
@@ -646,14 +678,16 @@ ENDMOVE
# Content display and summing up of points
my $totalpossible=0;
my $totalcorrect=0;
+ my @individual=();
if ($output) { $r->print('
'.&mt('Total raw points: [_1]/[_2]',$totalcorrect,$totalpossible).'
'); if ($cangrade) { $r->print(''.&mt('Total raw points: [_1]/[_2]',&numberout($totalcorrect),&numberout($totalpossible)).'
'); $r->print(''.&mt('Adjusted raw points: [_1]/[_2]',$totalcorrect,$totalpossible).'
'); + $r->print(''.&mt('Adjusted raw points: [_1]/[_2]',&numberout($totalcorrect),&numberout($totalpossible)).'
'); } @@ -703,62 +737,147 @@ ENDMOVE if ($cangrade) { if ($output) { $r->print(' '.&mt('Delete').''); } } + if ($code eq 'capabove') { + if ($totalpossible>0) { + if ($totalcorrect/$totalpossible>$value/100.) { + $totalcorrect=$totalpossible*$value/100.; + } + } + } elsif ($code eq 'capbelow') { + if ($totalpossible>0) { + if ($totalcorrect/$totalpossible<$value/100.) { + $totalcorrect=$totalpossible*$value/100.; + } + } + } elsif ($code eq 'droplow') { + ($totalpossible,$totalcorrect,@individual)=&drop(0,0,$value,@individual); + } elsif ($code eq 'drophigh') { + ($totalpossible,$totalcorrect,@individual)=&drop(1,0,$value,@individual); + } elsif ($code eq 'droplowperc') { + ($totalpossible,$totalcorrect,@individual)=&drop(0,1,$value,@individual); + } elsif ($code eq 'drophighperc') { + ($totalpossible,$totalcorrect,@individual)=&drop(1,1,$value,@individual); + } if ($output) { $r->print(''); } } - if ($output) { $r->print(''); } - if ($cangrade) { - if ($output) { $r->print(''.&mt('Calculated points: [_1]/[_2]',&numberout($totalcorrect),&numberout($totalpossible)).'
'); + $r->print(''); + } +# +# Prepare for export +# # Weight + my $weight=$categories{$id.'_weight'}; + unless (1.*$weight>0) { $weight=0; } if ($cangrade) { if ($output) { $r->print(''); + if ($type eq 'percent') { + my $perc='---'; + if ($totalpossible) { + $perc=100.*$totalcorrect/$totalpossible; } + $r->print(&mt('[_1] percent',&numberout($perc))); + } else { + $r->print(&mt('[_1]/[_2] points',&numberout($totalcorrect),&numberout($totalpossible))); } + $r->print('
'); } if ($output) { $r->print('