Diff for /loncom/homework/response.pm between versions 1.132 and 1.149

version 1.132, 2005/12/06 09:29:34 version 1.149, 2006/10/17 19:35:37
Line 32  use Apache::lonlocal; Line 32  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::response',('responseparam','parameter','dataresponse','customresponse'));      &Apache::lonxml::register('Apache::response',('responseparam','parameter','dataresponse','customresponse','mathresponse'));
 }  }
   
 sub start_response {  sub start_response {
     my ($parstack,$safeeval)=@_;      my ($parstack,$safeeval)=@_;
     my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);      my $id = &Apache::lonxml::get_id($parstack,$safeeval);
     if ($id eq '') { $id = $Apache::lonxml::curdepth; }  
     if ($#Apache::inputtags::import > -1) {      if ($#Apache::inputtags::import > -1) {
  &Apache::lonxml::debug("Turning :$id: into");   &Apache::lonxml::debug("Turning :$id: into");
  $id = join('_',@Apache::inputtags::import).'_'.$id;   $id = join('_',@Apache::inputtags::import).'_'.$id;
Line 69  sub end_response { Line 68  sub end_response {
   
 sub start_hintresponse {  sub start_hintresponse {
     my ($parstack,$safeeval)=@_;      my ($parstack,$safeeval)=@_;
     my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);      my $id = &Apache::lonxml::get_id($parstack,$safeeval);
     if ($id eq '') { $id = $Apache::lonxml::curdepth; }  
     push (@Apache::inputtags::hint,$id);      push (@Apache::inputtags::hint,$id);
     push (@Apache::inputtags::hintlist,$id);      push (@Apache::inputtags::hintlist,$id);
     push (@Apache::inputtags::paramstack,[%Apache::inputtags::params]);      push (@Apache::inputtags::paramstack,[%Apache::inputtags::params]);
Line 130  sub setrandomnumber { Line 128  sub setrandomnumber {
  }   }
  $shift_amt=scalar(@Apache::inputtags::responselist);   $shift_amt=scalar(@Apache::inputtags::responselist);
     } elsif ($Apache::lonhomework::parsing_a_task) {      } elsif ($Apache::lonhomework::parsing_a_task) {
  $id1=$Apache::bridgetask::dimension;   $id1=&Apache::bridgetask::get_dim_id();
  if (!$ignore_id2 && defined($Apache::bridgetask::instance[-1])) {   if (!$ignore_id2 && ref($Apache::bridgetask::instance{$id1})) {
     $id2=$Apache::bridgetask::instance[-1];      $id2=$Apache::bridgetask::instance{$id1}[-1];
       $shift_amt=scalar(@{$Apache::bridgetask::instance{$id1}});
    } else {
       $shift_amt=0;
  }   }
  $shift_amt=scalar(@Apache::bridgetask::instance);  
     }       } 
     &Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt");      &Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt");
     if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||      if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
Line 306  sub handle_previous { Line 306  sub handle_previous {
 }  }
   
 sub view_or_modify {  sub view_or_modify {
     my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();      my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser();
     my $myself=0;      my $myself=0;
     if ( ($name eq $env{'user.name'}) && ($domain eq $env{'user.domain'}) ) {      if ( ($name eq $env{'user.name'}) && ($domain eq $env{'user.domain'}) ) {
  $myself=1;   $myself=1;
Line 340  sub end_dataresponse { Line 340  sub end_dataresponse {
     if ( $target eq 'web' ) {      if ( $target eq 'web' ) {
     } elsif ($target eq 'grade' ) {      } elsif ($target eq 'grade' ) {
  if ( defined $env{'form.submitted'}) {   if ( defined $env{'form.submitted'}) {
     my ($symb,$courseid,$domain,$name)=&Apache::lonxml::whichuser();      my ($symb,$courseid,$domain,$name)=&Apache::lonnet::whichuser();
     my $allowed=&Apache::lonnet::allowed('mgr',$courseid);      my $allowed=&Apache::lonnet::allowed('mgr',$courseid);
     if ($allowed) {      if ($allowed) {
  &Apache::response::setup_params('dataresponse',$safeeval);   &Apache::response::setup_params('dataresponse',$safeeval);
Line 403  sub end_customresponse { Line 403  sub end_customresponse {
     my $id=$Apache::inputtags::response[-1];      my $id=$Apache::inputtags::response[-1];
     if ( $target eq 'grade' && &Apache::response::submitted() ) {      if ( $target eq 'grade' && &Apache::response::submitted() ) {
  my $response = &Apache::response::getresponse();   my $response = &Apache::response::getresponse();
  if ( $response =~ /[^\s]/ &&    if ($Apache::lonhomework::type eq 'exam' ||
      $Apache::response::custom_answer_type eq 'loncapa/perl') {      &Apache::response::submitted('scantron')) {
       &Apache::response::scored_response($part,$id);
    } elsif ( $response =~ /[^\s]/ && 
     $Apache::response::custom_answer_type eq 'loncapa/perl') {
     if (!$Apache::lonxml::default_homework_loaded) {      if (!$Apache::lonxml::default_homework_loaded) {
  &Apache::lonxml::default_homework_load($safeeval);   &Apache::lonxml::default_homework_load($safeeval);
     }      }
Line 429  sub end_customresponse { Line 432  sub end_customresponse {
     $error;      $error;
     }      }
  }   }
       } elsif ( $target eq 'answer') {
    $result  = &Apache::response::answer_header('customresponse');
    my $answer = &Apache::lonxml::get_param('answerdisplay',$parstack,
    $safeeval);
    if ($env{'form.answer_output_mode'} ne 'tex') {
       $answer = '<b>'.$answer.'</b>';
    }
    $result .= &Apache::response::answer_part('customresponse',$answer);
    $result .= &Apache::response::answer_footer('customresponse');
       }
       if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || 
    $target eq 'tex' || $target eq 'analyze') {
    &Apache::lonxml::increment_counter(&Apache::response::repetition());
     }      }
     pop(@Apache::lonxml::namespace);      pop(@Apache::lonxml::namespace);
     &Apache::lonxml::deregister('Apache::response',('answer'));      &Apache::lonxml::deregister('Apache::response',('answer'));
Line 436  sub end_customresponse { Line 452  sub end_customresponse {
     return $result;      return $result;
 }  }
   
   
   sub start_mathresponse {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $id = &Apache::response::start_response($parstack,$safeeval);
       push(@Apache::lonxml::namespace,'mathresponse');
       my $result;
       undef($Apache::response::custom_answer);
       &Apache::lonxml::register('Apache::response',('answer'));
       if ($target eq 'web') {
     if (  &Apache::response::show_answer() ) {
       my $answer = &Apache::lonxml::get_param('answerdisplay',$parstack,
      $safeeval);
       $Apache::inputtags::answertxt{$id}=$answer;
    }
       } elsif ($target eq 'edit') {
    $result.=&Apache::edit::tag_start($target,$token);
    $result.=&Apache::edit::text_arg('String to display for answer:',
    'answerdisplay',$token);
    $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
       } elsif ($target eq 'modified') {
    my $constructtag;
    $constructtag=&Apache::edit::get_new_args($token,$parstack,
     $safeeval,'answerdisplay');
    if ($constructtag) {
       $result = &Apache::edit::rebuild_tag($token);
       $result.=&Apache::edit::handle_insert();
    }
       } elsif ($target eq 'answer' || $target eq 'grade') {
    &Apache::response::reset_params();
       } elsif ($target eq 'meta') {
    $result .= &Apache::response::meta_package_write('mathresponse');
       }
       return $result;
   }
   
   sub end_mathresponse {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $result;
       my $part=$Apache::inputtags::part;
       my $id=$Apache::inputtags::response[-1];
       if ( $target eq 'grade' && &Apache::response::submitted() ) {
    my $response = &Apache::response::getresponse();
    if ( $response =~ /[^\s]/ && 
        $Apache::response::custom_answer_type eq 'loncapa/perl') {
       if (!$Apache::lonxml::default_homework_loaded) {
    &Apache::lonxml::default_homework_load($safeeval);
       }
       my %previous = &Apache::response::check_for_previous($response,
    $part,$id);
       $Apache::lonhomework::results{"resource.$part.$id.submission"}=
    $response;
       my $error;
       ${$safeeval->varglob('LONCAPA::mathresponse_submission')}=
    $response;
       
       my $award = &Apache::run::run('{ my $submission=$LONCAPA::mathresponse_submission;'.$Apache::response::custom_answer.'}',$safeeval);
       if (!&Apache::inputtags::valid_award($award)) {
    $error = $award;
    $award = 'ERROR';
       }
       &Apache::response::handle_previous(\%previous,$award);
       $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=
    $award;
       if ($error) {
    $Apache::lonhomework::results{"resource.$part.$id.awardmsg"}=
       $error;
       }
    }
       }
       pop(@Apache::lonxml::namespace);
       &Apache::lonxml::deregister('Apache::response',('answer'));
       &Apache::response::end_response();
       return $result;
   }
   
   
 sub start_answer {  sub start_answer {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;      my $result;
Line 594  sub setup_params { Line 686  sub setup_params {
   
 {  {
     my @answer_bits;      my @answer_bits;
       my $need_row_start;
   
 sub answer_header {  sub answer_header {
     my ($type) = @_;      my ($type,$increment,$rows) = @_;
     my $result;      my $result;
     if ($env{'form.answer_output_mode'} eq 'tex') {      if ($env{'form.answer_output_mode'} eq 'tex') {
  undef(@answer_bits);   undef(@answer_bits);
    my $bit;
    if ($Apache::lonhomework::type eq 'exam') {
       $bit = ($Apache::lonxml::counter+$increment).') ';
    } else {
       $bit .= ' Answer for Part: \verb|'.
    $Apache::inputtags::part.'| ';
    }
    push(@answer_bits,$bit);
     } else {      } else {
    my $td = '<td '.(defined($rows)?'rowspan="'.$rows.'"':'').'>';
  $result  = '<table border="1"><tr>';   $result  = '<table border="1"><tr>';
  if ($Apache::lonhomework::type eq 'exam') {   if ($Apache::lonhomework::type eq 'exam') {
     $result .= '<td>'.$Apache::lonxml::counter. ')</td>';      $result .= $td.($Apache::lonxml::counter+$increment). ')</td>';
  } else {   } else {
     $result .= '<td>Answer for Part:'.$Apache::inputtags::part.'</td>';      $result .= $td.&mt('Answer for Part: [_1]',
          $Apache::inputtags::part).'</td>';
  }   }
  $result .= "\n";   $result .= "\n";
    $need_row_start = 0;
       }
       return $result;
   }
   
   sub next_answer {
       my ($type) = @_;
       my $result;
       if ($env{'form.answer_output_mode'} eq 'tex') {
    # FIXME ... need to do something with tex mode
       } else {
    $result .= "</tr>";
    $need_row_start = 1;
     }      }
     return $result;      return $result;
 }  }
   
 sub answer_part {  sub answer_part {
     my ($type,$answer) = @_;      my ($type,$answer,$args) = @_;
     my $result;      my $result;
     if ($env{'form.answer_output_mode'} eq 'tex') {      if ($env{'form.answer_output_mode'} eq 'tex') {
  my $to_use='|';   if (!$args->{'no_verbatim'}) {
  foreach my $value (32..126) {      my $to_use='|';
     my $char=pack('c',$value);      foreach my $value (32..126) {
     if ($answer !~ /\Q$char\E/) {   my $char=pack('c',$value);
  $to_use=$char;   if ($answer !~ /\Q$char\E/) {
  last;      $to_use=$char;
       last;
    }
       }
       if ($answer ne '') {
    $answer = '\verb'.$to_use.$answer.$to_use;
     }      }
  }   }
  if ($answer ne '') {   if ($answer ne '') {
     push(@answer_bits,'\verb'.$to_use.$answer.$to_use);      push(@answer_bits,$answer);
  }   }
     } else {      } else {
  $result = '<td>'.$answer.'</td>';   if ($need_row_start) {
       $result .= '<tr>';
       $need_row_start = 0;
    }
    $result .= '<td>'.$answer.'</td>';
     }      }
     return $result;      return $result;
 }  }
Line 637  sub answer_footer { Line 762  sub answer_footer {
     my ($type) = @_;      my ($type) = @_;
     my $result;      my $result;
     if ($env{'form.answer_output_mode'} eq 'tex') {      if ($env{'form.answer_output_mode'} eq 'tex') {
  my $columns = scalar(@answer_bits)+1;   my $columns = scalar(@answer_bits);
  $result = ' \vskip 0 mm \begin{tabular}{|'.'c|'x$columns.'}\hline ';   $result  = ' \vskip 0 mm \noindent \begin{tabular}{|'.'c|'x$columns.'}\hline ';
  if ($Apache::lonhomework::type eq 'exam') {   $result .= join(' & ',@answer_bits);
     $result .= $Apache::lonxml::counter.') ';  
  } else {  
     $result .= ' Answer for Part: \verb|'.  
  $Apache::inputtags::part.'| ';  
  }  
  foreach my $bit (@answer_bits) {  
     $result.=' & '.$bit;  
  }  
  $result .= ' \\\\ \\hline \end{tabular} \vskip 0 mm ';   $result .= ' \\\\ \\hline \end{tabular} \vskip 0 mm ';
     } else {      } else {
  $result = '</tr></table>';   $result = '</tr></table>';
Line 659  sub answer_footer { Line 776  sub answer_footer {
   
 sub showallfoils {  sub showallfoils {
     if (defined($env{'form.showallfoils'})) {      if (defined($env{'form.showallfoils'})) {
  my ($symb)=&Apache::lonxml::whichuser();   my ($symb)=&Apache::lonnet::whichuser();
  if (($env{'request.state'} eq 'construct') ||    if (($env{'request.state'} eq 'construct') || 
     ($env{'user.adv'} && $symb eq '')      ||      ($env{'user.adv'} && $symb eq '')      ||
             ($Apache::lonhomework::viewgrades) ) {              ($Apache::lonhomework::viewgrades) ) {
Line 881  sub submitted { Line 998  sub submitted {
 }  }
   
 sub add_to_gradingqueue {  sub add_to_gradingqueue {
     my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();      my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser();
     if (   $courseid eq ''      if (   $courseid eq ''
  || $symb eq ''   || $symb eq ''
  || $env{'request.state'} eq 'construct') {   || $env{'request.state'} eq 'construct'
    || $Apache::lonhomework::type ne 'problem') {
  return;   return;
     }      }
   
Line 912  sub add_to_gradingqueue { Line 1030  sub add_to_gradingqueue {
 # a return of 3 means it after the answer date  # a return of 3 means it after the answer date
 sub check_status {  sub check_status {
     my ($id)=@_;      my ($id)=@_;
     if (!$id) { $id=$Apache::linputtags::part; }      if (!defined($id)) { $id=$Apache::inputtags::part; }
     my $curtime=&Apache::lonnet::EXT('system.time');      my $curtime=&Apache::lonnet::EXT('system.time');
     my $opendate=&Apache::lonnet::EXT("resource.$id.opendate");      my $opendate=&Apache::lonnet::EXT("resource.$id.opendate");
     my $duedate=&Apache::lonnet::EXT("resource.$id.duedate");      my $duedate=&Apache::lonnet::EXT("resource.$id.duedate");

Removed from v.1.132  
changed lines
  Added in v.1.149


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