Diff for /loncom/interface/statistics/lonproblemanalysis.pm between versions 1.65 and 1.66

version 1.65, 2004/02/10 19:49:54 version 1.66, 2004/02/13 18:25:57
Line 99  sub BuildProblemAnalysisPage { Line 99  sub BuildProblemAnalysisPage {
     }      }
     $r->rflush();      $r->rflush();
     #      #
       my $problem_types = '(option|radiobutton|numerical)';
     if (exists($ENV{'form.problemchoice'}) &&       if (exists($ENV{'form.problemchoice'}) && 
         ! exists($ENV{'form.SelectAnother'})) {          ! exists($ENV{'form.SelectAnother'})) {
         foreach my $button (@SubmitButtons) {          foreach my $button (@SubmitButtons) {
Line 120  sub BuildProblemAnalysisPage { Line 121  sub BuildProblemAnalysisPage {
         #          #
         my ($prev,$curr,$next) =           my ($prev,$curr,$next) = 
             &Apache::lonstathelpers::get_prev_curr_next($current_problem,              &Apache::lonstathelpers::get_prev_curr_next($current_problem,
                                                      '(option|radiobutton)',                                                          $problem_types,
                                                      'response',                                                          'response',
                                                         );                                                          );
         if (exists($ENV{'form.PrevProblemAnalysis'}) && defined($prev)) {          if (exists($ENV{'form.PrevProblemAnalysis'}) && defined($prev)) {
             $current_problem = $prev;              $current_problem = $prev;
Line 157  sub BuildProblemAnalysisPage { Line 158  sub BuildProblemAnalysisPage {
                 &RadioResponseAnalysis($r,$current_problem,                  &RadioResponseAnalysis($r,$current_problem,
                                        $ProblemData,                                         $ProblemData,
                                        \@Students);                                         \@Students);
               } elsif ($current_problem->{'resptype'} eq 'numerical') {
                   &NumericalResponseAnalysis($r,$current_problem,
                                              $ProblemData,\@Students);
             } else {              } else {
                 $r->print('<h2>This analysis is not supported</h2>');                  $r->print('<h2>This analysis is not supported</h2>');
             }              }
Line 168  sub BuildProblemAnalysisPage { Line 172  sub BuildProblemAnalysisPage {
         $r->print('&nbsp;'x5);          $r->print('&nbsp;'x5);
         $r->print('<h3>'.&mt('Please select a problem to analyze').'</h3>');          $r->print('<h3>'.&mt('Please select a problem to analyze').'</h3>');
         $r->print(&Apache::lonstathelpers::ProblemSelector          $r->print(&Apache::lonstathelpers::ProblemSelector
                   ('(option|radiobutton)'));                    ($problem_types));
     }      }
 }  }
   
   #########################################################
   #########################################################
   ##
   ##      Numerical Response Routines
   ##
   #########################################################
   #########################################################
   sub NumericalResponseAnalysis {
       my ($r,$problem,$ProblemData,$Students) = @_;
       my ($resource,$respid) = ($problem->{'resource'},
                                 $problem->{'respid'});
       my $analysis_html;
       my $PerformanceData = 
           &Apache::loncoursedata::get_response_data
           ($Students,$resource->{'symb'},$respid);
       if (! defined($PerformanceData) || 
           ref($PerformanceData) ne 'ARRAY' ) {
           $analysis_html = '<h2>'.
               &mt('There is no submission data for this resource').
               '</h2>';
           $r->print($analysis_html);
           return;
       }
       my $Answers = &GetStudentAnswers($r,$problem,$Students);
       
       $r->print('<h2>This analysis is not yet supported</h2>');
   }
   
   sub GetStudentAnswers {
       my ($r,$problem,$Students) = @_;
       my %Answers;
       my ($resource,$partid,$respid) = ($problem->{'resource'},
                                         $problem->{'part'},
                                         $problem->{'respid'});
       # Open progress window
       my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
           ($r,'Student Answer Compilation Status',
            'Student Answer Compilation Progress', scalar(@$Students));
       $r->print("<table>\n");
       $r->rflush();
       foreach my $student (@$Students) {
           my $sname = $student->{'username'};
           my $sdom = $student->{'domain'};
           my $answer = analyze_problem_as_student($resource,
                                                   $sname,$sdom,
                                                   $partid,$respid);
           $r->print('<tr>'.
                     '<td>'.$sname.'</td>'.
                     '<td>'.$sdom.'</td>'.
                     '<td>'.$answer.'</td>'.
                     '</tr>'."\n");
           &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
                                                    &mt('last student'));
           $Answers{$sname.':'.$sdom}=$answer;
       }
       $r->print("</table>\n");
       $r->rflush();
       &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
       # close progress window
       return \%Answers;
   }
   
 #########################################################  #########################################################
 #########################################################  #########################################################
Line 183  sub BuildProblemAnalysisPage { Line 248  sub BuildProblemAnalysisPage {
 sub RadioResponseAnalysis {  sub RadioResponseAnalysis {
     my ($r,$problem,$ProblemData,$Students) = @_;      my ($r,$problem,$ProblemData,$Students) = @_;
     my ($resource,$respid) = ($problem->{'resource'},      my ($resource,$respid) = ($problem->{'resource'},
                                     $problem->{'respid'});                                $problem->{'respid'});
     my $analysis_html;      my $analysis_html;
     my $PerformanceData =       my $PerformanceData = 
         &Apache::loncoursedata::get_response_data          &Apache::loncoursedata::get_response_data
Line 1552  sub Process_OR_Row { Line 1617  sub Process_OR_Row {
     return %RowData;      return %RowData;
 }  }
   
   
   sub analyze_problem_as_student {
       my ($resource,$sname,$sdom,$partid,$respid) = @_;
       my $url = $resource->{'src'};
       my $symb = $resource->{'symb'};
       my $courseid = $ENV{'request.course.id'};
       my $Answ=&Apache::lonnet::ssi($url,('grade_target' => 'analyze',
                                           'grade_domain' => $sdom,
                                           'grade_username' => $sname,
                                           'grade_symb' => $symb,
                                           'grade_courseid' => $courseid));
       (my $garbage,$Answ)=split(/_HASH_REF__/,$Answ,2);
       my %Answer=&Apache::lonnet::str2hash($Answ);
       my $key = $partid.'.'.$respid.'.answer';
       my $student_answer = $Answer{$key}->[0];
       if (! defined($student_answer)) {
           $student_answer = $Answer{$key}->[1];
       }
       return ($student_answer);
   }
   
 ##  ##
 ## get problem data and put it into a useful data structure.  ## get problem data and put it into a useful data structure.
 ## note: we must force each foil and option to not begin or end with  ## note: we must force each foil and option to not begin or end with
Line 1566  sub get_problem_data { Line 1652  sub get_problem_data {
     my %Partdata;      my %Partdata;
     foreach my $part (@{$Answer{'parts'}}) {      foreach my $part (@{$Answer{'parts'}}) {
         while (my($key,$value) = each(%Answer)) {          while (my($key,$value) = each(%Answer)) {
               #
               # Logging code:
               if (0) {
                   &Apache::lonnet::logthis($part.' got key "'.$key.'"');
                   if (ref($value) eq 'ARRAY') {
                       &Apache::lonnet::logthis('    '.join(',',@$value));
                   } else {
                       &Apache::lonnet::logthis('    '.$value);
                   }
               }
               # End of logging code
             next if ($key !~ /^$part/);              next if ($key !~ /^$part/);
             $key =~ s/^$part\.//;              $key =~ s/^$part\.//;
             if (ref($value) eq 'ARRAY') {              if (ref($value) eq 'ARRAY') {
Line 1579  sub get_problem_data { Line 1676  sub get_problem_data {
                         $Partdata{$part}->{'_Foils'}->{$foil}->{'_Concept'}=                          $Partdata{$part}->{'_Foils'}->{$foil}->{'_Concept'}=
                                                                       $concept;                                                                        $concept;
                     }                      }
                   } elsif ($key =~ /^(incorrect|answer|ans_low|ans_high)$/) {
                       $Partdata{$part}->{$key}=$value;
                 }                  }
             } else {              } else {
                 if ($key=~ /^foil\.text\.(.*)$/) {                  if ($key=~ /^foil\.text\.(.*)$/) {
Line 1599  sub get_problem_data { Line 1698  sub get_problem_data {
 1;  1;
   
 __END__  __END__
   
 #####  
 # partdata{part}->{_Foils}->{foilid}->{'name'}     = $  
 #                                   ->{'text'}     = $  
 #                                   ->{'value'}    = $  
 #                                   ->{'_Concept'} = $  
 # partdata{part}->{_Options}  = @  
 # partdata{part}->{_Concepts} = @  

Removed from v.1.65  
changed lines
  Added in v.1.66


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