version 1.48, 2002/09/26 21:41:30
|
version 1.61, 2002/11/11 20:13:47
|
Line 42 sub start_optionresponse {
|
Line 42 sub start_optionresponse {
|
&Apache::lonxml::register('Apache::optionresponse',('foilgroup','foil','conceptgroup')); |
&Apache::lonxml::register('Apache::optionresponse',('foilgroup','foil','conceptgroup')); |
push (@Apache::lonxml::namespace,'optionresponse'); |
push (@Apache::lonxml::namespace,'optionresponse'); |
my $id = &Apache::response::start_response($parstack,$safeeval); |
my $id = &Apache::response::start_response($parstack,$safeeval); |
|
%Apache::hint::option=(); |
if ($target eq 'edit') { |
if ($target eq 'edit') { |
$result.=&Apache::edit::start_table($token). |
$result.=&Apache::edit::start_table($token). |
"<tr><td>Multiple Option Response Question</td><td>Delete:". |
"<tr><td>Multiple Option Response Question</td><td>Delete:". |
Line 179 sub end_foilgroup {
|
Line 180 sub end_foilgroup {
|
my @whichopt = &whichfoils($max,$randomize); |
my @whichopt = &whichfoils($max,$randomize); |
my $temp=1;my $name; |
my $temp=1;my $name; |
my %responsehash; |
my %responsehash; |
|
my %grade; |
my $right=0; |
my $right=0; |
my $wrong=0; |
my $wrong=0; |
my $ignored=0; |
my $ignored=0; |
Line 188 sub end_foilgroup {
|
Line 190 sub end_foilgroup {
|
if ( $response =~ /[^\s]/) { |
if ( $response =~ /[^\s]/) { |
my $value=$Apache::response::foilgroup{$name.'.value'}; |
my $value=$Apache::response::foilgroup{$name.'.value'}; |
&Apache::lonxml::debug("submitted a $response for $value<br />\n"); |
&Apache::lonxml::debug("submitted a $response for $value<br />\n"); |
if ($value eq $response) {$right++;} else {$wrong++;} |
if ($value eq $response) { |
|
$grade{$name}='1'; $right++; |
|
} else { |
|
$grade{$name}='0'; $wrong++; |
|
} |
} else { |
} else { |
$ignored++; |
$ignored++; |
} |
} |
Line 197 sub end_foilgroup {
|
Line 203 sub end_foilgroup {
|
my $part=$Apache::inputtags::part; |
my $part=$Apache::inputtags::part; |
my $id = $Apache::inputtags::response['-1']; |
my $id = $Apache::inputtags::response['-1']; |
my $responsestr=&Apache::lonnet::hash2str(%responsehash); |
my $responsestr=&Apache::lonnet::hash2str(%responsehash); |
|
my $gradestr =&Apache::lonnet::hash2str(%grade); |
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"); |
Line 214 sub end_foilgroup {
|
Line 221 sub end_foilgroup {
|
} |
} |
$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.awarddetail"}= |
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}= |
$ad; |
$ad; |
&Apache::response::handle_previous(\%previous,$ad); |
&Apache::response::handle_previous(\%previous,$ad); |
Line 305 sub displayfoils {
|
Line 313 sub displayfoils {
|
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', |
|
'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')) { |
if (($Apache::lonhomework::history{"resource.$part.solved"} =~ /^correct/) || ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER')) { |
|
my $temp=1; #### |
foreach $name (@whichopt) { |
foreach $name (@whichopt) { |
if ($target eq 'web') { |
if ($target eq 'web') { |
$result.="<br />"; |
$result.="<br />"; |
Line 316 sub displayfoils {
|
Line 327 sub displayfoils {
|
$result.='\vskip 0 mm '; |
$result.='\vskip 0 mm '; |
} |
} |
if ($target ne 'tex') { |
if ($target ne 'tex') { |
$result .=$Apache::response::foilgroup{$name.'.value'}. |
my $text=$Apache::response::foilgroup{$name.'.text'}; |
":".$Apache::response::foilgroup{$name.'.text'}."\n"; |
my $value=$Apache::response::foilgroup{$name.'.value'}; |
|
if (!($text=~s|<drawoptionlist\s*/>|$value|)) { |
|
$text=$value.': '.$text; |
|
} |
|
$result.=$text."\n"; |
} else { |
} else { |
$result .='\item '.$Apache::response::foilgroup{$name.'.value'}. |
$Apache::response::foilgroup{$name.'.text'}=~s/\\item//; |
|
$result .='\item \textit{'.$Apache::response::foilgroup{$name.'.value'}.'}'. |
":".$Apache::response::foilgroup{$name.'.text'}."\n"; |
":".$Apache::response::foilgroup{$name.'.text'}."\n"; |
} |
} |
|
if ($Apache::lonhomework::type eq 'exam') { |
|
if ($target ne 'tex') { |
|
$result.=&webbubbles(\@opt,\@alphabet); |
|
} else { |
|
$result.=&bubbles(\@alphabet,\@opt); |
|
} |
|
} |
|
$temp++; |
} |
} |
} else { |
} else { |
my $temp=1; |
my $temp=1; |
Line 338 sub displayfoils {
|
Line 362 sub displayfoils {
|
} |
} |
} |
} |
if ($target ne 'tex') { |
if ($target ne 'tex') { |
$result.="<br /><select name=\"HWVAL_$Apache::inputtags::response['-1']:$temp\">" |
$optionlist='<select name="HWVAL_'. |
.$optionlist |
$Apache::inputtags::response['-1'].':'.$temp.'">'. |
."</select>\n".$Apache::response::foilgroup{$name.'.text'}."\n"; |
$optionlist."</select>\n"; |
|
my $text=$Apache::response::foilgroup{$name.'.text'}; |
|
if (!($text=~s|<drawoptionlist\s*/>|$optionlist|)) { |
|
$text=$optionlist.$text; |
|
} |
|
$result.="<br />".$text."\n"; |
|
if ($Apache::lonhomework::type eq 'exam') { |
|
$result.=&webbubbles(\@opt,\@alphabet); |
|
} |
$temp++; |
$temp++; |
} else { |
} else { |
|
my $texoptionlist = &optionlist_correction($optionlist); |
if ($displayoptionintex == 0) { |
if ($displayoptionintex == 0) { |
my $texoptionlist = $optionlist; |
if ($Apache::lonhomework::type eq 'exam') {$texoptionlist='';} #if exam we do not need to show optionlist |
$texoptionlist =~ s/<option><\/option>/\\item \[\] The possible answers are:/; |
|
$texoptionlist =~ s/<option>/{\\bf /g; |
|
$texoptionlist =~ s/<option selected="on">/{\\bf /g; |
|
$texoptionlist =~ s/<\/option>/},/g; |
|
$texoptionlist =~ s/,$/\./g; |
|
$texoptionlist =~ s/>/\$>\$/g; |
|
$texoptionlist =~ s/</\$<\$/g; |
|
$texoptionlist =~ s/=/\$=\$/g; |
|
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
$result.= $texoptionlist.$Apache::response::foilgroup{$name.'.text'}; |
if ($Apache::lonhomework::type eq 'exam') { |
|
$Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/; |
|
} |
|
if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) { |
|
$Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |; |
|
$result.= $texoptionlist.$Apache::response::foilgroup{$name.'.text'}; |
|
} |
} else { |
} else { |
$result.= $texoptionlist.'\item '.$Apache::response::foilgroup{$name.'.text'}; |
if ($Apache::lonhomework::type eq 'exam') { |
|
$result.= $texoptionlist.'\vspace*{-2 mm}\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'}; |
|
} else { |
|
$result.= $texoptionlist.'\vspace*{-2 mm}\item '.$Apache::response::foilgroup{$name.'.text'}; |
|
} |
|
} |
|
if ($Apache::lonhomework::type eq 'exam') { |
|
$result.=&bubbles(\@alphabet,\@opt); |
} |
} |
$displayoptionintex=1; |
$displayoptionintex=1; |
} else { |
} else { |
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { |
$result.= $Apache::response::foilgroup{$name.'.text'}; |
if ($Apache::lonhomework::type eq 'exam') { |
|
$Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/; |
|
} |
|
if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) { |
|
$Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |; |
|
} |
|
$result.= $Apache::response::foilgroup{$name.'.text'}; |
} else { |
} else { |
$result.= '\item '.$Apache::response::foilgroup{$name.'.text'}; |
if ($Apache::lonhomework::type eq 'exam') { |
|
$result.= '\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'}; |
|
} else { |
|
$result.= '\item '.$Apache::response::foilgroup{$name.'.text'}; |
|
} |
|
} |
|
if ($Apache::lonhomework::type eq 'exam') { |
|
$result.=&bubbles(\@alphabet,\@opt); |
} |
} |
} |
} |
} |
} |
Line 378 sub displayfoils {
|
Line 429 sub displayfoils {
|
} |
} |
|
|
|
|
|
sub optionlist_correction { |
|
|
|
my $texoptionlist = shift; |
|
$texoptionlist =~ s/<option><\/option>/\\item \[\] Possible answers are:/; |
|
$texoptionlist =~ s/<option>/\{\\bf /g; |
|
$texoptionlist =~ s/<option selected="on">/\{\\bf /g; |
|
$texoptionlist =~ s/<\/option>/\},/g; |
|
$texoptionlist =~ s/,$/\./g; |
|
$texoptionlist =~ s/>/\$>\$/g; |
|
$texoptionlist =~ s/</\$<\$/g; |
|
$texoptionlist =~ s/=/\$=\$/g; |
|
return $texoptionlist; |
|
} |
|
|
|
|
|
sub webbubbles { |
|
|
|
my ($ropt,$ralphabet)=@_; |
|
my @opt=@$ropt; |
|
my @alphabet=@$ralphabet; |
|
my $result=''; |
|
my $number_of_bubbles = $#opt + 1; |
|
$result.= '<table border="1"><tr>'; |
|
for (my $ind=0;$ind<$number_of_bubbles;$ind++) { |
|
$result.='<td>'.$alphabet[$ind].': '.$opt[$ind].'</td>'; |
|
} |
|
$result.='</tr></table>'; |
|
return $result; |
|
} |
|
|
|
|
|
sub bubbles { |
|
|
|
my ($ralphabit,$ropt) = @_; |
|
my @alphabet = @$ralphabit; |
|
my @opt = @$ropt; |
|
my ($result,$head,$line) =('','',''); |
|
my $number_of_bubbles = $#opt + 1; |
|
my $current_length = 0; |
|
for (my $ind=0;$ind<=$number_of_bubbles;$ind++) { |
|
$current_length += (length($opt[$ind])+length($alphabet[$ind])+2)*2; |
|
if ($current_length<0.9*$ENV{'form.textwidth'} and $ind!=$number_of_bubbles) { |
|
$line.='\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & '; |
|
$head.='lr'; |
|
} else { |
|
$line=~s/\&\s*$//; |
|
$result.='\vskip -5 mm\begin{tabular}{'.$head.'}\\\\'.$line.'\\\\\end{tabular}'; |
|
$line = '\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';; |
|
$head ='lr'; |
|
$current_length = (length($opt[$ind])+length($alphabet[$ind]))*2; |
|
} |
|
|
|
} |
|
&Apache::lonxml::increment_counter(); |
|
return $result; |
|
} |
|
|
|
|
sub start_conceptgroup { |
sub start_conceptgroup { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
$Apache::optionresponse::conceptgroup=1; |
$Apache::optionresponse::conceptgroup=1; |
Line 432 sub end_conceptgroup {
|
Line 541 sub end_conceptgroup {
|
$Apache::lonhomework::analyze{"$part_id.foil.location.$name"} = |
$Apache::lonhomework::analyze{"$part_id.foil.location.$name"} = |
$Apache::response::conceptgroup{"$name.location"}; |
$Apache::response::conceptgroup{"$name.location"}; |
} |
} |
|
} elsif ($target eq 'web') { |
|
my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]"; |
|
push(@{ $Apache::hint::option{"$part_id.concepts"} }, |
|
$concept); |
|
$Apache::hint::option{"$part_id.concept.$concept"}= |
|
$Apache::response::conceptgroup{'names'}; |
} |
} |
} |
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
Line 480 sub end_foil {
|
Line 595 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 = '\item '.$text; } |
if ($target eq 'tex') { $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') { |