--- loncom/interface/statistics/loncorrectproblemplot.pm 2004/02/02 21:52:28 1.3
+++ loncom/interface/statistics/loncorrectproblemplot.pm 2006/08/18 15:15:38 1.21
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncorrectproblemplot.pm,v 1.3 2004/02/02 21:52:28 matthew Exp $
+# $Id: loncorrectproblemplot.pm,v 1.21 2006/08/18 15:15:38 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -28,7 +28,7 @@
package Apache::loncorrectproblemplot;
use strict;
-use Apache::lonnet();
+use Apache::lonnet;
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::loncoursedata();
@@ -39,17 +39,28 @@ use Apache::lonlocal;
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)=@_;
#
my %Saveable_Parameters = ('Status' => 'scalar',
- 'Section' => 'array');
+ 'Section' => 'array',
+ 'Groups' => 'array');
&Apache::loncommon::store_course_settings('correct_problems_plot',
\%Saveable_Parameters);
&Apache::loncommon::restore_course_settings('correct_problems_plot',
@@ -57,55 +68,81 @@ sub BuildCorrectProblemsPage {
#
&Apache::lonstatistics::PrepareClasslist();
#
- $r->print('
'.&mt('Number of Correct Problems Plot').' ');
$r->print(&CreateInterface());
#
my @Students = @Apache::lonstatistics::Students;
#
if (@Students < 1) {
$r->print(''.
- &mt('There are no students in the sections selected').
+ &mt('There are no students in the sections/groups selected').
' ');
}
#
- &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'})) {
+ if (exists($env{'form.CreatePlot'})) {
my @ProblemSymbs;
- if ($Apache::lonstatistics::SelectedMaps[0] ne 'all') {
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()){
- foreach my $res (@{$seq->{'contents'}}) {
- next if ($res->{'type'} ne 'assessment');
- foreach my $part (@{$res->{'parts'}}) {
- push(@ProblemSymbs,{symb=>$res->{'symb'},
- part=>$part});
- }
+ my $total_weights = 0;
+ my $title = '';
+ my @maps = &Apache::lonstatistics::get_selected_maps('Maps');
+ my ($navmap,@sequences) =
+ &Apache::lonstatistics::selected_sequences_with_assessments();
+ if ($maps[0] ne 'all') {
+ foreach my $seq (@sequences) {
+ if ($title eq '') {
+ $title = $seq->compTitle;
+ } else {
+ $title = 'Multiple Sequences';
}
}
+ } else {
+ $title = 'All Problems';
}
+ foreach my $seq (@sequences) {
+ my @resources =
+ &Apache::lonstathelpers::get_resources($navmap,$seq);
+ foreach my $res (@resources) {
+ foreach my $partid (@{$res->parts}) {
+ push(@ProblemSymbs,{symb=>$res->symb,
+ part=>$partid});
+ $total_weights +=
+ &Apache::lonnet::EXT('resource.'.$partid.'.weight',
+ $res->symb,
+ undef,undef,undef);
+ }
+ }
+ }
+ $r->print(''.
+ &Apache::lonstatistics::section_and_enrollment_description().
+ ' ');
+ 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)));
+ }
+ &Apache::loncoursedata::populate_weight_table();
my $score_data = &Apache::loncoursedata::get_student_scores
- (\@Apache::lonstatistics::SelectedSections,
+ ([&Apache::lonstatistics::get_selected_sections()],
+ [&Apache::lonstatistics::get_selected_groups()],
\@ProblemSymbs,
- $Apache::lonstatistics::enrollment_status);
- $r->print(&AnalyzeScoreData($score_data));
+ $Apache::lonstatistics::enrollment_status,undef,
+ $starttime,$endtime);
+ $r->print(&AnalyzeScoreData($score_data,$title,$total_weights));
+ } else {
+ $r->print(''.&mt('Make a sequence selection from the "Sequences and Folders" menu and hit "Create Plot" to begin').' ');
}
return;
}
@@ -125,11 +162,11 @@ return html with a plot of the data and
#########################################################
#########################################################
sub AnalyzeScoreData {
- my ($score_data) = @_;
+ my ($score_data,$title,$maximum) = @_;
#
# 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
@@ -147,26 +184,34 @@ 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 = ''."\n".'Range Count '."\n";
+ my $Str =
+ ''.
+ &mt('Problem weights do not reflect individual student settings.')
+ .'
'.
+ ''."\n".'Range Count '."\n";
+ my $sum = 0;
while (my $bin = shift(@Bins)) {
push (@Xdata,$bin->{'start'});
push (@Ydata,$bin->{'count'});
+ $sum += $bin->{'count'};
if ($bin->{'count'} > $max) {
$max = $bin->{'count'};
}
$Str.= ''.$bin->{'start'}.' - '.$bin->{'end'}.' '.
''.$bin->{'count'}.' '."\n";
}
- my $title = '';
+ # scale max to an integer.
+ $max = 5*(int($max/5)+1);
$Str .= "
\n";
- $Str = " \n".&Apache::loncommon::DrawBarGraph($title,
- 'Num Correct Problems',
- 'Number of students',
- $max,
- undef, # colors
- \@Xdata,
- \@Ydata).
- "\n \n".$Str;
+ $title = &HTML::Entities::decode($title);
+ $Str = "\n".
+ &Apache::loncommon::DrawBarGraph($title.' ('.$sum.' students)',
+ 'Correct Problems (max possible = '.$maximum.')',
+ 'Number of students',
+ $max,undef, # colors
+ \@Xdata,\@Ydata).
+ "\n \n".$Str;
+ $Str .= '
'."\n";
return $Str;
}
@@ -203,10 +248,10 @@ sub bin_data {
my @Bins;
my $count=0;
my $idx=0;
- while ($idx < scalar(@$data) && ($binend-$endbin)<$binsize) {
+ while ($idx < scalar(@$data) && ($endbin-$binend + $binsize)>0) {
my $dataset = $data->[$idx++];
my ($x,$y) = @{$dataset};
- while ($x > $binend) {
+ while ($x > ($binend-.001)) {
# store the old data
push (@Bins,{ start => $binstart,
count => $count,
@@ -218,6 +263,11 @@ sub bin_data {
}
$count+=$y;
}
+ if ($count > 0) {
+ push (@Bins,{ start => $binstart,
+ count => $count,
+ end => $binend });
+ }
return @Bins;
}
@@ -240,36 +290,41 @@ sub CreateInterface {
##
## Environment variable initialization
my $Str;
+ $Str .= &Apache::lonhtmlcommon::breadcrumbs('Correct Problems Plot');
+ $Str .= '';
+ #
$Str .= '
'."\n";
$Str .= '';
$Str .= ''.&mt('Sections').' ';
- $Str .= ''.&mt('Enrollment Status').' ';
+ $Str .= ''.&mt('Groups').' ';
+ $Str .= ''.&mt('Access Status').' ';
$Str .= ''.&mt('Sequences and Folders').' ';
+ $Str .= ''.
+ &Apache::lonstathelpers::limit_by_time_form().' ';
$Str .= ' '."\n";
- ##
- ##
+ #
$Str .= ''."\n";
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
$Str .= ' ';
#
+ $Str .= ''."\n";
+ $Str .= &Apache::lonstatistics::GroupSelect('Group','multiple',5);
+ $Str .= ' ';
$Str .= '';
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
$Str .= ' '."\n";
#
- my $only_seq_with_assessments = sub {
- my $s=shift;
- if ($s->{'num_assess'} < 1) {
- return 0;
- } else {
- return 1;
- }
- };
- $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
- $only_seq_with_assessments);
- $Str .= ' '."\n";
- ##
+ $Str .= &Apache::lonstatistics::map_select('Maps','multiple,all',5);
+ $Str .= ' ';
+ #
$Str .= ' '."\n";
$Str .= '
'."\n";
+ #
+ $Str .= ''.&mt('Status: [_1]',
+ ' ').
+ ' '.'';
+ ##
return $Str;
}