--- loncom/interface/statistics/loncorrectproblemplot.pm 2004/02/02 21:45:12 1.1
+++ loncom/interface/statistics/loncorrectproblemplot.pm 2004/12/10 20:41:39 1.14
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncorrectproblemplot.pm,v 1.1 2004/02/02 21:45:12 matthew Exp $
+# $Id: loncorrectproblemplot.pm,v 1.14 2004/12/10 20:41:39 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,24 +35,26 @@ use Apache::loncoursedata();
use Apache::lonstatistics;
use Apache::lonstathelpers;
use Apache::lonlocal;
-use HTML::Entities();
-use Time::Local();
-use Spreadsheet::WriteExcel();
-
-my $plotcolors = ['#33ff00',
- '#ff33cc', '#990000', '#aaaa66', '#663399', '#ff9933',
- '#66ccff', '#ff9999', '#cccc33', '#660000', '#33cc66',
- ];
my @SubmitButtons = (
{ name => 'CreatePlot',
text => 'Create Plot' },
- { name => 'ClearCache',
- text => 'Clear Caches' },
- { name => 'updatecaches',
- text => 'Update Student Data' },
);
+#########################################################
+#########################################################
+
+=pod
+
+=item &BuildCorrectProblemsPage
+
+Entry point from lonstatistics to the correct problems plot page.
+
+=cut
+
+#########################################################
+#########################################################
+
sub BuildCorrectProblemsPage {
my ($r,$c)=@_;
#
@@ -65,7 +67,6 @@ sub BuildCorrectProblemsPage {
#
&Apache::lonstatistics::PrepareClasslist();
#
- $r->print('
'.&mt('Number of Correct Problems Plot').'
');
$r->print(&CreateInterface());
#
my @Students = @Apache::lonstatistics::Students;
@@ -76,44 +77,63 @@ sub BuildCorrectProblemsPage {
'');
}
#
- &Apache::loncoursedata::clear_internal_caches();
- if (exists($ENV{'form.ClearCache'}) ||
- exists($ENV{'form.updatecaches'}) ||
- (exists($ENV{'form.firstanalysis'}) &&
- $ENV{'form.firstanalysis'} ne 'no')) {
- &Apache::lonstatistics::Gather_Full_Student_Data($r);
- }
- if (! exists($ENV{'form.firstanalysis'})) {
- $r->print('');
- } else {
- $r->print('');
- }
+ my @CacheButtonHTML =
+ &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
foreach my $button (@SubmitButtons) {
$r->print('{'text'}).'" />');
$r->print(' 'x5);
}
+ foreach my $html (@CacheButtonHTML) {
+ $r->print($html.(' 'x5));
+ }
$r->rflush();
#
# Determine which problem symbs we are to sum over
if (exists($ENV{'form.CreatePlot'})) {
my @ProblemSymbs;
+ my $total_parts = 0;
+ my $title = '';
if ($Apache::lonstatistics::SelectedMaps[0] ne 'all') {
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()){
+ if ($title eq '') {
+ $title = $seq->{'title'};
+ } else {
+ $title = 'Multiple Sequences';
+ }
foreach my $res (@{$seq->{'contents'}}) {
next if ($res->{'type'} ne 'assessment');
foreach my $part (@{$res->{'parts'}}) {
+ $total_parts++;
push(@ProblemSymbs,{symb=>$res->{'symb'},
part=>$part});
}
}
}
+ } else {
+ $title = "All Problems";
+ foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()){
+ foreach my $res (@{$seq->{'contents'}}) {
+ next if ($res->{'type'} ne 'assessment');
+ $total_parts += scalar(@{$res->{'parts'}});
+ }
+ }
+ }
+ my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits();
+ if (defined($starttime) || defined($endtime)) {
+ # Inform the user what the time limits on the data are.
+ $r->print(&mt('Statistics on submissions from [_1] to [_2]',
+ &Apache::lonlocal::locallocaltime($starttime),
+ &Apache::lonlocal::locallocaltime($endtime)));
}
my $score_data = &Apache::loncoursedata::get_student_scores
(\@Apache::lonstatistics::SelectedSections,
\@ProblemSymbs,
- $Apache::lonstatistics::enrollment_status);
- $r->print(&AnalyzeScoreData($score_data));
+ $Apache::lonstatistics::enrollment_status,undef,
+ $starttime,$endtime);
+ $r->print(&AnalyzeScoreData($score_data,$title,$total_parts));
+ } else {
+ $r->print('
'.&mt('Make a sequence selection from the "Sequences and Folders" menu and hit "Create Plot" to begin').'
');
}
return;
}
@@ -123,18 +143,21 @@ sub BuildCorrectProblemsPage {
=pod
-=item
+=item & AnalyzeScoreData($score_data)
+
+Analyze the result of &Apache::loncoursedata::get_student_scores() and
+return html with a plot of the data and a table of the values and bins.
=cut
#########################################################
#########################################################
sub AnalyzeScoreData {
- my ($score_data) = @_;
+ my ($score_data,$title,$total_parts) = @_;
#
# Basic check first
- if (@$score_data < 1) {
- return '
There is no data to plot
';
+ if (ref($score_data) ne 'ARRAY' || @$score_data < 1) {
+ return '
'.&mt('There is no data to plot').'
';
}
#
# Determine which bins to use
@@ -152,26 +175,32 @@ sub AnalyzeScoreData {
# Get the data into the bins (destroying $score_data in the process)
my @Bins = &bin_data($score_data,$binsize,$lowest,$highest);
my @Xdata; my @Ydata; my $max;
- my $Str = '