--- loncom/homework/inputtags.pm 2007/03/13 00:21:28 1.218 +++ loncom/homework/inputtags.pm 2008/03/03 19:37:27 1.240 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # input definitons # -# $Id: inputtags.pm,v 1.218 2007/03/13 00:21:28 albertel Exp $ +# $Id: inputtags.pm,v 1.240 2008/03/03 19:37:27 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -31,7 +31,6 @@ use strict; use Apache::loncommon; use Apache::lonlocal; use Apache::lonnet; -use lib '/home/httpd/lib/perl/'; use LONCAPA; @@ -116,8 +115,7 @@ sub check_for_duplicate_ids { sub start_input { my ($parstack,$safeeval)=@_; - my $id = &Apache::lonxml::get_param('id',$parstack,$safeeval); - if ($id eq '') { $id = $Apache::lonxml::curdepth; } + my $id = &Apache::lonxml::get_id($parstack,$safeeval); push (@Apache::inputtags::input,$id); push (@Apache::inputtags::inputlist,$id); return $id; @@ -449,7 +447,7 @@ sub file_selector { $result.='
'.''.&mt('OR:').'
'; } if ($which eq 'portfolioonly' || $which eq 'both') { - $result.=$extratext.''. + $result.=$extratext.''. &mt('Select Portfolio Files').'
'. ''. '
'; @@ -541,8 +539,29 @@ sub valid_award { $i=0; my %rev_awards = map { ($_,$i++) } @awards; +sub awarddetail_to_awarded { + my ($awarddetail) = @_; + if ($awarddetail eq 'EXACT_ANS' + || $awarddetail eq 'APPROX_ANS') { + return 1; + } + return 0; +} + +sub hide_award { + my ($award) = @_; + if (&Apache::lonhomework::show_no_problem_status()) { + return 1; + } + if ($award =~ + /^(?:EXACT_ANS|APPROX_ANS|SUBMITTED|ASSIGNED_SCORE|INCORRECT)/) { + return 1; + } + return 0; +} + sub finalizeawards { - my ($awardref,$msgref,$nameref,$reverse)=@_; + my ($awardref,$msgref,$nameref,$reverse,$final_scantron)=@_; my $result; if ($#$awardref == -1) { $result = "NO_RESPONSE"; } if ($result eq '' ) { @@ -553,10 +572,29 @@ sub finalizeawards { $blankcount++; } } - if ($blankcount == ($#$awardref + 1)) { $result = 'NO_RESPONSE'; } + if ($blankcount == ($#$awardref + 1)) { + return ('NO_RESPONSE'); + } } - if (defined($result)) { return ($result); } + if (!$final_scantron && defined($result)) { return ($result); } + # if in scantron mode, if the award for any response is + # assigned score, then the part gets an assigned score + if ($final_scantron + && grep {$_ eq 'ASSIGNED_SCORE'} (@$awardref)) { + return ('ASSIGNED_SCORE'); + } + + # if in scantron mode, if the award for any response is + # correct and there are non-correct responses, + # then the part gets an assigned score + if ($final_scantron + && (grep { $_ eq 'EXACT_ANS' || + $_ eq 'APPROX_ANS' } (@$awardref)) + && (grep { $_ ne 'EXACT_ANS' && + $_ ne 'APPROX_ANS' } (@$awardref))) { + return ('ASSIGNED_SCORE'); + } # these awards are ordered from most important error through best correct my $awards = (!$reverse) ? \%fwd_awards : \%rev_awards ; @@ -570,6 +608,7 @@ sub finalizeawards { } $j++; } + if (defined($which)) { if (ref($nameref)) { return ($$awardref[$which],$$msgref[$which],$$nameref[$which]); @@ -586,19 +625,19 @@ sub decideoutput { my $message=''; my $button=0; my $previousmsg; - my $bgcolor='orange'; + my $css_class='orange'; my $added_computer_text=0; - my %possiblecolors = - ( 'correct' => '#aaffaa', - 'charged_try' => '#ffaaaa', - 'not_charged_try' => '#ffffaa', - 'no_grade' => '#ffffaa', - 'no_message' => '#ffffff', + my %possible_class = + ( 'correct' => 'LC_answer_correct', + 'charged_try' => 'LC_answer_charged_try', + 'not_charged_try' => 'LC_answer_not_charged_try', + 'no_grade' => 'LC_answer_no_grade', + 'no_message' => 'LC_no_message', ); my $part = $Apache::inputtags::part; - my $handgrade = - ('yes' eq lc(&Apache::lonnet::EXT("resource.$part.handgrade"))); + my $tohandgrade = &Apache::lonnet::EXT("resource.$part.handgrade"); + my $handgrade = ('yes' eq lc($tohandgrade)); my $computer = ($handgrade)? '' : " ".&mt("Computer's answer now shown above."); @@ -607,14 +646,14 @@ sub decideoutput { if ($previous) { $previousmsg=&mt('You have entered that answer before'); } if ($solved =~ /^correct/) { - $bgcolor=$possiblecolors{'correct'}; + $css_class=$possible_class{'correct'}; $message=&mt('You are correct.'); if ($awarded < 1 && $awarded > 0) { $message=&mt('You are partially correct.'); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; } elsif ($awarded < 1) { $message=&mt('Incorrect.'); - $bgcolor=$possiblecolors{'charged_try'}; + $css_class=$possible_class{'charged_try'}; } if ($env{'request.filename'} =~ m|/res/lib/templates/examupload.problem$|) { @@ -628,14 +667,18 @@ sub decideoutput { $message.= $computer; } $added_computer_text=1; - my ($symb) = &Apache::lonnet::whichuser(); - if ((!$env{'course.'. - $env{'request.course.id'}. - '.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'):''); + if ($awarded > 0) { + my ($symb) = &Apache::lonnet::whichuser(); + if (($symb ne '') + && + ($env{'course.'.$env{'request.course.id'}. + '.disable_receipt_display'} ne 'yes') && + ($Apache::lonhomework::type ne 'practice')) { + $message.=(($target eq 'web')?'
':' '). + &mt('Your receipt is [_1]', + (&Apache::lonnet::receipt($Apache::inputtags::part). + (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):''))); + } } } $button=0; @@ -646,13 +689,13 @@ sub decideoutput { } else { $message = "".&mt('You are excused from the problem.').""; } - $bgcolor=$possiblecolors{'charged_try'}; + $css_class=$possible_class{'charged_try'}; $button=0; $previousmsg=''; } elsif ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS' ) { if ($solved =~ /^incorrect/ || $solved eq '') { $message = &mt("Incorrect")."."; - $bgcolor=$possiblecolors{'charged_try'}; + $css_class=$possible_class{'charged_try'}; $button=1; } else { if ($target eq 'tex') { @@ -662,112 +705,115 @@ sub decideoutput { $message.= $computer; } $added_computer_text=1; - unless ($env{'course.'. + if ($awarded > 0 + && $env{'course.'. $env{'request.course.id'}. - '.disable_receipt_display'} eq 'yes') { + '.disable_receipt_display'} ne 'yes') { $message.=(($target eq 'web')?'
':' '). - 'Your receipt is '.&Apache::lonnet::receipt($Apache::inputtags::part). - (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):''); + &mt('Your receipt is [_1]', + (&Apache::lonnet::receipt($Apache::inputtags::part). + (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):''))); } - $bgcolor=$possiblecolors{'correct'}; + $css_class=$possible_class{'correct'}; $button=0; $previousmsg=''; } } elsif ($award eq 'NO_RESPONSE') { $message = ''; - $bgcolor=$possiblecolors{'no_feedback'}; + $css_class=$possible_class{'no_feedback'}; $button=1; } elsif ($award eq 'EXTRA_ANSWER') { $message = &mt('Some extra items were submitted.'); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button = 1; } elsif ($award eq 'MISSING_ANSWER') { $message = &mt('Some items were not submitted.'); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button = 1; } elsif ($award eq 'ERROR') { $message = &mt('An error occured while grading your answer.'); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button = 1; } elsif ($award eq 'TOO_LONG') { $message = &mt("The submitted answer was too long."); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'WANTED_NUMERIC') { $message = &mt("This question expects a numeric answer."); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'MISORDERED_RANK') { $message = &mt('You have provided an invalid ranking'); if ($target ne 'tex') { - $message.=', '.&mt('please refer to').' '.&Apache::loncommon::help_open_topic('Ranking_Problems','help on ranking problems'); + $message.=', '.&mt('please refer to').' '.&Apache::loncommon::help_open_topic('Ranking_Problems',&mt('help on ranking problems')); } - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'INVALID_FILETYPE') { $message = &mt('Submission won\'t be graded. The type of file submitted is not allowed.'); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'SIG_FAIL') { my ($used,$min,$max)=split(':',$awardmsg); my $word = ($used < $min) ? 'more' : 'fewer'; $message = &mt("Submission not graded. Use $word digits.",$used); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_INVALID_INSTRUCTOR') { $message = &mt('Error in instructor specifed unit. This error has been reported to the instructor.', $awardmsg); if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Physical_Units');} - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_INVALID_STUDENT') { $message = &mt('Unable to interpret units. Computer reads units as "[_1]".',&markup_unit($awardmsg,$target)); if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Physical_Units');} - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_FAIL' || $award eq 'UNIT_IRRECONCIBLE') { $message = &mt('Incompatible units. No conversion found between "[_1]" and the required units.',&markup_unit($awardmsg,$target)); if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Physical_Units');} - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_NOTNEEDED') { $message = &mt('Only a number required. Computer reads units of "[_1]".',&markup_unit($awardmsg,$target)); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'NO_UNIT') { $message = &mt("Units required").'.'; if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Physical_Units')}; - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'COMMA_FAIL') { $message = &mt("Proper comma separation is required").'.'; - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'BAD_FORMULA') { - $message = &mt("Unable to understand formula"); - $bgcolor=$possiblecolors{'not_charged_try'}; + $message = &mt("Unable to understand formula").'.'; + if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Formula_Answers')}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'INCORRECT') { $message = &mt("Incorrect").'.'; - $bgcolor=$possiblecolors{'charged_try'}; + $css_class=$possible_class{'charged_try'}; $button=1; } elsif ($award eq 'SUBMITTED') { $message = &mt("Your submission has been recorded."); - $bgcolor=$possiblecolors{'no_grade'}; + $css_class=$possible_class{'no_grade'}; $button=1; } elsif ($award eq 'DRAFT') { $message = &mt("A draft copy has been saved."); - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; $button=1; } elsif ($award eq 'ASSIGNED_SCORE') { $message = &mt("A score has been assigned."); - $bgcolor=$possiblecolors{'correct'}; + $css_class=$possible_class{'correct'}; $button=0; } elsif ($award eq '') { if ($handgrade && $Apache::inputtags::status[-1] eq 'SHOW_ANSWER') { $message = &mt("Nothing submitted."); - $bgcolor=$possiblecolors{'charged_try'}; + $css_class=$possible_class{'charged_try'}; } else { - $bgcolor=$possiblecolors{'not_charged_try'}; + $css_class=$possible_class{'not_charged_try'}; } $button=1; } else { @@ -788,10 +834,11 @@ sub decideoutput { } } - if (lc($Apache::lonhomework::problemstatus) eq 'no' && - $Apache::inputtags::status[-1] ne 'SHOW_ANSWER') { + if (&Apache::lonhomework::hide_problem_status() + && $Apache::inputtags::status[-1] ne 'SHOW_ANSWER' + && &hide_award($award)) { $message = &mt("Answer Submitted: Your final submission will be graded after the due date."); - $bgcolor=$possiblecolors{'no_grade'}; + $css_class=$possible_class{'no_grade'}; $button=1; } if ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER' && @@ -799,7 +846,11 @@ sub decideoutput { $message.= $computer; $added_computer_text=1; } - return ($button,$bgcolor,$message,$previousmsg); + if ($Apache::lonhomework::type eq 'practice') { + $message.='
'.&mt('Submissions to practice problems are not permanently recorded.'); + } + + return ($button,$css_class,$message,$previousmsg); } sub markup_unit { @@ -852,8 +903,9 @@ sub setgradedata { $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award; return ''; } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} !~ - /^correct/ || $Apache::lonhomework::scantronmode || - lc($Apache::lonhomework::problemstatus) eq 'no') { + /^correct/ + || $Apache::lonhomework::scantronmode + || &Apache::lonhomework::hide_problem_status() ) { # the student doesn't already have it correct, # or we are in a mode (scantron orno problem status) where a correct # can become incorrect @@ -875,8 +927,13 @@ sub setgradedata { my $numawards=scalar(@Apache::inputtags::response); $Apache::lonhomework::results{"resource.$id.awarded"} = 0; foreach my $res (@Apache::inputtags::response) { - $Apache::lonhomework::results{"resource.$id.awarded"}+= - $Apache::lonhomework::results{"resource.$id.$res.awarded"}; + if (defined($Apache::lonhomework::results{"resource.$id.$res.awarded"})) { + $Apache::lonhomework::results{"resource.$id.awarded"}+= + $Apache::lonhomework::results{"resource.$id.$res.awarded"}; + } else { + $Apache::lonhomework::results{"resource.$id.awarded"}+= + &awarddetail_to_awarded($Apache::lonhomework::results{"resource.$id.$res.awarddetail"}); + } } if ($numawards > 0) { $Apache::lonhomework::results{"resource.$id.awarded"}/= @@ -891,8 +948,8 @@ sub setgradedata { } elsif ( $award eq 'INCORRECT' ) { $Apache::lonhomework::results{"resource.$id.tries"} = $Apache::lonhomework::history{"resource.$id.tries"} + 1; - if (lc($Apache::lonhomework::problemstatus) eq 'no' || - $Apache::lonhomework::scantronmode) { + if (&Apache::lonhomework::hide_problem_status() + || $Apache::lonhomework::scantronmode) { $Apache::lonhomework::results{"resource.$id.awarded"} = 0; } $Apache::lonhomework::results{"resource.$id.solved"} = @@ -911,12 +968,18 @@ sub setgradedata { } else { $Apache::lonhomework::results{"resource.$id.solved"} = 'incorrect_attempted'; - if (lc($Apache::lonhomework::problemstatus) eq 'no' || - $Apache::lonhomework::scantronmode) { + if (&Apache::lonhomework::show_no_problem_status() + || $Apache::lonhomework::scantronmode) { $Apache::lonhomework::results{"resource.$id.tries"} = $Apache::lonhomework::history{"resource.$id.tries"} + 1; $Apache::lonhomework::results{"resource.$id.awarded"} = 0; } + + if (&Apache::lonhomework::show_some_problem_status()) { + # clear out the awarded if they had gotten it wrong/right + # and are now in an error mode + $Apache::lonhomework::results{"resource.$id.awarded"} = ''; + } } if (defined($msg)) { $Apache::lonhomework::results{"resource.$id.awardmsg"} = $msg; @@ -930,7 +993,7 @@ sub setgradedata { # check if this was a previous submission if it was delete the # unneeded data and update the previously_used attribute if ( $previously_used eq 'PREVIOUSLY_USED') { - if (lc($Apache::lonhomework::problemstatus) ne 'no') { + if (&Apache::lonhomework::show_problem_status()) { delete($Apache::lonhomework::results{"resource.$id.tries"}); $Apache::lonhomework::results{"resource.$id.previous"} = '1'; } @@ -957,6 +1020,42 @@ sub setgradedata { } } +sub find_which_previous { + my ($version) = @_; + my $part = $Apache::inputtags::part; + my (@previous_version); + foreach my $resp (@Apache::inputtags::response) { + my $key = "$version:resource.$part.$resp.submission"; + my $submission = $Apache::lonhomework::history{$key}; + my %previous = &Apache::response::check_for_previous($submission, + $part,$resp, + $version); + push(@previous_version,$previous{'version'}); + } + return &previous_match(\@previous_version, + scalar(@Apache::inputtags::response)); +} + +sub previous_match { + my ($previous_array,$count) = @_; + my $match = 0; + my @matches; + foreach my $versionar (@$previous_array) { + foreach my $version (@$versionar) { + $matches[$version]++; + } + } + my $which=0; + foreach my $elem (@matches) { + if ($elem eq $count) { + $match=1; + last; + } + $which++; + } + return ($match,$which); +} + sub grade { my ($target) = @_; my $id = $Apache::inputtags::part; @@ -972,17 +1071,15 @@ sub grade { &Apache::lonxml::debug("got message $value from $response for $id"); push (@msgs,$value); } - my ($finalaward,$msg) = &finalizeawards(\@awards,\@msgs); + my ($finalaward,$msg) = + &finalizeawards(\@awards,\@msgs,undef,undef, + $Apache::lonhomework::scantronmode); my $previously_used; if ( $#Apache::inputtags::previous eq $#awards ) { - my $match=0; - my @matches; - foreach my $versionar (@Apache::inputtags::previous_version) { - foreach my $version (@$versionar) { - $matches[$version]++; - } - } - foreach my $elem (@matches) {if ($elem eq ($#awards+1)) {$match=1;}} + my ($match) = + &previous_match(\@Apache::inputtags::previous_version, + scalar(@Apache::inputtags::response)); + if ($match) { $previously_used = 'PREVIOUSLY_LAST'; foreach my $value (@Apache::inputtags::previous) { @@ -1013,15 +1110,15 @@ sub get_grade_messages { &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) = + ($showbutton,my $css_class,$message,$previousmsg) = &decideoutput($award,$awarded,$awardmsg,$solved,$previous, $target); if ($target eq 'tex') { $message='\vskip 2 mm '.$message.' '; } else { - $message="$message"; + $message="$message"; if ($previousmsg) { - $previousmsg="$previousmsg"; + $previousmsg="$previousmsg"; } } } @@ -1062,18 +1159,19 @@ sub get_grade_messages { $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.''; + $latemessage=''.$latemessage.''; } } return ($previousmsg,$latemessage,$message,$trystr,$showbutton); } sub gradestatus { - my ($id,$target) = @_; + my ($id,$target,$no_previous) = @_; my $showbutton = 1; my $message = ''; my $latemessage = ''; @@ -1100,7 +1198,12 @@ sub gradestatus { } if ( $showbutton ) { if ($target ne 'tex') { - $button = ''; + $button = + ''; } } @@ -1112,7 +1215,13 @@ sub gradestatus { if ($target eq 'tex') { return $button.' \vskip 0 mm '.$output.' '; } else { - return ''.$output.'
'.$button.''.&previous_tries($id,$target).'
'; + $output = + ''.$output; + if (!$no_previous) { + $output.=''; + } + $output.= '
'.$button.''.&previous_tries($id,$target).'
'; + return $output; } } } @@ -1121,24 +1230,47 @@ sub previous_tries { my ($id,$target) = @_; my $output; my $status = $Apache::inputtags::status['-1']; - + + my $count; + my %count_lookup; + foreach my $i (1..$Apache::lonhomework::history{'version'}) { my $prefix = $i.":resource.$id"; next if (!exists($Apache::lonhomework::history{"$prefix.award"})); + $count++; + $count_lookup{$i} = $count; + 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; + if ($previousmsg ne '') { + my ($match,$which) = &find_which_previous($i); + $message=$previousmsg; + my $previous = $count_lookup{$which}; + $message =~ s{()}{ as submission \# $previous $1}; + } elsif ($Apache::lonhomework::history{"$prefix.tries"}) { + if (!(&Apache::lonhomework::hide_problem_status() + && $Apache::inputtags::status[-1] ne 'SHOW_ANSWER') + && $Apache::lonhomework::history{"$prefix.solved"} =~/^correct/ + ) { + + my $txt_correct = &mt('Correct'); + $message =~ s{()(.*?)()} + {$1 $txt_correct. $3}s; + } + my $trystr = "(".&mt('Try [_1]',$Apache::lonhomework::history{"$prefix.tries"}).")"; + $message =~ s{()}{ $trystr $1}; + } + my ($class) = ($message =~ m{)}{}; + + + $output.=''; + $output.=''.$count.''; + $output.=$message; foreach my $resid (@Apache::inputtags::response) { my $prefix = $prefix.".$resid"; @@ -1154,29 +1286,36 @@ sub previous_tries { $output.=''; } } - $output.=''; + $output.=&Apache::loncommon::end_data_table_row()."\n"; } return if ($output eq ''); - - $output =''.$output.'
'; + my $headers = + ''.''.&mt('Submission #').''.&mt('Try'). + ''. + &mt('Submitted Answer').''; + $output =''.$headers.$output.'
'; #return $output; - $output=~s/\\/\\\\/g; - $output=~s/\'/\\\'/g; - $output=~s/\s+/ /g; + $output = &Apache::loncommon::js_ready($output); + $output.='
'; + my $windowopen=&Apache::lonhtmlcommon::javascript_docopen(); my $start_page = &Apache::loncommon::start_page('Previous Tries', undef, - {'only_body' => 1, - 'bgcolor' => '#FFFFFF', - 'js_ready' => 1,}); + {'only_body' => 1, + 'bgcolor' => '#FFFFFF', + 'js_ready' => 1, + 'inherit_jsmath' => 1, }); my $end_page = &Apache::loncommon::end_page({'js_ready' => 1,}); - + my $prefix = $env{'form.request.prefix'}; + $prefix =~ tr{.}{_}; + my $function_name = "LONCAPA_previous_tries_".$prefix. + $Apache::lonxml::curdepth.'_'.$env{'form.counter'}; my $result ="".&mt("Previous Tries")."
"; +".&mt("Previous Tries")."
"; #use Data::Dumper; #&Apache::lonnet::logthis(&Dumper(\%Apache::inputtags::submission_display)); return $result;