Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.34 and 1.35

version 1.34, 2003/03/04 16:10:09 version 1.35, 2003/03/05 20:31:13
Line 156  ENDMSG Line 156  ENDMSG
         $initialize     = \&excel_initialize;          $initialize     = \&excel_initialize;
         $output_student = \&excel_outputstudent;          $output_student = \&excel_outputstudent;
         $finish         = \&excel_finish;          $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') {      } elsif ($output_mode eq 'csv') {
         $initialize     = \&csv_initialize;          $initialize     = \&csv_initialize;
         $output_student = \&csv_outputstudent;          $output_student = \&csv_outputstudent;
Line 233  sub CreateInterface { Line 237  sub CreateInterface {
     $Str .= '<tr>';      $Str .= '<tr>';
     $Str .= '<td align="center"><b>Sections</b></td>';      $Str .= '<td align="center"><b>Sections</b></td>';
     $Str .= '<td align="center"><b>Student Data</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 .= '<td align="center"><b>Output Format</b></td>';
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
     #      #
Line 275  my @OutputOptions = Line 279  my @OutputOptions =
     ({ name  => 'HTML, with links',      ({ name  => 'HTML, with links',
        value => 'html, with links',         value => 'html, with links',
        description => 'Output HTML with each symbol linked to the problem '.         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',       { name  => 'HTML, without links',
        value => 'html, without links',         value => 'html, without links',
        description => 'Output HTML.  By not including links, the size of the'.         description => 'Output HTML.  By not including links, the size of the'.
    ' web page is greatly reduced.  If your browser crashes on 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',       { name  => 'HTML, scores only',
        value => 'html, scores only',         value => 'html, scores only',
        description => 'Output HTML, only showing the total number of correct'.         description => 'Output HTML, only showing the total number of correct'.
    ' problems (or problem parts) and not the maximum possible for '.     ' problems (or problem parts) and not the maximum possible for '.
    'each student'},     'each student',
          mode => 'html',
          show => 'scores',
          show_links => 'no',
              },
      { name  => 'HTML, totals',       { name  => 'HTML, totals',
        value => 'html, totals',         value => 'html, totals',
        description => 'Output HTML, but only the summary statistics for each'.         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',       { name  => 'Excel, scores only',
        value => 'excel, scores only',         value => 'excel, scores only',
        description => 'Output an Excel file (compatable with Excel 95), '.         description => 'Output an Excel file (compatable with Excel 95), '.
    'with a single column for each sequence showing the students '.     'with a single column for each sequence showing the students '.
    'score.'},     'score.',
 #     { name  => 'Excel, everything',         mode => 'excel',
 #       value => 'excel, everything',         show => 'scores',
 #       description => 'Output an Excel file (compatable with Excel 95), '.         show_links => 'no',
 #   '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.'},  
      { name  => 'Excel, totals',       { name  => 'Excel, totals',
        value => 'excel, totals',         value => 'excel, totals',
        description => 'Output an Excel file (compatable with Excel 95), '.         description => 'Output an Excel file (compatable with Excel 95), '.
    'with two columns for each sequence, the students score on the '.     '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',       { name  => 'CSV, everything',
        value => 'csv, everything',         value => 'csv, everything',
        description => ''},         description => '',
          mode => 'csv',
          show => 'all',
          show_links => 'no',
              },
      { name  => 'CSV, scores only',       { name  => 'CSV, scores only',
        value => 'csv, scores only',         value => 'csv, scores only',
        description => ''},         description => '',
          mode => 'csv',
          show => 'scores',
          show_links => 'no',
              },
      { name  => 'CSV, totals',       { name  => 'CSV, totals',
        value => 'csv, totals',         value => 'csv, totals',
        description => ''},         description => '',
          mode => 'csv',
          show => 'totals',
          show_links => 'no',
              },
      );       );
   
 sub OutputDescriptions {  sub OutputDescriptions {
Line 348  sub CreateAndParseOutputSelector { Line 402  sub CreateAndParseOutputSelector {
     $show_links  = 'no';      $show_links  = 'no';
     $output_mode = 'html';      $output_mode = 'html';
     $show        = 'all';      $show        = 'all';
     my ($mode,$restriction) = split(',',$selected);      foreach my $option (@OutputOptions) {
     $restriction =~ s/^\s*//;          next if ($option->{'value'} ne $selected);
     if ($mode =~ /^(html|excel|csv)$/) {          $output_mode = $option->{'mode'};
         $output_mode = $mode;          $show        = $option->{'show'};
     } else {          $show_links  = $option->{'show_links'};
         $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';  
     }      }
   
     #      #
     # Build the form element      # Build the form element
     $Str = qq/<select size="5" name="$elementname">/;      $Str = qq/<select size="5" name="$elementname">/;
Line 408  sub html_initialize { Line 450  sub html_initialize {
     my ($r) = @_;      my ($r) = @_;
     #      #
     $padding = ' 'x3;      $padding = ' 'x3;
     $count = 1;      $count = 0;
     #      #
     my $Str = "<pre>\n";      my $Str = "<pre>\n";
     # First, the @StudentData fields need to be listed      # First, the @StudentData fields need to be listed
Line 436  sub html_initialize { Line 478  sub html_initialize {
 sub html_outputstudent {  sub html_outputstudent {
     my ($r,$student) = @_;      my ($r,$student) = @_;
     my $Str = '';      my $Str = '';
       #
       if($count++ % 5 == 0 && $count > 0) {
           $r->print("</pre><pre>");
       }
     # First, the @StudentData fields need to be listed      # First, the @StudentData fields need to be listed
     my @to_show = &get_student_fields_to_show();      my @to_show = &get_student_fields_to_show();
     foreach my $field (@to_show) {      foreach my $field (@to_show) {
Line 499  sub html_outputstudent { Line 545  sub html_outputstudent {
     $Str .= " \n";      $Str .= " \n";
     $r->print($Str);      $r->print($Str);
     #      #
     $count++;  
     if($count % 5 == 0) {  
         $r->print("</pre><pre>");  
     }  
     #  
     $r->rflush();      $r->rflush();
     return;      return;
 }      }    
Line 520  sub html_finish { Line 561  sub html_finish {
 #######################################################  #######################################################
 #######################################################  #######################################################
   
   =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) = @_;
   }
   
   }
   #######################################################
   #######################################################
   
 =pod  =pod
   
 =head2 EXCEL subroutines  =head2 EXCEL subroutines

Removed from v.1.34  
changed lines
  Added in v.1.35


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>