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

version 1.62.2.1, 2006/12/19 00:52:44 version 1.74, 2008/11/20 15:19:15
Line 26 Line 26
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
   
   
   
 package Apache::hinttags;   package Apache::hinttags; 
   
 use strict;  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 68  sub start_hintgroup { Line 70  sub start_hintgroup {
  $result .= '\keephidden{';   $result .= '\keephidden{';
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::tag_start($target,$token);   $result.=&Apache::edit::tag_start($target,$token);
  $result.=&Apache::edit::select_arg('Show hint even if problem Correct:','showoncorrect',[['no',&mt('No')],['yes',&mt('Yes')]],$token);   $result.=&Apache::edit::select_arg('Show hint even if problem Correct:','showoncorrect',['no','yes'],$token);
  $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
  my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'showoncorrect');   my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'showoncorrect');
        if ($constructtag) {         if ($constructtag) {
            $result =&Apache::edit::rebuild_tag($token);             $result =&Apache::edit::rebuild_tag($token);
            $result.=&Apache::edit::handle_insert();  
        }         }
     }      }
     @Apache::hint::which=();      @Apache::hint::which=();
Line 141  sub start_numericalhint { Line 142  sub start_numericalhint {
  }   }
  if ($constructtag) {   if ($constructtag) {
     $result  = &Apache::edit::rebuild_tag($token);      $result  = &Apache::edit::rebuild_tag($token);
     $result .= &Apache::edit::handle_insert();  
  }   }
     } elsif ($target eq 'web') {      } elsif ($target eq 'web') {
  &Apache::response::reset_params();   &Apache::response::reset_params();
Line 162  sub end_numericalhint { Line 162  sub end_numericalhint {
   
  my $partid=$Apache::inputtags::part;   my $partid=$Apache::inputtags::part;
  my $id=$Apache::inputtags::hint[-1];   my $id=$Apache::inputtags::hint[-1];
  #id submissions occured under   #id submissions occurred under
  my $submitid=$Apache::inputtags::response[-1];   my $submitid=$Apache::inputtags::response[-1];
   
  my $response = $Apache::lonhomework::history{   my $response = $Apache::lonhomework::history{
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);
       } 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);
       } 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
Line 250  sub start_stringhint { Line 379  sub start_stringhint {
   $safeeval,'name','answer',    $safeeval,'name','answer',
   'type');    'type');
  $result  = &Apache::edit::rebuild_tag($token);   $result  = &Apache::edit::rebuild_tag($token);
  $result .= &Apache::edit::handle_insert();  
     } elsif ($target eq 'web') {      } elsif ($target eq 'web') {
  &Apache::response::reset_params();   &Apache::response::reset_params();
     }      }
Line 269  sub end_stringhint { Line 397  sub end_stringhint {
  &Apache::response::setup_params('stringhint',$safeeval);   &Apache::response::setup_params('stringhint',$safeeval);
  my $partid=$Apache::inputtags::part;   my $partid=$Apache::inputtags::part;
  my $id=$Apache::inputtags::hint[-1];   my $id=$Apache::inputtags::hint[-1];
  #id submissions occured under   #id submissions occurred under
  my $submitid=$Apache::inputtags::response[-1];   my $submitid=$Apache::inputtags::response[-1];
  my $response = $Apache::lonhomework::history{   my $response = $Apache::lonhomework::history{
     "resource.$partid.$submitid.submission"};      "resource.$partid.$submitid.submission"};
Line 296  sub end_stringhint { Line 424  sub end_stringhint {
     my $args_ref =       my $args_ref = 
  &Apache::caparesponse::setup_capa_args($safeeval,$parstack,   &Apache::caparesponse::setup_capa_args($safeeval,$parstack,
        \@args,$response);         \@args,$response);
               if ($$args_ref{'type'} eq '') {
                   $$args_ref{'type'} = 'ci';
               }
     &Apache::caparesponse::add_in_tag_answer($parstack,$safeeval);      &Apache::caparesponse::add_in_tag_answer($parstack,$safeeval);
     my (@final_awards,@final_msgs,@ans_names);      my (@final_awards,@final_msgs,@ans_names);
     my %answer = &Apache::caparesponse::get_answer();      my %answer = &Apache::caparesponse::get_answer();
Line 361  sub start_hintpart { Line 492  sub start_hintpart {
      $safeeval,'on');       $safeeval,'on');
  if ($constructtag) {   if ($constructtag) {
     $result = &Apache::edit::rebuild_tag($token);      $result = &Apache::edit::rebuild_tag($token);
     $result.=&Apache::edit::handle_insert();  
  }   }
     }      }
     return $result;      return $result;
Line 391  sub start_optionhint { Line 521  sub start_optionhint {
      'answer','concept');       'answer','concept');
  if ($constructtag) {   if ($constructtag) {
     $result  = &Apache::edit::rebuild_tag($token);      $result  = &Apache::edit::rebuild_tag($token);
     $result .= &Apache::edit::handle_insert();  
  }   }
     } elsif ($target eq 'meta') {      } elsif ($target eq 'meta') {
  $result=&Apache::response::meta_package_write('numericalhint');   $result=&Apache::response::meta_package_write('numericalhint');
Line 406  sub end_optionhint { Line 535  sub end_optionhint {
  my ($foilmatch,$conceptmatch)=(-1,-1);   my ($foilmatch,$conceptmatch)=(-1,-1);
  my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);   my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval);
  my $partid=$Apache::inputtags::part;   my $partid=$Apache::inputtags::part;
  #id submissions occured under   #id submissions occurred under
  my $submitid=$Apache::inputtags::response[-1];   my $submitid=$Apache::inputtags::response[-1];
  my $part_id="$partid.$submitid";   my $part_id="$partid.$submitid";
  my %answer;   my %answer;
Line 470  sub start_radiobuttonhint { Line 599  sub start_radiobuttonhint {
      'answer');       'answer');
  if ($constructtag) {   if ($constructtag) {
     $result  = &Apache::edit::rebuild_tag($token);      $result  = &Apache::edit::rebuild_tag($token);
     $result .= &Apache::edit::handle_insert();  
  }   }
     } elsif ($target eq 'meta') {      } elsif ($target eq 'meta') {
  $result=&Apache::response::meta_package_write('numericalhint');   $result=&Apache::response::meta_package_write('numericalhint');
Line 487  sub end_radiobuttonhint { Line 615  sub end_radiobuttonhint {
  my $answer=&Apache::lonxml::get_param('answer',$parstack,$safeeval);   my $answer=&Apache::lonxml::get_param('answer',$parstack,$safeeval);
  eval('@answer ='.$answer);   eval('@answer ='.$answer);
  my $partid=$Apache::inputtags::part;   my $partid=$Apache::inputtags::part;
  #id submissions occured under   #id submissions occurred under
  my $submitid=$Apache::inputtags::response[-1];   my $submitid=$Apache::inputtags::response[-1];
  my $part_id="$partid.$submitid";   my $part_id="$partid.$submitid";
  my $response = $Apache::lonhomework::history{   my $response = $Apache::lonhomework::history{
Line 523  sub end_radiobuttonhint { Line 651  sub end_radiobuttonhint {
 }  }
 1;  1;
 __END__  __END__
   
   
   =head1 NAME
   
   Apache::hinttags
   
   =head1 SYNOPSIS
   
   This handler coordinates the delivery of hints to students working on LON-CAPA problems and assignments.
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   =head1 SUBROUTINES
   
   =over
   
   =item start_hintgroup()
   
   =item end_hintgroup()
   
   =item start_numericalhint()
   
   =item end_numericalhint()
   
   =item start_formulahint()
   
   =item end_formulahint()
   
   =item start_mathhint()
   
   =item end_mathhint()
   
   =item start_customhint()
   
   =item end_customhint()
   
   =item start_stringhint()
   
   =item end_stringhint()
   
   =item start_hintpart()
   
   =item end_hintpart()
   
   =item start_optionhint()
   
   =item end_optionhint()
   
   =item start_radiobuttonhint()
   
   =item end_radiobuttonhint()
   
   =back
   
   =cut
   

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


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.