--- loncom/homework/inputtags.pm 2011/03/07 22:38:09 1.285 +++ loncom/homework/inputtags.pm 2011/11/29 13:24:38 1.296 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # input definitons # -# $Id: inputtags.pm,v 1.285 2011/03/07 22:38:09 www Exp $ +# $Id: inputtags.pm,v 1.296 2011/11/29 13:24:38 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,7 +60,7 @@ use LONCAPA; BEGIN { - &Apache::lonxml::register('Apache::inputtags',('hiddenline','textfield','textline')); + &Apache::lonxml::register('Apache::inputtags',('hiddensubmission','hiddenline','textfield','textline')); } =pod @@ -478,6 +478,49 @@ sub end_hiddenline { return ""; } + +sub start_hiddensubmission { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my $result = ""; + my $input_id = &start_input($parstack,$safeeval); + if ($target eq 'web') { + $Apache::lonxml::evaluate--; + if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') { + my $partid=$Apache::inputtags::part; + my $id=$Apache::inputtags::response[-1]; + if ($Apache::lonhomework::type ne 'exam') { + my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval); + $value = &HTML::Entities::encode($value,'<>&"'); + $result= ''; + } + } + } elsif ($target eq 'edit') { + $result=&Apache::edit::tag_start($target,$token); + $result.=&Apache::edit::text_arg('Value:','value',$token,'15'); + $result.=&Apache::edit::end_row(); + $result.=&Apache::edit::end_table(); + } elsif ($target eq 'modified') { + my $constructtag=&Apache::edit::get_new_args($token,$parstack, + $safeeval,'value'); + if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } + } + + if ( ($target eq 'web' || $target eq 'tex') + && $Apache::lonhomework::type eq 'exam' + && &needs_exam_box($tagstack)) { + $result.=&exam_box($target); + } + return $result; +} + +sub end_hiddensubmission { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + if ($target eq 'web') { $Apache::lonxml::evaluate++; } + elsif ($target eq 'edit') { return ('','no'); } + &end_input(); + return ""; +} + =pod =item file_selector() @@ -528,7 +571,7 @@ sub file_selector { if ($which eq 'uploadonly' || $which eq 'both') { $result.=&mt('Submit a file: (only one file per submission)'). '

'; + $jspart.'_'.$id.'" id="HWFILE'.$jspart.'_'.$id.'" />
'; } if ( $which eq 'both') { $result.='
'.''.&mt('OR:').'
'; @@ -800,6 +843,26 @@ sub finalizeawards { } } +sub grading_is_nonlenient { + my ($part) = @_; +# Web mode: we are non-lenient unless told otherwise + my $defaultparm = 'off'; + my $nonlenient = 0; +# Grading a bubblesheet exam: we are grading lenient unless told otherwise + if ($Apache::lonhomework::scantronmode) { + $defaultparm = 'on'; + $nonlenient = 1; + } + my $lenientparm = + &Apache::response::get_response_param($part,'lenient',$defaultparm); + if ($lenientparm=~/^0|off|no$/i) { + $nonlenient = 1; + } elsif ($lenientparm=~/^1|on|yes$/i) { + $nonlenient = 0; + } + return $nonlenient; +} + sub decideoutput { my ($award,$awarded,$awardmsg,$solved,$previous,$target,$nocorrect)=@_; @@ -842,8 +905,8 @@ sub decideoutput { $message=&mt('Incorrect.'); $css_class=$possible_class{'charged_try'}; } - if ($env{'request.filename'} =~ - m|/res/lib/templates/examupload.problem$|) { + if ($handgrade || + ($env{'request.filename'}=~/\/res\/lib\/templates\/(examupload|DropBox).problem$/)) { $message = &mt("A score has been assigned."); $added_computer_text=1; } else { @@ -868,7 +931,13 @@ sub decideoutput { } } } - if ($awarded==1) { $button=0; } else { $button=1; } + if (&grading_is_nonlenient($part)) { + $button=0; + } elsif ($awarded==1) { + $button=0; + } else { + $button=1; + } $previousmsg=''; } elsif ($solved =~ /^excused/) { if ($target eq 'tex') { @@ -1277,14 +1346,10 @@ sub setgradedata { if ($award eq 'SUBMITTED') { &Apache::response::add_to_gradingqueue(); } - if (($Apache::lonhomework::type eq 'anonsurvey') || - ($Apache::lonhomework::type eq 'anonsurveycred') || - ($Apache::lonhomework::type eq 'randomizetry')) { - $Apache::lonhomework::results{"resource.$id.type"} = $Apache::lonhomework::type; - } - if ($Apache::lonhomework::type eq 'randomizetry') { - $Apache::lonhomework::results{"resource.$id.rndseed"} = $env{'form.'.$id.'.rndseed'}; - } + $Apache::lonhomework::results{"resource.$id.type"} = $Apache::lonhomework::type; + $Apache::lonhomework::results{"resource.$id.duedate"} = &Apache::lonnet::EXT("resource.$id.duedate"); + $Apache::lonhomework::results{"resource.$id.hinttries"} = &Apache::lonnet::EXT("resource.$id.hinttries"); + $Apache::lonhomework::results{"resourse.$id.version"} = &Apache::lonnet::usedversion(); } sub find_which_previous { @@ -1397,28 +1462,30 @@ sub get_grade_messages { if ( $tries eq '' ) { $tries = '0'; } if ( $maxtries eq '' ) { $maxtries = '2'; } if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; } - my $tries_text= &get_tries_text();; + my $tries_text= &get_tries_text(); if ($showbutton) { if ($target eq 'tex') { if ($env{'request.state'} ne "construct" && $Apache::lonhomework::type ne 'exam' && $env{'form.suppress_tries'} ne 'yes') { - $trystr = ' {\vskip 1 mm \small \textit{'.$tries_text.'} '. - $tries.'/'.$maxtries.'} \vskip 2 mm '; + $trystr ='{\vskip 1 mm \small ' + .&mt('[_1]'.$tries_text.'[_2] [_3]' + ,'\textit{','}',$tries.'/'.$maxtries ) + .'} \vskip 2 mm'; } else { $trystr = '\vskip 0 mm '; } } else { - $trystr = ''.&mt($tries_text)." $tries"; + my $trial =$tries; if ($Apache::lonhomework::parsing_a_task) { } elsif($env{'request.state'} ne 'construct') { - $trystr.="/".&Apache::lonhtmlcommon::direct_parm_link($maxtries,$env{'request.symb'},'maxtries',$id,$target); + $trial.="/".&Apache::lonhtmlcommon::direct_parm_link($maxtries,$env{'request.symb'},'maxtries',$id,$target); } else { if (defined($Apache::inputtags::params{'maxtries'})) { - $trystr.="/".$Apache::inputtags::params{'maxtries'}; + $trial.="/".$Apache::inputtags::params{'maxtries'}; } } - $trystr.=""; + $trystr = ''.&mt($tries_text.' [_1]',$trial).''; } } @@ -1539,7 +1606,7 @@ sub previous_tries { {$1 $txt_correct. $3}s; } my $trystr = "(".&mt('Try [_1]',$Apache::lonhomework::history{"$prefix.tries"}).")"; - if ($curr_rndseed || $lastrndseed) { + if (($curr_rndseed || $lastrndseed) && ($i > 1)) { if ($curr_rndseed ne $lastrndseed) { $trystr .= '
'.&mt('New problem variation this try.').''; }