--- loncom/interface/statistics/loncorrectproblemplot.pm 2004/12/10 20:41:39 1.14
+++ loncom/interface/statistics/loncorrectproblemplot.pm 2008/10/30 17:45:25 1.24
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncorrectproblemplot.pm,v 1.14 2004/12/10 20:41:39 matthew Exp $
+# $Id: loncorrectproblemplot.pm,v 1.24 2008/10/30 17:45:25 bisitz 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();
@@ -59,7 +59,8 @@ 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',
@@ -73,7 +74,7 @@ sub BuildCorrectProblemsPage {
#
if (@Students < 1) {
$r->print('
'.
- &mt('There are no students in the sections selected').
+ &mt('There are no students in the sections/groups selected').
' ');
}
#
@@ -90,35 +91,41 @@ sub BuildCorrectProblemsPage {
$r->rflush();
#
# Determine which problem symbs we are to sum over
- if (exists($ENV{'form.CreatePlot'})) {
+ if (exists($env{'form.CreatePlot'})) {
my @ProblemSymbs;
- my $total_parts = 0;
+ my $total_weights = 0;
my $title = '';
- if ($Apache::lonstatistics::SelectedMaps[0] ne 'all') {
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()){
+ 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->{'title'};
+ $title = $seq->compTitle;
} 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'}});
+ $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.
@@ -126,12 +133,14 @@ sub BuildCorrectProblemsPage {
&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,undef,
$starttime,$endtime);
- $r->print(&AnalyzeScoreData($score_data,$title,$total_parts));
+ $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').' ');
}
@@ -153,7 +162,7 @@ return html with a plot of the data and
#########################################################
#########################################################
sub AnalyzeScoreData {
- my ($score_data,$title,$total_parts) = @_;
+ my ($score_data,$title,$maximum) = @_;
#
# Basic check first
if (ref($score_data) ne 'ARRAY' || @$score_data < 1) {
@@ -176,6 +185,9 @@ sub AnalyzeScoreData {
my @Bins = &bin_data($score_data,$binsize,$lowest,$highest);
my @Xdata; my @Ydata; my $max;
my $Str =
+ ''.
+ &mt('Problem weights do not reflect individual student settings.')
+ .'
'.
''."\n".'Range Count '."\n";
my $sum = 0;
while (my $bin = shift(@Bins)) {
@@ -192,14 +204,13 @@ sub AnalyzeScoreData {
$max = 5*(int($max/5)+1);
$Str .= "
\n";
$title = &HTML::Entities::decode($title);
- $Str = "\n".&Apache::loncommon::DrawBarGraph($title.' N = '.$sum,
- 'Correct Problems (max possible = '.$total_parts.')',
- 'Number of students',
- $max,
- undef, # colors
- \@Xdata,
- \@Ydata).
- "\n \n".$Str;
+ $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;
}
@@ -237,7 +248,7 @@ sub bin_data {
my @Bins;
my $count=0;
my $idx=0;
- while ($idx < scalar(@$data) && ($endbin-$binend + $binsize)>0) {
+ while ($idx < scalar(@$data) && ($endbin-$binend + $binsize)>=0) {
my $dataset = $data->[$idx++];
my ($x,$y) = @{$dataset};
while ($x > ($binend-.001)) {
@@ -279,46 +290,47 @@ sub CreateInterface {
##
## Environment variable initialization
my $Str;
- $Str .= &Apache::lonhtmlcommon::breadcrumbs
- (undef,'Correct Problems Plot');
+ $Str .= &Apache::lonhtmlcommon::breadcrumbs('Correct Problems Plot');
$Str .= '';
#
- $Str .= '
'."\n";
- $Str .= '';
- $Str .= ''.&mt('Sections').' ';
- $Str .= ''.&mt('Enrollment Status').' ';
- $Str .= ''.&mt('Sequences and Folders').' ';
- $Str .= ''.
- &Apache::lonstathelpers::limit_by_time_form().' ';
- $Str .= ' '."\n";
+ $Str .= &Apache::loncommon::start_data_table();
+ $Str .= &Apache::loncommon::start_data_table_header_row();
+ $Str .= ''.&mt('Sections').' ';
+ $Str .= ''.&mt('Groups').' ';
+ $Str .= ''.&mt('Access Status').' ';
+ $Str .= ''.&mt('Sequences and Folders').' ';
+ $Str .= ''.&mt('Time Period').' ';
+ $Str .= &Apache::loncommon::end_data_table_header_row();
#
- $Str .= ''."\n";
+ $Str .= &Apache::loncommon::start_data_table_row();
+ $Str .= ' '."\n";
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
$Str .= ' ';
#
- $Str .= '';
+ $Str .= ' '."\n";
+ $Str .= &Apache::lonstatistics::GroupSelect('Group','multiple',5);
+ $Str .= ' ';
+ $Str .= '';
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
- $Str .= ' '."\n";
+ $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 .= &Apache::lonstathelpers::limit_by_time_form();
$Str .= ' ';
#
- $Str .= ' '."\n";
- $Str .= '
'."\n";
+ $Str .= &Apache::loncommon::end_data_table_row();
+ $Str .= &Apache::loncommon::end_data_table();
#
- $Str .= ''.&mt('Status: [_1]',
- ' ').
- ' '.'';
+ $Str .= ''
+ .&mt('Status: [_1]',
+ ' ')
+ .'
';
+ $Str .= '';
##
return $Str;
}