--- loncom/homework/radiobuttonresponse.pm 2012/01/25 12:00:33 1.153.6.7 +++ loncom/homework/radiobuttonresponse.pm 2012/02/05 16:11:57 1.153.6.10 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # mutliple choice style responses # -# $Id: radiobuttonresponse.pm,v 1.153.6.7 2012/01/25 12:00:33 foxr Exp $ +# $Id: radiobuttonresponse.pm,v 1.153.6.10 2012/02/05 16:11:57 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -43,6 +43,10 @@ BEGIN { ('radiobuttonresponse') ); } +#--------------------------------------------------------------------------- +# +# Generic utility subs. + sub bubble_line_count { my ( $numfoils, $bubbles_per_line ) = @_; my $bubble_lines; @@ -54,6 +58,10 @@ sub bubble_line_count { } + +#------------------------------------------------------------------------------ +# +# XML handlers. sub start_radiobuttonresponse { my ( $target, $token, $tagstack, $parstack, $parser, $safeeval, $style ) = @_; @@ -247,6 +255,7 @@ sub end_foilgroup { my $part = $Apache::inputtags::part; my $bubbles_per_line = &getbubblesnum( $part, $id ); + if ( $target eq 'grade' || $target eq 'web' || $target eq 'answer' @@ -375,46 +384,25 @@ sub format_prior_answer { } -## -sub displayallfoils{ - my ( $direction, $target ) = @_; - my $result; - &Apache::lonxml::debug("survey style display"); - my @names; - if ( $Apache::response::foilgroup{'names'} ) { - @names = @{ $Apache::response::foilgroup{'names'} }; - } - - # Figure out how to bracket the list of foils for - # the TeX target: - # - - my $begin_environment; - my $end_environment; - - if ($target eq 'tex') { - - # Decide how to bracket the list of foils: - +## +# Return the last survey response. The logic is slightly different than that of +# get_last_responses. TODO: See if there are chunks of code betweenthis and +# get_last_reponses that are common and can be factored. +# +# @param $part - Problem part under consideration. +# @param $showanswer - True if answers should be shown. +# @param $id - Problem id. +# +# @return hash reference. +# @retval reference to the has indexed by answer selection that +# indicates the most recent answer. +# +sub get_last_survey_response { + my ($part, $showanswer, $id) = @_; - if ( $env{'form.pdfFormFields'} eq 'yes' - && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' ) - { - $begin_environment = '\begin{itemize}'; - $end_environment = '\end{itemize}'; - } - else { - $begin_environment = '\begin{enumerate}'; - $end_environment = '\end{enumerate}'; - } - $result .= $begin_environment; - } + my $newvariation; + my $lastresponse; # stringified last response. - my $temp = 0; - my $i = 0; - my $id = $Apache::inputtags::response['-1']; - my $part = $Apache::inputtags::part; - my ( $lastresponse, $newvariation, $showanswer ); if ( ( ( @@ -432,7 +420,6 @@ sub displayallfoils{ $newvariation = 1; } } - $showanswer = &Apache::response::show_answer(); unless ( ( ( @@ -449,127 +436,270 @@ sub displayallfoils{ $lastresponse = $Apache::lonhomework::history{"resource.$part.$id.submission"}; } - if ( $direction eq 'horizontal' && $target ne 'tex') { - $result .= '
";
- }
- else {
- if ( $target eq 'tex' ) {
- $result .= '\item \vskip -2mm ';
- }
- else {
- $result .= " "; - } - } - if ( defined( $lastresponse{$name} ) ) { - if ( $target eq 'tex' ) { - $result .= '}'; - } - else { - $result .= ''; - } - } - $result .= $Apache::response::foilgroup{ $name . '.text' }; - if ( defined( $lastresponse{$name} ) && ( $target ne 'tex' ) ) { - $result .= ''; - } - if ( ( $direction eq 'horizontal' ) && ( $target ne 'tex' ) ) { - $result .= " | ";
- }
- }
- }
+
+ $result .= "\\begin{$venv}";
+ foreach my $name (@{$names}) {
+
+
+ $result .= '\item \vskip -2mm ';
+
+ if ( defined( $lastresponse->{$name} ) ) {
+ $result .= '}';
+ }
+ $result .= $Apache::response::foilgroup{ $name . '.text' } . ' ';
+ }
+ $result .= "\\end{$venv}";
+
+ } elsif ( $env{'form.pdfFormFields'} eq 'yes'
+ && $Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
+ $result .= &display_pdf_form($names, $direction, $venv);
+ } else {
+ if ($direction eq 'horizontal') {
+ my @foil_texts = &get_foil_texts($names);
+ $result .= &Apache::caparesponse::make_horizontal_latex_bubbles(
+ $names, \@foil_texts, '$\bigcirc$');
+ } else {
+ $result .= "\\begin{$venv}";
+
+ my $temp = 0;
+ my $i = 0;
+ foreach my $name (@{$names}) {
+
+ $result .= '\item \vskip -2mm ';
+
+ if ($env{'form.pdfFormFields'} ne 'yes'
+ or $Apache::inputtags::status[-1] ne 'CAN_ANSWER' )
+ {
+ $result .=
+ '$\bigcirc$'
+ . $Apache::response::foilgroup{ $name . '.text' }
+ . '\\\\'; #' stupid emacs
+ }
+
+ $i++;
+ $temp++;
+
+ $result .= '\vskip 0 mm ';
+ }
+ $result .= "\\end{$venv}";
+ }
+
+
}
- else {
- foreach my $name (@names) {
- if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )
- {
- if ( $direction eq 'horizontal' && $target ne 'tex' ) {
- $result .= "";
- }
- else {
- if ( $target eq 'tex' ) {
- if ( $env{'form.pdfFormFields'} eq 'yes'
- && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
- {
- my $fieldname =
- $env{'request.symb'}
- . '&part_'
- . $Apache::inputtags::part
- . '&radiobuttonresponse'
- . '&HWVAL_'
- . $Apache::inputtags::response['-1'];
- $result .= '\item[{'
- . &Apache::lonxml::print_pdf_radiobutton(
- $fieldname, $temp )
- . '}]'
- . $Apache::response::foilgroup{ $name . '.text' }
- . "\n";
- }
- else {
- $result .= '\item \vskip -2mm ';
- }
- }
- else {
- $result .= " "; - } - } - if ( $target eq 'tex' ) { - if ( $env{'form.pdfFormFields'} ne 'yes' - or $Apache::inputtags::status[-1] ne 'CAN_ANSWER' ) - { - $result .= - '$\bigcirc$' - . $Apache::response::foilgroup{ $name . '.text' } - . '\\\\'; #' stupid emacs - } - $i++; - } - else { - $result .= ' | ";
- }
- }
- else {
- $result .= '\vskip 0 mm ';
- }
- }
- }
+
+ return $result;
+
+
+}
+##
+# Figure out the LaTeX environment in which to wrap the LaTeX vertical output.
+#
+# @return string
+# @retval the environment name. The LaTeX should be wrapped a
+# \begin{retval} \end{retval} pair.
+#
+sub latex_vertical_environment {
+ if ($env{'form.pdfFormFields'} eq 'yes'
+ && $Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
+ return 'itemize';
+ } else {
+ return 'enumerate';
}
+}
- if ( ( $direction eq 'horizontal' ) && ( $target ne 'tex' ) ) {
- $result .= '
' . $item_pretext; - $item_posttext = ' | '; - $finalclose = '