[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstudentassessment.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Wed, 05 Mar 2003 20:31:13 -0000
This is a MIME encoded message
--matthew1046896273
Content-Type: text/plain
matthew Wed Mar 5 15:31:13 2003 EDT
Modified files:
/loncom/interface/statistics lonstudentassessment.pm
Log:
Renamed 'Sequences and Folders' to the more generic 'Problem Sets'
Changed method of determining output mode variables. The globals
$output_mode, $show, and $show_links are now given values from the
hashes in the array @OutputOptions.
Fixed bug which caused the five student groupings to be off when a
student did not have any course data.
Added beginnings of multi-sheet excel file output.
--matthew1046896273
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20030305153113.txt"
Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.34 loncom/interface/statistics/lonstudentassessment.pm:1.35
--- loncom/interface/statistics/lonstudentassessment.pm:1.34 Tue Mar 4 11:10:09 2003
+++ loncom/interface/statistics/lonstudentassessment.pm Wed Mar 5 15:31:13 2003
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentassessment.pm,v 1.34 2003/03/04 16:10:09 matthew Exp $
+# $Id: lonstudentassessment.pm,v 1.35 2003/03/05 20:31:13 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -156,6 +156,10 @@
$initialize = \&excel_initialize;
$output_student = \&excel_outputstudent;
$finish = \&excel_finish;
+ } elsif ($output_mode eq 'multi-sheet excel') {
+ $initialize = \&multi_sheet_excel_initialize;
+ $output_student = \&multi_sheet_excel_outputstudent;
+ $finish = \&multi_sheet_excel_finish;
} elsif ($output_mode eq 'csv') {
$initialize = \&csv_initialize;
$output_student = \&csv_outputstudent;
@@ -233,7 +237,7 @@
$Str .= '<tr>';
$Str .= '<td align="center"><b>Sections</b></td>';
$Str .= '<td align="center"><b>Student Data</b></td>';
- $Str .= '<td align="center"><b>Sequences and Folders</b></td>';
+ $Str .= '<td align="center"><b>Problem Sets</b></td>';
$Str .= '<td align="center"><b>Output Format</b></td>';
$Str .= '</tr>'."\n";
#
@@ -275,47 +279,97 @@
({ name => 'HTML, with links',
value => 'html, with links',
description => 'Output HTML with each symbol linked to the problem '.
- 'which generated it.'},
+ 'which generated it.',
+ mode => 'html',
+ show => 'all',
+ show_links => 'yes',
+ },
{ name => 'HTML, without links',
value => 'html, without links',
description => 'Output HTML. By not including links, the size of the'.
' web page is greatly reduced. If your browser crashes on the '.
- 'full display, try this.'},
+ 'full display, try this.',
+ mode => 'html',
+ show => 'all',
+ show_links => 'no',
+ },
{ name => 'HTML, scores only',
value => 'html, scores only',
description => 'Output HTML, only showing the total number of correct'.
' problems (or problem parts) and not the maximum possible for '.
- 'each student'},
+ 'each student',
+ mode => 'html',
+ show => 'scores',
+ show_links => 'no',
+ },
{ name => 'HTML, totals',
value => 'html, totals',
description => 'Output HTML, but only the summary statistics for each'.
- ' sequence selected.'},
+ ' sequence selected.',
+ mode => 'html',
+ show => 'totals',
+ show_links => 'no',
+ },
{ name => 'Excel, scores only',
value => 'excel, scores only',
description => 'Output an Excel file (compatable with Excel 95), '.
'with a single column for each sequence showing the students '.
- 'score.'},
-# { name => 'Excel, everything',
-# value => 'excel, everything',
-# description => 'Output an Excel file (compatable with Excel 95), '.
-# 'with a seperate worksheet for each sequence you have selected '.
-# 'the data for each problem part '.
-# '(number of tries, status, points awarded) '.
-# 'will be listed.'},
+ 'score.',
+ mode => 'excel',
+ show => 'scores',
+ show_links => 'no',
+ },
{ name => 'Excel, totals',
value => 'excel, totals',
description => 'Output an Excel file (compatable with Excel 95), '.
'with two columns for each sequence, the students score on the '.
- 'sequence and the students maximum possible on the sequence'},
+ 'sequence and the students maximum possible on the sequence',
+ mode => 'excel',
+ show => 'totals',
+ show_links => 'no',
+ },
+ { name => 'multi-sheet Excel',
+ value => 'multi-sheet excel',
+ description => 'Output an Excel file (compatable with Excel 95), '.
+ 'with a seperate worksheet for each sequence you have selected '.
+ 'the data for each problem part '.
+ '(number of tries, status, points awarded) will be listed.',
+ mode => 'multi-sheet excel',
+ show => 'totals',
+ show_links => 'no',
+ },
+ { name => 'multi-sheet Excel, by section',
+ value => 'multi-sheet excel, by section',
+ description => 'Output an Excel file (compatable with Excel 95), '.
+ 'with a seperate worksheet for each sequence you have selected '.
+ 'the data for each problem part '.
+ '(number of tries, status, points awarded) will be listed. '.
+ 'There will be one Excel workbook for each section selected.',
+ mode => 'multi-sheet excel',
+ show => 'by section',
+ show_links => 'no',
+ },
{ name => 'CSV, everything',
value => 'csv, everything',
- description => ''},
+ description => '',
+ mode => 'csv',
+ show => 'all',
+ show_links => 'no',
+ },
{ name => 'CSV, scores only',
value => 'csv, scores only',
- description => ''},
+ description => '',
+ mode => 'csv',
+ show => 'scores',
+ show_links => 'no',
+ },
{ name => 'CSV, totals',
value => 'csv, totals',
- description => ''},
+ description => '',
+ mode => 'csv',
+ show => 'totals',
+ show_links => 'no',
+ },
);
sub OutputDescriptions {
@@ -348,25 +402,13 @@
$show_links = 'no';
$output_mode = 'html';
$show = 'all';
- my ($mode,$restriction) = split(',',$selected);
- $restriction =~ s/^\s*//;
- if ($mode =~ /^(html|excel|csv)$/) {
- $output_mode = $mode;
- } else {
- $output_mode = 'html';
- }
- if ($restriction eq 'with links') {
- $show_links = 'yes';
- } else {
- $show_links = 'no';
- }
- if ($restriction eq 'totals') {
- $show = 'totals';
- } elsif ($restriction eq 'scores only') {
- $show = 'scores';
- } else {
- $show = 'everything';
+ foreach my $option (@OutputOptions) {
+ next if ($option->{'value'} ne $selected);
+ $output_mode = $option->{'mode'};
+ $show = $option->{'show'};
+ $show_links = $option->{'show_links'};
}
+
#
# Build the form element
$Str = qq/<select size="5" name="$elementname">/;
@@ -408,7 +450,7 @@
my ($r) = @_;
#
$padding = ' 'x3;
- $count = 1;
+ $count = 0;
#
my $Str = "<pre>\n";
# First, the @StudentData fields need to be listed
@@ -436,6 +478,10 @@
sub html_outputstudent {
my ($r,$student) = @_;
my $Str = '';
+ #
+ if($count++ % 5 == 0 && $count > 0) {
+ $r->print("</pre><pre>");
+ }
# First, the @StudentData fields need to be listed
my @to_show = &get_student_fields_to_show();
foreach my $field (@to_show) {
@@ -499,11 +545,6 @@
$Str .= " \n";
$r->print($Str);
#
- $count++;
- if($count % 5 == 0) {
- $r->print("</pre><pre>");
- }
- #
$r->rflush();
return;
}
@@ -517,6 +558,78 @@
}
+#######################################################
+#######################################################
+
+=pod
+
+=head2 Multi-Sheet EXCEL subroutines
+
+=item &multi_sheet_excel_initialize($r)
+
+=item &multi_sheet_excel_outputstudent($r,$student)
+
+=item &multi_sheet_excel_finish($r)
+
+=cut
+
+#######################################################
+#######################################################
+{
+
+sub multi_sheet_excel_initialize {
+ my ($r)=@_;
+ $r->print("<h1>Not yet implemented</h1>");
+ #
+ # Estimate the size of the file. We would like to have < 5 megs of data.
+ my $max_size = 5000000;
+ my $num_students = scalar(@Apache::lonstatistics::Students);
+ my $num_sequences = 0;
+ my $num_data_per_part = 2; # 'status' and 'numtries'
+ my $fields_per_student = scalar(&get_student_fields_to_show());
+ my $bytes_per_field = 20; # Back of the envelope calculation
+ foreach my $seq (&get_sequences_to_show) {
+ $num_sequences++ if ($seq->{'num_assess'} > 0);
+ $fields_per_student += $num_data_per_part * $seq->{'num_assess_parts'};
+ }
+ my $size_estimate = $fields_per_student*$num_students*$bytes_per_field;
+ #
+ # Compute number of workbooks
+ my $num_workbooks = 1;
+ if ($size_estimate > $max_size) { # try to stay under 5 megs
+ $num_workbooks += int($size_estimate / $max_size);
+ }
+ if ($show eq 'by section') {
+ if (@Apache::lonstatistics::SelectedSections > 1 &&
+ $Apache::lonstatistics::SelectedSections[0] ne 'all') {
+ $num_workbooks = scalar(@Apache::lonstatistics::SelectedSections);
+ } else {
+ # @Apache::lonstatistics::Sections contains 'all' as well.
+ $num_workbooks = scalar(@Apache::lonstatistics::Sections) - 1;
+ }
+ }
+
+ $r->print("Maximum allowed size: ".$max_size." bytes<br />");
+ $r->print("Number of students: ".$num_students."<br />");
+ $r->print("Number of fields per student: ".$fields_per_student."<br />");
+ $r->print("Total number of fields: ".($fields_per_student*$num_students).
+ "<br />");
+ $r->print("Bytes per field: ".$bytes_per_field." (estimated)"."<br />");
+ $r->print("Estimated size: ".$size_estimate." bytes<br />");
+ $r->print("Number of workbooks: ".$num_workbooks."<br />");
+ $r->rflush();
+ return;
+}
+
+sub multi_sheet_excel_outputstudent {
+ my ($r,$student) = @_;
+}
+
+sub multi_sheet_excel_finish {
+ my ($r) = @_;
+}
+
+}
#######################################################
#######################################################
--matthew1046896273--