'.
''.
$rendered_problem.
@@ -67,11 +74,23 @@ sub BuildProblemAnalysisPage {
## Analyze the problem
my $PerformanceData =
&Apache::loncoursedata::get_optionresponse_data
- (undef,$symb,$resid);
+ (\@Students,$symb,$resid);
if (defined($PerformanceData) &&
ref($PerformanceData) eq 'ARRAY') {
- my $analysis_html = &DoTriesAnalysis($PerformanceData,$ORdata);
+ if ($ENV{'form.AnalyzeBy'} eq 'Tries') {
+ my $analysis_html = &DoTriesAnalysis($PerformanceData,
+ $ORdata);
$r->print($analysis_html);
+# } elsif ($ENV{'form.AnalyzeBy'} eq 'Time') {
+# my $analysis_html = &DoTimeAnalysis($PerformanceData,
+# $ORdata);
+# $r->print($analysis_html);
+ } else {
+ $r->print(''.
+ &mt('The analysis you have selected is '.
+ 'not supported at this time').
+ '');
+ }
} else {
$r->print(''.
&mt('There is no student data for this problem.').
@@ -82,7 +101,7 @@ sub BuildProblemAnalysisPage {
}
$r->print(' ');
} else {
- $r->print('No Problem Selected');
+ $r->print(''.&mt('Please select a problem to analyze').'');
}
# Okay, they asked for data, so make sure we get the latest data.
$r->print(&OptionResponseProblemSelector());
@@ -92,7 +111,7 @@ sub BuildProblemAnalysisPage {
sub DoTriesAnalysis {
my ($PerformanceData,$ORdata) = @_;
my $mintries = 1;
- my $maxtries = 3;
+ my $maxtries = 10;
my %ResponseData = &analyze_option_data_by_tries($PerformanceData,
$mintries,$maxtries);
my @Foils = sort(keys(%ResponseData));
@@ -150,10 +169,38 @@ sub DoTriesAnalysis {
}
my @Data = (' | ');
for (my $i=$mintries;$i<=$maxtries;$i++) {
- push(@Data,''.&DrawGraph('Attempt '.$i,'Foil Number',
- 'Percent Correct',100,
- $PlotData[$i]->{'good'},
- $PlotData[$i]->{'bad'}).' | ');
+ my $minstu = $ResponseData{$Foils[0]}->[$i]->{'total'};
+ my $maxstu = $ResponseData{$Foils[0]}->[$i]->{'total'};
+ foreach my $foilid (@Foils) {
+ if ($minstu > $ResponseData{$foilid}->[$i]->{'total'}) {
+ $minstu = $ResponseData{$foilid}->[$i]->{'total'};
+ }
+ if ($maxstu < $ResponseData{$foilid}->[$i]->{'total'}) {
+ $maxstu = $ResponseData{$foilid}->[$i]->{'total'};
+ }
+ }
+ $maxstu = 0 if (! $maxstu);
+ $minstu = 0 if (! $minstu);
+ my $graphlink;
+ if ($maxstu == $minstu) {
+ $graphlink = &Apache::loncommon::DrawGraph
+ ('Attempt '.$i.', '.$maxstu.' students',
+ 'Foil Number',
+ 'Percent Correct',
+ 100,
+ $PlotData[$i]->{'good'},
+ $PlotData[$i]->{'bad'});
+ } else {
+ $graphlink = &Apache::loncommon::DrawGraph
+ ('Attempt '.$i.', '.$minstu.'-'.$maxstu.
+ ' students',
+ 'Foil Number',
+ 'Percent Correct',
+ 100,
+ $PlotData[$i]->{'good'},
+ $PlotData[$i]->{'bad'});
+ }
+ push(@Data,''.$graphlink.' | ');
}
push (@Rows,\@Data);
my $table = ''."\n";
@@ -193,6 +240,8 @@ sub analyze_option_data_by_tries {
! exists($tryhash->{'incorrect'})) ||
($tryhash->{'correct'} < 1 &&
$tryhash->{'incorrect'} < 1));
+ $tryhash->{'total'} = $tryhash->{'correct'} +
+ $tryhash->{'incorrect'};
$tryhash->{'percent_corr'} = 100 *
($tryhash->{'correct'} /
($tryhash->{'correct'} + $tryhash->{'incorrect'})
@@ -202,40 +251,6 @@ sub analyze_option_data_by_tries {
return %Trydata;
}
-sub DrawGraph {
- my ($title,$xlabel,$ylabel,$MaxY,$values1,$values2)=@_;
- if (! defined($values1) || ref($values1) ne 'ARRAY') {
- return '';
- }
- $title = '' if (! defined($title));
- $xlabel = '' if (! defined($xlabel));
- $ylabel = '' if (! defined($ylabel));
- $title = &Apache::lonnet::escape($title);
- $xlabel = &Apache::lonnet::escape($xlabel);
- $ylabel = &Apache::lonnet::escape($ylabel);
- #
- my $sendValues1 = join(',', @$values1);
- my $sendValues2;
- if (defined($values2)) {
- $sendValues2 = join(',', @$values2);
- }
-
- my $sendCount = scalar(@$values1);
- $MaxY =1 if ($MaxY < 1);
- if ( int($MaxY) < $MaxY ) {
- $MaxY++;
- $MaxY = int($MaxY);
- }
- my @GData = ($title,$xlabel,$ylabel,$MaxY,$sendCount,$sendValues1);
- if (defined($sendValues2)) {
- push (@GData,$sendValues2);
- }
- return '';
-}
-
-
-
sub get_problem_symb {
my $problemstring = shift();
my ($symb,$partid,$resid) = ($problemstring=~ /^(.*):([^:]*):([^:]*)$/);
@@ -243,19 +258,31 @@ sub get_problem_symb {
}
sub CreateInterface {
+ ##
+ ## Environment variable initialization
+ if (! exists$ENV{'form.AnalyzeBy'}) {
+ $ENV{'form.AnalyzeBy'} = 'Tries';
+ }
+ ##
+ ## Build the menu
my $Str = '';
$Str .= ''."\n";
$Str .= '';
$Str .= ''.&mt('Sections').' | ';
$Str .= ''.&mt('Enrollment Status').' | ';
$Str .= ''.&mt('Sequences and Folders').' | ';
+ $Str .= ''.&mt('Analyze By').' | ';
$Str .= ' '."\n";
#
$Str .= ''."\n";
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
- $Str .= ' | ';
+ $Str .= ' | ';
+ #
+ $Str .= '';
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
- $Str .= ' | ';
+ $Str .= ' | ';
+ #
+ $Str .= '';
my $only_seq_with_assessments = sub {
my $s=shift;
if ($s->{'num_assess'} < 1) {
@@ -266,7 +293,22 @@ sub CreateInterface {
};
$Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
$only_seq_with_assessments);
- $Str .= ' | '."\n";
+ $Str .= '';
+ #
+ $Str .= '';
+ $Str .='';
+ $Str .='';
+ $Str .= ' | ';
+ #
+ $Str .= ''."\n";
$Str .= ' '."\n";
$Str .= '';
|