--- loncom/homework/optionresponse.pm 2008/11/18 19:14:28 1.155 +++ 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.155 2008/11/18 19:14:28 jms Exp $ +# $Id: optionresponse.pm,v 1.159 2010/02/05 15:34:02 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,67 +27,7 @@ # -=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() - -=item =back - -=cut package Apache::optionresponse; @@ -125,8 +65,8 @@ sub start_optionresponse { &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, @@ -499,7 +439,8 @@ sub displayfoils { my $lastopt=$lastresponse{$name}; my $optionlist="<option></option>\n"; - if($target eq 'tex' and $env{'form.pdfFormFields'} eq 'yes') { + 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); } @@ -507,25 +448,54 @@ sub displayfoils { foreach my $option (@opt) { my $escopt=&HTML::Entities::encode($option,'\'"&<>'); if ($option eq $lastopt) { - if ($target eq 'tex' && $env{'form.pdfFormFields'} eq 'yes') { + 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.="<option value='".$escopt."' selected=\"selected\">$option</option>\n"; } } else { - if ($target eq 'tex' && $env{'form.pdfFormFields'} eq 'yes') { + 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.="<option value='".$escopt."'>$option</option>\n"; } } } +# debug for checkbox + my $checkboxopt=''; +# end debug for checkbox if ($target ne 'tex') { if ($Apache::lonhomework::type ne 'exam') { - $optionlist='<select onchange="javascript:setSubmittedPart(\''. +# we are on the web, this is not an exam, and the problem can be answered + if ($checkboxopt) { +# generate checkboxes + my $fieldname=$Apache::inputtags::response['-1'].':'.$temp; + my $altopt=$opt[0]; + if ($opt[0] eq $checkboxopt) { + $altopt=$opt[1]; + } + my $defopt=$lastopt; + unless ($defopt) { $defopt=$altopt; } + my $escdefopt=&HTML::Entities::encode($defopt,'\'"&<>'); + my $esccheckboxopt=&HTML::Entities::encode($checkboxopt,'\'"&<>'); + my $escaltopt=&HTML::Entities::encode($altopt,'\'"&<>'); +# checkboxopt is how the box is labelled +# altopt is the alternative option +# lastopt is what the user submitted before +# defopt is what the field is going to start out with: either previous choice or altopt +# fieldname is this input field's name after HWVAL_ + $optionlist='<input type="hidden" name="HWVAL_'.$fieldname.'" value="'.$escdefopt.'" />'. + '<label><input type="checkbox" name="HWCHK_'.$fieldname.'" onclick="javascript:if (this.form.elements[\'HWCHK_'. + $fieldname.'\'].checked) { this.form.elements[\'HWVAL_'.$fieldname.'\'].value=\''.$esccheckboxopt.'\'; } else { this.form.elements[\'HWVAL_'.$fieldname.'\'].value=\''.$escaltopt.'\'; };setSubmittedPart(\''.$part.'\');"'.($defopt eq $checkboxopt?' checked="checked"':'').' /><i>'.$checkboxopt.":</i></label>\n"; + } else { +# classic selection list + $optionlist='<select onchange="javascript:setSubmittedPart(\''. $part.'\');" name="HWVAL_'. $Apache::inputtags::response['-1'].':'.$temp.'">'. $optionlist."</select>\n"; + } } else { $optionlist='<u>'.(' 'x10).'</u>'; } @@ -576,9 +546,9 @@ sub displayfoils { '\end{enumerate} \vskip -8 mm \strut '; $internal_counter++; } - if ($target eq 'tex' && $env{'form.pdfFormFields'} eq 'yes') { - $text =~ s/.*indent(.*)$/$1/; - $text = $1; + 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++; } @@ -841,3 +811,64 @@ sub insert_drawoptionlist { 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