Diff for /loncom/homework/optionresponse.pm between versions 1.186 and 1.201

version 1.186, 2012/06/25 10:36:00 version 1.201, 2018/02/28 13:20:50
Line 51  sub start_optionresponse { Line 51  sub start_optionresponse {
   undef(%Apache::response::foilnames);    undef(%Apache::response::foilnames);
   if ($target eq 'edit') {    if ($target eq 'edit') {
     $result.=&Apache::edit::start_table($token)      $result.=&Apache::edit::start_table($token)
        .'<tr><td><span class="LC_nobreak">'.&mt('Multiple Option Response Question').'</span> '         .'<tr><td><span class="LC_nobreak">'.&Apache::loncommon::insert_folding_button().' '
          .&mt('Multiple Option Response Question').'</span> '
        .&Apache::loncommon::help_open_topic('Option_Response_Problems')."</td>"         .&Apache::loncommon::help_open_topic('Option_Response_Problems')."</td>"
        .'<td><span class="LC_nobreak">'.&mt('Delete?').' '         .'<td><span class="LC_nobreak">'.&mt('Delete?').' '
        .&Apache::edit::deletelist($target,$token)         .&Apache::edit::deletelist($target,$token)
Line 64  sub start_optionresponse { Line 65  sub start_optionresponse {
      $token,'4').       $token,'4').
         &Apache::edit::select_arg('Randomize Foil Order:','randomize',          &Apache::edit::select_arg('Randomize Foil Order:','randomize',
   ['yes','no'],$token).    ['yes','no'],$token).
         &Apache::edit::select_arg(&mt('Display of options when printed'),'TeXlayout',          &Apache::edit::select_arg('Display of options when printed','TeXlayout',
   [['horizontal','Normal list'],    [['horizontal','Normal list'],
    ['vertical','Listed in a vertical column']],$token).     ['vertical','Listed in a vertical column']],$token).
         &Apache::edit::end_row().&Apache::edit::start_spanning_row();          &Apache::edit::end_row().&Apache::edit::start_spanning_row();
Line 108  sub start_foilgroup { Line 109  sub start_foilgroup {
     my $optionlist="<option></option>\n";      my $optionlist="<option></option>\n";
     my $option;      my $option;
     my @opt;      my @opt;
     eval '@opt ='. &Apache::lonxml::get_param('options',$parstack,$safeeval);      my @raw_options = &Apache::lonxml::get_param('options', $parstack, $safeeval, 0,  0, 1);
   
   
       eval '@opt ='. &Apache::lonxml::get_param('options',$parstack,$safeeval, 0, 0, 1);
   
     my $count=1;      my $count=1;
     foreach $option (@opt) {      foreach $option (@opt) {
       $optionlist.="<option value=\"$count\">$option</option>\n";        $optionlist.="<option value=\"$count\">$option</option>\n";
Line 116  sub start_foilgroup { Line 121  sub start_foilgroup {
     }      }
     my $insertlist=&Apache::edit::insertlist($target,$token);      my $insertlist=&Apache::edit::insertlist($target,$token);
     $result.=&Apache::edit::start_table($token);      $result.=&Apache::edit::start_table($token);
     $result.= (<<ENDTABLE);      my %lt = &Apache::lonlocal::texthash(
       <tr><td>Select Options</td>          sel => 'Select Options',
           add => 'Add new Option:',
           del => 'Delete an Option:',
           maxcheck => 'Enter maximum number students may check (e.g., 3)',
           mincheck => 'Enter minimum number students need to check (e.g., 1)',
       );
       $result.= sprintf(<<ENDTABLE, &Apache::loncommon::insert_folding_button());
         <tr><td>%s $lt{'sel'}</td>
         <td>          <td>
   Add new Option: <input type="text" name="$Apache::lonxml::curdepth.options" />    $lt{'add'} <input type="text" name="$Apache::lonxml::curdepth.options" />
         </td>          </td>
         <td>Delete an Option:          <td>$lt{'del'}
   <select name="$Apache::lonxml::curdepth.deleteopt">$optionlist</select>    <select name="$Apache::lonxml::curdepth.deleteopt">$optionlist</select>
         </td>          </td>
 ENDTABLE  ENDTABLE
     $result.= '<td>'.&Apache::edit::checked_arg('Print options:','texoptions',      $result.= '<td>'.&Apache::edit::checked_arg('Print options:','texoptions',
  [ ['nochoice','Don\'t show option list'] ]   [ ['nochoice',"Don't show option list"] ]
  ,$token).'</td>';   ,$token).'</td>';
     $result.= '<td><label>'.&mt('Two-option checkboxes for:').      $result.= '<td><label>'.&mt('Two-option checkboxes for:').
               '<select name="checkboxvalue_'.$Apache::lonxml::curdepth.'">';                '<select name="checkboxvalue_'.$Apache::lonxml::curdepth.'">';
Line 137  ENDTABLE Line 149  ENDTABLE
        }         }
        $result.='>'.$option.'</option>';         $result.='>'.$option.'</option>';
     }      }
     $result.='</select></label>';      $result.='</select></label> ';
       my %checknumtxt = (
                           maxcheck => 'Max. boxes permitted to check',
                           mincheck => 'Min. boxes required to check',
       );
       my (%onclicknum,%checknum);
       foreach my $item ('maxcheck','mincheck') {
           $onclicknum{$item} = 'onclick="'."updateNumber('$item','$Apache::lonxml::curdepth','check','$lt{$item}');".'"';
           $checknum{$item} = &Apache::lonxml::get_param($item,$parstack,$safeeval);
       }
     $result.=&Apache::edit::checked_arg('Checkbox options:','checkboxoptions',      $result.=&Apache::edit::checked_arg('Checkbox options:','checkboxoptions',
                                          [ ['nochoice','Don\'t show option list'] ]                                           [ ['nochoice',"Don't show option list"] ]
                                          ,$token).'</td>';                                           ,$token).' '.
                &Apache::edit::checked_arg('','noprompt',
                                            [ ['nochoice','Omit "Select all that are ... "' ] ]
                                            ,$token);
       foreach my $item ('maxcheck','mincheck') {
           my $currnum = $checknum{$item};
           unless ($currnum =~ /^\d+$/) {
               $currnum = 'nochoice';
           } 
           $result.= ' <span class="LC_nobreak">'.
                     &Apache::edit::checked_arg('',$item,[ [$currnum,$checknumtxt{$item}] ],
                                           $token,$onclicknum{$item},1).' '.
                     '<span id="'.$item.'_numtext_'.$Apache::lonxml::curdepth.'">';
           if ($checknum{$item} ne '') {
               $result .= ':&nbsp;<a href="javascript:updateNumber('."'$item','$Apache::lonxml::curdepth','link','$lt{$item}'".')">'.
                          $checknum{$item}.'</a>';
           }
           $result .= '</span></span>';
       } 
       $result.= '</td>';
     $result.= &Apache::edit::end_row();      $result.= &Apache::edit::end_row();
     $result.= &Apache::edit::start_spanning_row();      $result.= &Apache::edit::start_spanning_row();
     $result.= $insertlist.'<br />';      $result.= $insertlist.'<br />';
Line 148  ENDTABLE Line 188  ENDTABLE
   if ($target eq 'modified') {    if ($target eq 'modified') {
     my @options;      my @options;
     my $optchanged=0;      my $optchanged=0;
     eval '@options ='.&Apache::lonxml::get_param('options',$parstack,$safeeval);  
   
       eval '@options ='.&Apache::lonxml::get_param('options',$parstack,$safeeval, 0, 0, 1);
   
     if ($env{"form.$Apache::lonxml::curdepth.deleteopt"}) {      if ($env{"form.$Apache::lonxml::curdepth.deleteopt"}) {
       my $delopt=$env{"form.$Apache::lonxml::curdepth.deleteopt"};        my $delopt=$env{"form.$Apache::lonxml::curdepth.deleteopt"};
       &Apache::lonxml::debug("Deleting :$delopt:");        &Apache::lonxml::debug("Deleting :$delopt:");
Line 161  ENDTABLE Line 204  ENDTABLE
       $optchanged=1;        $optchanged=1;
     }      }
     my $rebuildtag = &Apache::edit::get_new_args($token,$parstack,$safeeval,      my $rebuildtag = &Apache::edit::get_new_args($token,$parstack,$safeeval,
  'texoptions','checkboxvalue','checkboxoptions');   'texoptions','checkboxvalue','checkboxoptions',
                                                    'noprompt','maxcheck','mincheck');
       if ($rebuildtag) {
           my $maxcheck = $token->[2]->{'maxcheck'};
           my $mincheck = $token->[2]->{'mincheck'};
           if ($mincheck =~ /D/) {
               $token->[2]->{'mincheck'}='';
           }
           if ($maxcheck =~ /D/) {
               $token->[2]->{'maxcheck'}='';
           }
           if (($mincheck ne '') && ($maxcheck ne '')) {
               if ($mincheck > $maxcheck) {
                   $token->[2]->{'mincheck'}=$maxcheck; 
               }
           }
       }
     if ($optchanged || $rebuildtag ) {      if ($optchanged || $rebuildtag ) {
       $result = "<foilgroup options=\"(";        $result = "<foilgroup options=\"(";
       foreach my $option (@options) {        foreach my $option (@options) {
Line 173  ENDTABLE Line 232  ENDTABLE
       $result.=')" ';        $result.=')" ';
       $result .= 'texoptions="'.$token->[2]{'texoptions'}.'" ';        $result .= 'texoptions="'.$token->[2]{'texoptions'}.'" ';
       $result .= 'checkboxoptions="'.$token->[2]{'checkboxoptions'}.'" ';        $result .= 'checkboxoptions="'.$token->[2]{'checkboxoptions'}.'" ';
       $result .= 'checkboxvalue="'.$token->[2]{'checkboxvalue'}.'"';        $result .= 'checkboxvalue="'.$token->[2]{'checkboxvalue'}.'" ';
         $result .= 'noprompt="'.$token->[2]{'noprompt'}.'" ';
         $result .= 'maxcheck="'.$token->[2]{'maxcheck'}.'" ';
         $result .= 'mincheck="'.$token->[2]{'mincheck'}.'"';
       $result .= '>';        $result .= '>';
     } # else nothing changed so just use the default mechanism      } # else nothing changed so just use the default mechanism
   }    }
Line 203  sub end_foilgroup { Line 265  sub end_foilgroup {
      -2,0);       -2,0);
     my $checkboxvalue=&Apache::lonxml::get_param('checkboxvalue',$parstack,$safeeval);      my $checkboxvalue=&Apache::lonxml::get_param('checkboxvalue',$parstack,$safeeval);
     my $checkboxchoices=(&Apache::lonxml::get_param('checkboxoptions',$parstack,$safeeval) ne 'nochoice');      my $checkboxchoices=(&Apache::lonxml::get_param('checkboxoptions',$parstack,$safeeval) ne 'nochoice');
     my $noprompt       =&Apache::lonxml::get_param('noprompt', $parstack, $safeeval);      my $maxcheck=&Apache::lonxml::get_param('maxcheck', $parstack, $safeeval);
       $maxcheck =~ s/\D+//g;
       my $mincheck=&Apache::lonxml::get_param('mincheck', $parstack, $safeeval);
       $mincheck =~ s/\D+//g;
       my $noprompt=&Apache::lonxml::get_param('noprompt', $parstack, $safeeval);
   
     if ($target eq 'tex' && $tex_option_switch eq 'nochoice') {@opt=();}      if ($target eq 'tex' && $tex_option_switch eq 'nochoice') {@opt=();}
     &Apache::lonxml::debug("Options are $#opt");      &Apache::lonxml::debug("Options are $#opt");
Line 211  sub end_foilgroup { Line 277  sub end_foilgroup {
     my $randomize = &Apache::lonxml::get_param('randomize',$parstack,      my $randomize = &Apache::lonxml::get_param('randomize',$parstack,
        $safeeval,'-2');         $safeeval,'-2');
     if ($target eq 'web' || $target eq 'tex') {      if ($target eq 'web' || $target eq 'tex') {
       $result.=&displayfoils($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,$tex_option_switch, $noprompt, @opt);        $result.=&displayfoils($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,$tex_option_switch, $noprompt,$maxcheck,$mincheck, @opt);
       $Apache::lonxml::post_evaluate=0;        $Apache::lonxml::post_evaluate=0;
     } elsif ( $target eq 'answer') {      } elsif ( $target eq 'answer') {
       $result.=&displayanswers($max,$randomize,@opt);        $result.=&displayanswers($max,$randomize,@opt);
Line 233  sub end_foilgroup { Line 299  sub end_foilgroup {
  my $right=0;   my $right=0;
  my $wrong=0;   my $wrong=0;
  my $ignored=0;   my $ignored=0;
           my $checked=0;
           my $corrchkd=0;
           my $corrunchkd=0;
           my $incorrchkd=0;
           my $incorrunchkd=0;
         my ($numrows,$bubbles_per_row);          my ($numrows,$bubbles_per_row);
         if ($Apache::lonhomework::scantronmode) {          if ($Apache::lonhomework::scantronmode) {
             my $numitems = scalar(@opt);              my $numitems = scalar(@opt);
Line 242  sub end_foilgroup { Line 313  sub end_foilgroup {
         if ($numrows < 1) {          if ($numrows < 1) {
             $numrows = 1;              $numrows = 1;
         }          }
           my $checkboxopt;
           if ($checkboxvalue) {
               $checkboxopt = &check_box_opt($target,$checkboxvalue,@opt);
               if (($checkboxopt) && ($Apache::lonhomework::type !~ /survey/)) {
                   my $corrnumcheck = 0;
                   if (($maxcheck ne '') || ($mincheck ne '')) {
                       foreach $name (@whichopt) {
                           if ($Apache::response::foilgroup{$name.'.value'} eq $checkboxopt) {
                               $corrnumcheck ++; 
                           }
                       }
                       if (($maxcheck ne '') && ($corrnumcheck > $maxcheck)) {
                           $maxcheck = $corrnumcheck;
                       }
                       if (($mincheck ne '') && ($corrnumcheck < $mincheck)) {
                           $mincheck = $corrnumcheck;
                       }
                   }
               }
           }
           my $part=$Apache::inputtags::part;
           my $id = $Apache::inputtags::response['-1'];
           my @relweights;
           my $nonlenient=&grading_is_nonlenient($part,$id,\@relweights);
  foreach $name (@whichopt) {   foreach $name (@whichopt) {
   my $response;    my $response;
           if ($env{'form.submitted'} eq 'scantron') {            if ($env{'form.submitted'} eq 'scantron') {
Line 279  sub end_foilgroup { Line 374  sub end_foilgroup {
     } else {      } else {
  $grade{$name}='0'; $wrong++;   $grade{$name}='0'; $wrong++;
     }      }
               if ($checkboxopt) {
                   if ($response eq $checkboxopt) {
                       $checked++;
                       if ($grade{$name}) {
                           $corrchkd ++;
                       } else {
                           $incorrchkd ++;
                       }
                   } else {
                       if ($grade{$name}) {
                           $corrunchkd ++;
                       } else {
                           $incorrunchkd ++;
                       }
                   }
               }
   } else {    } else {
     $ignored++;      $ignored++;
   }    }
  }   }
  my $part=$Apache::inputtags::part;  
         my $nonlenient=&grading_is_nonlenient($part);  
  my $id = $Apache::inputtags::response['-1'];  
  my $responsestr=&Apache::lonnet::hash2str(%responsehash);   my $responsestr=&Apache::lonnet::hash2str(%responsehash);
  my $gradestr   =&Apache::lonnet::hash2str(%grade);   my $gradestr   =&Apache::lonnet::hash2str(%grade);
  my %previous=&Apache::response::check_for_previous($responsestr,   my %previous=&Apache::response::check_for_previous($responsestr,
Line 297  sub end_foilgroup { Line 405  sub end_foilgroup {
         if ($Apache::lonhomework::type eq 'randomizetry') {          if ($Apache::lonhomework::type eq 'randomizetry') {
             $Apache::lonhomework::results{"resource.$part.$id.foilorder"} = &Apache::lonnet::array2str(@whichopt);              $Apache::lonhomework::results{"resource.$part.$id.foilorder"} = &Apache::lonnet::array2str(@whichopt);
         }          }
  if (($Apache::lonhomework::type eq 'survey') ||          my $skipaward;
             ($Apache::lonhomework::type eq 'surveycred') ||          if ($checkboxvalue) {
             ($Apache::lonhomework::type eq 'anonsurvey') ||              if ((($maxcheck ne '') && ($checked > $maxcheck)) ||
             ($Apache::lonhomework::type eq 'anonsurveycred')) {                  (($mincheck ne '') && ($checked < $mincheck))) {
     if ($ignored == 0) {                  my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='WRONG_NUMBOXESCHECKED';
                 my $ad;                  &Apache::response::handle_previous(\%previous,$ad);
                 if ($Apache::lonhomework::type eq 'anonsurveycred') {                  $skipaward = 1;
                     $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='ANONYMOUS_CREDIT';              }
                 } elsif ($Apache::lonhomework::type eq 'anonsurvey') {          }
                     $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='ANONYMOUS';          unless ($skipaward) {
                 } elsif ($Apache::lonhomework::type eq 'surveycred') {      if (($Apache::lonhomework::type eq 'survey') ||
                     $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED_CREDIT';                  ($Apache::lonhomework::type eq 'surveycred') ||
                 } else {                  ($Apache::lonhomework::type eq 'anonsurvey') ||
     $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED';                  ($Apache::lonhomework::type eq 'anonsurveycred')) {
                 }          if ($ignored == 0) {
  &Apache::response::handle_previous(\%previous,$ad);                      my $ad;
     } elsif ($wrong==0 && $right==0) {                      if ($Apache::lonhomework::type eq 'anonsurveycred') {
     } else {                          $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='ANONYMOUS_CREDIT';
  my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER';                      } elsif ($Apache::lonhomework::type eq 'anonsurvey') {
  &Apache::response::handle_previous(\%previous,$ad);                          $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='ANONYMOUS';
     }                      } elsif ($Apache::lonhomework::type eq 'surveycred') {
  } elsif ($nonlenient) {                          $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED_CREDIT';
                       } else {
           $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED';
                       }
       &Apache::response::handle_previous(\%previous,$ad);
           } elsif ($wrong==0 && $right==0) {
           } else {
       my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER';
       &Apache::response::handle_previous(\%previous,$ad);
           }
       } elsif ($nonlenient) {
 #  #
 # Non-lenient mode. All right or all wrong  # Non-lenient mode. All right or all wrong
 #  #
     my $ad;          my $ad;
     if ($wrong==0 && $ignored==0) {          if ($wrong==0 && $ignored==0) {
  $ad='EXACT_ANS';      $ad='EXACT_ANS';
     } elsif ($wrong==0 && $right==0) {          } elsif ($wrong==0 && $right==0) {
  #nothing submitted      #nothing submitted
     } else {          } else {
  if ($ignored==0) {      if ($ignored==0) {
     $ad='INCORRECT';          $ad='INCORRECT';
  } else {      } else {
     $ad='MISSING_ANSWER';          $ad='MISSING_ANSWER';
  }      }
     }          }
     $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;          $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;
     &Apache::response::handle_previous(\%previous,$ad);          &Apache::response::handle_previous(\%previous,$ad);
  } else {       } else {
 #  #
 # This is lenient mode  # This is lenient mode
 #  #
     my $ad;          my $ad;
     if ($wrong==0 && $right==0) {          if ($wrong==0 && $right==0) {
  #nothing submitted only assign a score if we       #nothing submitted only assign a score if we 
  #need to override a previous grade      #need to override a previous grade
  if (defined($Apache::lonhomework::history{"resource.$part.$id.awarddetail"})) {      if (defined($Apache::lonhomework::history{"resource.$part.$id.awarddetail"})) {
           $ad='ASSIGNED_SCORE';
       }
           } else {
     $ad='ASSIGNED_SCORE';      $ad='ASSIGNED_SCORE';
  }          }
     } else {          $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;
  $ad='ASSIGNED_SCORE';                  my $awarded;
     }                  my $totalfoils = $#{ $Apache::response::foilgroup{'names'} }+1;
     $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;                  if (($checkboxopt) && ($max >= $totalfoils) && (@relweights > 0)) {
     $Apache::lonhomework::results{"resource.$part.$id.awarded"}=                      if ($right == scalar(@whichopt)) {
  $right/(scalar(@whichopt));                          $awarded = 1;
     $Apache::lonhomework::results{"resource.$part.$id.numfoils"}=                      } else {
  scalar(@whichopt);                          $awarded = ($corrchkd*$relweights[0] + $corrunchkd*$relweights[1] +
  }                                      $incorrchkd*$relweights[2] + $incorrunchkd*$relweights[3])/(scalar(@whichopt));
                           $awarded = 1 if ($awarded > 1);
                           $awarded = 0 if ($awarded < 0);
                       }
                   } else {
                       $awarded = $right/(scalar(@whichopt));
                   }
           $Apache::lonhomework::results{"resource.$part.$id.awarded"}=
       $awarded;
           $Apache::lonhomework::results{"resource.$part.$id.numfoils"}=
       scalar(@whichopt);
        }
          }
       }        }
     }      }
     my $part_id     = $Apache::inputtags::part;      my $part_id     = $Apache::inputtags::part;
Line 389  sub end_foilgroup { Line 522  sub end_foilgroup {
 }  }
   
 sub grading_is_nonlenient {  sub grading_is_nonlenient {
     my ($part) = @_;      my ($part,$id,$relweights) = @_;
 # Web mode: we are non-lenient unless told otherwise  # Web mode: we are non-lenient unless told otherwise
     my $defaultparm = 'off';      my $defaultparm = 'off';
     my $nonlenient = 0;      my $nonlenient = 1;
 # Grading a bubblesheet exam: we are grading lenient unless told otherwise  # Grading a bubblesheet exam: we are grading lenient unless told otherwise
     if ($Apache::lonhomework::scantronmode) {      if ($Apache::lonhomework::scantronmode) {
         $defaultparm = 'on';          $defaultparm = 'on';
         $nonlenient = 1;          $nonlenient = 0;
     }      }
     my $lenientparm =      my $lenientparm =
         &Apache::response::get_response_param($part,'lenient',$defaultparm);          &Apache::response::get_response_param($part,'lenient',$defaultparm);
     if ($lenientparm=~/^0|off|no$/i) {      if ($lenientparm eq 'default') {
           $lenientparm = $defaultparm;
       }
       $lenientparm =
           &Apache::response::get_response_param($part.'_'.$id,'lenient',$lenientparm);
       if ($lenientparm eq 'default') {
           $lenientparm = $defaultparm;
       }
       if ($lenientparm=~/^(?:0|off|no)$/i) {
         $nonlenient = 1;          $nonlenient = 1;
     } elsif ($lenientparm=~/^1|on|yes$/i) {      } elsif ($lenientparm=~/^(?:1|on|yes)$/i) {
           $nonlenient = 0;
       } elsif ($lenientparm =~ /^\-?[.\d]+,\-?[.\d]+,\-?[.\d]+,\-?[.\d]+$/) {
           if (ref($relweights) eq 'ARRAY') {
               @{$relweights} = split(/,/,$lenientparm);
           }
         $nonlenient = 0;          $nonlenient = 0;
     }      }
       if (!$nonlenient) {
           $Apache::inputtags::leniency=1;
       }
     return $nonlenient;      return $nonlenient;
 }  }
   
Line 427  sub whichfoils { Line 576  sub whichfoils {
   
 sub displayanswers {  sub displayanswers {
     my ($max,$randomize,@opt)=@_;      my ($max,$randomize,@opt)=@_;
     if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}      my @names;
     my @names = @{ $Apache::response::foilgroup{'names'} };      if (ref($Apache::response::foilgroup{'names'}) eq 'ARRAY') {
           @names = @{ $Apache::response::foilgroup{'names'} };
       }
       return if (!@names);
     my @whichopt = &whichfoils($max,$randomize);      my @whichopt = &whichfoils($max,$randomize);
     my $result;      my $result;
     if ($Apache::lonhomework::type eq 'exam') {      if ($Apache::lonhomework::type eq 'exam') {
Line 461  sub check_box_opt { Line 613  sub check_box_opt {
 # Check if we are in checkbox mode: checkboxvalue specified, on web, only two options.  # Check if we are in checkbox mode: checkboxvalue specified, on web, only two options.
 # If so, return "checked" value  # If so, return "checked" value
     if ($#opt!=1) { return ''; }      if ($#opt!=1) { return ''; }
     if ($target ne 'web') { return ''; }      unless (($target eq 'web') || ($target eq 'grade')) { return ''; }
     return $checkboxvalue;      return $checkboxvalue;
 }  }
   
Line 488  sub check_for_invalid { Line 640  sub check_for_invalid {
   
 sub displayfoils {  sub displayfoils {
   my ($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,    my ($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,
       $tex_option_switch, $no_tfprompt, @opt)=@_;        $tex_option_switch, $no_tfprompt, $maxcheck, $mincheck, @opt)=@_;
   if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}    my @names; 
   my @names = @{ $Apache::response::foilgroup{'names'} };    if (ref($Apache::response::foilgroup{'names'}) eq 'ARRAY') {
         @names = @{ $Apache::response::foilgroup{'names'} };
     }
     unless (@names > 0) { return;}
   my @truelist;    my @truelist;
   my @falselist;    my @falselist;
   my $result;      my $result;  
Line 510  sub displayfoils { Line 665  sub displayfoils {
     foreach $name (@whichopt) {      foreach $name (@whichopt) {
  my $text=$Apache::response::foilgroup{$name.'.text'};   my $text=$Apache::response::foilgroup{$name.'.text'};
         my $lastresp;          my $lastresp;
         unless ((($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurvey') || ($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurveycred')) && (defined($env{'form.grade_symb'}))) {          if ((($env{'form.grade_username'} eq '') && ($env{'form.grade_domain'} eq '')) ||
               (($env{'form.grade_username'} eq $env{'user.name'}) &&
                ($env{'form.grade_domain'} eq $env{'user.domain'}))) {
             $lastresp = $Apache::lonhomework::history{"resource.$part.$id.submission"};              $lastresp = $Apache::lonhomework::history{"resource.$part.$id.submission"};
           } else {
               unless (($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurvey') ||
                       ($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurveycred')) {
                   $lastresp = $Apache::lonhomework::history{"resource.$part.$id.submission"};
               }
         }          }
  my %lastresponse=&Apache::lonnet::str2hash($lastresp);   my %lastresponse=&Apache::lonnet::str2hash($lastresp);
  my $lastopt=$lastresponse{$name};   my $lastopt=$lastresponse{$name};
Line 550  sub displayfoils { Line 712  sub displayfoils {
         }          }
     }      }
     unless ($newvariation) {      unless ($newvariation) {
         %lastresponse=&Apache::lonnet::str2hash($Apache::lonhomework::history{"resource.$part.$id.submission"});          if ((($env{'form.grade_username'} eq '') && ($env{'form.grade_domain'} eq '')) ||
               (($env{'form.grade_username'} eq $env{'user.name'}) &&
                ($env{'form.grade_domain'} eq $env{'user.domain'}))) {
                    %lastresponse =
                        &Apache::lonnet::str2hash($Apache::lonhomework::history{"resource.$part.$id.submission"});
           } else {
               unless (($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurvey') ||
                       ($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurveycred')) {
                   %lastresponse =
                       &Apache::lonnet::str2hash($Apache::lonhomework::history{"resource.$part.$id.submission"});
               }
           }
     }      }
     my $internal_counter=$Apache::lonxml::counter;      my $internal_counter=$Apache::lonxml::counter;
     my $checkboxopt=&check_box_opt($target,$checkboxvalue,@opt);      my $checkboxopt;
       if ($target eq 'web') {
           $checkboxopt=&check_box_opt($target,$checkboxvalue,@opt);
       }
     if ($checkboxopt && (!$no_tfprompt)) {      if ($checkboxopt && (!$no_tfprompt)) {
        $result.='<br />'.         $result.='<br />'.
                 ($checkboxchoices?&mt('Choices: ').'<b>'.$opt[0].','.$opt[1].'</b>. ':'').                  ($checkboxchoices?&mt('Choices: ').'<b>'.$opt[0].','.$opt[1].'</b>. ':'').
                  &mt('Select all that are <b>[_1]</b>.',$checkboxopt);                   &mt('Select all that are [_1].','<b>'.$checkboxopt.'</b>');
     }      }
     foreach $name (@whichopt) {      foreach $name (@whichopt) {
       my $text=$Apache::response::foilgroup{$name.'.text'};        my $text=$Apache::response::foilgroup{$name.'.text'};
Line 619  sub displayfoils { Line 795  sub displayfoils {
 # fieldname is this input field's name after HWVAL_  # fieldname is this input field's name after HWVAL_
                   $optionlist='<input type="hidden" name="HWVAL_'.$fieldname.'" value="'.$escdefopt.'" />'.                    $optionlist='<input type="hidden" name="HWVAL_'.$fieldname.'" value="'.$escdefopt.'" />'.
                   '<input type="checkbox" name="HWCHK_'.$fieldname.'" onclick="javascript:if (this.form.elements[\'HWCHK_'.                    '<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"':'')." />\n";                    $fieldname.'\'].checked) { this.form.elements[\'HWVAL_'.$fieldname.'\'].value=\''.$esccheckboxopt.'\'; } else { this.form.elements[\'HWVAL_'.$fieldname.'\'].value=\''.$escaltopt.'\'; };javascript:setSubmittedPart(\''.$part.'\');"'.($defopt eq $checkboxopt?' checked="checked"':'')." />\n";
               } else {                } else {
 # classic selection list  # classic selection list
           $optionlist='<select onchange="javascript:setSubmittedPart(\''.            $optionlist='<select onchange="javascript:setSubmittedPart(\''.

Removed from v.1.186  
changed lines
  Added in v.1.201


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