[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--