![]() ![]() | ![]() |
- added arg setting for <numericalresponse>
1: # The LearningOnline Network with CAPA 2: # caparesponse definition 3: 4: package Apache::caparesponse; 5: use strict; 6: use capa; 7: 8: sub BEGIN { 9: &Apache::lonxml::register('Apache::caparesponse',('caparesponse','numericalresponse')); 10: } 11: 12: sub start_caparesponse { 13: my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; 14: my $id = &Apache::response::start_response($parstack,$safeeval); 15: return ''; 16: } 17: 18: sub end_caparesponse { 19: my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; 20: my $result = ''; 21: if ( $target eq 'grade' ) { 22: if ( defined $ENV{'form.submitted'}) { 23: $safeeval->share_from('capa',['&caparesponse_capa_check_answer']); 24: my $response = $ENV{'form.HWVAL'.$Apache::inputtags::response['-1']}; 25: if ( $response =~ /[^\s]/) { 26: my $id = $Apache::inputtags::response['-1']; 27: my $previous= &Apache::response::check_for_previous($response,$id,$response); 28: if ( $previous ) { 29: $result = 'PREVIOUSLY_USED'; 30: } else { 31: $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=$response; 32: &Apache::lonxml::debug("submitted a $response<br>\n"); 33: &Apache::lonxml::debug($$parstack[$#$parstack] . "\n<br>"); 34: my $expression="&caparesponse_check('".$response."','". 35: $$parstack[$#$parstack]. 36: ';my $tol="'.$Apache::inputtags::params{'tol'}.'"'. 37: ';my $sig="'.$Apache::inputtags::params{'sig'}.'"'. 38: "');"; 39: $result = &Apache::run::run($expression,$safeeval); 40: my ($ad) = split /:/ , $result; 41: $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}=$ad; 42: &Apache::lonxml::debug("$expression"); 43: &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n"); 44: } 45: } 46: } 47: } elsif ($target eq 'web') { 48: #$result .= "The correct answer is ".&Apache::run::run("{$$parstack['-1'];".'return $answer}',$safeeval)."\n"; 49: } 50: #Apache::lonxml::debug("\n<br>\nreal end caparesponse<br>\n"); 51: &Apache::response::end_response; 52: return ''; 53: } 54: 55: sub start_numericalresponse { 56: my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; 57: my $id = &Apache::response::start_response($parstack,$safeeval); 58: my $result; 59: if ($target eq 'edit') { 60: $result.=&Apache::edit::tag_start($target,$token,&Apache::lonxml::description($token)); 61: $result.=&Apache::edit::text_arg('Answer:','answer',$token). 62: &Apache::edit::text_arg('Unit:','unit',$token).'</td></tr><tr><td colspan="3">'; 63: } elsif ($target eq 'modified') { 64: my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval, 65: 'answer','unit'); 66: if ($constructtag) { $result = &Apache::edit::rebuild_tag($token);} 67: } 68: return $result; 69: } 70: 71: sub end_numericalresponse { 72: my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; 73: my $result = ''; 74: if ( $target eq 'grade' ) { 75: if ( defined $ENV{'form.submitted'}) { 76: $safeeval->share_from('capa',['&caparesponse_capa_check_answer']); 77: my $response = $ENV{'form.HWVAL'.$Apache::inputtags::response['-1']}; 78: if ( $response =~ /[^\s]/) { 79: my $id = $Apache::inputtags::response['-1']; 80: my $previous= &Apache::response::check_for_previous($response,$id,$response); 81: if ( $previous ) { 82: $result = 'PREVIOUSLY_USED'; 83: } else { 84: $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=$response; 85: &Apache::lonxml::debug("submitted a $response<br>\n"); 86: &Apache::lonxml::debug($$parstack[$#$parstack] . "\n<br>"); 87: $response =~ s/\\/\\\\/g; 88: $response =~ s/\'/\\\'/g; 89: &Apache::lonxml::debug("current $response"); 90: my $expression="&caparesponse_check_list('".$response."','". 91: $$parstack[$#$parstack]. 92: ';my $tol="'.$Apache::inputtags::params{'tol'}.'"'. 93: ';my $sig="'.$Apache::inputtags::params{'sig'}.'"'. 94: "');"; 95: $result = &Apache::run::run($expression,$safeeval); 96: my ($awards) = split /:/ , $result; 97: my ($ad) = &Apache::inputtags::finalizeawards(split /,/ , $awards); 98: $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}=$ad; 99: &Apache::lonxml::debug("$expression"); 100: &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n"); 101: $result=''; 102: } 103: } 104: } 105: } elsif ($target eq 'web') { 106: my $award = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; 107: my $status = $Apache::inputtags::status['-1']; 108: if ($award =~ /^correct/ || $status eq "SHOW_ANSWER" ) { 109: my $answervar=&Apache::run::run("{$$parstack['-1'];".'return $answer}',$safeeval); 110: my (@answers)=&Apache::run::run("$answervar",$safeeval); 111: my $unit=&Apache::run::run("{$$parstack['-1'];".'return $unit}',$safeeval); 112: 113: $result="<br></br>The computer got "; 114: my $answer; 115: foreach $answer (@answers) { $result.="$answer,"; } 116: chop $result; 117: $result.=" $unit.<br></br>"; 118: } 119: } elsif ($target eq 'edit') { 120: $result.='</td></tr>'.&Apache::edit::end_table; 121: } 122: &Apache::response::end_response; 123: return $result; 124: } 125: 126: 1; 127: __END__ 128: