--- loncom/homework/response.pm 2005/04/01 18:08:14 1.117 +++ loncom/homework/response.pm 2005/09/23 16:47:06 1.125 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.117 2005/04/01 18:08:14 albertel Exp $ +# $Id: response.pm,v 1.125 2005/09/23 16:47:06 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -29,6 +29,7 @@ package Apache::response; use strict; use Apache::lonlocal; +use Apache::lonnet; BEGIN { &Apache::lonxml::register('Apache::response',('responseparam','parameter','dataresponse')); @@ -70,14 +71,14 @@ sub start_hintresponse { my ($parstack,$safeeval)=@_; my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); if ($id eq '') { $id = $Apache::lonxml::curdepth; } - push (@Apache::inputtags::response,$id); - push (@Apache::inputtags::responselist,$id); + push (@Apache::inputtags::hint,$id); + push (@Apache::inputtags::hintlist,$id); push (@Apache::inputtags::paramstack,[%Apache::inputtags::params]); return $id; } sub end_hintresponse { - pop @Apache::inputtags::response; + pop @Apache::inputtags::hint; if (defined($Apache::inputtags::paramstack[-1])) { %Apache::inputtags::params= @{ pop(@Apache::inputtags::paramstack) }; @@ -119,22 +120,34 @@ sub setrandomnumber { # $rndseed=unpack("%32i",$rndseed); my $rand_alg=&Apache::lonnet::get_rand_alg(); my $rndmod; - if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' || - $rand_alg eq '64bit2') { - $rndmod=(&Apache::lonnet::numval($Apache::inputtags::part) << 10); + + my ($id1,$id2,$shift_amt); + if ($Apache::lonhomework::parsing_a_problem) { + $id1=$Apache::inputtags::part; if (defined($Apache::inputtags::response[-1])) { - $rndmod+=&Apache::lonnet::numval($Apache::inputtags::response[-1]); + $id2=$Apache::inputtags::response[-1]; } + $shift_amt=scalar(@Apache::inputtags::responselist); + } elsif ($Apache::lonhomework::parsing_a_task) { + $id1=$Apache::bridgetask::dimension; + if (defined($Apache::bridgetask::instance[-1])) { + $id2=$Apache::bridgetask::instance[-1]; + } + $shift_amt=scalar(@Apache::bridgetask::instance); + } + &Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt"); + if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' || + $rand_alg eq '64bit2') { + $rndmod=(&Apache::lonnet::numval($id1) << 10); + if (defined($id2)) { $rndmod+=&Apache::lonnet::numval($id2); } } elsif ($rand_alg eq '64bit3') { - $rndmod=(&Apache::lonnet::numval2($Apache::inputtags::part) << 10); - if (defined($Apache::inputtags::response[-1])) { - $rndmod+=&Apache::lonnet::numval2($Apache::inputtags::response[-1]); - } + $rndmod=(&Apache::lonnet::numval2($id1) << 10); + if (defined($id2)) { $rndmod+=&Apache::lonnet::numval2($id2); } } else { - my $shift=(4*scalar(@Apache::inputtags::responselist))%30; - $rndmod=(&Apache::lonnet::numval3($Apache::inputtags::part) << (($shift+15)%30)); - if (defined($Apache::inputtags::response[-1])) { - $rndmod+=(&Apache::lonnet::numval3($Apache::inputtags::response[-1]) << $shift ); + my $shift=(4*$shift_amt)%30; + $rndmod=(&Apache::lonnet::numval3($id1) << (($shift+15)%30)); + if (defined($id2)) { + $rndmod+=(&Apache::lonnet::numval3($id2) << $shift ); } } if ($rndseed =~/([,:])/) { @@ -291,7 +304,7 @@ sub handle_previous { sub view_or_modify { my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); my $myself=0; - if ( ($name eq $ENV{'user.name'}) && ($domain eq $ENV{'user.domain'}) ) { + if ( ($name eq $env{'user.name'}) && ($domain eq $env{'user.domain'}) ) { $myself=1; } my $vgr=&Apache::lonnet::allowed('vgr',$courseid); @@ -322,14 +335,14 @@ sub end_dataresponse { my $result; if ( $target eq 'web' ) { } elsif ($target eq 'grade' ) { - if ( defined $ENV{'form.submitted'}) { + if ( defined $env{'form.submitted'}) { my ($symb,$courseid,$domain,$name)=&Apache::lonxml::whichuser(); my $allowed=&Apache::lonnet::allowed('mgr',$courseid); if ($allowed) { &Apache::response::setup_params('dataresponse',$safeeval); my $partid = $Apache::inputtags::part; my $id = $Apache::inputtags::response['-1']; - my $response = $ENV{'form.HWVAL_'.$id}; + my $response = $env{'form.HWVAL_'.$id}; my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval); if ( $response =~ /[^\s]/) { $Apache::lonhomework::results{"resource.$partid.$id.$name"}=$response; @@ -397,8 +410,8 @@ sub start_responseparam { $safeeval,'name','type', 'description','default'); my $element=&Apache::edit::html_element_name('parameter_package'); - if (defined($ENV{"form.$element"}) && $ENV{"form.$element"} ne '') { - my $name=$ENV{"form.$element"}; + if (defined($env{"form.$element"}) && $env{"form.$element"} ne '') { + my $name=$env{"form.$element"}; my $tag=&decide_package($tagstack); $token->[2]->{'name'}=$name; $token->[2]->{'type'}= @@ -415,7 +428,7 @@ sub start_responseparam { } } elsif ($target eq 'grade' || $target eq 'answer' || $target eq 'web' || $target eq 'tex' || $target eq 'analyze' ) { - if ($ENV{'request.state'} eq 'construct') { + if ($env{'request.state'} eq 'construct') { my $name =&Apache::lonxml::get_param('name',$parstack,$safeeval); my $default=&Apache::lonxml::get_param('default',$parstack, $safeeval); @@ -446,7 +459,7 @@ sub reset_params { sub setup_params { my ($tag,$safeeval) = @_; - if ($ENV{'request.state'} eq 'construct') { return; } + if ($env{'request.state'} eq 'construct') { return; } my %paramlist=(); foreach my $key (keys(%Apache::lonnet::packagetab)) { if ($key =~ /^$tag/) { @@ -478,7 +491,7 @@ sub setup_params { sub answer_header { my ($type) = @_; my $result; - if ($ENV{'form.answer_output_mode'} eq 'tex') { + if ($env{'form.answer_output_mode'} eq 'tex') { $result = ' \vskip 0 mm \begin{tabular}{|c|}\hline Answer for Part: \verb|'. $Apache::inputtags::part.'| \\\\ \hline '; } else { @@ -491,8 +504,16 @@ sub answer_header { sub answer_part { my ($type,$answer) = @_; my $result; - if ($ENV{'form.answer_output_mode'} eq 'tex') { - $result = ' \verb|'.$answer.'|\\\\ \hline '; + 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; + } + } + $result = '\verb'.$to_use.$answer.$to_use.'\\\\ \hline '; } else { $result = ''.$answer.''; } @@ -502,7 +523,7 @@ sub answer_part { sub answer_footer { my ($type) = @_; my $result; - if ($ENV{'form.answer_output_mode'} eq 'tex') { + if ($env{'form.answer_output_mode'} eq 'tex') { $result = ' \end{tabular} \vskip 0 mm '; } else { $result = ''; @@ -511,10 +532,11 @@ sub answer_footer { } sub showallfoils { - if (defined($ENV{'form.showallfoils'})) { + if (defined($env{'form.showallfoils'})) { my ($symb)=&Apache::lonxml::whichuser(); - if ($ENV{'request.state'} eq 'construct' || - $ENV{'user.adv'} ) { + if (($env{'request.state'} eq 'construct') || + ($env{'user.adv'} && $symb eq '') || + ($Apache::lonhomework::viewgrades) ) { return 1; } } @@ -535,10 +557,10 @@ sub getresponse { 'I'=>8,'J'=>9,'K'=>10,'L'=>11,'M'=>12,'N'=>13,'O'=>14, 'P'=>15,'Q'=>16,'R'=>17,'S'=>18,'T'=>19,'U'=>20,'V'=>21, 'W'=>22,'X'=>23,'Y'=>24,'Z'=>25); - if ($ENV{'form.submitted'} eq 'scantron') { + if ($env{'form.submitted'} eq 'scantron') { my $part = $Apache::inputtags::part; my $id = $Apache::inputtags::response[-1]; - $response = $ENV{'scantron.'.($Apache::lonxml::counter+$temp-1). + $response = $env{'scantron.'.($Apache::lonxml::counter+$temp-1). '.answer'}; # save bubbled letter for later $Apache::lonhomework::results{"resource.$part.$id.scantron"}.= @@ -551,7 +573,7 @@ sub getresponse { } } } else { - $response = $ENV{$formparm}; + $response = $env{$formparm}; } return $response; } @@ -559,8 +581,9 @@ sub getresponse { sub repetition { my $id = $Apache::inputtags::part; my $weight = &Apache::lonnet::EXT("resource.$id.weight"); - my $repetition = int $weight/9; - if ($weight % 9 != 0) {$repetition++;} + if (!defined($weight) || ($weight eq '')) { $weight=1; } + my $repetition = int($weight/10); + if ($weight % 10 != 0) { $repetition++; } return $repetition; } @@ -569,6 +592,7 @@ sub scored_response { my $repetition=&repetition(); my $score=0; for (my $i=0;$i<$repetition;$i++) { + # A is 1, B is 2, etc. (get response return 0-9 and then we add 1) my $increase=&Apache::response::getresponse($i+1); if ($increase ne '') { $score+=$increase+1; } } @@ -702,7 +726,7 @@ sub pick_foil_for_concept { sub get_response_param { my ($id,$name,$default)=@_; my $parameter; - if ($ENV{'request.state'} eq 'construct' && + if ($env{'request.state'} eq 'construct' && defined($Apache::inputtags::params{$name})) { $parameter=$Apache::inputtags::params{$name}; } else { @@ -718,12 +742,14 @@ sub submitted { my ($who)=@_; # when scatron grading any submission is a submission - if ($ENV{'form.submitted'} eq 'scantron') { return 1; } + if ($env{'form.submitted'} eq 'scantron') { return 1; } # if the caller only cared if this was a scantron submission if ($who eq 'scantron') { return 0; } # if the Submit Answer button for this particular part was pressed my $partid=$Apache::inputtags::part; - if (defined($ENV{'form.submit_'.$partid})) { return 1; } + if (defined($env{'form.submit_'.$partid})) { return 1; } + # Submit All button on a .page was pressed + if (defined($env{'form.all_submit'})) { return 1; } # otherwise no submission occured return 0; } 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.