--- loncom/homework/response.pm 2024/10/29 03:22:10 1.250 +++ loncom/homework/response.pm 2024/12/25 02:31:06 1.251 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.250 2024/10/29 03:22:10 raeburn Exp $ +# $Id: response.pm,v 1.251 2024/12/25 02:31:06 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,7 +42,7 @@ described at http://www.lon-capa.org. =over -=item +=item =back @@ -73,7 +73,7 @@ sub start_response { push (@Apache::inputtags::response,$id); push (@Apache::inputtags::responselist,$id); @Apache::inputtags::inputlist=(); - if ($Apache::inputtags::part eq '' && + if ($Apache::inputtags::part eq '' && !$Apache::lonhomework::ignore_response_errors) { &Apache::lonxml::error(&HTML::Entities::encode(&mt("Found a <*response> outside of a in a ed problem"),'<>&"')); } @@ -141,7 +141,7 @@ sub setrandomnumber { my ($ignore_id2,$target,$rndseed) = @_; if (!defined($rndseed)) { $rndseed=&Apache::structuretags::setup_rndseed(undef,$target); - } + } if (!defined($rndseed)) { $rndseed=&Apache::lonnet::rndseed(); } &Apache::lonxml::debug("randseed $rndseed"); # $rndseed=unpack("%32i",$rndseed); @@ -163,7 +163,7 @@ sub setrandomnumber { } else { $shift_amt=0; } - } + } &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') { @@ -265,7 +265,7 @@ sub mandatory_part_meta { } sub meta_part_order { - my ($type) = @_; + my ($type) = @_; if (@Apache::inputtags::partlist) { my @parts=@Apache::inputtags::partlist; unless ($type eq 'library') { @@ -455,7 +455,7 @@ sub end_customresponse { if ($Apache::lonhomework::type eq 'exam' || &Apache::response::submitted('scantron')) { &Apache::response::scored_response($part,$id); - } elsif ( $response =~ /[^\s]/ && + } elsif ( $response =~ /[^\s]/ && $Apache::response::custom_answer_type[-1] eq 'loncapa/perl') { if (!$Apache::lonxml::default_homework_loaded) { &Apache::lonxml::default_homework_load($safeeval); @@ -467,7 +467,7 @@ sub end_customresponse { my $error; ${$safeeval->varglob('LONCAPA::customresponse_submission')}= $response; - + my ($award,$score) = &Apache::run::run('{ my $submission=$LONCAPA::customresponse_submission;'.$Apache::response::custom_answer[-1].'}',$safeeval); if (!&Apache::inputtags::valid_award($award)) { $error = $award; @@ -509,7 +509,7 @@ sub end_customresponse { if ($target eq 'web') { &setup_prior_tries_hash(\&format_prior_response_custom); } - if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || + if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') { my $repetition = &repetition(); &Apache::lonxml::increment_counter($repetition,"$part.$id"); @@ -937,7 +937,7 @@ sub answer_footer { sub showallfoils { if (defined($env{'form.showallfoils'})) { my ($symb)=&Apache::lonnet::whichuser(); - if (($env{'request.state'} eq 'construct') || + if (($env{'request.state'} eq 'construct') || ($env{'user.adv'} && $symb eq '') || ($Apache::lonhomework::viewgrades) ) { return 1; @@ -971,7 +971,7 @@ Optional Arguments: 'A is 1' -> a number between 1 and 26 'letter' -> a letter between 'A' and 'Z' $lines - undef problem only needs a single line of bubbles. - nonzero Problem wants the first nonempty response in + nonzero Problem wants the first nonempty response in $lines lines of bubbles. $bubbles_per_line - Must be provided if lines is defined.. number of bubbles on a line. @@ -1009,7 +1009,6 @@ sub getresponse { if ((defined($response)) && ($response ne "") && ($response ne " ")) { last; } - } # save bubbled letter for later @@ -1035,7 +1034,7 @@ sub getresponse { } else { $response = $env{$formparm}; } - # + # # If we have a nonempty answer, correct the numeric value # of the answer for the line on which it was found. # @@ -1050,13 +1049,13 @@ sub getresponse { In scalar context: returns: the number of lines that are required to encode the weight. -(Default is for 10 bubbles per bubblesheet item; other (integer) -values can be specified by using a custom Bubblesheet format file -with an eighteenth entry (BubblesPerRow) set to the integer +(Default is for 10 bubbles per bubblesheet item; other (integer) +values can be specified by using a custom Bubblesheet format file +with an eighteenth entry (BubblesPerRow) set to the integer appropriate for the bubblesheets which will be used to assign weights. In array context: - + returns: number of lines required to encode weight, and bubbles/line. =cut @@ -1066,19 +1065,19 @@ sub repetition { my $weight = &Apache::lonnet::EXT("resource.$id.weight"); if (!defined($weight) || ($weight eq '')) { $weight=1; } my $bubbles_per_row; - if (($env{'form.bubbles_per_row'} =~ /^\d+$/) && + if (($env{'form.bubbles_per_row'} =~ /^\d+$/) && ($env{'form.bubbles_per_row'} > 0)) { $bubbles_per_row = $env{'form.bubbles_per_row'}; } else { $bubbles_per_row = 10; } my $denominator = $bubbles_per_row; - if (($env{'form.scantron_lastbubblepoints'} == 0) && + if (($env{'form.scantron_lastbubblepoints'} == 0) && ($bubbles_per_row > 1)) { $denominator = $bubbles_per_row - 1; - } + } my $repetition = int($weight/$denominator); - if ($weight % $denominator != 0) { $repetition++; } + if ($weight % $denominator != 0) { $repetition++; } if (wantarray) { return ($repetition,$bubbles_per_row); } @@ -1106,7 +1105,7 @@ Arguments $part_id - id of the part to grade $response_id - id of the response to grade - + =cut @@ -1204,9 +1203,9 @@ sub show_answer { if (($Apache::lonhomework::history{"resource.$part.awarded"} >= 1) || (&Apache::lonnet::EXT("resource.$part.retrypartial") !~/^1|on|yes$/)) { $canshow = 1; - } + } } - return (($canshow && &Apache::lonhomework::show_problem_status()) + return (($canshow && &Apache::lonhomework::show_problem_status()) || $status eq "SHOW_ANSWER"); } @@ -1277,7 +1276,7 @@ sub pick_foil_for_concept { Get a parameter associated with a problem. Parameters: - $id - the id of the paramater, either a part id, + $id - the id of the paramater, either a part id, or a partid and responspe id joined by _ $name - Name of the parameter to fetch $default - Default value for the paramter. @@ -1301,7 +1300,7 @@ sub get_response_param { sub submitted { my ($who)=@_; - + # when scatron grading any submission is a submission if ($env{'form.submitted'} eq 'scantron') { return 1; } # if the caller only cared if this was a scantron submission @@ -1344,7 +1343,7 @@ sub add_to_gradingqueue { } } -=pod +=pod =item check_status() @@ -1353,7 +1352,7 @@ and all true values mean that they can't a return of undef means it is unattempted a return of 0 means it is both attempted and still has tries and - is wrong or is only partially correct, and retries + is wrong or is only partially correct, and retries are allowed. a return of 1 means it is marked correct a return of 2 means they have exceeded maximum number of tries @@ -1374,7 +1373,7 @@ sub check_status { return 3; } my $status=&Apache::lonnet::EXT("user.resource.resource.$id.solved"); - if ($status =~ /^correct/) { + if ($status =~ /^correct/) { my $awarded=&Apache::lonnet::EXT("user.resource.resource.$id.awarded"); my $retrypartial=&Apache::lonnet::EXT("resource.$id.retrypartial"); unless (($retrypartial =~ /^1|on|yes$/) && ($awarded <1)) { @@ -1428,7 +1427,7 @@ sub setup_prior_tries_hash { } } } - if ($questiontype eq 'randomizetry') { + if ($questiontype eq 'randomizetry') { my $order_key = "$partprefix.$id.foilorder"; my @whichopts = &Apache::lonnet::str2array($Apache::lonhomework::history{$order_key}); if (@whichopts > 0) { @@ -1448,7 +1447,7 @@ sub setup_prior_tries_hash { 1; __END__ - + =pod =cut