--- loncom/homework/optionresponse.pm 2007/04/16 22:50:41 1.142 +++ loncom/homework/optionresponse.pm 2010/02/05 15:34:02 1.159 @@ -1,7 +1,7 @@ # LearningOnline Network with CAPA # option list style responses # -# $Id: optionresponse.pm,v 1.142 2007/04/16 22:50:41 albertel Exp $ +# $Id: optionresponse.pm,v 1.159 2010/02/05 15:34:02 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,6 +25,11 @@ # # http://www.lon-capa.org/ # + + + + + package Apache::optionresponse; use strict; use Apache::response(); @@ -45,21 +50,23 @@ sub start_optionresponse { %Apache::hint::option=(); undef(%Apache::response::foilnames); if ($target eq 'edit') { - $result.=&Apache::edit::start_table($token). - "Multiple Option Response Question ". - &Apache::loncommon::help_open_topic('Option_Response_Problems')."Delete:". - &Apache::edit::deletelist($target,$token) - ." ". - &Apache::edit::end_row(). - &Apache::edit::start_spanning_row(). - "\n"; + $result.=&Apache::edit::start_table($token) + .''.&mt('Multiple Option Response Question').' ' + .&Apache::loncommon::help_open_topic('Option_Response_Problems')."" + .''.&mt('Delete?').' ' + .&Apache::edit::deletelist($target,$token) + .'' + ." " + .&Apache::edit::end_row() + .&Apache::edit::start_spanning_row() + ."\n"; $result.=&Apache::edit::text_arg('Max Number Of Shown Foils:','max', $token,'4'). - &Apache::edit::select_arg('Randomize Foil Order','randomize', + &Apache::edit::select_arg('Randomize Foil Order:','randomize', ['yes','no'],$token). &Apache::edit::select_arg(&mt('Display of options when printed'),'TeXlayout', - [['horizontal',&mt('Normal list')], - ['vertical',&mt('Listed in a vertical column')]],$token). + [['horizontal','Normal list'], + ['vertical','Listed in a vertical column']],$token). &Apache::edit::end_row().&Apache::edit::start_spanning_row(); } elsif ($target eq 'modified') { my $constructtag=&Apache::edit::get_new_args($token,$parstack, @@ -70,7 +77,10 @@ sub start_optionresponse { $result=&Apache::response::meta_package_write('optionresponse'); } elsif ($target eq 'analyze') { my $part_id="$Apache::inputtags::part.$id"; + $Apache::lonhomework::analyze{"$part_id.type"} = 'optionresponse'; push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id); + push (@{ $Apache::lonhomework::analyze{"$part_id.bubble_lines"} }, 1); + } return $result; } @@ -156,8 +166,12 @@ ENDTABLE } # else nothing changed so just use the default mechanism } if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { + if($env{'form.pdfFormFields'} ne 'yes') { $result .= ' \renewcommand{\labelenumi}{\Alph{enumi}.} \begin{enumerate} '; + } else { + $result .= "\\\\"; + } } return $result; } @@ -275,12 +289,23 @@ sub end_foilgroup { } } } - &Apache::lonxml::increment_counter(&getfoilcounts($max)); + my $part_id = $Apache::inputtags::part; + my $response_id = $Apache::inputtags::response[-1]; + &Apache::lonxml::increment_counter(&getfoilcounts($max), + "$part_id.$response_id"); + if ($target eq 'analyze') { + &Apache::lonhomework::set_bubble_lines(); + } + } elsif ($target eq 'edit') { $result.=&Apache::edit::end_table(); } if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { + if($env{'form.pdfFormFields'} ne 'yes') { $result .= '\end{enumerate}'; + } else { + $result .= "\\\\"; + } } &Apache::response::poprandomnumber(); return $result; @@ -355,27 +380,6 @@ sub check_for_invalid { } } -sub setup_prior_tries_hash { - my ($whichopt) = @_; - my $part=$Apache::inputtags::part; - my $id=$Apache::inputtags::response[-1]; - foreach my $i (1..$Apache::lonhomework::history{'version'}) { - my $key = "$i:resource.$part.$id.submission"; - next if (!exists($Apache::lonhomework::history{"$key"})); - my %lastresponse= - &Apache::lonnet::str2hash($Apache::lonhomework::history{$key}); - my $output; - foreach my $name (@$whichopt) { - next if (!defined($lastresponse{$name})); - $output .= ''.$lastresponse{$name}.''; - } - next if (!defined($output)); - $output = - ''.$output.'
'; - $Apache::inputtags::submission_display{$key} = $output; - } -} - sub displayfoils { my ($target,$max,$randomize,$TeXlayout,@opt)=@_; if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;} @@ -434,20 +438,64 @@ sub displayfoils { } my $lastopt=$lastresponse{$name}; my $optionlist="\n"; + + if($target eq 'tex' and $env{'form.pdfFormFields'} eq 'yes' + && $Apache::inputtags::status[-1] eq 'CAN_ANSWER') { + my $fieldname = $env{'request.symb'}.'&part_'.$Apache::inputtags::part.'&optionresponse'.'&HWVAL_'.$Apache::inputtags::response['-1'].':'.$temp; + $optionlist = &Apache::lonxml::print_pdf_start_combobox($fieldname); + } + foreach my $option (@opt) { my $escopt=&HTML::Entities::encode($option,'\'"&<>'); - if ($option eq $lastopt) { - $optionlist.="\n"; - } else { - $optionlist.="\n"; - } - } + if ($option eq $lastopt) { + if ($target eq 'tex' && $env{'form.pdfFormFields'} eq 'yes' + && $Apache::inputtags::status[-1] eq 'CAN_ANSWER') { + $optionlist .= &Apache::lonxml::print_pdf_add_combobox_option($option); + } else { + $optionlist.="\n"; + } + } else { + if ($target eq 'tex' && $env{'form.pdfFormFields'} eq 'yes' + && $Apache::inputtags::status[-1] eq 'CAN_ANSWER') { + $optionlist .= &Apache::lonxml::print_pdf_add_combobox_option($option); + } else { + $optionlist.="\n"; + } + } + } +# debug for checkbox + my $checkboxopt=''; +# end debug for checkbox if ($target ne 'tex') { if ($Apache::lonhomework::type ne 'exam') { - $optionlist=''. + '\n"; + } else { +# classic selection list + $optionlist='\n"; + } } else { $optionlist=''.(' 'x10).''; } @@ -478,13 +526,18 @@ sub displayfoils { if ($text=~m/\\item /) { if ($Apache::lonhomework::type eq 'exam') { $text=~s/\\item/\\vskip 2 mm/; - } - $result.= $texoptionlist.$text; - } else { + } elsif ($env{'form.pdfFormFields'} ne 'yes') { + $result.= $texoptionlist.$text; + } + } else { if ($Apache::lonhomework::type eq 'exam') { $result.= $texoptionlist.' '.$text; - } else { - if ($text=~/\S/) {$result.= $texoptionlist.'\vspace*{-2 mm}\item '.$text;} else {$result.= $texoptionlist;} + } elsif ($env{'form.pdfFormFields'} ne 'yes') { + if ($text=~/\S/) { + $result.= $texoptionlist.'\vspace*{-2 mm}\item '.$text; + } else { + $result.= $texoptionlist; + } } } if ($Apache::lonhomework::type eq 'exam') { @@ -493,13 +546,21 @@ sub displayfoils { '\end{enumerate} \vskip -8 mm \strut '; $internal_counter++; } + if ($target eq 'tex' && $env{'form.pdfFormFields'} eq 'yes' + && $Apache::inputtags::status[-1] eq 'CAN_ANSWER') { + $text =~ s/\\item//m; + $result .= " $optionlist ". &Apache::lonxml::print_pdf_end_combobox($text).'\strut \\\\'; + $temp++; + } $displayoptionintex=0; } } } if ($target eq 'web') { - &setup_prior_tries_hash(\@whichopt); + &Apache::response::setup_prior_tries_hash(\&Apache::rankresponse::format_prior_answer, + [\@whichopt, + 'submissiongrading']); } if ($target ne 'tex') { @@ -512,7 +573,7 @@ sub displayfoils { sub optionlist_correction { my ($TeXlayout,@options) = @_; - my $texoptionlist='\\item [] Choices: '; + my $texoptionlist='\\item [] '.&mt('Choices:').' '; if ($TeXlayout eq 'vertical') {$texoptionlist='\\item []';} if (scalar(@options) > 0) { foreach my $option (@options) { @@ -693,12 +754,12 @@ sub end_foil { my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval); &Apache::lonxml::debug("Got a name of :$name:"); if ($name eq "") { - &Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction."); + &Apache::lonxml::warning(&mt('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)); + &Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique.",''.$name.'')); } $Apache::response::foilnames{$name}++; my $location =&Apache::lonxml::get_param('location',$parstack,$safeeval); @@ -724,25 +785,90 @@ sub end_foil { sub start_drawoptionlist { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; - if (($target ne 'meta') && ($target ne 'answer')) { + if ($target !~ /^(?:meta|answer|modified|edit)$/) { return $token->[4]; } } sub end_drawoptionlist { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; - if (($target ne 'meta') && ($target ne 'answer')) { + if ($target !~ /^(?:meta|answer|modified|edit)$/) { return $token->[2]; } } sub insert_foil { - return ' + return ' '; } + +sub insert_drawoptionlist { + return ''; +} 1; __END__ +=head1 NAME + +Apache::optionresponse.pm; + +=head1 SYNOPSIS + +Handles tags associated with showing a list of +options. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 HANDLER SUBROUTINE + +start_optionresponse() + +=head1 OTHER SUBROUTINES + +=over + +=item end_optionresponse() + +=item start_foilgroup() + +=item end_foilgroup() + +=item getfoilcounts() + +=item displayanswers() + +=item check_for_invalid() + +=item displayfoils() + +=item optionlist_correction() + +=item webbubbles() + +=item bubbles() + +=item start_conceptgroup() + +=item end_conceptgroup() + +=item insert_conceptgroup() + +=item start_foil() + +=item end_foil() + +=item start_drawoptionlist() + +=item end_drawoptionlist() + +=item insert_foil() + +=item insert_drawoptionlist() + +=back + +=cut