--- loncom/homework/radiobuttonresponse.pm 2012/01/24 12:05:12 1.153.6.5
+++ loncom/homework/radiobuttonresponse.pm 2012/02/04 20:40:07 1.153.6.9
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# mutliple choice style responses
#
-# $Id: radiobuttonresponse.pm,v 1.153.6.5 2012/01/24 12:05:12 foxr Exp $
+# $Id: radiobuttonresponse.pm,v 1.153.6.9 2012/02/04 20:40:07 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -247,6 +247,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 +376,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 +412,6 @@ sub displayallfoils{
$newvariation = 1;
}
}
- $showanswer = &Apache::response::show_answer();
unless (
(
(
@@ -449,128 +428,262 @@ sub displayallfoils{
$lastresponse =
$Apache::lonhomework::history{"resource.$part.$id.submission"};
}
- if ( $direction eq 'horizontal' ) { $result .= '
'; }
my %lastresponse = &Apache::lonnet::str2hash($lastresponse);
+
+
+ return \%lastresponse;
+
+}
+##
+# Removes the names from a foil group that are marked as unused.
+#
+# @param $names - reference to the array of names to filter.
+#
+# @return arrayref
+# @retval reference to the filtered array.
+#
+sub remove_unused {
+ my ($names) = @_;
+ my @result;
+
+ foreach my $name (@{$names}) {
+ if ($Apache::response::foilgroup{$name . '.value'} ne 'unused') {
+ push(@result, $name);
+ }
+ }
+ return \@result;
+}
+##
+# Displays all foils in a survey type problem for HTML rendition.
+# TODO: See if there is any logic in this sub that can be shared
+# with display_foils_html
+#
+# @param $names - ref to array of names of the foils to display.
+# @param $part - Problem part number.
+# @param $showanswer - If true, show the answers.
+# @param $lastresponse - Ref to the last response hash.
+# @param $direction - Display direction of the radiobuttons.
+#
+# @return string
+# @retval HTML required to display the resource in a browser.
+#
+sub display_survey_html {
+ my ($names, $part, $showanswer, $lastresponse, $direction) = @_;
+ my $result;
+
+ # Figure out a few fragments of html that depend onthe
+ # orientation of the radiobuttons:
+ # closing_html - HTML to emit at the end of the resource.
+ # pre_foil - HTML to emit prior to each foil.
+ # post_foil - HTML to emit following each foil.
+ #
+ # The opening HTML is just added to the $result now
+ #
+ # Figuring these outin advance compresses the loop over foils into something
+ # pretty simple:
+ #
+ # NOTE: There's probably a really cool way to do this with style sheets
+ # and picking the selector based on the orientation, if someone wants to puzzle
+ # that out. In that case, probably the whole thing lives in a
and each
+ # foil lives in a
+ #
+
+ my $closing_html;
+ my $pre_foil;
+ my $post_foil;
+
+ if ($direction eq 'horizontal') {
+ $result .= '
';
+ $closing_html = '
';
+ $pre_foil = '
';
+ $post_foil = '
';
+ } else {
+ $pre_foil = ' ';
+ }
+ # Different rendering depending on whether answers are shown:
+
+
if ($showanswer) {
- foreach my $name (@names) {
- if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )
- {
- if ( ( $direction eq 'horizontal' ) && ( $target ne 'tex' ) ) {
- $result .= "