--- loncom/homework/response.pm 2006/10/12 17:16:53 1.147 +++ loncom/homework/response.pm 2006/12/11 22:02:13 1.154 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.147 2006/10/12 17:16:53 albertel Exp $ +# $Id: response.pm,v 1.154 2006/12/11 22:02:13 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,6 +30,7 @@ package Apache::response; use strict; use Apache::lonlocal; use Apache::lonnet; +use Apache::lonmaxima(); BEGIN { &Apache::lonxml::register('Apache::response',('responseparam','parameter','dataresponse','customresponse','mathresponse')); @@ -306,7 +307,7 @@ sub handle_previous { } sub view_or_modify { - my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); + my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser(); my $myself=0; if ( ($name eq $env{'user.name'}) && ($domain eq $env{'user.domain'}) ) { $myself=1; @@ -340,7 +341,7 @@ sub end_dataresponse { if ( $target eq 'web' ) { } elsif ($target eq 'grade' ) { if ( defined $env{'form.submitted'}) { - my ($symb,$courseid,$domain,$name)=&Apache::lonxml::whichuser(); + my ($symb,$courseid,$domain,$name)=&Apache::lonnet::whichuser(); my $allowed=&Apache::lonnet::allowed('mgr',$courseid); if ($allowed) { &Apache::response::setup_params('dataresponse',$safeeval); @@ -373,7 +374,7 @@ sub start_customresponse { if ( &Apache::response::show_answer() ) { my $answer = &Apache::lonxml::get_param('answerdisplay',$parstack, $safeeval); - $Apache::inputtags::answertxt{$id}=$answer; + $Apache::inputtags::answertxt{$id}=[$answer]; } } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_start($target,$token); @@ -464,23 +465,39 @@ sub start_mathresponse { if ( &Apache::response::show_answer() ) { my $answer = &Apache::lonxml::get_param('answerdisplay',$parstack, $safeeval); - $Apache::inputtags::answertxt{$id}=$answer; + $Apache::inputtags::answertxt{$id}=[$answer]; } } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_start($target,$token); $result.=&Apache::edit::text_arg('String to display for answer:', 'answerdisplay',$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().&Apache::edit::start_spanning_row(); } elsif ($target eq 'modified') { my $constructtag; $constructtag=&Apache::edit::get_new_args($token,$parstack, - $safeeval,'answerdisplay'); + $safeeval,'answerdisplay','cas','args'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); $result.=&Apache::edit::handle_insert(); } } elsif ($target eq 'answer' || $target eq 'grade') { &Apache::response::reset_params(); + my $args_ref= \%{$safeeval->varglob('LONCAPA::mathresponse_args')}; + undef(%{ $args_ref }); + $$args_ref{'cas'}=$token->[2]{'cas'}; + if ($token->[2]{'args'}=~/\$/) { + $$args_ref{'args'}=&Apache::run::run($token->[2]{'args'},$safeeval); + } elsif ($token->[2]{'args'}=~/\@/) { + $$args_ref{'args'}=&Apache::run::run('join(",",'.$token->[2]{'args'}.')',$safeeval); + } else { + $$args_ref{'args'}=$token->[2]{'args'}; + } } elsif ($target eq 'meta') { $result .= &Apache::response::meta_package_write('mathresponse'); } @@ -494,8 +511,7 @@ sub end_mathresponse { my $id=$Apache::inputtags::response[-1]; if ( $target eq 'grade' && &Apache::response::submitted() ) { my $response = &Apache::response::getresponse(); - if ( $response =~ /[^\s]/ && - $Apache::response::custom_answer_type eq 'loncapa/perl') { + if ( $response =~ /[^\s]/ ) { if (!$Apache::lonxml::default_homework_loaded) { &Apache::lonxml::default_homework_load($safeeval); } @@ -504,10 +520,11 @@ sub end_mathresponse { $Apache::lonhomework::results{"resource.$part.$id.submission"}= $response; my $error; - ${$safeeval->varglob('LONCAPA::mathresponse_submission')}= - $response; - - my $award = &Apache::run::run('{ my $submission=$LONCAPA::mathresponse_submission;'.$Apache::response::custom_answer.'}',$safeeval); + my $args_ref= \%{$safeeval->varglob('LONCAPA::mathresponse_args')}; + my $award; + if ($$args_ref{'cas'} eq 'maxima') { + $award=&Apache::lonmaxima::maxima_run($Apache::response::custom_answer,$response,$$args_ref{'args'}); + } if (!&Apache::inputtags::valid_award($award)) { $error = $award; $award = 'ERROR'; @@ -729,19 +746,24 @@ sub next_answer { } sub answer_part { - my ($type,$answer) = @_; + my ($type,$answer,$args) = @_; my $result; if ($env{'form.answer_output_mode'} eq 'tex') { - my $to_use='|'; - foreach my $value (32..126) { - my $char=pack('c',$value); - if ($answer !~ /\Q$char\E/) { - $to_use=$char; - last; + if (!$args->{'no_verbatim'}) { + my $to_use='|'; + foreach my $value (32..126) { + my $char=pack('c',$value); + if ($answer !~ /\Q$char\E/) { + $to_use=$char; + last; + } + } + if ($answer ne '') { + $answer = '\verb'.$to_use.$answer.$to_use; } } if ($answer ne '') { - push(@answer_bits,'\verb'.$to_use.$answer.$to_use); + push(@answer_bits,$answer); } } else { if ($need_row_start) { @@ -771,7 +793,7 @@ sub answer_footer { sub showallfoils { if (defined($env{'form.showallfoils'})) { - my ($symb)=&Apache::lonxml::whichuser(); + my ($symb)=&Apache::lonnet::whichuser(); if (($env{'request.state'} eq 'construct') || ($env{'user.adv'} && $symb eq '') || ($Apache::lonhomework::viewgrades) ) { @@ -993,7 +1015,7 @@ sub submitted { } sub add_to_gradingqueue { - my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); + my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser(); if ( $courseid eq '' || $symb eq '' || $env{'request.state'} eq 'construct'