Diff for /loncom/homework/hint.pm between versions 1.62.2.1 and 1.67

version 1.62.2.1, 2006/12/19 00:52:44 version 1.67, 2006/12/19 14:53:17
Line 32  use strict; Line 32  use strict;
 use Apache::lonnet();  use Apache::lonnet();
 use capa;  use capa;
 use Apache::caparesponse();  use Apache::caparesponse();
   use Apache::lonmaxima();
 use Apache::response();  use Apache::response();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Storable qw(dclone);  use Storable qw(dclone);
   
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::hinttags',('hintgroup','hintpart','numericalhint','stringhint','formulahint','optionhint','radiobuttonhint'));      &Apache::lonxml::register('Apache::hinttags',('hintgroup','hintpart','numericalhint','stringhint','formulahint','optionhint','radiobuttonhint','mathhint','customhint'));
 }  }
   
   
Line 178  sub end_numericalhint { Line 178  sub end_numericalhint {
  if (lc($hideunit) eq "yes") { delete($$args_ref{'unit'}); }   if (lc($hideunit) eq "yes") { delete($$args_ref{'unit'}); }
   
  if ($$tagstack[-1] eq 'formulahint') {   if ($$tagstack[-1] eq 'formulahint') {
     $$args_ref{'type'}='fml';              if ($$args_ref{'samples'}) {
                   $$args_ref{'type'}='fml';
               } else {
                   $$args_ref{'type'}='math';
               }
  } elsif ($$tagstack[-1] eq 'numericalhint') {   } elsif ($$tagstack[-1] eq 'numericalhint') {
     $$args_ref{'type'}='float';      $$args_ref{'type'}='float';
  }   }
Line 229  sub end_formulahint { Line 233  sub end_formulahint {
     return &end_numericalhint(@_);      return &end_numericalhint(@_);
 }  }
   
   sub start_mathhint {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       #do everything in end, so intervening <responseparams> and <answer> work
       &Apache::response::start_hintresponse($parstack,$safeeval);
       &Apache::lonxml::register('Apache::response',('answer'));
       my $result;
       if ($target eq 'edit') {
           $result.=&Apache::edit::tag_start($target,$token);
           $result.=&Apache::edit::text_arg('Name:','name',$token);
           $result.=&Apache::edit::select_arg('Algebra System:',
                                              'cas',
                                              ['maxima'],
                                              $token);
           $result.=&Apache::edit::text_arg('Argument Array:',
                                            'args',$token);
           $result.=&Apache::edit::end_row();
           $result.=&Apache::edit::start_spanning_row();
       } elsif ($target eq 'modified') {
           my $constructtag;
           $constructtag=&Apache::edit::get_new_args($token,$parstack,
                                                     $safeeval,'name','cas',
                                                     'args');
           $result  = &Apache::edit::rebuild_tag($token);
           $result .= &Apache::edit::handle_insert();
       } elsif ($target eq 'web') {
           &Apache::response::reset_params();
       }
       return $result;
   }
   
   sub end_mathhint {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       my $result;
       if ($target eq 'web') {
           if (!$Apache::lonxml::default_homework_loaded) {
               &Apache::lonxml::default_homework_load($safeeval);
           }
    my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);
           &Apache::response::setup_params('mathhint',$safeeval);
           my $partid=$Apache::inputtags::part;
           my $submitid=$Apache::inputtags::response[-1];
           my $response = $Apache::lonhomework::history{
                               "resource.$partid.$submitid.submission"};
   
    my $cas = &Apache::lonxml::get_param('cas',$parstack,$safeeval);
    my $award;
    if ($cas eq 'maxima') {
       my $args = [&Apache::lonxml::get_param_var('args',$parstack,$safeeval)];
       $award=&Apache::lonmaxima::maxima_run($Apache::response::custom_answer[-1],$response,$args);
    }
           if ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS') {
               push (@Apache::hint::which,$name);
           }
           $result='';
       } elsif ($target eq 'meta') {
           $result=&Apache::response::meta_package_write($token->[1]);
       } elsif ($target eq 'edit') {
           $result.=&Apache::edit::end_row().&Apache::edit::end_table();
       }
       pop(@Apache::response::custom_answer);
       pop(@Apache::response::custom_answer_type);
       &Apache::response::end_hintresponse();
       return $result;
   }
   
   sub start_customhint {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       #do everything in end, so intervening <responseparams> and <answer> work
       &Apache::response::start_hintresponse($parstack,$safeeval);
       &Apache::lonxml::register('Apache::response',('answer'));
       my $result;
       if ($target eq 'edit') {
           $result.=&Apache::edit::tag_start($target,$token);
           $result.=&Apache::edit::text_arg('Name:','name',$token);
           $result.=&Apache::edit::end_row();
           $result.=&Apache::edit::start_spanning_row();
       } elsif ($target eq 'modified') {
           my $constructtag;
           $constructtag=&Apache::edit::get_new_args($token,$parstack,
                                                     $safeeval,'name');
           $result  = &Apache::edit::rebuild_tag($token);
           $result .= &Apache::edit::handle_insert();
       } elsif ($target eq 'web') {
           &Apache::response::reset_params();
       }
       return $result;
   }
   
   sub end_customhint {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       my $result;
       if ($target eq 'web') {
           if (!$Apache::lonxml::default_homework_loaded) {
               &Apache::lonxml::default_homework_load($safeeval);
           }
    my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);
           &Apache::response::setup_params('customhint',$safeeval);
           my $partid=$Apache::inputtags::part;
           my $submitid=$Apache::inputtags::response[-1];
           my $response = $Apache::lonhomework::history{
                               "resource.$partid.$submitid.submission"};
           my $award;
    if ( $response =~ /[^\s]/ && 
        $Apache::response::custom_answer_type[-1] eq 'loncapa/perl') {
       if (!$Apache::lonxml::default_homework_loaded) {
    &Apache::lonxml::default_homework_load($safeeval);
       }
       ${$safeeval->varglob('LONCAPA::customresponse_submission')}=
    $response;
       
       $award = &Apache::run::run('{ my $submission=$LONCAPA::customresponse_submission;'.$Apache::response::custom_answer[-1].'}',$safeeval);
    }
           if ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS') {
               push (@Apache::hint::which,$name);
           }
           $result='';
       } elsif ($target eq 'meta') {
           $result=&Apache::response::meta_package_write($token->[1]);
       } elsif ($target eq 'edit') {
           $result.=&Apache::edit::end_row().&Apache::edit::end_table();
       }
       pop(@Apache::response::custom_answer);
       pop(@Apache::response::custom_answer_type);
       &Apache::response::end_hintresponse();
       return $result;
   }
   
 sub start_stringhint {  sub start_stringhint {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     #do everything in end, so intervening <responseparams> work      #do everything in end, so intervening <responseparams> work

Removed from v.1.62.2.1  
changed lines
  Added in v.1.67


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