--- loncom/homework/matchresponse.pm 2004/07/08 17:45:28 1.43 +++ loncom/homework/matchresponse.pm 2005/06/21 21:00:55 1.54 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Full matching style response # -# $Id: matchresponse.pm,v 1.43 2004/07/08 17:45:28 sakharuk Exp $ +# $Id: matchresponse.pm,v 1.54 2005/06/21 21:00:55 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,6 +32,7 @@ use HTML::Entities(); use Math::Random(); use Apache::optionresponse(); use Apache::lonlocal; +use Apache::lonnet; BEGIN { &Apache::lonxml::register('Apache::matchresponse',('matchresponse')); @@ -101,11 +102,15 @@ sub start_itemgroup { 'location', ['top','bottom','left','right'], $token); + $result.=&Apache::edit::select_arg('Items Display Directection:', + 'direction', + ['vertical','horizontal'], + $token); $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); } elsif ($target eq 'modified') { my $constructtag=&Apache::edit::get_new_args($token,$parstack, $safeeval,'randomize', - 'location'); + 'location','direction'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } elsif ($target eq 'web' or $target eq 'tex') { $Apache::matchresponse::itemtable{'location'}= @@ -142,15 +147,19 @@ sub end_itemgroup { } $Apache::response::itemgroup{'letter_name_map'}=\%letter_name_map; $Apache::response::itemgroup{'name_letter_map'}=\%name_letter_map; + my $direction=&Apache::lonxml::get_param('direction',$parstack,$safeeval); if ($target eq 'web') { my $table=''; my $i=0; + if ($direction eq 'horizontal') { $table .='';} foreach my $name (@names) { - $table.=''; + if ($direction ne 'horizontal') { $table.=''; } + $table.=''; + if ($direction ne 'horizontal') { $table.=''; } $i++; } + if ($direction eq 'horizontal') { $table .='';} $table.='
'.$alphabet[$i].''. - $Apache::response::itemgroup{$name.'.text'}. - '
'.$alphabet[$i].''. + $Apache::response::itemgroup{$name.'.text'}.'
'; $Apache::matchresponse::itemtable{'display'}=$table; } elsif ($target eq 'tex') { @@ -309,7 +318,7 @@ sub grade_response { $randomize, &Apache::response::showallfoils(), \%Apache::response::foilgroup); - if (!defined($ENV{'form.submitted'})) { return; } + if (!&Apache::response::submitted()) { return; } my %responsehash; my %grade; my ($temp,$right,$wrong,$ignored)=(1,0,0,0); @@ -350,7 +359,16 @@ sub grade_response { $itemstr; $Apache::lonhomework::results{"resource.$part.$id.submissiongrading"}= $gradestr; - if (!$Apache::lonhomework::scantronmode) { + if ($Apache::lonhomework::type eq 'survey') { + if ($ignored == 0) { + my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED'; + &Apache::response::handle_previous(\%previous,$ad); + } elsif ($wrong==0 && $right==0) { + } else { + my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER'; + &Apache::response::handle_previous(\%previous,$ad); + } + } elsif (!$Apache::lonhomework::scantronmode) { my $ad; if ($wrong==0 && $ignored==0) { $ad='EXACT_ANS'; @@ -420,7 +438,7 @@ sub displayfoils { if ($target eq 'tex') { $question.=' \\\\ '.$letter.':'.$text; } else { - $question.='
'.$letter.':'.$text; + $question.='
'.$letter.': '.$text; } } } else { @@ -460,9 +478,9 @@ sub displayfoils { my $text=$Apache::response::foilgroup{$name.'.text'}; if ($target ne 'tex') { if ($Apache::lonhomework::type ne 'exam') { - $question.='
'.$optionlist.$text."\n"; + $question.="
\n".$optionlist.$text; } else { - $question.='
'.$text."\n"; + $question.="
\n".$text; } if ($Apache::lonhomework::type eq 'exam') { my @blank; @@ -488,10 +506,12 @@ sub displayfoils { $result=$question.$result; } elsif ($result=&itemdisplay('right')) { if ($target ne 'tex') { - $result='
'.$question.''.$result. - '
'; + #remove the first
+ $question=~s|
||; + $result='
'.$question. + ''.$result.'
'; } else { - my $tabsize=&Apache::londefdef::recalc($ENV{'form.textwidth'}); + my $tabsize=&Apache::londefdef::recalc($env{'form.textwidth'}); my ($lefttabsize,$righttabsize)=(0,0); if ($Apache::matchresponse::TeXitemgroupwidth ne '') { $Apache::matchresponse::TeXitemgroupwidth=~/(\d*.?\d*)/; @@ -508,10 +528,12 @@ sub displayfoils { } } elsif ($result=&itemdisplay('left')) { if ($target ne 'tex') { - $result='
'.$result.''.$question. - '
'; + #remove the first
+ $question=~s|
||; + $result='
'.$result. + ''.$question.'
'; } else { - my $tabsize=&Apache::londefdef::recalc($ENV{'form.textwidth'}); + my $tabsize=&Apache::londefdef::recalc($env{'form.textwidth'}); my ($lefttabsize,$righttabsize)=(0,0); if ($Apache::matchresponse::TeXitemgroupwidth ne '') { $Apache::matchresponse::TeXitemgroupwidth=~/(\d*.?\d*)/; @@ -519,7 +541,7 @@ sub displayfoils { $righttabsize=0.95*($tabsize-$lefttabsize); } else { $tabsize=~/(\d+\.?\d*)/; - $tabsize=$1/2.1; + $lefttabsize=$1/2.1; $righttabsize=0.95*($1-$lefttabsize); } $lefttabsize.=' mm '; @@ -587,6 +609,9 @@ sub start_foil { my $result=''; if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { &Apache::lonxml::startredirection; + if ($target eq 'analyze') { + &Apache::response::check_if_computed($token,$parstack,$safeeval,'value'); + } } elsif ($target eq 'edit') { $result=&Apache::edit::tag_start($target,$token,"Foil"); my $level='-2'; @@ -620,13 +645,20 @@ sub end_foil { if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { $text=&Apache::lonxml::endredirection; } + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') { + $text='\vskip 5mm $\triangleright$ '.$text; + } my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval); if ($value ne 'unused') { my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval); &Apache::lonxml::debug("Got a name of :$name:"); - if (!$name) { $name=$Apache::lonxml::curdepth; } + if (!$name) { + &Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction."); + $name=$Apache::lonxml::curdepth; + } &Apache::lonxml::debug("Using a name of :$name:"); if (defined($Apache::response::foilnames{$name})) { &Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique.",$name)); @@ -638,28 +670,12 @@ sub end_foil { && !&Apache::response::showallfoils() ) { push @{ $Apache::response::conceptgroup{'names'} }, $name; $Apache::response::conceptgroup{"$name.value"} = $value; - if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') { - $Apache::response::conceptgroup{"$name.text"} = ' $\triangleright$ '.$text; - } else { - $Apache::response::conceptgroup{"$name.text"} = $text; - } + $Apache::response::conceptgroup{"$name.text"} = $text; $Apache::response::conceptgroup{"$name.location"} = $location; } else { push @{ $Apache::response::foilgroup{'names'} }, $name; $Apache::response::foilgroup{"$name.value"} = $value; - if ($Apache::lonhomework::type eq 'exam') { - if ($target eq 'tex') { - $Apache::response::foilgroup{"$name.text"} = '\vskip 5 mm $\triangleright$ '.$text; - } else { - $Apache::response::foilgroup{"$name.text"} = $text; - } - } else { - if ($target eq 'tex') { - $Apache::response::foilgroup{"$name.text"} = $text; - } else { - $Apache::response::foilgroup{"$name.text"} = $text; - } - } + $Apache::response::foilgroup{"$name.text"} = $text; $Apache::response::foilgroup{"$name.location"} = $location; } }