--- loncom/homework/default_homework.lcpm 2008/03/05 16:06:39 1.127 +++ loncom/homework/default_homework.lcpm 2008/06/12 00:46:52 1.136 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # -# $Id: default_homework.lcpm,v 1.127 2008/03/05 16:06:39 www Exp $ +# $Id: default_homework.lcpm,v 1.136 2008/06/12 00:46:52 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -157,7 +157,7 @@ sub caparesponse_check { #&LONCAPA_INTERNAL_DEBUG(" type is $type "); if ($type eq 'cs' || $type eq 'ci') { - #for string answers make surec all places spaces occur, there is + #for string answers make sure all places spaces occur, there is #really only 1 space, in both the answer and the response $answer=~s/ +/ /g; $response=~s/ +/ /g; @@ -260,13 +260,10 @@ sub caparesponse_check { sub caparesponse_check_list { my $responses=$LONCAPA::CAPAresponse_args{'response'}; -# &LONCAPA_INTERNAL_DEBUG(" answer is ". -# &LONCAPA_INTERNAL_Dumper($LONCAPA::CAPAresponse_answer).":\n"); -# &LONCAPA_INTERNAL_DEBUG(" respons is ". -# &LONCAPA_INTERNAL_Dumper($responses).":\n"); &LONCAPA_INTERNAL_DEBUG("args ".join(':',%LONCAPA::CAPAresponse_args)); my $type = $LONCAPA::CAPAresponse_args{'type'}; - &LONCAPA_INTERNAL_DEBUG("Got type :$type:\n"); + my $answerunit=$LONCAPA::CAPAresponse_args{'unit'}; + &LONCAPA_INTERNAL_DEBUG("Got type :$type: answer unit :$answerunit:\n"); my $num_input_lines = scalar(@{$LONCAPA::CAPAresponse_answer->{'answers'}}); @@ -291,8 +288,6 @@ sub caparesponse_check_list { $responses->[$which]=[$responses->[$which]]; } } -# &LONCAPA_INTERNAL_DEBUG(" parsed response is ". -# &LONCAPA_INTERNAL_Dumper($responses).":\n"); foreach my $which (0..($num_input_lines-1)) { my $answer_size = scalar(@{$LONCAPA::CAPAresponse_answer->{'answers'}[$which]}); @@ -310,20 +305,29 @@ sub caparesponse_check_list { my $unit; if ($type eq '' || $type eq 'float') { #for numerical problems split off the unit - if ( $responses->[0][-1]=~ /(.*[^\s])\s+([^\s]+)/ ) { +# if ( $responses->[0][-1]=~ /(.*[^\s])\s+([^\s]+)/ ) { + if ( $responses->[0][-1]=~ /^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$/ ) { $responses->[0][-1]=$1; - $unit=$2; + $unit=&capa_formula_fix($2); + &LONCAPA_INTERNAL_DEBUG("Found unit :$unit:"); } } &LONCAPA_INTERNAL_DEBUG("Final final response :$responses->[0][-1]:$unit:"); $unit=~s/\s//; - if ($unit ne '') { - foreach my $response (@$responses) { - foreach my $element (@$response) { - $element =~ s/\s//g; - $element .= " $unit"; - } - } + foreach my $response (@$responses) { + foreach my $element (@$response) { + $element =~ s/\s//g; + my $appendunit=$unit; + if ($unit=~/\%/) { + $element=$element/100; + $appendunit=~s/\%//; + } + if (($element==0) && ($unit!~/\w/) && ($answerunit=~/\w/)) { + $appendunit=$answerunit; + } + $element .= " $appendunit"; + &LONCAPA_INTERNAL_DEBUG("Made response element :$element:"); + } } foreach my $thisanswer (@{ $LONCAPA::CAPAresponse_answer->{'answers'} }) { @@ -1020,40 +1024,57 @@ sub sec { return $sec; } +sub submission { + my ($partid,$responseid,$subnumber)=@_; + my $sub=''; + if ($subnumber) { $sub=$subnumber.':'; } + return &EXT('user.resource.'.$sub.'resource.'.$partid.'.'.$responseid.'.submission'); +} + +sub currentpart { + return $external::part; +} + +sub eval_time { + my ($timestamp)=@_; + unless ($timestamp) { return ''; } + return &locallocaltime($timestamp); +} + sub open_date { - my @dc = split(/\s+/,localtime(&EXT('resource.0.opendate'))); - return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969); - my @hm = split(/:/,$dc[3]); - my $ampm = " am"; - if ($hm[0] > 12) { - $hm[0]-=12; - $ampm = " pm"; - } - return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm; -} - -sub due_date { - my @dc = split(/\s+/,localtime(&EXT('resource.0.duedate'))); - return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969); - my @hm = split(/:/,$dc[3]); - my $ampm = " am"; - if ($hm[0] > 12) { - $hm[0]-=12; - $ampm = " pm"; - } - return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm; + my ($partid)=@_; + unless ($partid) { $partid=0; } + return &eval_time(&EXT('resource.'.$partid.'.opendate')); +} + +sub due_date { + my ($partid)=@_; + unless ($partid) { $partid=0; } + return &eval_time(&EXT('resource.'.$partid.'.duedate')); } sub answer_date { - my @dc = split(/\s+/,localtime(&EXT('resource.0.answerdate'))); - return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969); - my @hm = split(/:/,$dc[3]); - my $ampm = " am"; - if ($hm[0] > 12) { - $hm[0]-=12; - $ampm = " pm"; - } - return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm; + my ($partid)=@_; + unless ($partid) { $partid=0; } + return &eval_time(&EXT('resource.'.$partid.'.answerdate')); +} + +sub open_date_epoch { + my ($partid)=@_; + unless ($partid) { $partid=0; } + return &EXT('resource.'.$partid.'.opendate'); +} + +sub due_date_epoch { + my ($partid)=@_; + unless ($partid) { $partid=0; } + return &EXT('resource.'.$partid.'.duedate'); +} + +sub answer_date_epoch { + my ($partid)=@_; + unless ($partid) { $partid=0; } + return &EXT('resource.'.$partid.'.answerdate'); } sub array_moments {