Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.78 and 1.81.2.3

version 1.78, 2003/12/09 17:00:07 version 1.81.2.3, 2004/04/06 21:42:26
Line 163  sub BuildStudentAssessmentPage { Line 163  sub BuildStudentAssessmentPage {
     #      #
     $single_student_mode = 0;      $single_student_mode = 0;
     $single_student_mode = 1 if ($ENV{'form.SelectedStudent'});      $single_student_mode = 1 if ($ENV{'form.SelectedStudent'});
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                               ['selectstudent']);
     if ($ENV{'form.selectstudent'}) {      if ($ENV{'form.selectstudent'}) {
         &Apache::lonstatistics::DisplayClasslist($r);          &Apache::lonstatistics::DisplayClasslist($r);
         return;          return;
Line 909  You may consider reducing the number of Line 911  You may consider reducing the number of
 have selected.    have selected.  
 </p><p>  </p><p>
 LON-CAPA can produce <b>CSV</b> files of this data or Excel files of the  LON-CAPA can produce <b>CSV</b> files of this data or Excel files of the
 summary data (<b>Scores Sum</b> or <b>Scores Sum & Totals</b>).  <b>Scores Summary</b> data.
 </p>  </p>
 END  END
        $request_aborted = 1;         $request_aborted = 1;
Line 990  END Line 992  END
     $cols_output = 0;      $cols_output = 0;
     $excel_sheet->write($rows_output++,$cols_output++,$datadescription);      $excel_sheet->write($rows_output++,$cols_output++,$datadescription);
     #      #
     if ($data eq 'tries' || $data eq 'scores') {  #    if ($data eq 'tries' || $data eq 'scores') {
         $rows_output++;          $rows_output+=2;
     }  #    }
     #      #
     # Add the student headers      # Add the student headers
     $cols_output = 0;      $cols_output = 0;
Line 1000  END Line 1002  END
         $excel_sheet->write($rows_output,$cols_output++,$field);          $excel_sheet->write($rows_output,$cols_output++,$field);
     }      }
     my $row_offset = 0;      my $row_offset = 0;
     if ($data eq 'tries' || $data eq 'scores') {  #    if ($data eq 'tries' || $data eq 'scores') {
         $row_offset = -1;          $row_offset = -1;
     }  #    }
     #      #
     # Add the remaining column headers      # Add the remaining column headers
     my $total_formula_string = '=0';      my $total_formula_string = '=0';
Line 1017  END Line 1019  END
             $seq->{'Excel:startcol'}=$cols_output;              $seq->{'Excel:startcol'}=$cols_output;
             # Put the names of the problems and parts into the sheet              # Put the names of the problems and parts into the sheet
             foreach my $res (@{$seq->{'contents'}}) {              foreach my $res (@{$seq->{'contents'}}) {
                 next if ($res->{'type'} ne 'assessment');                  if ($res->{'type'} ne 'assessment'  || 
                       ! exists($res->{'parts'})       ||
                       ref($res->{'parts'}) ne 'ARRAY' ||
                       scalar(@{$res->{'parts'}}) < 1) {
                       next;
                   }
                 if (scalar(@{$res->{'parts'}}) > 1) {                  if (scalar(@{$res->{'parts'}}) > 1) {
                     foreach my $part (@{$res->{'parts'}}) {                      foreach my $part (@{$res->{'parts'}}) {
                         $excel_sheet->write($rows_output,                          $excel_sheet->write($rows_output,
Line 1035  END Line 1042  END
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                  &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                                              ($rows_output,$cols_output-1);                                               ($rows_output,$cols_output-1);
             $seq->{'Excel:endcol'}=$cols_output-1;              $seq->{'Excel:endcol'}=$cols_output-1;
             # Determine cell the score is held in  
             $seq->{'Excel:scorecell'} =   
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell  
                                              ($rows_output,$cols_output);  
             $seq->{'Excel:scorecol'}=$cols_output;  
             $excel_sheet->write($rows_output,$cols_output++,'score');  
             # Create the formula for summing up this sequence              # Create the formula for summing up this sequence
             $seq->{'Excel:sum'}= $excel_sheet->store_formula              $seq->{'Excel:sum'}= $excel_sheet->store_formula
                                         ('=SUM('.$seq->{'Excel:startcell'}.                                          ('=SUM('.$seq->{'Excel:startcell'}.
                                              ':'.$seq->{'Excel:endcell'}.')');                                               ':'.$seq->{'Excel:endcell'}.')');
             #          }
             $total_formula_string.='+'.          # Determine cell the score is held in
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell          $seq->{'Excel:scorecell'} = 
                                         ($rows_output,$cols_output-1);              &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             $excel_sheet->write($rows_output,$cols_output++,'maximum');              ($rows_output,$cols_output);
         } elsif ($data eq 'sum and total') {          $seq->{'Excel:scorecol'}=$cols_output;
             $excel_sheet->write($rows_output+1,$cols_output,'score');          if ($data eq 'parts correct total') {
             $total_formula_string.='+'.              $excel_sheet->write($rows_output,$cols_output++,'parts correct');
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell  
                                         ($rows_output+1,$cols_output);  
             $excel_sheet->write($rows_output+1,$cols_output+1,'maximum');  
             $cols_output += 2;  
         } elsif ($data eq 'parts correct total') {  
             $excel_sheet->write($rows_output+1,$cols_output,'parts correct');  
             $total_formula_string.='+'.  
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell  
                                         ($rows_output+1,$cols_output);  
             $excel_sheet->write($rows_output+1,$cols_output+1,'maximum');  
             $cols_output += 2;  
         } else {          } else {
             $cols_output++;              $excel_sheet->write($rows_output,$cols_output++,'score');
         }          }
           #
           $total_formula_string.='+'.
               &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
               ($rows_output,$cols_output-1);
           $excel_sheet->write($rows_output,$cols_output++,'maximum');
     }      }
     $excel_sheet->write($rows_output,$cols_output,'Grand Total');      $excel_sheet->write($rows_output,$cols_output++,'Grand Total');
     $total_formula = $excel_sheet->store_formula($total_formula_string);      $total_formula = $excel_sheet->store_formula($total_formula_string);
     #      #
     # Bookkeeping      # Bookkeeping
     if ($data eq 'sum and total' || $data eq 'parts correct total') {  #    if ($data eq 'sum and total' || $data eq 'parts correct total') {
         $rows_output += 2;  #        $rows_output += 1;
     } else {  #    } else {
         $rows_output += 1;          $rows_output += 1;
     }  #    }
     #      #
     # Output a row for MAX      # Output a row for MAX
     $cols_output = 0;      $cols_output = 0;
Line 1091  END Line 1086  END
     #      #
     # Add the maximums for each sequence or assessment      # Add the maximums for each sequence or assessment
     my %total_cell_translation;      my %total_cell_translation;
       my $grand_total = 0;
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         $total_cell_translation{$seq->{'Excel:scorecell'}} =           $total_cell_translation{$seq->{'Excel:scorecell'}} = 
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell              &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
Line 1120  END Line 1116  END
         if (! ($data eq 'sum only' || $data eq 'parts correct')) {          if (! ($data eq 'sum only' || $data eq 'parts correct')) {
             $excel_sheet->write($rows_output,$cols_output++,'');              $excel_sheet->write($rows_output,$cols_output++,'');
         }          }
         my %replaceCells;          #
         $replaceCells{$seq->{'Excel:startcell'}} =           if ($data eq 'tries' || $data eq 'scores') {
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell              my %replaceCells;
                                    ($rows_output,$seq->{'Excel:startcol'});              $replaceCells{$seq->{'Excel:startcell'}} = 
         $replaceCells{$seq->{'Excel:endcell'}} =                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
             &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                  ($rows_output,$seq->{'Excel:startcol'});
                                    ($rows_output,$seq->{'Excel:endcol'});              $replaceCells{$seq->{'Excel:endcell'}} = 
                   &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                   ($rows_output,$seq->{'Excel:endcol'});
               $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                            $seq->{'Excel:sum'},undef,
                                            %replaceCells);
           } else {
               $excel_sheet->write($rows_output,$cols_output++,
                                   $max);
           }
           $grand_total+=$max;
       }
       if ($data eq 'tries' || $data eq 'scores') {
         $excel_sheet->repeat_formula($rows_output,$cols_output++,          $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                      $seq->{'Excel:sum'},undef,                                       $total_formula,undef,
                                      %replaceCells);                                       %total_cell_translation);
       } else {
           $excel_sheet->write($rows_output,$cols_output++,$grand_total);
     }      }
     $excel_sheet->repeat_formula($rows_output,$cols_output++,  
                                  $total_formula,undef,  
                                  %total_cell_translation);  
     $rows_output++;      $rows_output++;
     #      #
     # Let the user know what we are doing      # Let the user know what we are doing
Line 1207  sub excel_outputstudent { Line 1214  sub excel_outputstudent {
                 &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell                  &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
                             ($rows_output,$seq->{'Excel:endcol'});                              ($rows_output,$seq->{'Excel:endcol'});
             # The undef is for the format              # The undef is for the format
             $excel_sheet->repeat_formula($rows_output,$cols_output++,              if (scalar(keys(%replaceCells)) == 1) {
                                          $seq->{'Excel:sum'},undef,                  $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                          %replaceCells);                                               $seq->{'Excel:sum'},undef,
                                                %replaceCells,%replaceCells);
               } else {
                   $excel_sheet->repeat_formula($rows_output,$cols_output++,
                                                $seq->{'Excel:sum'},undef,
                                                %replaceCells);
               }
             #              #
             $excel_sheet->write($rows_output,$cols_output++,$seq_max);              $excel_sheet->write($rows_output,$cols_output++,$seq_max);
         } elsif ($data eq 'sum and total' || $data eq 'sum only' ||           } elsif ($data eq 'sum and total' || $data eq 'sum only' || 

Removed from v.1.78  
changed lines
  Added in v.1.81.2.3


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