--- loncom/homework/response.pm 2008/12/07 23:40:57 1.209 +++ loncom/homework/response.pm 2010/06/20 12:42:44 1.218 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.209 2008/12/07 23:40:57 www Exp $ +# $Id: response.pm,v 1.218 2010/06/20 12:42:44 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,7 +30,7 @@ =head1 NAME -Apache::resonse.pm +Apache::response.pm =head1 SYNOPSIS @@ -54,6 +54,7 @@ use strict; use Apache::lonlocal; use Apache::lonnet; use Apache::lonmaxima(); +use Apache::lonr(); BEGIN { &Apache::lonxml::register('Apache::response',('responseparam','parameter','dataresponse','customresponse','mathresponse')); @@ -239,40 +240,26 @@ sub meta_stores_write { ">\n"; } -sub mandatory_part_meta { =pod -=item meta_part_order +=item mandatory_part_meta() Autogenerate metadata for mandatory -input (from RAT or lonparmset) and +input (from RAT or lonparmset) and output (to lonspreadsheet) of each part -# - return - &meta_parameter_write('opendate','date_start','', - 'Opening Date'). - &meta_parameter_write('duedate','date_end','', - 'Due Date'). - &meta_parameter_write('answerdate','date_start','', - 'Show Answer Date'). - &meta_parameter_write('weight','int_zeropos','', - 'Available Points'). - &meta_parameter_write('maxtries','int_pos','', - 'Maximum Number of Tries'). - &meta_package_write('part'). - &meta_stores_write('solved','string', - 'Problem Status'). - &meta_stores_write('tries','int_zeropos', - 'Number of Attempts'). - &meta_stores_write('awarded','float', - 'Partial Credit Factor'); Note: responseid-specific data 'submission' and 'awarddetail' not available to spreadsheet -> skip here =cut + +sub mandatory_part_meta { + return &meta_package_write('part'). + &meta_stores_write('solved','string','Problem Status'). + &meta_stores_write('tries','int_zeropos','Number of Attempts'). + &meta_stores_write('awarded','float','Partial Credit Factor'); } sub meta_part_order { @@ -297,7 +284,7 @@ sub check_for_previous { my %previous; $previous{'used'} = 0; foreach my $key (sort(keys(%Apache::lonhomework::history))) { - if ($key =~ /resource\.$partid\.$id\.submission$/) { + if ($key =~ /resource\.\Q$partid\E\.\Q$id\E\.submission$/) { if ( $last && $key =~ /^(\d+):/ ) { next if ($1 >= $last); } @@ -331,7 +318,10 @@ sub handle_previous { if ($$previous{'last'}) { push(@Apache::inputtags::previous,'PREVIOUSLY_LAST'); push(@Apache::inputtags::previous_version,$$previous{'version'}); - } elsif ($Apache::lonhomework::type ne 'survey') { + } elsif (($Apache::lonhomework::type ne 'survey') && + ($Apache::lonhomework::type ne 'surveycred') && + ($Apache::lonhomework::type ne 'anonsurvey') && + ($Apache::lonhomework::type ne 'anonsurveycred')) { push(@Apache::inputtags::previous,'PREVIOUSLY_USED'); push(@Apache::inputtags::previous_version,$$previous{'version'}); } @@ -452,7 +442,7 @@ sub end_customresponse { ${$safeeval->varglob('LONCAPA::customresponse_submission')}= $response; - my $award = &Apache::run::run('{ my $submission=$LONCAPA::customresponse_submission;'.$Apache::response::custom_answer[-1].'}',$safeeval); + 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; $award = 'ERROR'; @@ -460,6 +450,9 @@ sub end_customresponse { &Apache::response::handle_previous(\%previous,$award); $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}= $award; + if ($award eq 'ASSIGNED_SCORE') { + $Apache::lonhomework::results{"resource.$part.$id.awarded"}=1.0*$score; + } if ($error) { $Apache::lonhomework::results{"resource.$part.$id.awardmsg"}= $error; @@ -522,7 +515,7 @@ sub start_mathresponse { 'answerdisplay',$token); $result.=&Apache::edit::select_arg('Algebra System:', 'cas', - ['maxima'], + ['maxima','R'], $token); $result.=&Apache::edit::text_arg('Argument Array:', 'args',$token). @@ -552,14 +545,14 @@ sub edit_mathresponse_button { # my $helplink=&Apache::loncommon::help_open_topic('Formula_Editor'); my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'}; return(< + -$button +$button ENDFORMULABUTTON } @@ -586,6 +579,12 @@ sub end_mathresponse { $award=&Apache::lonmaxima::maxima_run($Apache::response::custom_answer[-1],$response,$args, &Apache::lonxml::get_param('libraries',$parstack,$safeeval)); } + if ($cas eq 'R') { + my $args = [&Apache::lonxml::get_param_var('args',$parstack,$safeeval)]; + $award=&Apache::lonr::r_run($Apache::response::custom_answer[-1],$response,$args, + &Apache::lonxml::get_param('libraries',$parstack,$safeeval)); + } + if (!&Apache::inputtags::valid_award($award)) { $error = $award; $award = 'ERROR'; @@ -911,12 +910,16 @@ sub showallfoils { } } if ($Apache::lonhomework::type eq 'survey') { return 1; } + if ($Apache::lonhomework::type eq 'surveycred') { return 1; } + if ($Apache::lonhomework::type eq 'anonsurvey') { return 1; } + if ($Apache::lonhomework::type eq 'anonsurveycred') { return 1; } + return 0; } =pod -=item &getresponse($offset,$resulttype); +=item &getresponse(); Retreives the current submitted response, helps out in the case of scantron mode. @@ -962,13 +965,17 @@ sub getresponse { my $id = $Apache::inputtags::response[-1]; my $line; + my $startline = $env{'form.scantron_questnum_start.'.$part.'.'.$id}; + if (!$startline) { + $startline = $Apache::lonxml::counter; + } for ($line = 0; $line < $lines; $line++) { - my $theline = $Apache::lonxml::counter+$offset-1+$line; + my $theline = $startline+$offset-1+$line; $response = $env{"scantron.$theline.answer"}; if ((defined($response)) && ($response ne "") && ($response ne " ")) { last; } - + } # save bubbled letter for later @@ -1020,7 +1027,7 @@ sub repetition { =pod -=item &scored_response($part_id,$response_id); +=item &scored_response(); Sets the results hash elements @@ -1290,7 +1297,7 @@ sub check_status { =pod -=item setup_prior_tries_hash($func,$data) +=item setup_prior_tries_hash() Foreach each past .submission $func is called with 3 arguments - the mode to set things up for (currently always 'grade') @@ -1335,6 +1342,4 @@ __END__ =pod -=back - =cut