--- loncom/interface/statistics/lonproblemstatistics.pm 2003/04/01 17:00:24 1.49
+++ loncom/interface/statistics/lonproblemstatistics.pm 2003/09/03 16:07:06 1.58
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemstatistics.pm,v 1.49 2003/04/01 17:00:24 matthew Exp $
+# $Id: lonproblemstatistics.pm,v 1.58 2003/09/03 16:07:06 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -62,7 +62,7 @@ my @Fields = (
align => 'right',
color => '#FFFFE6' },
{ name => 'container',
- title => 'Container',
+ title => 'Sequence or Folder',
align => 'left',
color => '#FFFFE6',
sortable => 'yes' },
@@ -75,7 +75,8 @@ my @Fields = (
{ name => 'part',
title => 'Part',
align => 'left',
- color => '#FFFFE6' },
+ color => '#FFFFE6',
+ },
{ name => 'num_students',
title => '#Stdnts',
align => 'right',
@@ -131,7 +132,8 @@ my @Fields = (
format => '%5.2f',
sortable => 'yes',
graphable => 'yes',
- long_title => 'Degree of Difficulty' },
+ long_title => 'Degree of Difficulty'.
+ '[ 1 - ((#YES+#yes) / Tries) ]'},
{ name => 'num_solved',
title => '#YES',
align => 'right',
@@ -155,7 +157,7 @@ my @Fields = (
format => '%4.1f',
sortable => 'yes',
graphable => 'yes',
- long_title => 'Percent Wrong' },
+ long_title => 'Percent of students whose final answer is wrong' },
);
###############################################
@@ -172,57 +174,6 @@ select sections, maps, and output.
###############################################
###############################################
-sub CreateInterface {
- my $Str = '';
- $Str .= '
'."\n";
- $Str .= '';
- $Str .= 'Sections ';
- $Str .= 'Sequences and Folders ';
- $Str .= 'Output ';
- $Str .= ' '."\n";
- #
- $Str .= ''."\n";
- $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
- $Str .= ' ';
- #
- 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 .= &CreateAndParseOutputSelector();
- $Str .= ' '."\n";
- $Str .= '
'."\n";
- return $Str;
-}
-
-#######################################################
-#######################################################
-
-=pod
-
-=item &CreateAndParseOutputSelector()
-
-Construct a selection list of options for output and parse output selections.
-The current output selected is indicated by the values of the two package
-variables $output_mode and $show. @OutputOptions holds the descriptions of
-the output options and the values for $output_mode and $show.
-
-Based on code from lonstudentassessment.pm.
-
-=cut
-
-#######################################################
-#######################################################
-my $output_mode;
-my $show;
-
my @OutputOptions =
(
{ name => 'problem statistics grouped by sequence',
@@ -246,92 +197,46 @@ my @OutputOptions =
},
);
-sub OutputDescriptions {
- my $Str = '';
- $Str .= "Output Modes \n";
- $Str .= "\n";
- foreach my $outputmode (@OutputOptions) {
- $Str .=" ".$outputmode->{'name'}." \n";
- $Str .=" ".$outputmode->{'description'}." \n";
- }
- $Str .= " \n";
- return $Str;
-}
-
-sub CreateAndParseOutputSelector {
+sub CreateInterface {
my $Str = '';
- my $elementname = 'statsoutputmode';
- #
- # Format for output options is 'mode, restrictions';
- my $selected = 'HTML problem statistics grouped';
- if (exists($ENV{'form.'.$elementname})) {
- if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) {
- $selected = $ENV{'form.'.$elementname}->[0];
- } else {
- $selected = $ENV{'form.'.$elementname};
- }
- }
+ $Str .= ''."\n";
+ $Str .= '';
+ $Str .= 'Sections ';
+ $Str .= 'Enrollment Status ';
+ $Str .= 'Sequences and Folders ';
+ $Str .= 'Output ';
+ $Str .= ' '."\n";
#
- # Set package variables describing output mode
- $output_mode = 'html';
- $show = 'all';
- foreach my $option (@OutputOptions) {
- next if ($option->{'value'} ne $selected);
- $output_mode = $option->{'mode'};
- $show = $option->{'show'};
- }
+ $Str .= ''."\n";
+ $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
+ $Str .= ' ';
+ $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
+ $Str .= ' ';
#
- # Build the form element
- $Str = qq//;
- foreach my $option (@OutputOptions) {
- if (exists($option->{'special'}) &&
- $option->{'special'} =~ /do not show/) {
- next;
+ my $only_seq_with_assessments = sub {
+ my $s=shift;
+ if ($s->{'num_assess'} < 1) {
+ return 0;
+ } else {
+ return 1;
}
- $Str .= "\n".' {'value'} eq $selected);
- $Str .= ">".$option->{'name'}."<\/option>";
- }
- $Str .= "\n ";
- return $Str;
-}
-
-###############################################
-###############################################
-
-=pod
-
-=item &Gather_Student_Data()
-
-Ensures all student data is up to date.
-
-=cut
-
-###############################################
-###############################################
-sub Gather_Student_Data {
- my ($r) = @_;
- my $c = $r->connection();
- #
- my @Sequences = &Apache::lonstatistics::Sequences_with_Assess();
- #
- my @Students = @Apache::lonstatistics::Students;
- #
- # Open the progress window
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
- ($r,'Statistics Compilation Status',
- 'Statistics Compilation Progress', scalar(@Students));
- #
- while (my $student = shift @Students) {
- return if ($c->aborted());
- my ($status,undef) = &Apache::loncoursedata::ensure_current_data
- ($student->{'username'},$student->{'domain'},
- $ENV{'request.course.id'});
- &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
- 'last student');
- }
- &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
- $r->rflush();
+ };
+ $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
+ $only_seq_with_assessments);
+ $Str .= ' '."\n";
+ my ($html,$outputmode,$show) =
+ &Apache::lonstatistics::CreateAndParseOutputSelector(
+ 'statsoutputmode',
+ 'HTML problem statistics grouped',
+ @OutputOptions);
+ $Str .= $html;
+ $Str .= ' '."\n";
+ $Str .= '
'."\n";
+ $Str .= ' ';
+ $Str .= ' 'x5;
+ $Str .= ' ';
+ $Str .= ' 'x5;
+ return ($Str,$outputmode,$show);
}
###############################################
@@ -350,27 +255,17 @@ Main interface to problem statistics.
sub BuildProblemStatisticsPage {
my ($r,$c)=@_;
#
- $output_mode = 'html';
- $show = 'grouped';
- #
- $r->print(&CreateInterface());
+ my ($interface,$output_mode,$show) = &CreateInterface();
+ $r->print($interface);
$r->print(' ');
$r->print(' ');
$r->print(' ');
if (! exists($ENV{'form.statsfirstcall'})) {
- $r->print(<
-
-Please make your selections in the boxes above and hit
-the button marked "Update Display".
-
-
-ENDMSG
return;
}
#
- &Gather_Student_Data($r);
+ &Apache::lonstatistics::Gather_Student_Data($r);
#
#
if ($output_mode eq 'html') {
@@ -646,7 +541,19 @@ sub output_excel {
$rows_output++;
$cols_output=0;
#
- # Add the headers
+ # Long Headersheaders
+ foreach my $field (@Fields) {
+ next if ($field->{'name'} eq 'problem_num');
+ if (exists($field->{'long_title'})) {
+ $excel_sheet->write($rows_output,$cols_output++,
+ $field->{'long_title'});
+ } else {
+ $excel_sheet->write($rows_output,$cols_output++,'');
+ }
+ }
+ $rows_output++;
+ $cols_output=0;
+ # Brief headers
foreach my $field (@Fields) {
next if ($field->{'name'} eq 'problem_num');
$excel_sheet->write($rows_output,$cols_output++,$field->{'title'});
@@ -711,8 +618,7 @@ sub statistics_html_table_data {
}
$row .= '>';
if (exists($field->{'special'}) && $field->{'special'} eq 'link') {
- $row .= '';
+ $row .= ' ';
}
if (exists($field->{'format'})) {
$row .= sprintf($field->{'format'},$data->{$field->{'name'}});
@@ -783,7 +689,6 @@ sub plot_statistics {
}
}
return if (! defined($sortfield) || $sortfield eq '');
- &Apache::lonnet::logthis('data field = '.$datafield);
#
my $Max = 0;
my $problem_num = 0;
@@ -858,6 +763,9 @@ sub DrawGraph {
$title = '' if (! defined($title));
$xaxis = '' if (! defined($xaxis));
$yaxis = '' if (! defined($yaxis));
+ $title = &Apache::lonnet::escape($title);
+ $xaxis = &Apache::lonnet::escape($xaxis);
+ $yaxis = &Apache::lonnet::escape($yaxis);
#
my $sendValues = join(',', @$values);
my $sendCount = scalar(@$values);
@@ -887,7 +795,8 @@ sub get_statistics {
$data->{'problem_num'} = $problem_num;
$data->{'container'} = $sequence->{'title'};
$data->{'title'} = $resource->{'title'};
- $data->{'title.link'} = $resource->{'src'};
+ $data->{'title.link'} = $resource->{'src'}.'?symb='.
+ &Apache::lonnet::escape($resource->{'symb'});
#
return $data;
}