--- loncom/homework/response.pm 2003/11/21 19:54:42 1.89 +++ loncom/homework/response.pm 2004/03/16 22:00:51 1.95 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.89 2003/11/21 19:54:42 albertel Exp $ +# $Id: response.pm,v 1.95 2004/03/16 22:00:51 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -28,6 +28,7 @@ package Apache::response; use strict; +use Apache::lonlocal; BEGIN { &Apache::lonxml::register('Apache::response',('responseparam','parameter','dataresponse')); @@ -45,6 +46,16 @@ sub start_response { push (@Apache::inputtags::response,$id); push (@Apache::inputtags::responselist,$id); @Apache::inputtags::inputlist=(); + if ($Apache::inputtags::part eq '') { + &Apache::lonxml::error(&HTML::Entities::encode(&mt("Found a <*response> outside of a in a ed problem"))); + } + if ($Apache::inputtags::response_with_no_part && + $Apache::inputtags::part ne '0') { + &Apache::lonxml::error(&HTML::Entities::encode(&mt("<*response>s are both inside of and outside of , this is not a valid problem, errors in grading may occur.")).'
'); + } + if ($Apache::inputtags::part eq '0') { + $Apache::inputtags::response_with_no_part=1; + } return $id; } @@ -262,7 +273,7 @@ sub end_dataresponse { my ($symb,$courseid,$domain,$name)=&Apache::lonxml::whichuser(); my $allowed=&Apache::lonnet::allowed('mgr',$courseid); if ($allowed) { - &Apache::response::setup_params('dataresponse'); + &Apache::response::setup_params('dataresponse',$safeeval); my $partid = $Apache::inputtags::part; my $id = $Apache::inputtags::response['-1']; my $response = $ENV{'form.HWVAL_'.$id}; @@ -382,7 +393,7 @@ sub reset_params { } sub setup_params { - my ($tag) = @_; + my ($tag,$safeeval) = @_; if ($ENV{'request.state'} eq 'construct') { return; } my %paramlist=(); @@ -405,7 +416,9 @@ sub setup_params { &Apache::lonxml::debug("using nothing"); $Apache::inputtags::params{$key}=''; } else { - &Apache::lonxml::debug("using value"); + my $string="{return qq\0".$value."\0}"; + my $newvalue=&Apache::run::run($string,$safeeval,1); + if (defined($newvalue)) { $value=$newvalue; } $Apache::inputtags::params{$key}=$value; } } @@ -456,7 +469,7 @@ sub showallfoils { } sub getresponse { - my ($temp)=@_; + my ($temp,$resulttype)=@_; my $formparm='form.HWVAL_'.$Apache::inputtags::response['-1']; my $response; if (!defined($temp)) { @@ -476,7 +489,9 @@ sub getresponse { # save bubbled letter for later $Apache::lonhomework::results{"resource.$part.$id.scantron"}.= $response; - $response = $let_to_num{$response}; + if ($resulttype ne 'letter') { + $response = $let_to_num{$response}; + } } else { $response = $ENV{$formparm}; } @@ -500,6 +515,7 @@ sub scored_response { if ($increase ne '') { $score+=$increase+1; } } my $weight = &Apache::lonnet::EXT("resource.$part.weight"); + if (!defined($weight) || $weight eq '' || $weight eq 0) { $weight = 1; } my $pcr=$score/$weight; $Apache::lonhomework::results{"resource.$part.$id.awarded"}=$pcr; $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}= @@ -616,6 +632,20 @@ sub pick_foil_for_concept { } +sub get_response_param { + my ($id,$name,$default)=@_; + my $parameter; + if ($ENV{'request.state'} eq 'construct' && + defined($Apache::inputtags::params{$name})) { + $parameter=$Apache::inputtags::params{$name}; + } else { + $parameter=&Apache::lonnet::EXT("resource.$id.$name"); + } + if (!defined($parameter) || $parameter eq '') { + $parameter = $default; + } + return $parameter; +} 1; __END__