version 1.60, 2002/11/11 15:58:51
|
version 1.76, 2003/04/24 15:49:46
|
Line 141 ENDTABLE
|
Line 141 ENDTABLE
|
$result.=')">'; |
$result.=')">'; |
} # else nothing changed so just use the default mechanism |
} # else nothing changed so just use the default mechanism |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { |
$result .= ' \begin{enumerate} '; |
$result .= ' \begin{enumerate} '; |
} |
} |
return $result; |
return $result; |
Line 185 sub end_foilgroup {
|
Line 185 sub end_foilgroup {
|
my $wrong=0; |
my $wrong=0; |
my $ignored=0; |
my $ignored=0; |
foreach $name (@whichopt) { |
foreach $name (@whichopt) { |
my $response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1'].":$temp"}; |
my $response=&Apache::response::getresponse($temp); |
|
if ($ENV{'form.submitted'} eq 'scantron') { |
|
$response = $opt[$response]; |
|
} |
$responsehash{$name}=$response; |
$responsehash{$name}=$response; |
if ( $response =~ /[^\s]/) { |
if ( $response =~ /[^\s]/) { |
my $value=$Apache::response::foilgroup{$name.'.value'}; |
my $value=$Apache::response::foilgroup{$name.'.value'}; |
Line 207 sub end_foilgroup {
|
Line 210 sub end_foilgroup {
|
my %previous=&Apache::response::check_for_previous($responsestr, |
my %previous=&Apache::response::check_for_previous($responsestr, |
$part,$id); |
$part,$id); |
&Apache::lonxml::debug("Got $right right and $wrong wrong, and $ignored were ignored"); |
&Apache::lonxml::debug("Got $right right and $wrong wrong, and $ignored were ignored"); |
my $ad; |
|
if ($wrong==0 && $ignored==0) { |
|
$ad='EXACT_ANS'; |
|
} elsif ($wrong==0 && $right==0) { |
|
#nothing submitted |
|
} else { |
|
if ($ignored==0) { |
|
$ad='INCORRECT'; |
|
} else { |
|
$ad='MISSING_ANSWER'; |
|
} |
|
} |
|
$Apache::lonhomework::results{"resource.$part.$id.submission"}= |
$Apache::lonhomework::results{"resource.$part.$id.submission"}= |
$responsestr; |
$responsestr; |
$Apache::lonhomework::results{"resource.$part.$id.submissiongrading"}=$gradestr; |
$Apache::lonhomework::results{"resource.$part.$id.submissiongrading"}=$gradestr; |
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}= |
|
$ad; |
if (!$Apache::lonhomework::scantronmode) { |
&Apache::response::handle_previous(\%previous,$ad); |
my $ad; |
|
if ($wrong==0 && $ignored==0) { |
|
$ad='EXACT_ANS'; |
|
} elsif ($wrong==0 && $right==0) { |
|
#nothing submitted |
|
} else { |
|
if ($ignored==0) { |
|
$ad='INCORRECT'; |
|
} else { |
|
$ad='MISSING_ANSWER'; |
|
} |
|
} |
|
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad; |
|
&Apache::response::handle_previous(\%previous,$ad); |
|
} else { |
|
my $ad; |
|
if ($wrong==0 && $right==0) { |
|
#nothing submitted |
|
} else { |
|
$ad='ASSIGNED_SCORE'; |
|
} |
|
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad; |
|
$Apache::lonhomework::results{"resource.$part.$id.awarded"}= |
|
$right/(scalar(@whichopt)); |
|
$Apache::lonhomework::results{"resource.$part.$id.numfoils"}= |
|
scalar(@whichopt); |
|
} |
} |
} |
} |
} |
|
&Apache::lonxml::increment_counter(&getfoilcounts($max)); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::end_table(); |
$result.=&Apache::edit::end_table(); |
} |
} |
if ($target eq 'tex') {$result .= '\end{enumerate}';} |
if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { |
|
$result .= '\end{enumerate}'; |
|
} |
return $result; |
return $result; |
} |
} |
|
|
Line 248 sub whichfoils {
|
Line 268 sub whichfoils {
|
my ($max,$randomize)=@_; |
my ($max,$randomize)=@_; |
$max = &getfoilcounts($max); |
$max = &getfoilcounts($max); |
&Apache::lonxml::debug("randomize $randomize"); |
&Apache::lonxml::debug("randomize $randomize"); |
|
if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;} |
my @names = @{ $Apache::response::foilgroup{'names'} }; |
my @names = @{ $Apache::response::foilgroup{'names'} }; |
my @whichopt =(); |
my @whichopt =(); |
my (%top,@toplist,%bottom,@bottomlist); |
my (%top,@toplist,%bottom,@bottomlist); |
Line 294 sub whichfoils {
|
Line 315 sub whichfoils {
|
|
|
sub displayanswers { |
sub displayanswers { |
my ($max,$randomize,@opt)=@_; |
my ($max,$randomize,@opt)=@_; |
|
if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;} |
my @names = @{ $Apache::response::foilgroup{'names'} }; |
my @names = @{ $Apache::response::foilgroup{'names'} }; |
my @whichopt = &whichfoils($max,$randomize); |
my @whichopt = &whichfoils($max,$randomize); |
my $result=&Apache::response::answer_header('optionresponse'); |
my $result=&Apache::response::answer_header('optionresponse'); |
Line 307 sub displayanswers {
|
Line 329 sub displayanswers {
|
|
|
sub displayfoils { |
sub displayfoils { |
my ($target,$max,$randomize,@opt)=@_; |
my ($target,$max,$randomize,@opt)=@_; |
|
if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;} |
my @names = @{ $Apache::response::foilgroup{'names'} }; |
my @names = @{ $Apache::response::foilgroup{'names'} }; |
my @truelist; |
my @truelist; |
my @falselist; |
my @falselist; |
my $result; |
my $result; |
my $name; |
my $name; |
my $displayoptionintex=0; |
my $displayoptionintex=0; |
my @alphabet = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', |
my @alphabet = ('A'..'Z'); |
'Q','R','S','T','U','V','W','X','Y','Z'); |
|
my @whichopt = &whichfoils($max,$randomize); |
my @whichopt = &whichfoils($max,$randomize); |
my $part=$Apache::inputtags::part; |
my $part=$Apache::inputtags::part; |
my $id=$Apache::inputtags::response[-1]; |
my $id=$Apache::inputtags::response[-1]; |
if (($Apache::lonhomework::history{"resource.$part.solved"} =~ /^correct/) || ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER')) { |
my $break; |
my $temp=1; #### |
my $solved=$Apache::lonhomework::history{"resource.$part.solved"}; |
|
my $status=$Apache::inputtags::status[-1]; |
|
if ( |
|
($target ne 'tex') && |
|
(($solved =~ /^correct/) || ($status eq 'SHOW_ANSWER')) ) { |
foreach $name (@whichopt) { |
foreach $name (@whichopt) { |
if ($target eq 'web') { |
my $text=$Apache::response::foilgroup{$name.'.text'}; |
$result.="<br />"; |
if ($text!~/^\s*$/) { |
|
if ($target eq 'tex') { |
|
$break='\vskip 0 mm '; |
|
} elsif ($target eq 'web') { |
|
$break='<br />'; |
|
} |
|
} |
|
$result.=$break; |
|
if ($target eq 'web') { |
|
my $value=$Apache::response::foilgroup{$name.'.value'}; |
|
if (!($text=~s|<drawoptionlist\s*/>|$value|)) { |
|
if ($text=~/^\s*$/) { |
|
$text=$value.$text; |
|
} else { |
|
$text=$value.': '.$text; |
|
} |
|
} |
|
$result.=$text."\n"; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$result.='\vskip 0 mm '; |
|
} |
|
if ($target ne 'tex') { |
|
my $text=$Apache::response::foilgroup{$name.'.text'}; |
|
my $value=$Apache::response::foilgroup{$name.'.value'}; |
|
if (!($text=~s|<drawoptionlist\s*/>|$value|)) { |
|
$text=$value.': '.$text; |
|
} |
|
$result.=$text."\n"; |
|
} else { |
|
$Apache::response::foilgroup{$name.'.text'}=~s/\\item//; |
$Apache::response::foilgroup{$name.'.text'}=~s/\\item//; |
$result .='\item \textit{'.$Apache::response::foilgroup{$name.'.value'}.'}'. |
$result .='\item \textit{'.$Apache::response::foilgroup{$name.'.value'}.'}'. |
":".$Apache::response::foilgroup{$name.'.text'}."\n"; |
":".$Apache::response::foilgroup{$name.'.text'}."\n"; |
Line 345 sub displayfoils {
|
Line 378 sub displayfoils {
|
$result.=&bubbles(\@alphabet,\@opt); |
$result.=&bubbles(\@alphabet,\@opt); |
} |
} |
} |
} |
$temp++; |
|
} |
} |
} else { |
} else { |
my $temp=1; |
my $temp=1; |
my %lastresponse=&Apache::lonnet::str2hash($Apache::lonhomework::history{"resource.$part.$id.submission"}); |
my %lastresponse=&Apache::lonnet::str2hash($Apache::lonhomework::history{"resource.$part.$id.submission"}); |
foreach $name (@whichopt) { |
foreach $name (@whichopt) { |
|
my $text=$Apache::response::foilgroup{$name.'.text'}; |
|
if ($text!~/^\s*$/) { |
|
if ($target eq 'tex') { |
|
$break='\vskip 0 mm '; |
|
} elsif ($target eq 'web') { |
|
$break='<br />'; |
|
} |
|
} |
my $lastopt=$lastresponse{$name}; |
my $lastopt=$lastresponse{$name}; |
my $optionlist="<option></option>\n"; |
my $optionlist="<option></option>\n"; |
my $option; |
my $option; |
Line 362 sub displayfoils {
|
Line 402 sub displayfoils {
|
} |
} |
} |
} |
if ($target ne 'tex') { |
if ($target ne 'tex') { |
$optionlist='<select name="HWVAL_'. |
if ($Apache::lonhomework::type ne 'exam') { |
|
$optionlist='<select name="HWVAL_'. |
$Apache::inputtags::response['-1'].':'.$temp.'">'. |
$Apache::inputtags::response['-1'].':'.$temp.'">'. |
$optionlist."</select>\n"; |
$optionlist."</select>\n"; |
|
} |
my $text=$Apache::response::foilgroup{$name.'.text'}; |
my $text=$Apache::response::foilgroup{$name.'.text'}; |
if (!($text=~s|<drawoptionlist\s*/>|$optionlist|)) { |
if (!($text=~s|<drawoptionlist\s*/>|$optionlist|) && $Apache::lonhomework::type ne 'exam') { |
$text=$optionlist.$text; |
$text=$optionlist.$text; |
} |
} |
$result.="<br />".$text."\n"; |
$result.=$break.$text."\n"; |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
$result.=&webbubbles(\@opt,\@alphabet); |
$result.=&webbubbles(\@opt,\@alphabet,$temp); |
} |
} |
$temp++; |
$temp++; |
} else { |
} else { |
Line 380 sub displayfoils {
|
Line 422 sub displayfoils {
|
if ($Apache::lonhomework::type eq 'exam') {$texoptionlist='';} #if exam we do not need to show optionlist |
if ($Apache::lonhomework::type eq 'exam') {$texoptionlist='';} #if exam we do not need to show optionlist |
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
$Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/; |
$Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\vskip 2 mm/; |
} |
} |
if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) { |
if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) { |
$texoptionlist = &texoptionlist_correction($texoptionlist); |
$Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |; |
$Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>|$texoptionlist|; |
|
$result.= $Apache::response::foilgroup{$name.'.text'}; |
|
} else { |
|
$result.= $texoptionlist.$Apache::response::foilgroup{$name.'.text'}; |
|
} |
} |
|
$result.= $texoptionlist.$Apache::response::foilgroup{$name.'.text'}; |
} else { |
} else { |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
$result.= $texoptionlist.'\vspace*{-2 mm}\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'}; |
$result.= $texoptionlist.' '.$Apache::response::foilgroup{$name.'.text'}; |
} else { |
} else { |
$result.= $texoptionlist.'\vspace*{-2 mm}\item '.$Apache::response::foilgroup{$name.'.text'}; |
$result.= $texoptionlist.'\vspace*{-2 mm}\item '.$Apache::response::foilgroup{$name.'.text'}; |
} |
} |
} |
} |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
$result.=&bubbles(\@alphabet,\@opt); |
$result.='\vskip -2 mm\parbox{\textwidth}{\begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]\parbox{\textwidth - 5 mm}{'.&bubbles(\@alphabet,\@opt).'}\end{enumerate}} \vskip -9 mm \strut '; |
} |
} |
$displayoptionintex=1; |
$displayoptionintex=1; |
} else { |
} else { |
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
$Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/; |
$Apache::response::foilgroup{$name.'.text'}=~s/\\item//; |
} |
} |
if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) { |
if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) { |
$texoptionlist = &texoptionlist_correction($texoptionlist); |
$Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |; |
$Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>|$texoptionlist|; |
|
} |
} |
$result.= $Apache::response::foilgroup{$name.'.text'}; |
$result.= $Apache::response::foilgroup{$name.'.text'}; |
} else { |
} else { |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
$result.= '\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'}; |
$result.= ' '.$Apache::response::foilgroup{$name.'.text'}; |
} else { |
} else { |
$result.= '\item '.$Apache::response::foilgroup{$name.'.text'}; |
$result.= '\item '.$Apache::response::foilgroup{$name.'.text'}; |
} |
} |
} |
} |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
$result.=&bubbles(\@alphabet,\@opt); |
$result.='\vskip -2 mm \parbox{\textwidth}{\begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]\parbox{\textwidth - 5 mm}{'.&bubbles(\@alphabet,\@opt).'}\end{enumerate}} \vskip -9 mm \strut '; |
} |
} |
} |
} |
} |
} |
} |
} |
} |
|
if ($target ne 'tex') { |
|
return $result."<br />"; |
|
} |
} |
else { |
if ($target ne 'tex') { |
|
return $result.$break; |
|
} else { |
return $result; |
return $result; |
} |
} |
} |
} |
Line 444 sub optionlist_correction {
|
Line 481 sub optionlist_correction {
|
$texoptionlist =~ s/>/\$>\$/g; |
$texoptionlist =~ s/>/\$>\$/g; |
$texoptionlist =~ s/</\$<\$/g; |
$texoptionlist =~ s/</\$<\$/g; |
$texoptionlist =~ s/=/\$=\$/g; |
$texoptionlist =~ s/=/\$=\$/g; |
return $texoptionlist; |
$texoptionlist =~ s/\^(\d+)/<m>\$$1\$<\/m>/g; |
} |
|
|
|
|
|
sub texoptionlist_correction { |
|
my $texoptionlist = shift; |
|
$texoptionlist =~ s/\\item \[\] Possible answers are:\s*/\\fbox\{/; |
|
$texoptionlist =~ s/\.$/}/; |
|
return $texoptionlist; |
return $texoptionlist; |
} |
} |
|
|
|
|
sub webbubbles { |
sub webbubbles { |
|
|
my ($ropt,$ralphabet)=@_; |
my ($ropt,$ralphabet,$temp)=@_; |
my @opt=@$ropt; |
my @opt=@$ropt; |
my @alphabet=@$ralphabet; |
my @alphabet=@$ralphabet; |
my $result=''; |
my $result=''; |
my $number_of_bubbles = $#opt + 1; |
my $number_of_bubbles = $#opt + 1; |
$result.= '<table border="1"><tr>'; |
$result.= '<table border="1"><tr>'; |
for (my $ind=0;$ind<$number_of_bubbles;$ind++) { |
for (my $ind=0;$ind<$number_of_bubbles;$ind++) { |
$result.='<td>'.$alphabet[$ind].': '.$opt[$ind].'</td>'; |
$result.='<td><input type="radio" name="HWVAL_'.$Apache::inputtags::response['-1'].':'.$temp. |
|
'" value='.$opt[$ind].'>'.$alphabet[$ind].': '.$opt[$ind].'</td>'; |
} |
} |
$result.='</tr></table>'; |
$result.='</tr></table>'; |
return $result; |
return $result; |
Line 494 sub bubbles {
|
Line 525 sub bubbles {
|
} |
} |
|
|
} |
} |
&Apache::lonxml::increment_counter(); |
|
return $result; |
return $result; |
} |
} |
|
|
Line 607 sub end_foil {
|
Line 637 sub end_foil {
|
my $result = ''; |
my $result = ''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
$text=&Apache::lonxml::endredirection; |
$text=&Apache::lonxml::endredirection; |
if ($target eq 'tex') { $text = '\vspace*{-2 mm}\item '.$text; } |
if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { $text = '\vspace*{-2 mm}\item '.$text; } |
} |
} |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' |
|| $target eq 'tex' || $target eq 'analyze') { |
|| $target eq 'tex' || $target eq 'analyze') { |
Line 622 sub end_foil {
|
Line 652 sub end_foil {
|
&& !&Apache::response::showallfoils() ) { |
&& !&Apache::response::showallfoils() ) { |
push @{ $Apache::response::conceptgroup{'names'} }, $name; |
push @{ $Apache::response::conceptgroup{'names'} }, $name; |
$Apache::response::conceptgroup{"$name.value"} = $value; |
$Apache::response::conceptgroup{"$name.value"} = $value; |
$Apache::response::conceptgroup{"$name.text"} = $text; |
if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') { |
|
$Apache::response::conceptgroup{"$name.text"} = '\vskip 4 mm $\triangleright$ '.$text; |
|
} else { |
|
if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') { |
|
$Apache::response::conceptgroup{"$name.text"} = ' $\triangleright$ '.$text; |
|
} else { |
|
$Apache::response::conceptgroup{"$name.text"} = $text; |
|
} |
|
} |
$Apache::response::conceptgroup{"$name.location"} = $location; |
$Apache::response::conceptgroup{"$name.location"} = $location; |
} else { |
} else { |
push @{ $Apache::response::foilgroup{'names'} }, $name; |
push @{ $Apache::response::foilgroup{'names'} }, $name; |
$Apache::response::foilgroup{"$name.value"} = $value; |
$Apache::response::foilgroup{"$name.value"} = $value; |
$Apache::response::foilgroup{"$name.text"} = $text; |
if ($Apache::lonhomework::type eq 'exam') { |
|
$Apache::response::foilgroup{"$name.text"} = '\vskip 5 mm $\triangleright$ '.$text; |
|
} else { |
|
if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') { |
|
$Apache::response::foilgroup{"$name.text"} = ' $\triangleright$ '.$text; |
|
} else { |
|
$Apache::response::foilgroup{"$name.text"} = $text; |
|
} |
|
} |
$Apache::response::foilgroup{"$name.location"} = $location; |
$Apache::response::foilgroup{"$name.location"} = $location; |
} |
} |
} |
} |