--- loncom/interface/statistics/lonproblemanalysis.pm 2003/10/10 13:47:48 1.30
+++ loncom/interface/statistics/lonproblemanalysis.pm 2003/10/10 21:45:34 1.31
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemanalysis.pm,v 1.30 2003/10/10 13:47:48 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.31 2003/10/10 21:45:34 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,7 +42,19 @@ sub BuildProblemAnalysisPage {
#
my @Students = @Apache::lonstatistics::Students;
#
- if (exists($ENV{'form.problemchoice'})) {
+ if (exists($ENV{'form.problemchoice'}) && !exists($ENV{'SelectAnother'})) {
+ $r->print('');
+ $r->print(' 'x5);
+ $r->print('');
+ $r->print(' 'x5);
+ $r->print('');
+ $r->print('');
+ $r->print(' 'x5);
+ #
$r->print('
');
&Apache::lonstatistics::Gather_Full_Student_Data($r);
#
@@ -50,9 +62,6 @@ sub BuildProblemAnalysisPage {
&Apache::lonnet::unescape($ENV{'form.problemchoice'})
);
#
-# my ($firsttime,$lasttime) =
-# &Apache::loncoursedata::get_timestamp_data($symb,$resid);
- #
my $resource = &get_resource_from_symb($symb);
if (defined($resource)) {
my %Data = &get_problem_data($resource->{'src'});
@@ -101,61 +110,56 @@ sub BuildProblemAnalysisPage {
}
$r->print('');
} else {
+ $r->print('');
+ $r->print(' 'x5);
$r->print('
'.&mt('Please select a problem to analyze').'
');
+ $r->print(&OptionResponseProblemSelector());
}
- # Okay, they asked for data, so make sure we get the latest data.
- $r->print(&OptionResponseProblemSelector());
}
sub DoTriesAnalysis {
my ($PerformanceData,$ORdata) = @_;
my $mintries = 1;
- my $maxtries = 10;
+ my $maxtries = $ENV{'form.NumPlots'};
my %ResponseData = &analyze_option_data_by_tries($PerformanceData,
$mintries,$maxtries);
my @Foils = sort(keys(%ResponseData));
my %Row_Label;
foreach my $foilid (@Foils) {
my $value = $ORdata->{'Foiltext'}->{$foilid};
-# &Apache::lonnet::logthis('row label '.$foilid.' = '.$value);
$Row_Label{$foilid} = $ORdata->{'Foiltext'}->{$foilid};
}
+ #
+ # Build up the table of row labels.
my @Rows;
- $Rows[0] = ['
'];
- for (my $i=$mintries;$i<=$maxtries;$i++) {
- push (@{$Rows[1]},('
'.&mt('Correct').'
',
- '
'.&mt('Incorrect').'
',
- '
'.&mt('Percent Correct').'
',
- ));
+ $Rows[0]= [ '
'.&mt('Foil Number').'
',
+ '
'.&mt('Foil Text').''];
+ my $table = '
'."\n";
+ my $index = 1;
+ foreach my $foilid (@Foils) {
+ $table .= '
'.$index.'
'.
+ '
'.$Row_Label{$foilid}."
\n";
+ } continue {
+ $index++;
}
+ $table .= "
\n";
+ #
+ # Compute the data neccessary to make the plots
my @PlotData;
my @CumulativePlotData;
- my $index = 1;
foreach my $foilid (@Foils) {
- my @Data = ('
'.$index.' '.$Row_Label{$foilid}.'
');
for (my $i=$mintries;$i<=$maxtries;$i++) {
- push(@Data,
- ('
'));
#
# Gather the per-attempt data
push (@{$PlotData[$i]->{'good'}},
$ResponseData{$foilid}->[$i]->{'percent_corr'});
push (@{$PlotData[$i]->{'bad'}},
100-$ResponseData{$foilid}->[$i]->{'percent_corr'});
- }
- for (my $i=0;$i<=$maxtries;$i++) {
+ #
+ # Someday we may need the cumulative data and I think
+ # this is a neat way of computing it as we go along.
push (@{$CumulativePlotData[$i]->{'good'}},
$CumulativePlotData[-1]->{'good'}+
$ResponseData{$foilid}->[$i]->{'correct'});
@@ -163,11 +167,11 @@ sub DoTriesAnalysis {
$CumulativePlotData[-1]->{'bad'}+
$ResponseData{$foilid}->[$i]->{'incorrect'});
}
- push(@Rows,\@Data);
- } continue {
- $index++;
}
- my @Data = ('
');
+ #
+ # Build a table for the plots
+ $table .= "
\n";
+ my @Plots;
for (my $i=$mintries;$i<=$maxtries;$i++) {
my $minstu = $ResponseData{$Foils[0]}->[$i]->{'total'};
my $maxstu = $ResponseData{$Foils[0]}->[$i]->{'total'};
@@ -200,14 +204,23 @@ sub DoTriesAnalysis {
$PlotData[$i]->{'good'},
$PlotData[$i]->{'bad'});
}
- push(@Data,'
\n";
+ #
+ # Should this be something the user can set? Too many dialogs!
+ my $plots_per_row = 2;
+ while (my $plotlink = shift(@Plots)) {
+ $table .= '
'.$plotlink.'
';
+ for (my $i=1;$i<$plots_per_row;$i++) {
+ if ($plotlink = shift(@Plots)) {
+ $table .= '