--- loncom/homework/inputtags.pm 2005/04/07 06:56:21 1.165 +++ loncom/homework/inputtags.pm 2005/11/03 17:44:15 1.178 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # input definitons # -# $Id: inputtags.pm,v 1.165 2005/04/07 06:56:21 albertel Exp $ +# $Id: inputtags.pm,v 1.178 2005/11/03 17:44:15 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,38 +36,54 @@ BEGIN { &Apache::lonxml::register('Apache::inputtags',('hiddenline','textfield','textline')); } +# Initializes a set of global variables used during the parse of the problem. +# +# @Apache::inputtags::input - List of current input ids. +# @Apache::inputtags::inputlist - List of all input ids seen this problem. +# @Apache::inputtags::response - List of all current resopnse ids. +# @Apache::inputtags::responselist - List of all response ids seen this +# problem. +# @Apache::inputtags::hint - List of all hint ids. +# @Apache::inputtags::hintlist - List of all hint ids seen this problem. +# @Apache::inputtags::previous - List describing if specific responseds +# have been used +# @Apache::inputtags::previous_version - Submission responses were used in. +# $Apache::inputtags::part - Current part id (valid only in +# ) +# 0 if not in a part. +# @Apache::inputtags::partlist - List of part ids seen in the current +# +# @Apache::inputtags::status - List of problem statuses. First +# element is the status of the +# the remainder are for individual s. +# %Apache::inputtags::params - Hash of defined parameters for the +# current response. +# @Apache::inputtags::import - List of all ids for thes get +# join()ed and prepended. +# @Apache::inputtags::importlist - List of all import ids seen. +# $Apache::inputtags::response_with_no_part +# - Flag set true if we have seen a response +# that is not inside a +# %Apache::inputtags::answertxt - <*response> tags store correct +# answer strings for display by +# in this hash. sub initialize_inputtags { - # list of current input ids @Apache::inputtags::input=(); - # list of all input ids seen in this problem @Apache::inputtags::inputlist=(); - # list of all current response ids @Apache::inputtags::response=(); - # list of all response ids seen in this problem @Apache::inputtags::responselist=(); - # list of whether or not a specific response was previously used + @Apache::inputtags::hint=(); + @Apache::inputtags::hintlist=(); @Apache::inputtags::previous=(); - # submission it was used in @Apache::inputtags::previous_version=(); - # id of current part, 0 means that no part is current - # (inside only $Apache::inputtags::part=''; - # list of all part ids seen @Apache::inputtags::partlist=(); - # list of problem date statuses, the first element is for - # if there is a second element it is for the current @Apache::inputtags::status=(); - # hash of defined params for the current response %Apache::inputtags::params=(); - # list of all ids, for , these get join()ed and prepended @Apache::inputtags::import=(); - # list of all import ids seen @Apache::inputtags::importlist=(); - # just used to note whether we have seen a response that isn't in a part $Apache::inputtags::response_with_no_part=0; - # storage location so the begin <*response> tag can generate the correct - # answer string for display by the %Apache::inputtags::answertxt=(); } @@ -75,6 +91,7 @@ sub check_for_duplicate_ids { my %check; foreach my $id (@Apache::inputtags::partlist, @Apache::inputtags::responselist, + @Apache::inputtags::hintlist, @Apache::inputtags::importlist) { $check{$id}++; } @@ -235,7 +252,7 @@ sub start_textline { } } else { #right or wrong don't show what was last typed in. - $result=''.$Apache::inputtags::answertxt{$id}.''; + $result=''.$Apache::inputtags::answertxt{$id}.''; #$result=''; } } elsif ($target eq 'edit') { @@ -301,10 +318,15 @@ sub end_hiddenline { # $which -> 'uploadedonly' -> only newly uploaded files # 'portfolioonly' -> only allow files from portfolio # 'both' -> allow files from either location +# $extratext -> additional text to go between the link and the input box # returns a table row sub file_selector { - my ($part,$id,$uploadedfiletypes,$which)=@_; + my ($part,$id,$uploadedfiletypes,$which,$extratext)=@_; if (!$uploadedfiletypes) { return ''; } + + my $jspart=$part; + $jspart=~s/\./_/g; + my $result; $result.=''; @@ -315,12 +337,12 @@ sub file_selector { if ($which eq 'uploadonly' || $which eq 'both') { $result.=&mt('Submit a file: (only one file can be uploaded)'). '

'; + $jspart.'_'.$id.'" />
'; my $uploadedfile= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.uploadedfile"},'<>&"'); if ($uploadedfile) { my $url=$Apache::lonhomework::history{"resource.$part.$id.uploadedurl"}; - push (@Apache::lonxml::extlinks,$url); + &Apache::lonxml::extlink($url); &Apache::lonnet::allowuploaded('/adm/essayresponse',$url); my $icon=&Apache::loncommon::icon($url); my $curfile=''. + $result.=$extratext.''. &mt('Select Portfolio Files').'
'. - ''. + ''. '
'; if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"}=~/[^\s]/){ my @filelist; @@ -397,7 +419,7 @@ sub finalizeawards { } sub decideoutput { - my ($award,$awardmsg,$solved,$previous,$target)=@_; + my ($award,$awarded,$awardmsg,$solved,$previous,$target)=@_; my $message=''; my $button=0; my $previousmsg; @@ -409,16 +431,28 @@ sub decideoutput { 'not_charged_try' => '#ffffaa', 'no_message' => '#fffff', ); + if ($previous) { $previousmsg=&mt('You have entered that answer before'); } if ($solved =~ /^correct/) { - if ($award eq 'ASSIGNED_SCORE') { + $bgcolor=$possiblecolors{'correct'}; + $message=&mt('You are correct.'); + if ($awarded < 1 && $awarded > 0) { + $message=&mt('You are partially correct.'); + $bgcolor=$possiblecolors{'not_charged_try'}; + } elsif ($awarded < 1) { + $message=&mt('Incorrect.'); + $bgcolor=$possiblecolors{'charged_try'}; + } + if ($env{'request.filename'} =~ + m|/res/lib/templates/examupload.problem$|) { $message = &mt("A score has been assigned."); + $added_computer_text=1; } else { if ($target eq 'tex') { - $message = '\textbf{'.&mt('You are correct.').'}'; + $message = '\textbf{'.$message.'}'; } else { - $message = "".&mt('You are correct.').""; + $message = "".$message.""; $message.=" ".&mt("Computer's answer now shown above."); } $added_computer_text=1; @@ -430,7 +464,6 @@ sub decideoutput { (($target eq 'web')?&Apache::loncommon::help_open_topic('Receipt'):''); } } - $bgcolor=$possiblecolors{'correct'}; $button=0; $previousmsg=''; } elsif ($solved =~ /^excused/) { @@ -494,7 +527,7 @@ sub decideoutput { $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'INVALID_FILETYPE') { - $message = &mt('The filetype extension of the file you uploaded is not allowed.'); + $message = &mt('Submission won\'t be graded. The type of file submitted is not allowed.'); $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'SIG_FAIL') { @@ -783,6 +816,7 @@ sub gradestatus { if ( $status ne 'CLOSED' && $status ne 'UNAVAILABLE' && $status ne 'INVALID_ACCESS') { 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"}; @@ -790,7 +824,8 @@ sub gradestatus { if ( $award ne '' || $solved ne '' || $status eq 'SHOW_ANSWER') { &Apache::lonxml::debug('Getting message'); ($showbutton,$bgcolor,$message,$previousmsg) = - &decideoutput($award,$awardmsg,$solved,$previous,$target); + &decideoutput($award,$awarded,$awardmsg,$solved,$previous, + $target); if ($target eq 'tex') { $message='\vskip 2 mm '.$message.' '; } else { 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.