Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.89 and 1.90

version 1.89, 2004/02/12 16:29:00 version 1.90, 2004/02/12 21:15:47
Line 474  my @OutputDataOptions = Line 474  my @OutputDataOptions =
        sequence_max => 1,         sequence_max => 1,
        grand_total => 1,         grand_total => 1,
        summary_table => 1,         summary_table => 1,
          maximum_row => 1,
        shortdesc => 'Total Score and Maximum Possible for each '.         shortdesc => 'Total Score and Maximum Possible for each '.
            'Sequence or Folder',             'Sequence or Folder',
        longdesc => 'The score of each student as well as the '.         longdesc => 'The score of each student as well as the '.
Line 490  my @OutputDataOptions = Line 491  my @OutputDataOptions =
        sequence_max => 1,         sequence_max => 1,
        grand_total => 1,         grand_total => 1,
        summary_table => 1,         summary_table => 1,
          maximum_row => 1,
        shortdesc => 'Score on each Problem Part',         shortdesc => 'Score on each Problem Part',
        longdesc =>'The students score on each problem part, computed as'.         longdesc =>'The students score on each problem part, computed as'.
            'the part weight * part awarded',             'the part weight * part awarded',
Line 504  my @OutputDataOptions = Line 506  my @OutputDataOptions =
        sequence_sum => 0,         sequence_sum => 0,
        sequence_max => 0,         sequence_max => 0,
        grand_total => 0,         grand_total => 0,
        summary_table => 1,         summary_table => 0,
          maximum_row => 0,
        shortdesc => 'Number of Tries before success on each Problem Part',         shortdesc => 'Number of Tries before success on each Problem Part',
        longdesc =>'The number of tries before success on each problem part.',         longdesc =>'The number of tries before success on each problem part.',
        },         },
Line 519  my @OutputDataOptions = Line 522  my @OutputDataOptions =
        sequence_max => 1,         sequence_max => 1,
        grand_total => 1,         grand_total => 1,
        summary_table => 1,         summary_table => 1,
          maximum_row => 0,
        shortdesc => 'Number of Problem Parts completed successfully.',         shortdesc => 'Number of Problem Parts completed successfully.',
        longdesc => 'The Number of Problem Parts completed successfully and '.         longdesc => 'The Number of Problem Parts completed successfully and '.
            'the maximum possible for each student',             'the maximum possible for each student',
Line 757  sub html_finish { Line 761  sub html_finish {
     #      #
     # Check for suppressed output and close the progress window if so      # Check for suppressed output and close the progress window if so
     $r->print("</pre>\n");       $r->print("</pre>\n"); 
     if ($single_student_mode) {      if ($chosen_output->{'summary_table'}) {
         $r->print(&SingleStudentTotal());          if ($single_student_mode) {
     } else {              $r->print(&SingleStudentTotal());
         $r->print(&StudentAverageTotal());          } else {
               $r->print(&StudentAverageTotal());
           }
     }      }
     $r->rflush();      $r->rflush();
     return;      return;
Line 873  sub excel_initialize { Line 879  sub excel_initialize {
     undef ($total_formula);      undef ($total_formula);
     #      #
     my $total_columns = scalar(&get_student_fields_to_show());      my $total_columns = scalar(&get_student_fields_to_show());
           my $num_students = scalar(@Apache::lonstatistics::Students);
       #
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         if ($chosen_output->{'every_problem'}) {          if ($chosen_output->{'every_problem'}) {
             $total_columns += $seq->{'num_assess_parts'};              $total_columns += $seq->{'num_assess_parts'};
Line 927  END Line 934  END
     $rows_output = 0;      $rows_output = 0;
     $cols_output = 0;      $cols_output = 0;
     #      #
       # Determine rows 
       my $header_row = $rows_output++;
       my $description_row = $rows_output++;
       $rows_output++;        # blank row
       my $summary_header_row;
       if ($chosen_output->{'summary_table'}) {
           $summary_header_row = $rows_output++;
           $rows_output+= scalar(&Apache::lonstatistics::Sequences_with_Assess());
           $rows_output++;
       }
       my $sequence_name_row = $rows_output++;
       my $resource_name_row = $rows_output++;
       my $maximum_data_row = $rows_output++;
       if (! $chosen_output->{'maximum_row'}) {
           $rows_output--;
       }
       my $first_data_row = $rows_output++;
       #
     # Create sheet      # Create sheet
     $excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);      $excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
     #      #
Line 963  END Line 988  END
                                                     'mmm d yyyy hh:mm AM/PM');                                                      'mmm d yyyy hh:mm AM/PM');
     #      #
     # Put the course description in the header      # Put the course description in the header
     $excel_sheet->write($rows_output,$cols_output++,      $excel_sheet->write($header_row,$cols_output++,
                    $ENV{'course.'.$ENV{'request.course.id'}.'.description'},                     $ENV{'course.'.$ENV{'request.course.id'}.'.description'},
                         $format->{'h1'});                          $format->{'h1'});
     $cols_output += 3;      $cols_output += 3;
Line 985  END Line 1010  END
             $sectionstring = "Section ".$Sections[0];              $sectionstring = "Section ".$Sections[0];
         }          }
     }      }
     $excel_sheet->write($rows_output,$cols_output++,$sectionstring,      $excel_sheet->write($header_row,$cols_output++,$sectionstring,
                         $format->{'h3'});                          $format->{'h3'});
     $cols_output += scalar(@Sections);      $cols_output += scalar(@Sections);
     #      #
     # Put the date in there too      # Put the date in there too
     $excel_sheet->write($rows_output++,$cols_output++,      $excel_sheet->write($header_row,$cols_output++,
                         'Compiled on '.localtime(time),$format->{'h3'});                          'Compiled on '.localtime(time),$format->{'h3'});
     #      #
     $cols_output = 0;      $cols_output = 0;
     $excel_sheet->write($rows_output++,$cols_output++,      $excel_sheet->write($description_row,$cols_output++,
                         $chosen_output->{'shortdesc'},                          $chosen_output->{'shortdesc'},
                         $format->{'h3'});                          $format->{'h3'});
     #      ##############################################
     # Figure out the rows we need      # Output headings for the raw data
     my $sequence_name_row = $rows_output+1;      ##############################################
     my $resource_name_row = $sequence_name_row+1;  
     my $maximum_data_row = $sequence_name_row+2;  
     my $first_data_row = $sequence_name_row+3;  
     #      #
     # Add the student headers      # Add the student headers
     $cols_output = 0;      $cols_output = 0;
Line 1015  END Line 1037  END
     my $total_formula_string = '=0';      my $total_formula_string = '=0';
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         $excel_sheet->write($sequence_name_row,,          $excel_sheet->write($sequence_name_row,,
                             $cols_output,$seq->{'title'},$format->{'h3'});                              $cols_output,$seq->{'title'},$format->{'bold'});
         # Determine starting cell          # Determine starting cell
         $seq->{'Excel:startcell'}=          $seq->{'Excel:startcell'}=
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell              &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             ($maximum_data_row,$cols_output);              ($first_data_row,$cols_output);
         $seq->{'Excel:startcol'}=$cols_output;          $seq->{'Excel:startcol'}=$cols_output;
         my $count = 0;          my $count = 0;
         if ($chosen_output->{'every_problem'}) {          if ($chosen_output->{'every_problem'}) {
Line 1053  END Line 1075  END
         } else {          } else {
             $seq->{'Excel:endcell'} =               $seq->{'Excel:endcell'} = 
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                  &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                 ($maximum_data_row,$cols_output-1);                  ($first_data_row,$cols_output-1);
             $seq->{'Excel:endcol'} = $cols_output-1;              $seq->{'Excel:endcol'} = $cols_output-1;
         }          }
         # Create the formula for summing up this sequence          # Create the formula for summing up this sequence
Line 1067  END Line 1089  END
         # Determine cell the score is held in          # Determine cell the score is held in
         $seq->{'Excel:scorecell'} =           $seq->{'Excel:scorecell'} = 
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell              &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             ($maximum_data_row,$cols_output);              ($first_data_row,$cols_output);
         $seq->{'Excel:scorecol'}=$cols_output;          $seq->{'Excel:scorecol'}=$cols_output;
         if ($chosen_output->{'base'} eq 'parts correct total') {          if ($chosen_output->{'base'} eq 'parts correct total') {
             $excel_sheet->write($resource_name_row,$cols_output++,              $excel_sheet->write($resource_name_row,$cols_output++,
Line 1088  END Line 1110  END
         #          #
         $total_formula_string.='+'.          $total_formula_string.='+'.
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell              &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             ($maximum_data_row,$cols_output-1);              ($first_data_row,$cols_output-1);
         if ($chosen_output->{'sequence_max'}) {          if ($chosen_output->{'sequence_max'}) {
             $excel_sheet->write($resource_name_row,$cols_output++,              $excel_sheet->write($resource_name_row,$cols_output++,
                                 'maximum',                                  'maximum',
Line 1100  END Line 1122  END
                             $format->{'bold'});                              $format->{'bold'});
     }      }
     $total_formula = $excel_sheet->store_formula($total_formula_string);      $total_formula = $excel_sheet->store_formula($total_formula_string);
     #      ##############################################
     # Output a row for MAX, if appropriate      # Output a row for MAX, if appropriate
     if ($chosen_output->{'scores'}) {      ##############################################
       if ($chosen_output->{'maximum_row'}) {
         $cols_output = 0;          $cols_output = 0;
         foreach my $field (&get_student_fields_to_show()) {          foreach my $field (&get_student_fields_to_show()) {
             if ($field eq 'username' || $field eq 'fullname' ||               if ($field eq 'username' || $field eq 'fullname' || 
Line 1169  END Line 1192  END
                                          $total_formula,undef,                                           $total_formula,undef,
                                          %total_cell_translation);                                           %total_cell_translation);
         }          }
     } # End of MAXIMUM row output  if ($chosen_output->{'scores'}) {      } # End of MAXIMUM row output  if ($chosen_output->{'maximum_row'}) {
     $rows_output = $first_data_row;      $rows_output = $first_data_row;
       ##############################################
       # Output summary table, which actually is above the sequence name row.
       ##############################################
       if ($chosen_output->{'summary_table'}) {
           $cols_output = 0;
           $excel_sheet->write($summary_header_row,$cols_output++,
                               'Summary Table',$format->{'bold'});
           if ($chosen_output->{'maximum_row'}) {
               $excel_sheet->write($summary_header_row,$cols_output++,
                                   'Maximum',$format->{'bold'});
           }
           $excel_sheet->write($summary_header_row,$cols_output++,
                               'Average',$format->{'bold'});
           $excel_sheet->write($summary_header_row,$cols_output++,
                               'Median',$format->{'bold'});
           $excel_sheet->write($summary_header_row,$cols_output++,
                               'Std Dev',$format->{'bold'});
           my $row = $summary_header_row+1;
           foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
               $cols_output = 0;
               $excel_sheet->write($row,$cols_output++,
                                   $seq->{'title'},
                                   $format->{'bold'});
               if ($chosen_output->{'maximum_row'}) {
                   $excel_sheet->write
                       ($row,$cols_output++,
                        '='.
                        &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                        ($maximum_data_row,$seq->{'Excel:scorecol'})
                        );
               }
               my $range = 
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                   ($first_data_row,$seq->{'Excel:scorecol'}).
                   ':'.
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                   ($first_data_row+$num_students-1,$seq->{'Excel:scorecol'});
               $excel_sheet->write($row,$cols_output++,
                                   '=AVERAGE('.$range.')');
               $excel_sheet->write($row,$cols_output++,
                                   '=MEDIAN('.$range.')');
               $excel_sheet->write($row,$cols_output++,
                                   '=STDEV('.$range.')');
               $row++;
           }
       }
       ##############################################
       #   Take care of non-excel initialization
       ##############################################
     #      #
     # Let the user know what we are doing      # Let the user know what we are doing
     my $studentcount = scalar(@Apache::lonstatistics::Students);       my $studentcount = scalar(@Apache::lonstatistics::Students); 

Removed from v.1.89  
changed lines
  Added in v.1.90


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