Diff for /loncom/homework/optionresponse.pm between versions 1.193 and 1.197

version 1.193, 2013/12/03 17:22:08 version 1.197, 2015/04/09 09:48:02
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 124  sub start_foilgroup { Line 125  sub start_foilgroup {
         sel => 'Select Options',          sel => 'Select Options',
         add => 'Add new Option:',          add => 'Add new Option:',
         del => 'Delete an 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.= (<<ENDTABLE);      $result.= sprintf(<<ENDTABLE, &Apache::loncommon::insert_folding_button());
       <tr><td>$lt{'sel'}</td>        <tr><td>%s $lt{'sel'}</td>
         <td>          <td>
   $lt{'add'} <input type="text" name="$Apache::lonxml::curdepth.options" />    $lt{'add'} <input type="text" name="$Apache::lonxml::curdepth.options" />
         </td>          </td>
Line 146  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 173  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 185  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 215  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 223  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 245  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 ($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 254  sub end_foilgroup { Line 309  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;
                       }
                   }
               }
           }
  foreach $name (@whichopt) {   foreach $name (@whichopt) {
   my $response;    my $response;
           if ($env{'form.submitted'} eq 'scantron') {            if ($env{'form.submitted'} eq 'scantron') {
Line 291  sub end_foilgroup { Line 366  sub end_foilgroup {
     } else {      } else {
  $grade{$name}='0'; $wrong++;   $grade{$name}='0'; $wrong++;
     }      }
               if ($checkboxopt) {
                   if ($response eq $checkboxopt) {
                       $checked++;
                   }
               } 
   } else {    } else {
     $ignored++;      $ignored++;
   }    }
Line 309  sub end_foilgroup { Line 389  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';          $Apache::lonhomework::results{"resource.$part.$id.awarded"}=
     }      $right/(scalar(@whichopt));
     $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;          $Apache::lonhomework::results{"resource.$part.$id.numfoils"}=
     $Apache::lonhomework::results{"resource.$part.$id.awarded"}=      scalar(@whichopt);
  $right/(scalar(@whichopt));       }
     $Apache::lonhomework::results{"resource.$part.$id.numfoils"}=         }
  scalar(@whichopt);  
  }  
       }        }
     }      }
     my $part_id     = $Apache::inputtags::part;      my $part_id     = $Apache::inputtags::part;
Line 476  sub check_box_opt { Line 567  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 503  sub check_for_invalid { Line 594  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)=@_;
   my @names;     my @names; 
   if (ref($Apache::response::foilgroup{'names'}) eq 'ARRAY') {    if (ref($Apache::response::foilgroup{'names'}) eq 'ARRAY') {
       @names = @{ $Apache::response::foilgroup{'names'} };        @names = @{ $Apache::response::foilgroup{'names'} };
Line 589  sub displayfoils { Line 680  sub displayfoils {
         }          }
     }      }
     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>. ':'').

Removed from v.1.193  
changed lines
  Added in v.1.197


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.