Diff for /loncom/homework/caparesponse/caparesponse.pm between versions 1.241 and 1.247

version 1.241, 2010/10/14 19:55:04 version 1.247, 2011/06/08 01:39:32
Line 402  sub setup_capa_response { Line 402  sub setup_capa_response {
   
 sub check_submission {  sub check_submission {
     my ($response,$partid,$id,$tag,$parstack,$safeeval,$ignore_sig)=@_;      my ($response,$partid,$id,$tag,$parstack,$safeeval,$ignore_sig)=@_;
     my @args = ('type','tol','sig','format','unit','calc','samples');      my @args = ('type','tol','sig','format','unit','calc','samples','preprocess');
     my $args_ref = &setup_capa_args($safeeval,$parstack,\@args,$response);      my $args_ref = &setup_capa_args($safeeval,$parstack,\@args,$response);
   
     my $hideunit=      my $hideunit=
Line 451  sub check_submission { Line 451  sub check_submission {
  my ($result,@msgs) =    my ($result,@msgs) = 
     &Apache::run::run("&caparesponse_check_list()",$safeeval);      &Apache::run::run("&caparesponse_check_list()",$safeeval);
  &Apache::lonxml::debug("checking $name $result with $response took ".&Time::HiRes::tv_interval($t0));   &Apache::lonxml::debug("checking $name $result with $response took ".&Time::HiRes::tv_interval($t0));
           
  &Apache::lonxml::debug('msgs are '.join(':',@msgs));   &Apache::lonxml::debug('msgs are '.join(':',@msgs));
  my ($awards)=split(/:/,$result);   my ($awards)=split(/:/,$result);
  my @awards= split(/,/,$awards);   my @awards= split(/,/,$awards);
Line 1135  sub start_stringresponse { Line 1136  sub start_stringresponse {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;      my $result;
     my $id = &Apache::response::start_response($parstack,$safeeval);      my $id = &Apache::response::start_response($parstack,$safeeval);
       undef(%answer);
     if ($target eq 'meta') {      if ($target eq 'meta') {
  $result=&Apache::response::meta_package_write('stringresponse');   $result=&Apache::response::meta_package_write('stringresponse');
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
Line 1223  sub end_stringresponse { Line 1225  sub end_stringresponse {
                         $$args_ref{'type'} = 'ci';                          $$args_ref{'type'} = 'ci';
                     }                      }
     &add_in_tag_answer($parstack,$safeeval);      &add_in_tag_answer($parstack,$safeeval);
     my (@final_awards,@final_msgs,@names);      my (@final_awards,@final_msgs,@names,%ansstring);
     foreach my $name (keys(%answer)) {      foreach my $name (keys(%answer)) {
  &Apache::lonxml::debug(" doing $name with ".join(':',@{ $answer{$name}{'answers'} }));   &Apache::lonxml::debug(" doing $name with ".join(':',@{ $answer{$name}{'answers'} }));
  ${$safeeval->varglob('LONCAPA::CAPAresponse_answer')}=dclone($answer{$name});   ${$safeeval->varglob('LONCAPA::CAPAresponse_answer')}=dclone($answer{$name});
  my ($result, @msgs)=&Apache::run::run("&caparesponse_check_list()",$safeeval);   my ($result, @msgs)=&Apache::run::run("&caparesponse_check_list()",$safeeval);
                         if ($$args_ref{'type'} =~ /^c[si]$/) {                          if ($$args_ref{'type'} =~ /^c[si]$/) {
                               $ansstring{$name} = pop(@msgs);
                               my $control_chars_removed = pop(@msgs);
                             my $error = pop(@msgs);                              my $error = pop(@msgs);
                             if ($error ne '') {                              if (($error ne '') || 
                                 my ($symb,$courseid,$domain,$name) =                                  ($control_chars_removed)) {
                                   my ($symb,$courseid,$sdomain,$sname) =
                                     &Apache::lonnet::whichuser();                                      &Apache::lonnet::whichuser();
                                 &Apache::lonnet::logthis("Stringresponse grading error: $error for $name:$domain in $courseid for part: $part response: $id and symb: $symb");                                  if ($control_chars_removed) {
                                       my $showresponse = $response;
                                       if ($response =~ /[\000-\037]/) {
                                           $response =~ s/[\000-\037]//g;
                                       }
                                       if ($showresponse  =~ /[\r\n\f]/) {
                                           my @lines = split(/[\r\n\f]+/,$showresponse);
                                           $showresponse = join('\\n',@lines);
                                       }
                                       &Apache::lonnet::logthis("Stringresponse grading: control characters stripped from submission ".$showresponse." for $sname:$sdomain in $courseid for part: $part response: $id and symb: $symb");
                                       $Apache::lonhomework::results{"resource.$part.$id.submission"} = $response;
                                   }
                                   if ($error ne '') {
                                       &Apache::lonnet::logthis("Stringresponse grading error: $error for $sname:$sdomain in $courseid for part: $part response: $id and symb: $symb");
                                   }
                             }                              }
                         }                          }
  &Apache::lonxml::debug('msgs are'.join(':',@msgs));   &Apache::lonxml::debug('msgs are'.join(':',@msgs));
Line 1250  sub end_stringresponse { Line 1269  sub end_stringresponse {
  &Apache::inputtags::finalizeawards(\@final_awards,   &Apache::inputtags::finalizeawards(\@final_awards,
    \@final_msgs,     \@final_msgs,
    \@names,1);     \@names,1);
                       if (keys(%ansstring) > 0) {
                           $Apache::lonhomework::results{"resource.$part.$id.answerstring"} = &Apache::lonnet::hash2str(%ansstring);
                       }
  }   }
                 if (($ad eq 'INCORRECT' || $ad eq 'APPROX_ANS' ||                  if (($ad eq 'INCORRECT' || $ad eq 'APPROX_ANS' ||
                      $ad eq 'EXACT_ANS')) {                       $ad eq 'EXACT_ANS')) {
Line 1263  sub end_stringresponse { Line 1285  sub end_stringresponse {
                         $ad='ANONYMOUS_CREDIT';                          $ad='ANONYMOUS_CREDIT';
                     }                      }
                 }                  }
                 unless ($env{'request.state'} eq 'construct') {                  unless (($env{'request.state'} eq 'construct') || 
                     if ($previous{'used'}) {                          ($Apache::lonhomework::type eq 'randomizetry')) {
                         if ($ad ne $previous{'award'} && $previous{'award'} ne '') {                      if (($ad eq 'INCORRECT' || $ad eq 'APPROX_ANS' || $ad eq 'EXACT_ANS')) {
                             &stringresponse_gradechange($part,$id,\%previous,                          if ($previous{'used'}) {
                                                         'cs',$response,$ad,$type);                              if ($ad ne $previous{'award'}) {
                         }                                  if (($previous{'award'} eq 'INCORRECT' || 
                     } elsif ($previous{'usedci'}) {                                       $previous{'award'} eq 'APPROX_ANS' ||
                         if ($ad ne $previous{'awardci'} && $previous{'awardci'} ne '') {                                       $previous{'award'} eq 'EXACT_ANS')) {
                             &stringresponse_gradechange($part,$id,\%previous,                                      &stringresponse_gradechange($part,$id,\%previous,
                                                         'ci',$response,$ad,$type);                                                                  'cs',$response,$ad,$type);
                                   }
                               }
                           } elsif ($previous{'usedci'}) {
                               if ($ad ne $previous{'awardci'}) {
                                   if (($previous{'awardci'} eq 'INCORRECT' || 
                                        $previous{'awardci'} eq 'APPROX_ANS' ||
                                        $previous{'awardci'} eq 'EXACT_ANS')) {
                                       &stringresponse_gradechange($part,$id,\%previous,
                                                                   'ci',$response,$ad,$type);
                                   }
                               }
                         }                          }
                     }                      }
                 }                  }
Line 1301  sub end_stringresponse { Line 1334  sub end_stringresponse {
     if ($target eq 'answer') {      if ($target eq 'answer') {
  $result.=&Apache::response::answer_part('stringresponse',   $result.=&Apache::response::answer_part('stringresponse',
  $element);   $element);
                           if ($env{'form.grade_retrieveanswers'}) {
                               $env{'form.grade_answers.resource.'.$part.'.'.$id} = $element;
                           }
     } elsif ($target eq 'analyze') {      } elsif ($target eq 'analyze') {
  push (@{ $Apache::lonhomework::analyze{"$part.$id.answer"}{$name}[$i] },   push (@{ $Apache::lonhomework::analyze{"$part.$id.answer"}{$name}[$i] },
       $element);        $element);

Removed from v.1.241  
changed lines
  Added in v.1.247


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