Diff for /loncom/homework/radiobuttonresponse.pm between versions 1.153.6.7 and 1.153.6.8

version 1.153.6.7, 2012/01/25 12:00:33 version 1.153.6.8, 2012/01/30 11:36:55
Line 375  sub format_prior_answer { Line 375  sub format_prior_answer {
   
 }  }
   
 ##  ## 
 sub displayallfoils{  # Return the last survey response.  The logic is slightly different than that of 
     my ( $direction, $target ) = @_;  # get_last_responses.  TODO: See if there are chunks of code betweenthis and
     my $result;  # get_last_reponses that are common and can be factored.
     &Apache::lonxml::debug("survey style display");  #
     my @names;  # @param $part - Problem part under consideration.
     if ( $Apache::response::foilgroup{'names'} ) {  # @param $showanswer - True if answers should be shown.
         @names = @{ $Apache::response::foilgroup{'names'} };  # @param $id         - Problem id.
     }  #
   # @return hash reference.
     # Figure out how to bracket the list of foils for  # @retval reference to the has indexed by answer selection that 
     # the TeX target:  #         indicates the most recent answer.
     #  #
   sub get_last_survey_response {
     my $begin_environment;      my ($part, $showanswer, $id) = @_;
     my $end_environment;  
       
     if ($target eq 'tex') {  
   
  # Decide how to bracket the list of foils:  
   
   
         if (   $env{'form.pdfFormFields'} eq 'yes'      my $newvariation;
             && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )      my $lastresponse; # stringified last response.
         {  
             $begin_environment = '\begin{itemize}';  
     $end_environment   = '\end{itemize}';  
         }  
         else {  
             $begin_environment = '\begin{enumerate}';  
     $end_environment   = '\end{enumerate}';  
         }  
  $result .= $begin_environment;  
     }  
   
     my $temp = 0;  
     my $i    = 0;  
     my $id   = $Apache::inputtags::response['-1'];  
     my $part = $Apache::inputtags::part;  
     my ( $lastresponse, $newvariation, $showanswer );  
     if (      if (
         (          (
             (              (
Line 432  sub displayallfoils{ Line 411  sub displayallfoils{
             $newvariation = 1;              $newvariation = 1;
         }          }
     }      }
     $showanswer = &Apache::response::show_answer();  
     unless (      unless (
         (          (
             (              (
Line 449  sub displayallfoils{ Line 427  sub displayallfoils{
         $lastresponse =          $lastresponse =
           $Apache::lonhomework::history{"resource.$part.$id.submission"};            $Apache::lonhomework::history{"resource.$part.$id.submission"};
     }      }
     if ( $direction eq 'horizontal' && $target ne 'tex') {   
  $result .= '<table><tr>';   
     }  
     my %lastresponse = &Apache::lonnet::str2hash($lastresponse);      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 <div> and each
       #       foil lives in a <p>
       #
   
       my $closing_html;
       my $pre_foil;
       my $post_foil;
   
       if ($direction eq 'horizontal') {
    $result       .= '<table><tr>';
    $closing_html = '</tr></table>';
    $pre_foil     = '<td>';
    $post_foil    = '</td>';
       } else {
    $pre_foil     = '<br />';
       }
       # Different rendering depending on whether answers are shown:
   
   
     if ($showanswer) {      if ($showanswer) {
         foreach my $name (@names) {   foreach my $name (@{$names}) {
             if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )  
             {      $result .= $pre_foil;
                 if ( ( $direction eq 'horizontal' ) && ( $target ne 'tex' ) ) {      my $foiltext =  $Apache::response::foilgroup{$name . '.text'};
                     $result .= "<td>";  
                 }      # Bold the prior  response:
                 else {  
                     if ( $target eq 'tex' ) {      if (defined($lastresponse->{$name})) {
                         $result .= '\item \vskip -2mm ';   $result .= '<b>' . $foiltext . '</b>';
                     }      } else {
                     else {   $result .= $foiltext;
                         $result .= "<br />";      }
                     }  
                 }      $result .= $post_foil;
                 if ( defined( $lastresponse{$name} ) ) {   }
                     if ( $target eq 'tex' ) {      } else {
                         $result .= '}';   my $temp = 0;
                     }   foreach my $name (@{$names}) {
                     else {      $result .=  $pre_foil;
                         $result .= '<b>';  
                     }      $result .= &html_radiobutton(
                 }   $part, $Apache::inputtags::response['-1'], $name, $lastresponse, $temp
                 $result .= $Apache::response::foilgroup{ $name . '.text' };       );
                 if ( defined( $lastresponse{$name} ) && ( $target ne 'tex' ) ) {  
                     $result .= '</b>';      $result .= $post_foil;
                 }      $temp++;
                 if ( ( $direction eq 'horizontal' ) && ( $target ne 'tex' ) ) {         
                     $result .= "</td>";   }
                 }  
             }  
         }  
     }      }
     else {  
         foreach my $name (@names) {      $result .= $closing_html;
             if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )      return $result;
             {  
                 if ( $direction eq 'horizontal' && $target ne 'tex' ) {  }
                     $result .= "<td>";  
                 }  
                 else {  ##
                     if ( $target eq 'tex' ) {  #
                         if (   $env{'form.pdfFormFields'} eq 'yes'  #  Displays all the foils of a problem in a format suitable for
                             && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )  #   surveys, surveys for credit, anonymous surveys and anonymous surveys for credit.
                         {  #
                             my $fieldname =  #  @param $direction - Display direction of the choices ('horiztonal' or not).
                                 $env{'request.symb'}   #  @param $target    - Rendering target.
                               . '&part_'  #
                               . $Apache::inputtags::part  #  @return string
                               . '&radiobuttonresponse'  #  @retval Text that renders for the selected target.
                               . '&HWVAL_'  # 
                               . $Apache::inputtags::response['-1'];  sub displayallfoils{
                             $result .= '\item[{'      my ( $direction, $target ) = @_;
                               . &Apache::lonxml::print_pdf_radiobutton(      my $result;
                                 $fieldname, $temp )      &Apache::lonxml::debug("survey style display");
                               . '}]'      my @names;
                               . $Apache::response::foilgroup{ $name . '.text' }      if ( $Apache::response::foilgroup{'names'} ) {
                               . "\n";          @names = @{ $Apache::response::foilgroup{'names'} };
                         }      }
                         else {  
                             $result .= '\item \vskip -2mm ';      # Figure out how to bracket the list of foils for
                         }      # the TeX target:
                     }      #
                     else {  
                         $result .= "<br />";      my $begin_environment;
                     }      my $end_environment;
                 }      
                 if ( $target eq 'tex' ) {      if ($target eq 'tex') {
                     if (   $env{'form.pdfFormFields'} ne 'yes'  
                         or $Apache::inputtags::status[-1] ne 'CAN_ANSWER' )   # Decide how to bracket the list of foils:
                     {  
                         $result .=  
                             '$\bigcirc$'          if (   $env{'form.pdfFormFields'} eq 'yes'
                           . $Apache::response::foilgroup{ $name . '.text' }              && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
                           . '\\\\';    #' stupid emacs          {
                     }              $begin_environment = '\begin{itemize}';
                     $i++;      $end_environment   = '\end{itemize}';
                 }  
                 else {  
                     $result .= '<label>';  
                     $result .= "<input  
                        onchange=\"javascript:setSubmittedPart('$part');\"  
                        type=\"radio\"  
                        name=\"HWVAL_$Apache::inputtags::response['-1']\"  
                        value=\"$temp\"";  
   
                     if ( defined( $lastresponse{$name} ) ) {  
                         $result .= ' checked="checked"';  
                     }  
                     $result .= ' />'  
                       . $Apache::response::foilgroup{ $name . '.text' }  
                       . '</label>';  
                 }  
                 $temp++;  
                 if ( $target ne 'tex' ) {  
                     if (   ( $direction eq 'horizontal' )  
                         && ( $target ne 'tex' ) )  
                     {  
                         $result .= "</td>";  
                     }  
                 }  
                 else {  
                     $result .= '\vskip 0 mm ';  
                 }  
             }  
         }          }
           else {
               $begin_environment = '\begin{enumerate}';
       $end_environment   = '\end{enumerate}';
           }
    $result .= $begin_environment;
     }      }
   
     if ( ( $direction eq 'horizontal' ) && ( $target ne 'tex' ) ) {      my $temp = 0;
         $result .= '</tr></table>';      my $i    = 0;
       my $id   = $Apache::inputtags::response['-1'];
       my $part = $Apache::inputtags::part;
       my $showanswer;
       my $lastresponse;
       $showanswer = &Apache::response::show_answer();
   
       my $lastresponse = &get_last_survey_response($part, $showanswer, $id);
   
       my $used_names = &remove_unused(\@names);
   
   
       if ($target ne 'tex') {
    $result .= &display_survey_html($used_names, $part, $showanswer, $lastresponse, $direction);
       } else {
   
    if ($showanswer) {
       foreach my $name (@{$used_names}) {
    if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )
    {
       
       $result .= '\item \vskip -2mm ';
       
       if ( defined( $lastresponse->{$name} ) ) {
    $result .= '}';
       }
       $result .= $Apache::response::foilgroup{ $name . '.text' };
    }
       }
    } else {
       foreach my $name (@{$used_names}) {
    if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )
    {
       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 ';
       }
       
       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 ';
    }
       }
    }
     }      }
   
   
     # Close tex bracketing:      # Close tex bracketing:
   
     if ($target eq 'tex') {      if ($target eq 'tex') {
Line 887  sub get_last_response { Line 980  sub get_last_response {
 # @param $target     - Rendition target...there are several html targets.  # @param $target     - Rendition target...there are several html targets.
 # @param $direction  - 'horizontal' if layout is horizontal.  # @param $direction  - 'horizontal' if layout is horizontal.
 # @param $part       - Part of the problem that's being displayed.  # @param $part       - Part of the problem that's being displayed.
 # @param $solved     - Solution state of the problem.  
 # @param $show_answer- True if answers should be shown.  # @param $show_answer- True if answers should be shown.
 #  #
 # @return string  # @return string
 # @retval generated html.  # @retval generated html.
 #  #
 sub display_foils_html {  sub display_foils_html {
     my ($whichfoils, $target, $direction, $part, $solved, $show_answer) = @_;      my ($whichfoils, $target, $direction, $part, $show_answer) = @_;
     my $result;      my $result;
   
     # if the answers get shown, we need to label each item as correct or      # if the answers get shown, we need to label each item as correct or
Line 1188  sub displayfoils { Line 1280  sub displayfoils {
     {      {
   
  $result = &display_foils_html(   $result = &display_foils_html(
     $whichfoils, $target, $direction, $part, $solved, 1);      $whichfoils, $target, $direction, $part,  1);
   
  # other html   # other html
     }  elsif ($target ne 'tex') {      }  elsif ($target ne 'tex') {

Removed from v.1.153.6.7  
changed lines
  Added in v.1.153.6.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>