--- loncom/homework/inputtags.pm 2006/11/01 23:24:52 1.210 +++ loncom/homework/inputtags.pm 2007/03/01 02:30:03 1.217 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # input definitons # -# $Id: inputtags.pm,v 1.210 2006/11/01 23:24:52 albertel Exp $ +# $Id: inputtags.pm,v 1.217 2007/03/01 02:30:03 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -70,6 +70,10 @@ BEGIN { # %Apache::inputtags::answertxt - <*response> tags store correct # answer strings for display by # in this hash. +# %Apache::inputtags::submission_display +# - <*response> tags store improved display +# of submission strings for display by part +# end. sub initialize_inputtags { @Apache::inputtags::input=(); @@ -88,6 +92,7 @@ sub initialize_inputtags { @Apache::inputtags::importlist=(); $Apache::inputtags::response_with_no_part=0; %Apache::inputtags::answertxt=(); + %Apache::inputtags::submission_display=(); } sub check_for_duplicate_ids { @@ -292,7 +297,9 @@ sub start_textline { my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval); my $maxlength; if ($size eq '') { $size=20; } else { - if ($size < 20) { $maxlength=$size; } + if ($size < 20) { + $maxlength = ' maxlength="'.$size.'"'; + } } my $oldresponse = $Apache::lonhomework::history{"resource.$partid.$id.submission"}; &Apache::lonxml::debug("oldresponse $oldresponse is ".ref($oldresponse)); @@ -320,8 +327,8 @@ sub start_textline { if ($Apache::inputtags::status[-1] eq 'CANNOT_ANSWER') { $name = "none"; } - $result.= ''; + $result.= ''; } if ($Apache::lonhomework::type eq 'exam' && &needs_exam_box($tagstack)) { @@ -372,12 +379,18 @@ sub end_textline { sub start_hiddenline { 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]; - my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$id.submission"},'<>&"'); + my $oldresponse = $Apache::lonhomework::history{"resource.$partid.$id.submission"}; + if (ref($oldresponse) eq 'ARRAY') { + $oldresponse = $oldresponse->[$#Apache::inputtags::inputlist]; + } + $oldresponse = &HTML::Entities::encode($oldresponse,'<>&"'); + if ($Apache::lonhomework::type ne 'exam') { $result= ''; @@ -400,6 +413,7 @@ sub end_hiddenline { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; if ($target eq 'web') { $Apache::lonxml::evaluate++; } elsif ($target eq 'edit') { return ('','no'); } + &end_input(); return ""; } @@ -614,9 +628,11 @@ sub decideoutput { $message.= $computer; } $added_computer_text=1; - unless ($env{'course.'. + my ($symb) = &Apache::lonnet::whichuser(); + if ((!$env{'course.'. $env{'request.course.id'}. - '.disable_receipt_display'} eq 'yes') { + '.disable_receipt_display'} eq 'yes')&& + $symb) { $message.=(($target eq 'web')?'
':' '). &mt('Your receipt is').' '.&Apache::lonnet::receipt($Apache::inputtags::part). (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):''); @@ -694,10 +710,8 @@ sub decideoutput { $button=1; } elsif ($award eq 'SIG_FAIL') { my ($used,$min,$max)=split(':',$awardmsg); - my $word; - if ($used < $min) { $word=&mt('more'); } - if ($used > $max) { $word=&mt('fewer'); } - $message = &mt("Submission not graded. Use [_2] digits.",$used,$word); + my $word = ($used < $min) ? 'more' : 'fewer'; + $message = &mt("Submission not graded. Use $word digits.",$used); $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_INVALID_INSTRUCTOR') { @@ -985,10 +999,82 @@ sub grade { return ''; } +sub get_grade_messages { + my ($id,$prefix,$target,$status) = @_; + + my ($message,$latemessage,$trystr,$previousmsg); + my $showbutton = 1; + + my $award = $Apache::lonhomework::history{"$prefix.award"}; + my $awarded = $Apache::lonhomework::history{"$prefix.awarded"}; + my $solved = $Apache::lonhomework::history{"$prefix.solved"}; + my $previous = $Apache::lonhomework::history{"$prefix.previous"}; + my $awardmsg = $Apache::lonhomework::history{"$prefix.awardmsg"}; + &Apache::lonxml::debug("Found Award |$award|$solved|$awardmsg"); + if ( $award ne '' || $solved ne '' || $status eq 'SHOW_ANSWER') { + &Apache::lonxml::debug('Getting message'); + ($showbutton,my $bgcolor,$message,$previousmsg) = + &decideoutput($award,$awarded,$awardmsg,$solved,$previous, + $target); + if ($target eq 'tex') { + $message='\vskip 2 mm '.$message.' '; + } else { + $message="$message"; + if ($previousmsg) { + $previousmsg="$previousmsg"; + } + } + } + my $tries = $Apache::lonhomework::history{"$prefix.tries"}; + my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); + &Apache::lonxml::debug("got maxtries of :$maxtries:"); + #if tries are set to negative turn off the Tries/Button and messages + if (defined($maxtries) && $maxtries < 0) { return ''; } + if ( $tries eq '' ) { $tries = '0'; } + if ( $maxtries eq '' ) { $maxtries = '2'; } + if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; } + my $tries_text=&mt('Tries'); + if ( $Apache::lonhomework::type eq 'survey' || + $Apache::lonhomework::parsing_a_task) { + $tries_text=&mt('Submissions'); + } + + 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 '; + } else { + $trystr = '\vskip 0 mm '; + } + } else { + $trystr = "".$tries_text." $tries"; + if ($Apache::lonhomework::parsing_a_task) { + } elsif($env{'request.state'} ne 'construct') { + $trystr.="/$maxtries"; + } else { + if (defined($Apache::inputtags::params{'maxtries'})) { + $trystr.="/".$Apache::inputtags::params{'maxtries'}; + } + } + $trystr.=""; + } + } + if ($Apache::lonhomework::history{"$prefix.afterduedate"}) { + #last submissions was after due date + $latemessage=&mt(' The last submission was after the Due Date ');; + if ($target eq 'web') { + $latemessage=''.$latemessage.''; + } + } + return ($previousmsg,$latemessage,$message,$trystr,$showbutton); +} + sub gradestatus { my ($id,$target) = @_; my $showbutton = 1; - my $bgcolor = ''; my $message = ''; my $latemessage = ''; my $trystr=''; @@ -1002,72 +1088,19 @@ sub gradestatus { && $status ne 'INVALID_ACCESS' && $status ne 'NEEDS_CHECKIN' && $status ne 'NOT_IN_A_SLOT') { - my $award = $Apache::lonhomework::history{"resource.$id.award"}; - my $awarded = $Apache::lonhomework::history{"resource.$id.awarded"}; - my $solved = $Apache::lonhomework::history{"resource.$id.solved"}; - my $previous = $Apache::lonhomework::history{"resource.$id.previous"}; - my $awardmsg = $Apache::lonhomework::history{"resource.$id.awardmsg"}; - &Apache::lonxml::debug("Found Award |$award|$solved|$awardmsg"); - if ( $award ne '' || $solved ne '' || $status eq 'SHOW_ANSWER') { - &Apache::lonxml::debug('Getting message'); - ($showbutton,$bgcolor,$message,$previousmsg) = - &decideoutput($award,$awarded,$awardmsg,$solved,$previous, - $target); - if ($target eq 'tex') { - $message='\vskip 2 mm '.$message.' '; - } else { - $message="$message"; - if ($previousmsg) { - $previousmsg="$previousmsg"; - } - } - } - my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; - my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); - &Apache::lonxml::debug("got maxtries of :$maxtries:"); - #if tries are set to negative turn off the Tries/Button and messages - if (defined($maxtries) && $maxtries < 0) { return ''; } - if ( $tries eq '' ) { $tries = '0'; } - if ( $maxtries eq '' ) { $maxtries = '2'; } - if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; } - my $tries_text=&mt('Tries'); - if ( $Apache::lonhomework::type eq 'survey' || - $Apache::lonhomework::parsing_a_task) { - $tries_text=&mt('Submissions'); - } - 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 '; - } else { - $trystr = '\vskip 0 mm '; - } - } else { - $trystr = "".$tries_text." $tries"; - if ($Apache::lonhomework::parsing_a_task) { - } elsif($env{'request.state'} ne 'construct') { - $trystr.="/$maxtries"; - } else { - if (defined($Apache::inputtags::params{'maxtries'})) { - $trystr.="/".$Apache::inputtags::params{'maxtries'}; - } - } - $trystr.=""; - } + + ($previousmsg,$latemessage,$message,$trystr) = + &get_grade_messages($id,"resource.$id",$target,$status, + $showbutton); + if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') { + $showbutton = 0; } - if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;} if ( $showbutton ) { if ($target ne 'tex') { - $button = ''; - } - } - if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) { - #last submissions was after due date - $latemessage=&mt(' The last submission was after the Due Date ');; - if ($target eq 'web') { - $latemessage=''.$latemessage.''; + $button = ''; } } + } my $output= $previousmsg.$latemessage.$message.$trystr; if ($output =~ /^\s*$/) { @@ -1076,10 +1109,76 @@ sub gradestatus { if ($target eq 'tex') { return $button.' \vskip 0 mm '.$output.' '; } else { - return ''.$output.'
'.$button.'
'; + return ''.$output.'
'.$button.''.&previous_tries($id,$target).'
'; } } } + +sub previous_tries { + my ($id,$target) = @_; + my $output; + my $status = $Apache::inputtags::status['-1']; + + foreach my $i (1..$Apache::lonhomework::history{'version'}) { + my $prefix = $i.":resource.$id"; + + next if (!exists($Apache::lonhomework::history{"$prefix.award"})); + my ($previousmsg,$latemessage,$message,$trystr); + + ($previousmsg,$latemessage,$message,$trystr) = + &get_grade_messages($id,"$prefix",$target,$status); + if (!exists($Apache::lonhomework::history{"$prefix.tries"})) { + undef($trystr); + } + + if ($previousmsg eq '') { $previousmsg=''; } + if ($trystr eq '') { $trystr = ''; } + + $output.=''; + $output.=$message.$previousmsg.$trystr; + + foreach my $resid (@Apache::inputtags::response) { + my $prefix = $prefix.".$resid"; + if (exists($Apache::lonhomework::history{"$prefix.submission"})) { + my $submission = + $Apache::inputtags::submission_display{"$prefix.submission"}; + if (!defined($submission)) { + $submission = + $Apache::lonhomework::history{"$prefix.submission"}; + } + $output.=''.$submission.''; + } else { + $output.=''; + } + } + $output.=''; + } + return if ($output eq ''); + + $output =''.$output.'
'; + #return $output; + $output=~s/\\/\\\\/g; + $output=~s/\'/\\\'/g; + $output=~s/\s+/ /g; + my $windowopen=&Apache::lonhtmlcommon::javascript_docopen(); + my $start_page = + &Apache::loncommon::start_page('Previous Tries', undef, + {'only_body' => 1, + 'bgcolor' => '#FFFFFF', + 'js_ready' => 1,}); + my $end_page = + &Apache::loncommon::end_page({'js_ready' => 1,}); + + my $result ="".&mt("Previous Tries")."
"; + #use Data::Dumper; + #&Apache::lonnet::logthis(&Dumper(\%Apache::inputtags::submission_display)); + return $result; +} + 1; __END__