--- loncom/homework/hint.pm 2000/12/21 18:13:33 1.2 +++ loncom/homework/hint.pm 2001/01/04 22:52:03 1.3 @@ -4,25 +4,80 @@ use strict; use Apache::lonnet; sub BEGIN { - &Apache::lonxml::register('Apache::hinttags',('hintgroup','hintpart')); + &Apache::lonxml::register('Apache::hinttags',('hintgroup','hintpart','numericalhint')); } +@Apache::hint::which=(); sub start_hintgroup { my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; - my $id=$Apache::inputtags::part; - my $numtries=$Apache::lonhomework::history{"resource.$id.tries"}; - if ( $numtries eq '') { $numtries = 0; } - my $hinttries=&Apache::lonnet::EXT("resource.$id.hinttries"); - if ( $hinttries eq '') { $hinttries = 1; } - &Apache::lonxml::debug("found :$id:$numtries:$hinttries:"); - if ( $numtries < $hinttries ) { + my $skiptoend='1'; + my $result; + + if ($target ne 'meta' || $target ne 'grade') { + my $id=$Apache::inputtags::part; + my $numtries=$Apache::lonhomework::history{"resource.$id.tries"}; + if ( $numtries eq '') { $numtries = 0; } + my $hinttries=&Apache::lonnet::EXT("resource.$id.hinttries"); + if ( $hinttries eq '') { $hinttries = 1; } + &Apache::lonxml::debug("found :$id:$numtries:$hinttries:"); + if ( $numtries > $hinttries ) { + $skiptoend='0'; + if ($target eq 'web') {$result='
';} + } + } + if ($skiptoend) { &Apache::lonxml::get_all_text("/hintgroup",$$parser[$#$parser]); } - return ''; + @Apache::hint::which=(); + return $result; } sub end_hintgroup { + my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; + my $result; + + if ($target ne 'meta' || $target ne 'grade') { + my $id=$Apache::inputtags::part; + my $numtries=$Apache::lonhomework::history{"resource.$id.tries"}; + if ( $numtries eq '') { $numtries = 0; } + my $hinttries=&Apache::lonnet::EXT("resource.$id.hinttries"); + if ( $hinttries eq '') { $hinttries = 1; } + &Apache::lonxml::debug("found :$id:$numtries:$hinttries:"); + if ( $numtries > $hinttries ) { + if ($target eq 'web') {$result='
';} + } + } + @Apache::hint::which=''; + return $result; +} + +sub start_numericalhint { + #do everything in end, so intervening work +} + +sub end_numericalhint { + my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; + my $result; + if ($target ne 'meta' && $target ne 'grade') { + my $args =''; + if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } + my $name = &Apache::run::run("{$args;".'return $name}',$safeeval); + my $oldresponse = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.$Apache::inputtags::response['-1'].submission"}; + &Apache::lonxml::debug("hintgroup is using $response
\n"); + my $expression="&caparesponse_check_list('".$response."','". + $$parstack[$#$parstack]. + ';my $tol="'.$Apache::inputtags::params{'tol'}.'"'. + ';my $sig="'.$Apache::inputtags::params{'sig'}.'"'. + "');"; + $result = &Apache::run::run($expression,$safeeval); + my ($awards) = split /:/ , $result; + my ($ad) = &Apache::inputtags::finalizeawards(split /,/ , $awards); + if ($ad eq 'EXACT_ANS' || $ad eq 'APPROX_ANS') { push (@Apache::hint::which,$name); } + &Apache::lonxml::debug("\n
result:$result:$Apache::lonxml::curdepth
\n"); + $result=''; + } + return $result; } # a part shows if it is on, if no specific parts are on, then default shows @@ -35,13 +90,10 @@ sub start_hintpart { my $args =''; if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } my $on = &Apache::run::run("{$args;".'return $on}',$safeeval); - if ( $on eq 'default') { + if ( $on eq 'default' && $#Apache::hint::which == '-1') { } else { - my (%results) = &Apache::run::run("{$args; return ".'\%'.$on,$safeeval); - my $key; - foreach $key (keys %results) { - &Apache::lonxml::debug("Got $key"); - } + my $which; + foreeach $which (@Apache::hint::which) { if ($which eq $name) { $show = 1; last } } } if (!$show) { &Apache::lonxml::get_all_text("/problem",$$parser[$#$parser]);