Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.58 and 1.74

version 1.58, 2003/06/11 16:19:39 version 1.74, 2003/11/11 22:14:28
Line 138  Inputs: Line 138  Inputs:
 #######################################################  #######################################################
 sub BuildStudentAssessmentPage {  sub BuildStudentAssessmentPage {
     my ($r,$c)=@_;      my ($r,$c)=@_;
       #
     undef($Statistics);      undef($Statistics);
       undef($show_links);
       undef($output_mode);
       undef($data);
       undef($base);
       undef($datadescription);
       undef($single_student_mode);
       #
       my %Saveable_Parameters = ('Status' => 'scalar',
                                  'chartoutputmode' => 'scalar',
                                  'chartoutputdata' => 'scalar',
                                  'Section' => 'array',
                                  'StudentData' => 'array',
                                  'Maps' => 'array');
       &Apache::loncommon::store_course_settings('chart',\%Saveable_Parameters);
       &Apache::loncommon::restore_course_settings('chart',\%Saveable_Parameters);
       #
       &Apache::lonstatistics::PrepareClasslist();
       #
       $single_student_mode = 0;
     $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 187  sub BuildStudentAssessmentPage { Line 211  sub BuildStudentAssessmentPage {
     #       are immediately reflected in the chart.      #       are immediately reflected in the chart.
     &Apache::lonnet::clear_EXT_cache_status();      &Apache::lonnet::clear_EXT_cache_status();
     #      #
       # Clean out loncoursedata's package data, just to be safe.
       &Apache::loncoursedata::clear_internal_caches();
       #
     # Call the initialize routine selected above      # Call the initialize routine selected above
     $initialize->($r);      $initialize->($r);
     foreach my $student (@Students) {      foreach my $student (@Students) {
Line 326  sub CreateInterface { Line 353  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 397  sub OutputDescriptions { Line 430  sub OutputDescriptions {
 sub CreateAndParseOutputSelector {  sub CreateAndParseOutputSelector {
     my $Str = '';      my $Str = '';
     my $elementname = 'chartoutputmode';      my $elementname = 'chartoutputmode';
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                               [$elementname]);
     #      #
     # Format for output options is 'mode, restrictions';      # Format for output options is 'mode, restrictions';
     my $selected = 'html, without links';      my $selected = 'html, without links';
Line 434  sub CreateAndParseOutputSelector { Line 469  sub CreateAndParseOutputSelector {
 ##  ##
 my @OutputDataOptions =  my @OutputDataOptions =
     (      (
      { name  => 'Scores',       { name  => 'Scores Summary',
        base  => 'scores',  
        value => 'scores',  
        shortdesc => 'Score on each Problem Part',  
        longdesc =>'The students score on each problem part, computed as'.  
            'the part weight * part awarded',  
        },  
      { name  => 'Scores Sum',  
        base  => 'scores',  
        value => 'sum only',  
        shortdesc => 'Sum of Scores on each Problem Part',  
        longdesc =>'The total of the scores of the student on each problem'.  
            ' part in the sequences or folders selected.',  
        },  
      { name  => 'Scores Sum & Maximums',  
        base  => 'scores',         base  => 'scores',
        value => 'sum and total',         value => 'sum and total',
        shortdesc => 'Total Score and Maximum Possible for each '.         shortdesc => 'Total Score and Maximum Possible for each '.
Line 456  my @OutputDataOptions = Line 477  my @OutputDataOptions =
        longdesc => 'The score of each student as well as the '.         longdesc => 'The score of each student as well as the '.
            ' maximum possible on each Sequence or Folder.',             ' maximum possible on each Sequence or Folder.',
        },         },
      { name  => 'Scores Summary Table Only',       { name  => 'Scores Per Problem',
        base  => 'scores',         base  => 'scores',
        value => 'final table scores',         value => 'scores',
        shortdesc => 'Summary of Scores',         shortdesc => 'Score on each Problem Part',
        longdesc  => 'The average score on each sequence or folder for the '.         longdesc =>'The students score on each problem part, computed as'.
            'selected students.',             'the part weight * part awarded',
        },         },
   #     { name  => 'Scores Sum',
   #       base  => 'scores',
   #       value => 'sum only',
   #       shortdesc => 'Sum of Scores on each Problem Part',
   #       longdesc =>'The total of the scores of the student on each problem'.
   #           ' part in the sequences or folders selected.',
   #       },
   #     { name  => 'Scores Summary Table Only',
   #       base  => 'scores',
   #       value => 'final table scores',
   #       shortdesc => 'Summary of Scores',
   #       longdesc  => 'The average score on each sequence or folder for the '.
   #           'selected students.',
   #       },
      { name  =>'Tries',       { name  =>'Tries',
        base  =>'tries',         base  =>'tries',
        value => 'tries',         value => 'tries',
Line 471  my @OutputDataOptions = Line 506  my @OutputDataOptions =
        },         },
      { name  =>'Parts Correct',       { name  =>'Parts Correct',
        base  =>'tries',         base  =>'tries',
        value => 'parts correct',  
        shortdesc => 'Number of Problem Parts completed successfully.',  
        longdesc => 'The Number of Problem Parts completed successfully'.  
            ' on each sequence or folder.',  
        },  
      { name  =>'Parts Correct & Maximums',  
        base  =>'tries',  
        value => 'parts correct total',         value => 'parts correct total',
        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',
        },         },
      { name  => 'Parts Summary Table Only',  #     { name  =>'Parts Correct',
        base  => 'tries',  #       base  =>'tries',
        value => 'final table parts',  #       value => 'parts correct',
        shortdesc => 'Summary of Parts Correct',  #       shortdesc => 'Number of Problem Parts completed successfully.',
        longdesc  => 'A summary table of the average number of problem parts '.  #       longdesc => 'The Number of Problem Parts completed successfully'.
            'students were able to get correct on each sequence.',  #           ' on each sequence or folder.',
        },  #       },
   #     { name  => 'Parts Summary Table Only',
   #       base  => 'tries',
   #       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 {  sub HTMLifyOutputDataDescriptions {
Line 572  sub html_initialize { Line 607  sub html_initialize {
     $padding = ' 'x3;      $padding = ' 'x3;
     $count = 0;      $count = 0;
     $nodata_count = 0;      $nodata_count = 0;
       undef(%prog_state);
     #      #
     $r->print("<h3>".$ENV{'course.'.$ENV{'request.course.id'}.'.description'}.      $r->print("<h3>".$ENV{'course.'.$ENV{'request.course.id'}.'.description'}.
               "&nbsp;&nbsp;".localtime(time)."</h3>");                "&nbsp;&nbsp;".localtime(time)."</h3>");
Line 823  my $request_aborted; Line 859  my $request_aborted;
 sub excel_initialize {  sub excel_initialize {
     my ($r) = @_;      my ($r) = @_;
     #      #
     $request_aborted = undef;      undef ($excel_sheet);
       undef ($excel_workbook);
       undef ($filename);
       undef ($rows_output);
       undef ($cols_output);
       undef (%prog_state);
       undef ($request_aborted);
       #
     my $total_columns = scalar(&get_student_fields_to_show());      my $total_columns = scalar(&get_student_fields_to_show());
     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {      foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
         # Add 2 because we need a 'sum' and 'total' column for each          # Add 2 because we need a 'sum' and 'total' column for each
Line 904  END Line 947  END
     #      #
     # Add a worksheet      # Add a worksheet
     my $sheetname = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};      my $sheetname = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
     if (length($sheetname) > 31) {      $sheetname = &Apache::loncommon::clean_excel_name($sheetname);
         $sheetname = substr($sheetname,0,31);  
     }  
     $excel_sheet = $excel_workbook->addworksheet($sheetname);      $excel_sheet = $excel_workbook->addworksheet($sheetname);
     #      #
     # Put the course description in the header      # Put the course description in the header
Line 1047  END Line 1088  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 1158  sub csv_initialize{ Line 1201  sub csv_initialize{
     my ($r) = @_;      my ($r) = @_;
     #       # 
     # Clean up      # Clean up
     $filename = undef;      undef($outputfile);
     $outputfile = undef;      undef($filename);
       undef($request_aborted);
     undef(%prog_state);      undef(%prog_state);
     #      #
     # Deal with unimplemented requests      # Deal with unimplemented requests
Line 1377  sub StudentTriesOnSequence { Line 1421  sub StudentTriesOnSequence {
                 } elsif ($status eq 'excused') {                  } elsif ($status eq 'excused') {
                     $symbol = 'x';                      $symbol = 'x';
                     $max--;                      $max--;
                 } elsif ($status eq 'correct_by_student' &&                  } elsif (($status eq 'correct_by_scantron' ||
                             $status eq 'correct_by_student') &&
                     exists($resource_data->{'resource.'.$partnum.'.tries'})){                      exists($resource_data->{'resource.'.$partnum.'.tries'})){
                     $tries = $resource_data->{'resource.'.$partnum.'.tries'};                      $tries = $resource_data->{'resource.'.$partnum.'.tries'};
                     if ($tries > 9) {                      if ($tries > 9) {
Line 1416  sub StudentTriesOnSequence { Line 1461  sub StudentTriesOnSequence {
                 $symbol = '<a href="/adm/grades'.                  $symbol = '<a href="/adm/grades'.
                     '?symb='.&Apache::lonnet::escape($resource->{'symb'}).                      '?symb='.&Apache::lonnet::escape($resource->{'symb'}).
                         '&student='.$student->{'username'}.                          '&student='.$student->{'username'}.
                             '&domain='.$student->{'domain'}.                              '&userdom='.$student->{'domain'}.
                                 '&command=submission">'.$symbol.'</a>';                                  '&command=submission">'.$symbol.'</a>';
             }              }
             $value .= $symbol;              $value .= $symbol;
Line 1484  sub StudentPerformanceOnSequence { Line 1529  sub StudentPerformanceOnSequence {
             my $awarded = 0;              my $awarded = 0;
             if (exists($resource_data->{'resource.'.$part.'.awarded'})) {              if (exists($resource_data->{'resource.'.$part.'.awarded'})) {
                 $awarded = $resource_data->{'resource.'.$part.'.awarded'};                  $awarded = $resource_data->{'resource.'.$part.'.awarded'};
                   $awarded = 0 if (! $awarded);
             }              }
             #              #
             $partscore = $weight*$awarded;              $partscore = $weight*$awarded;
             $score += $partscore;              $score += $partscore;
             $symbol = $weight;               $symbol = $partscore; 
               if (abs($symbol - sprintf("%.0f",$symbol)) < 0.001) {
                   $symbol = sprintf("%.0f",$symbol);
               }
             if (length($symbol) > 1) {              if (length($symbol) > 1) {
                 $symbol = '*';                  $symbol = '*';
             }              }
Line 1507  sub StudentPerformanceOnSequence { Line 1556  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'}).
                     '&student='.$student->{'username'}.                      '&student='.$student->{'username'}.
                     '&domain='.$student->{'domain'}.                      '&userdom='.$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.58  
changed lines
  Added in v.1.74


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