'."\n");
$r->print(''."\n");
my $Str = '';
foreach (@Header) {
if (/^(Part)$/) { # Do not allow sorting on this field
$Str .= ''.$_.' | ';
} else {
$Str .= ''.
''.
$_.' | ';
}
}
$r->print(''.$Str." \n");
$r->rflush();
#
# Compile the data
my %Statshash;
my @Statsarray;
foreach my $sequence (@Sequences) {
next if ($sequence->{'num_assess'}<1);
foreach my $resource (@{$sequence->{'contents'}}) {
next if ($resource->{'type'} ne 'assessment');
foreach my $part (@{$resource->{'parts'}}) {
my ($num,$tries,$mod,$mean,$Solved,$solved,$DegOfDiff,$STD,
$SKEW) = &Apache::loncoursedata::get_problem_statistics
(undef,$resource->{'symb'},$part,
$ENV{'request.course.id'});
my $wrongpercent = 0;
if (defined($num) && $num > 0) {
$wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10;
}
my $key = $resource->{'symb'}.':'.$part;
$Statshash{$key} =
{
'sequence' => $sequence,
'resource' => $resource,
'Title' => $resource->{'title'},
'Part' => $part,
'#Stdnts' => $num,
'Tries' => $tries,
'Mod' => $mod,
'Mean' => $mean,
'#YES' => $Solved,
'#yes' => $solved,
'%Wrng' => $wrongpercent,
'DoDiff' => $DegOfDiff,
'S.D.' => $STD,
'Skew' => $SKEW,
};
push (@Statsarray,$Statshash{$key});
}
}
}
#
# Sort the data
if ($sortby eq 'Container') {
foreach my $sequence (@Sequences) {
next if ($sequence->{'num_assess'}<1);
foreach my $resource (@{$sequence->{'contents'}}) {
next if ($resource->{'type'} ne 'assessment');
foreach my $part (@{$resource->{'parts'}}) {
my $key = $resource->{'symb'}.':'.$part;
$r->print('');
if ($show_container) {
$r->print(''
.$sequence->{'title'}.' | ');
}
$r->print(&stats_row_from_hash($Statshash{$key}));
$r->print(" \n");
}
}
}
} else {
# $sortby is already defined, so we can charge ahead
my @OutputOrder;
if ($sortby =~ /^(title|part)$/i) {
# Alpha comparison
@OutputOrder = sort {
$b->{$sortby} cmp $a->{$sortby} ||
$b->{'Title'} cmp $a->{'Title'} ||
$b->{'Part'} cmp $a->{'Part'};
} @Statsarray;
} else {
# Numerical comparison
@OutputOrder = sort {
my $retvalue = 0;
if ($b->{$sortby} eq 'nan') {
if ($a->{$sortby} ne 'nan') {
$retvalue = -1;
} else {
$retvalue = 0;
}
}
if ($a->{$sortby} eq 'nan') {
if ($b->{$sortby} ne 'nan') {
$retvalue = 1;
}
}
if ($retvalue eq '0') {
$retvalue = $b->{$sortby} <=> $a->{$sortby} ||
$b->{'Title'} <=> $a->{'Title'} ||
$b->{'Part'} <=> $a->{'Part'};
}
$retvalue;
} @Statsarray;
}
foreach my $row (@OutputOrder) {
$r->print('');
if ($show_container) {
$r->print(''
.$row->{'sequence'}->{'title'}.' | ');
}
$r->print(&stats_row_from_hash($row));
$r->print(" \n");
}
}
$r->print(" \n");
$r->print(" |