Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.56 and 1.62

version 1.56, 2003/06/11 14:41:59 version 1.62, 2003/06/23 16:06:11
Line 140  sub BuildStudentAssessmentPage { Line 140  sub BuildStudentAssessmentPage {
     my ($r,$c)=@_;      my ($r,$c)=@_;
     undef($Statistics);      undef($Statistics);
     $single_student_mode = 1 if ($ENV{'form.SelectedStudent'});      $single_student_mode = 1 if ($ENV{'form.SelectedStudent'});
       if ($ENV{'form.selectstudent'}) {
           &Apache::lonstatistics::DisplayClasslist($r);
           return;
       }
     #      #
     # Print out the HTML headers for the interface      # Print out the HTML headers for the interface
     #    This also parses the output mode selector      #    This also parses the output mode selector
Line 149  sub BuildStudentAssessmentPage { Line 153  sub BuildStudentAssessmentPage {
     $r->print('<input type="hidden" name="sort" value="'.      $r->print('<input type="hidden" name="sort" value="'.
               $ENV{'form.sort'}.'" />');                $ENV{'form.sort'}.'" />');
     $r->rflush();      $r->rflush();
       #
     if (! exists($ENV{'form.notfirstrun'}) && ! $single_student_mode) {      if (! exists($ENV{'form.notfirstrun'}) && ! $single_student_mode) {
         return;          return;
     }      }
Line 292  sub CreateInterface { Line 297  sub CreateInterface {
     $Str .= '<td align="center"><b>Student Data</b></td>';      $Str .= '<td align="center"><b>Student Data</b></td>';
     $Str .= '<td align="center"><b>Enrollment Status</b></td>';      $Str .= '<td align="center"><b>Enrollment Status</b></td>';
     $Str .= '<td align="center"><b>Sequences and Folders</b></td>';      $Str .= '<td align="center"><b>Sequences and Folders</b></td>';
     $Str .= '<td align="center"><b>Output Format</b></td>';      $Str .= '<td align="center"><b>Output Format</b>'.
     $Str .= '<td align="center"><b>Output Data</b></td>';          &Apache::loncommon::help_open_topic("Chart_Output_Formats").
           '</td>';
       $Str .= '<td align="center"><b>Output Data</b>'.
           &Apache::loncommon::help_open_topic("Chart_Output_Data").
           '</td>';
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
     #      #
     $Str .= '<tr><td align="center">'."\n";      $Str .= '<tr><td align="center">'."\n";
Line 321  sub CreateInterface { Line 330  sub CreateInterface {
     $Str .= '</td></tr>'."\n";      $Str .= '</td></tr>'."\n";
     $Str .= '</table>'."\n";      $Str .= '</table>'."\n";
     $Str .= '<input type="submit" value="Generate Chart" />';      $Str .= '<input type="submit" value="Generate Chart" />';
     $Str .= '&nbsp;'x8;      $Str .= '&nbsp;'x5;
       $Str .= '<input type="submit" name="selectstudent" '.
                                     'value="Select One Student" />';
       $Str .= '&nbsp;'x5;
       $Str .= '<input type="submit" name="ClearCache" value="Clear Caches" />';
       $Str .= '&nbsp;'x5;
       $Str .= '<br />';
     return $Str;      return $Str;
 }  }
   
Line 366  my @OutputOptions = Line 381  my @OutputOptions =
        mode => 'excel',         mode => 'excel',
        show_links => 'no',         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_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_links => 'no',  
 #           },  
      { name  => 'CSV',       { name  => 'CSV',
        value => 'csv',         value => 'csv',
        description => 'Output a comma seperated values file suitable for '.         description => 'Output a comma seperated values file suitable for '.
            'import into a spreadsheet.',             'import into a spreadsheet program.  Using this method as opposed '.
              'to Excel output allows you to organize your data before importing'.
              ' it into a spreadsheet program.',
        mode => 'csv',         mode => 'csv',
        show_links => 'no',         show_links => 'no',
            },             },
Line 396  my @OutputOptions = Line 394  my @OutputOptions =
   
 sub OutputDescriptions {  sub OutputDescriptions {
     my $Str = '';      my $Str = '';
     $Str .= "<h2>Output Modes</h2>\n";      $Str .= "<h2>Output Formats</h2>\n";
     $Str .= "<dl>\n";      $Str .= "<dl>\n";
     foreach my $outputmode (@OutputOptions) {      foreach my $outputmode (@OutputOptions) {
  $Str .="    <dt>".$outputmode->{'name'}."</dt>\n";   $Str .="    <dt>".$outputmode->{'name'}."</dt>\n";
Line 445  sub CreateAndParseOutputSelector { Line 443  sub CreateAndParseOutputSelector {
 ## Data selector stuff  ## Data selector stuff
 ##  ##
 my @OutputDataOptions =  my @OutputDataOptions =
     ( { name  =>'Tries',      (
         base  =>'tries',       { name  => 'Scores',
         value => 'tries',         base  => 'scores',
         shortdesc => 'Number of Tries before success on each Problem Part',         value => 'scores',
         longdesc =>'The number of tries before success on each problem part.',         shortdesc => 'Score on each Problem Part',
         },         longdesc =>'The students score on each problem part, computed as'.
       { name  =>'Parts Correct',             'the part weight * part awarded',
         base  =>'tries',         },
         value => 'parts correct',       { name  => 'Scores Sum',
         shortdesc => 'Number of Problem Parts completed successfully.',         base  => 'scores',
         longdesc => 'The Number of Problem Parts completed successfully.',         value => 'sum only',
         },         shortdesc => 'Sum of Scores on each Problem Part',
       { name  =>'Parts Correct & Maximums',         longdesc =>'The total of the scores of the student on each problem'.
         base  =>'tries',             ' part in the sequences or folders selected.',
         value => 'parts correct total',         },
         shortdesc => 'Number of Problem Parts completed successfully.',       { name  => 'Scores Sum & Maximums',
         longdesc => 'The Number of Problem Parts completed successfully and '.         base  => 'scores',
             'the maximum possible for each student',         value => 'sum and total',
         },         shortdesc => 'Total Score and Maximum Possible for each '.
       { name  => 'Scores',             'Sequence or Folder',
         base  => 'scores',         longdesc => 'The score of each student as well as the '.
         value => 'scores',             ' maximum possible on each Sequence or Folder.',
         shortdesc => 'Score on each Problem Part',         },
         longdesc =>'The students score on each problem part, computed as'.       { name  => 'Scores Summary Table Only',
             'the part weight * part awarded',         base  => 'scores',
         },         value => 'final table scores',
       { name  => 'Scores Sum',         shortdesc => 'Summary of Scores',
         base  => 'scores',         longdesc  => 'The average score on each sequence or folder for the '.
         value => 'sum only',             'selected students.',
         shortdesc => 'Sum of Scores on each Problem Part',         },
         longdesc =>'The total of the scores of the student on each problem'.       { name  =>'Tries',
             ' part in the sequences or folders selected.',         base  =>'tries',
         },         value => 'tries',
       { name  => 'Scores Sum & Maximums',         shortdesc => 'Number of Tries before success on each Problem Part',
         base  => 'scores',         longdesc =>'The number of tries before success on each problem part.',
         value => 'sum and total',         },
         shortdesc => 'Total Score and Maximum Possible for each '.       { name  =>'Parts Correct',
             'Sequence or Folder',         base  =>'tries',
         longdesc => 'The total of the scores of the student on each problem'.         value => 'parts correct',
             ' and the maximum possible for that student on each Sequence or '.         shortdesc => 'Number of Problem Parts completed successfully.',
             ' Folder.',         longdesc => 'The Number of Problem Parts completed successfully'.
         },             ' on each sequence or folder.',
       { name  => 'Summary Table (Scores)',         },
         base  => 'scores',       { name  =>'Parts Correct & Maximums',
         value => 'final table scores',         base  =>'tries',
         shortdesc => 'Summary of Scores',         value => 'parts correct total',
         longdesc  => '',         shortdesc => 'Number of Problem Parts completed successfully.',
         },         longdesc => 'The Number of Problem Parts completed successfully and '.
       { name  => 'Summary Table (Parts)',             'the maximum possible for each student',
         base  => 'tries',         },
         value => 'final table parts',       { name  => 'Parts Summary Table Only',
         shortdesc => 'Summary of Parts Correct',         base  => 'tries',
         longdesc  => '',         value => 'final table parts',
         }         shortdesc => 'Summary of Parts Correct',
       );         longdesc  => 'A summary table of the average number of problem parts '.
              'students were able to get correct on each sequence.',
          },
        );
   
   sub HTMLifyOutputDataDescriptions {
       my $Str = '';
       $Str .= "<h2>Output Data</h2>\n";
       $Str .= "<dl>\n";
       foreach my $option (@OutputDataOptions) {
           $Str .= '    <dt>'.$option->{'name'}.'</dt>';
           $Str .= '<dd>'.$option->{'longdesc'}.'</dd>'."\n";
       }
       $Str .= "</dl>\n";
       return $Str;
   }
   
 sub CreateAndParseOutputDataSelector {  sub CreateAndParseOutputDataSelector {
     my $Str = '';      my $Str = '';
Line 793  sub SingleStudentTotal { Line 806  sub SingleStudentTotal {
   
 =pod  =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 (&Apache::lonstatistics::Sequences_with_Assess()) {  
         $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 ($data eq ) {  
 #        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  
   
 =head2 EXCEL subroutines  =head2 EXCEL subroutines
   
 =item &excel_initialize($r)  =item &excel_initialize($r)
Line 1116  END Line 1057  END
         ($r,'Excel File Compilation Status',          ($r,'Excel File Compilation Status',
          'Excel File Compilation Progress', $studentcount);           'Excel File Compilation Progress', $studentcount);
     #      #
       &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
                                             'Processing first student');
     return;      return;
 }  }
   
Line 1576  sub StudentPerformanceOnSequence { Line 1519  sub StudentPerformanceOnSequence {
                 }                  }
             }              }
             #              #
               if (! defined($partscore)) {
                   $partscore = $symbol;
               }
               push (@ScoreData,$partscore);
               #
             if ( ($links eq 'yes' && $symbol ne ' ') || ($links eq 'all')) {              if ( ($links eq 'yes' && $symbol ne ' ') || ($links eq 'all')) {
                 $symbol = '<a href="/adm/grades'.                  $symbol = '<a href="/adm/grades'.
                     '?symb='.&Apache::lonnet::escape($resource->{'symb'}).                      '?symb='.&Apache::lonnet::escape($resource->{'symb'}).
Line 1583  sub StudentPerformanceOnSequence { Line 1531  sub StudentPerformanceOnSequence {
                     '&domain='.$student->{'domain'}.                      '&domain='.$student->{'domain'}.
                     '&command=submission">'.$symbol.'</a>';                      '&command=submission">'.$symbol.'</a>';
             }              }
             if (! defined($partscore)) {              $Str .= $symbol;
                 $partscore = $symbol;  
             }  
             push (@ScoreData,$partscore);  
         }          }
         $Str .= $symbol;  
     }      }
     return ($Str,$performance_length,$score,$max,\@ScoreData);      return ($Str,$performance_length,$score,$max,\@ScoreData);
 }  }

Removed from v.1.56  
changed lines
  Added in v.1.62


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