version 1.42, 2003/03/26 15:19:16
|
version 1.43, 2003/03/26 16:26:35
|
Line 243 sub output_html_grouped_by_sequence {
|
Line 243 sub output_html_grouped_by_sequence {
|
"S.D.","Skew.");#,"D.F.1st","D.F.2nd"); |
"S.D.","Skew.");#,"D.F.1st","D.F.2nd"); |
# #FFFFE6 #EEFFCC #DDFFFF FFDDDD #DDFFDD #FFDDFF |
# #FFFFE6 #EEFFCC #DDFFFF FFDDDD #DDFFDD #FFDDFF |
foreach my $sequence (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $sequence (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
my $show_part = 0; |
next if ($sequence->{'num_assess'}<1); |
next if ($sequence->{'num_assess'}<1); |
$r->print("<h3>".$sequence->{'title'}."</h3>"); |
$r->print("<h3>".$sequence->{'title'}."</h3>"); |
$r->print('<table border="0"><tr><td bgcolor="#777777">'."\n"); |
$r->print('<table border="0"><tr><td bgcolor="#777777">'."\n"); |
Line 252 sub output_html_grouped_by_sequence {
|
Line 253 sub output_html_grouped_by_sequence {
|
foreach my $resource (@{$sequence->{'contents'}}) { |
foreach my $resource (@{$sequence->{'contents'}}) { |
next if ($resource->{'type'} ne 'assessment'); |
next if ($resource->{'type'} ne 'assessment'); |
foreach my $part (@{$resource->{'parts'}}) { |
foreach my $part (@{$resource->{'parts'}}) { |
if ($part == 0) { |
|
$part = ' '; |
|
} |
|
my ($num,$tries,$mod,$mean,$Solved,$solved,$DegOfDiff,$STD, |
my ($num,$tries,$mod,$mean,$Solved,$solved,$DegOfDiff,$STD, |
$SKEW) = &Apache::loncoursedata::get_problem_statistics |
$SKEW) = &Apache::loncoursedata::get_problem_statistics |
(undef,$resource->{'symb'},$part, |
(undef,$resource->{'symb'},$part, |
$ENV{'request.course.id'}); |
$ENV{'request.course.id'}); |
|
# |
|
$show_part = 1 if ($part ne '0'); |
|
$part = ' ' if ($part == 0); |
|
# |
my $wrongpercent = 0; |
my $wrongpercent = 0; |
if (defined($num) && $num > 0) { |
if (defined($num) && $num > 0) { |
$wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10; |
$wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10; |
} |
} |
$r->print('<tr>'.&statistics_html_table_data |
$r->print('<tr>'.&statistics_html_table_data |
($resource,$part,$num,$tries,$mod,$mean,$Solved, |
($resource,$part,$num,$tries,$mod,$mean,$Solved, |
$solved,$wrongpercent,$DegOfDiff,$STD,$SKEW). |
$solved,$wrongpercent,$DegOfDiff,$STD,$SKEW, |
|
$show_part). |
"</tr>\n"); |
"</tr>\n"); |
} |
} |
} |
} |
Line 287 sub output_html_ungrouped {
|
Line 290 sub output_html_ungrouped {
|
my ($r) = @_; |
my ($r) = @_; |
# |
# |
my $show_container = 0; |
my $show_container = 0; |
|
my $show_part = 0; |
#$r->print(&ProblemStatisticsLegend()); |
#$r->print(&ProblemStatisticsLegend()); |
my @Header = ("Title","Part","#Stdnts","Tries","Mod", |
my @Header = ("Title","Part","#Stdnts","Tries","Mod", |
"Mean","#YES","#yes","%Wrng","DoDiff", |
"Mean","#YES","#yes","%Wrng","DoDiff", |
"S.D.","Skew.");#,"D.F.1st","D.F.2nd"); |
"S.D.","Skew");#,"D.F.1st","D.F.2nd"); |
# |
# |
my $sortby = undef; |
my $sortby = undef; |
foreach (@Header) { |
foreach (@Header) { |
Line 309 sub output_html_ungrouped {
|
Line 313 sub output_html_ungrouped {
|
} |
} |
# |
# |
$r->print('<table border="0"><tr><td bgcolor="#777777">'."\n"); |
$r->print('<table border="0"><tr><td bgcolor="#777777">'."\n"); |
$r->print('<table border="0" cellpadding="3">'."\n"); |
|
my $Str = ''; |
|
foreach (@Header) { |
|
if (/^(Part)$/) { # Do not allow sorting on this field |
|
$Str .= '<th>'.$_.'</th>'; |
|
} else { |
|
$Str .= '<th>'. |
|
'<a href="javascript:document.Statistics.sortby.value='."'$_'". |
|
';document.Statistics.submit();">'. |
|
$_.'</a></th>'; |
|
} |
|
} |
|
$r->print('<tr bgcolor="#FFFFE6">'.$Str."</tr>\n"); |
|
$r->rflush(); |
$r->rflush(); |
# |
# |
# Compile the data |
# Compile the data |
my %Statshash; |
|
my @Statsarray; |
my @Statsarray; |
foreach my $sequence (@Sequences) { |
foreach my $sequence (@Sequences) { |
next if ($sequence->{'num_assess'}<1); |
next if ($sequence->{'num_assess'}<1); |
Line 336 sub output_html_ungrouped {
|
Line 326 sub output_html_ungrouped {
|
$SKEW) = &Apache::loncoursedata::get_problem_statistics |
$SKEW) = &Apache::loncoursedata::get_problem_statistics |
(undef,$resource->{'symb'},$part, |
(undef,$resource->{'symb'},$part, |
$ENV{'request.course.id'}); |
$ENV{'request.course.id'}); |
|
# |
|
$show_part = 1 if ($part ne '0'); |
|
$part = ' ' if ($part == 0); |
|
# |
my $wrongpercent = 0; |
my $wrongpercent = 0; |
if (defined($num) && $num > 0) { |
if (defined($num) && $num > 0) { |
$wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10; |
$wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10; |
} |
} |
my $key = $resource->{'symb'}.':'.$part; |
push (@Statsarray, |
$Statshash{$key} = |
{ 'sequence' => $sequence, |
{ |
|
'sequence' => $sequence, |
|
'resource' => $resource, |
'resource' => $resource, |
'Title' => $resource->{'title'}, |
'Title' => $resource->{'title'}, |
'Part' => $part, |
'Part' => $part, |
Line 357 sub output_html_ungrouped {
|
Line 349 sub output_html_ungrouped {
|
'DoDiff' => $DegOfDiff, |
'DoDiff' => $DegOfDiff, |
'S.D.' => $STD, |
'S.D.' => $STD, |
'Skew' => $SKEW, |
'Skew' => $SKEW, |
}; |
}); |
push (@Statsarray,$Statshash{$key}); |
|
} |
} |
} |
} |
} |
} |
# |
# |
|
# Table Headers |
|
$r->print('<table border="0" cellpadding="3">'."\n"); |
|
my $Str = ''; |
|
foreach (@Header) { |
|
next if ($_ eq 'Part' && !$show_part); |
|
# Do not allow sorting on some fields |
|
if ($_ eq $sortby || /^(Part)$/) { |
|
$Str .= '<th>'.$_.'</th>'; |
|
} else { |
|
$Str .= '<th>'. |
|
'<a href="javascript:document.Statistics.sortby.value='."'$_'". |
|
';document.Statistics.submit();">'. |
|
$_.'</a></th>'; |
|
} |
|
} |
|
$r->print('<tr bgcolor="#FFFFE6">'.$Str."</tr>\n"); |
|
# |
# Sort the data |
# Sort the data |
|
my @OutputOrder; |
if ($sortby eq 'Container') { |
if ($sortby eq 'Container') { |
foreach my $sequence (@Sequences) { |
@OutputOrder = @Statsarray; |
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('<tr>'); |
|
if ($show_container) { |
|
$r->print('<td bgcolor="#FFFFE6">' |
|
.$sequence->{'title'}.'</td>'); |
|
} |
|
$r->print(&stats_row_from_hash($Statshash{$key})); |
|
$r->print("</tr>\n"); |
|
} |
|
} |
|
} |
|
} else { |
} else { |
# $sortby is already defined, so we can charge ahead |
# $sortby is already defined, so we can charge ahead |
my @OutputOrder; |
|
if ($sortby =~ /^(title|part)$/i) { |
if ($sortby =~ /^(title|part)$/i) { |
# Alpha comparison |
# Alpha comparison |
@OutputOrder = sort { |
@OutputOrder = sort { |
$b->{$sortby} cmp $a->{$sortby} || |
lc($a->{$sortby}) cmp lc($b->{$sortby}) || |
$b->{'Title'} cmp $a->{'Title'} || |
lc($a->{'Title'}) cmp lc($b->{'Title'}) || |
$b->{'Part'} cmp $a->{'Part'}; |
lc($a->{'Part'}) cmp lc($b->{'Part'}); |
} @Statsarray; |
} @Statsarray; |
} else { |
} else { |
# Numerical comparison |
# Numerical comparison |
Line 409 sub output_html_ungrouped {
|
Line 402 sub output_html_ungrouped {
|
} |
} |
if ($retvalue eq '0') { |
if ($retvalue eq '0') { |
$retvalue = $b->{$sortby} <=> $a->{$sortby} || |
$retvalue = $b->{$sortby} <=> $a->{$sortby} || |
$b->{'Title'} <=> $a->{'Title'} || |
lc($a->{'Title'}) <=> lc($b->{'Title'}) || |
$b->{'Part'} <=> $a->{'Part'}; |
lc($a->{'Part'}) <=> lc($b->{'Part'}); |
} |
} |
$retvalue; |
$retvalue; |
} @Statsarray; |
} @Statsarray; |
} |
} |
foreach my $row (@OutputOrder) { |
} |
$r->print('<tr>'); |
foreach my $row (@OutputOrder) { |
if ($show_container) { |
$r->print('<tr>'); |
$r->print('<td bgcolor="#FFFFE6">' |
if ($show_container) { |
.$row->{'sequence'}->{'title'}.'</td>'); |
$r->print('<td bgcolor="#FFFFE6">' |
} |
.$row->{'sequence'}->{'title'}.'</td>'); |
$r->print(&stats_row_from_hash($row)); |
|
$r->print("</tr>\n"); |
|
} |
} |
|
$r->print(&stats_row_from_hash($row,$show_part)); |
|
$r->print("</tr>\n"); |
} |
} |
$r->print("</table>\n"); |
$r->print("</table>\n"); |
$r->print("</td></tr></table>\n"); |
$r->print("</td></tr></table>\n"); |
Line 433 sub output_html_ungrouped {
|
Line 426 sub output_html_ungrouped {
|
} |
} |
|
|
sub stats_row_from_hash { |
sub stats_row_from_hash { |
my ($data) = @_; |
my ($data,$show_part) = @_; |
if (ref($data) ne 'HASH') { |
|
my %Tmp = @_; |
|
$data = \%Tmp; |
|
} |
|
return &statistics_html_table_data($data->{'resource'},$data->{'Part'}, |
return &statistics_html_table_data($data->{'resource'},$data->{'Part'}, |
$data->{'#Stdnts'}, $data->{'Tries'}, |
$data->{'#Stdnts'}, $data->{'Tries'}, |
$data->{'Mod'}, $data->{'Mean'}, |
$data->{'Mod'}, $data->{'Mean'}, |
$data->{'#YES'}, $data->{'#yes'}, |
$data->{'#YES'}, $data->{'#yes'}, |
$data->{"\%Wrng"}, $data->{'DoDiff'}, |
$data->{"\%Wrng"}, $data->{'DoDiff'}, |
$data->{'S.D.'}, $data->{'Skew'}); |
$data->{'S.D.'}, $data->{'Skew'}, |
|
$show_part); |
} |
} |
|
|
############################################### |
############################################### |
Line 453 sub stats_row_from_hash {
|
Line 443 sub stats_row_from_hash {
|
############################################### |
############################################### |
sub statistics_html_table_data { |
sub statistics_html_table_data { |
my ($resource,$part,$num,$tries,$mod,$mean,$Solved,$solved,$wrongpercent, |
my ($resource,$part,$num,$tries,$mod,$mean,$Solved,$solved,$wrongpercent, |
$DegOfDiff,$STD,$SKEW) = @_; |
$DegOfDiff,$STD,$SKEW,$show_part) = @_; |
my $row = ''; |
my $row = ''; |
$row .= '<td bgcolor="#FFFFE6">'. |
$row .= '<td bgcolor="#FFFFE6">'. |
'<a href="'.$resource->{'src'}.'" target="_blank" >'. |
'<a href="'.$resource->{'src'}.'" target="_blank" >'. |
$resource->{'title'}.'</a>'. |
$resource->{'title'}.'</a>'. |
'</td>'; |
'</td>'; |
$row .= '<td bgcolor="#FFFFE6">'.$part.'</td>' if (defined($part)); |
$row .= '<td bgcolor="#FFFFE6">'.$part.'</td>' if ($show_part); |
foreach ($num,$tries) { |
foreach ($num,$tries) { |
$row .= '<td bgcolor="#EEFFCC" align="right">'.$_.'</td>'; |
$row .= '<td bgcolor="#EEFFCC" align="right">'.$_.'</td>'; |
} |
} |