Diff for /loncom/homework/optionresponse.pm between versions 1.167 and 1.175

version 1.167, 2010/08/23 04:43:04 version 1.175, 2011/03/07 19:42:21
Line 103  sub start_foilgroup { Line 103  sub start_foilgroup {
   my $result='';    my $result='';
   %Apache::response::foilgroup=();    %Apache::response::foilgroup=();
   $Apache::optionresponse::conceptgroup=0;    $Apache::optionresponse::conceptgroup=0;
   &Apache::response::pushrandomnumber();    &Apache::response::pushrandomnumber(undef,$target);
   if ($target eq 'edit') {    if ($target eq 'edit') {
     my $optionlist="<option></option>\n";      my $optionlist="<option></option>\n";
     my $option;      my $option;
Line 137  ENDTABLE Line 137  ENDTABLE
        }         }
        $result.='>'.$option.'</option>';         $result.='>'.$option.'</option>';
     }      }
     $result.='</select></label>';        $result.='</select></label>';
       $result.=&Apache::edit::checked_arg('Checkbox options:','checkboxoptions',
                                            [ ['nochoice','Don\'t show option list'] ]
                                            ,$token).'</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 162  ENDTABLE Line 165  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');   'texoptions','checkboxvalue','checkboxoptions');
     if ($optchanged || $rebuildtag ) {      if ($optchanged || $rebuildtag ) {
       $result = "<foilgroup options=\"(";        $result = "<foilgroup options=\"(";
       foreach my $option (@options) {        foreach my $option (@options) {
Line 173  ENDTABLE Line 176  ENDTABLE
       chop $result;        chop $result;
       $result.=')" ';        $result.=')" ';
       $result .= 'texoptions="'.$token->[2]{'texoptions'}.'" ';        $result .= 'texoptions="'.$token->[2]{'texoptions'}.'" ';
         $result .= 'checkboxoptions="'.$token->[2]{'checkboxoptions'}.'" ';
       $result .= 'checkboxvalue="'.$token->[2]{'checkboxvalue'}.'"';        $result .= 'checkboxvalue="'.$token->[2]{'checkboxvalue'}.'"';
       $result .= '>';        $result .= '>';
     } # else nothing changed so just use the default mechanism      } # else nothing changed so just use the default mechanism
Line 202  sub end_foilgroup { Line 206  sub end_foilgroup {
     my $TeXlayout=&Apache::lonxml::get_param('TeXlayout',$parstack,$safeeval,      my $TeXlayout=&Apache::lonxml::get_param('TeXlayout',$parstack,$safeeval,
      -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');
     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");
     my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2');      my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2');
     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,@opt);        $result.=&displayfoils($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,@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 220  sub end_foilgroup { Line 225  sub end_foilgroup {
  my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";   my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";
  push (@{ $Apache::lonhomework::analyze{"$part_id.options"} },@opt);   push (@{ $Apache::lonhomework::analyze{"$part_id.options"} },@opt);
     } elsif ( $target eq 'grade') {      } elsif ( $target eq 'grade') {
   
         my $nonlenient=0;
         my $part=$Apache::inputtags::part;
         my $lenientparm=&Apache::lonnet::EXT("resource.$part.lenient");
   
         if ($Apache::lonhomework::scantronmode) {
            $nonlenient=0;
   # Grading an exam: we are grading lenient unless told not to
            if ($lenientparm=~/^0|off|no$/i) {
               $nonlenient=1;
            }
         } else {
   # Web mode: we are non-lenient unless told to
            $nonlenient=1;
            if ($lenientparm=~/^1|on|yes$/i) {
               $nonlenient=0;
            }
         }
       if ( &Apache::response::submitted()) {        if ( &Apache::response::submitted()) {
   
  my @whichopt = &whichfoils($max,$randomize);   my @whichopt = &whichfoils($max,$randomize);
  my $temp=1;my $name;   my $temp=1;my $name;
  my %responsehash;   my %responsehash;
Line 257  sub end_foilgroup { Line 281  sub end_foilgroup {
  $Apache::lonhomework::results{"resource.$part.$id.submission"}=   $Apache::lonhomework::results{"resource.$part.$id.submission"}=
     $responsestr;      $responsestr;
  $Apache::lonhomework::results{"resource.$part.$id.submissiongrading"}=$gradestr;   $Apache::lonhomework::results{"resource.$part.$id.submissiongrading"}=$gradestr;
           if ($Apache::lonhomework::type eq 'randomizetry') {
               $Apache::lonhomework::results{"resource.$part.$id.foilorder"} = &Apache::lonnet::array2str(@whichopt);
           }
  if (($Apache::lonhomework::type eq 'survey') ||   if (($Apache::lonhomework::type eq 'survey') ||
             ($Apache::lonhomework::type eq 'surveycred') ||              ($Apache::lonhomework::type eq 'surveycred') ||
             ($Apache::lonhomework::type eq 'anonsurvey') ||              ($Apache::lonhomework::type eq 'anonsurvey') ||
Line 279  sub end_foilgroup { Line 305  sub end_foilgroup {
  my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER';   my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER';
  &Apache::response::handle_previous(\%previous,$ad);   &Apache::response::handle_previous(\%previous,$ad);
     }      }
  } elsif (!$Apache::lonhomework::scantronmode) {   } elsif ($nonlenient) {
   #
   # 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';
Line 295  sub end_foilgroup { Line 324  sub end_foilgroup {
     $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
   #
     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 
Line 414  sub check_for_invalid { Line 446  sub check_for_invalid {
 }  }
   
 sub displayfoils {  sub displayfoils {
   my ($target,$max,$randomize,$TeXlayout,$checkboxvalue,@opt)=@_;    my ($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,@opt)=@_;
   if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}    if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}
   my @names = @{ $Apache::response::foilgroup{'names'} };    my @names = @{ $Apache::response::foilgroup{'names'} };
   my @truelist;    my @truelist;
Line 428  sub displayfoils { Line 460  sub displayfoils {
   my $part=$Apache::inputtags::part;    my $part=$Apache::inputtags::part;
   my $id=$Apache::inputtags::response[-1];    my $id=$Apache::inputtags::response[-1];
   my $break;    my $break;
   my $solved=$Apache::lonhomework::history{"resource.$part.solved"};  
   if ( ($target ne 'tex') &&    if ( ($target ne 'tex') &&
        &Apache::response::show_answer() ) {         &Apache::response::show_answer() ) {
     my $temp=1;      my $temp=1;
Line 451  sub displayfoils { Line 482  sub displayfoils {
     $text='<b>'.$value.':</b> '.$text;      $text='<b>'.$value.':</b> '.$text;
  }   }
     } else {      } else {
  $text='&#149;'.$text;                  if (@whichopt > 1) {
                       $text='&#149;'.$text;
                   }
     }      }
     $result.=$text."\n";      $result.=$text."\n";
  }   }
Line 462  sub displayfoils { Line 495  sub displayfoils {
     }      }
   } else {    } else {
     my $temp=1;      my $temp=1;
     my %lastresponse=&Apache::lonnet::str2hash($Apache::lonhomework::history{"resource.$part.$id.submission"});      my %lastresponse;
       my $newvariation;
       if ((($Apache::lonhomework::history{"resource.$part.type"} eq 'randomizetry') ||
           ($Apache::lonhomework::type eq 'randomizetry')) &&
           ($Apache::inputtags::status[-1] eq 'CAN_ANSWER')) {
           if ($env{'form.'.$part.'.rndseed'} ne
               $Apache::lonhomework::history{"resource.$part.rndseed"}) {
               $newvariation = 1;
           }
       }
       unless ($newvariation) {
           %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=&check_box_opt($target,$checkboxvalue,@opt);
     if ($checkboxopt) {      if ($checkboxopt) {
        $result.='<br />'.&mt('Select all that are <b>[_1]</b>.',$checkboxopt);         $result.='<br />'.
                   ($checkboxchoices?&mt('Choices: ').'<b>'.$opt[0].','.$opt[1].'</b>. ':'').
                    &mt('Select all that are <b>[_1]</b>.',$checkboxopt);
     }      }
     foreach $name (@whichopt) {      foreach $name (@whichopt) {
       my $text=$Apache::response::foilgroup{$name.'.text'};        my $text=$Apache::response::foilgroup{$name.'.text'};
Line 541  sub displayfoils { Line 588  sub displayfoils {
   }    }
   if ($text=~s|<drawoptionlist\s*/>|$optionlist|) {    if ($text=~s|<drawoptionlist\s*/>|$optionlist|) {
       if ($Apache::lonhomework::type ne 'exam') {        if ($Apache::lonhomework::type ne 'exam') {
   $text='&#149;'.$text;                    if (@whichopt > 1) {  
                         $text='&#149;'.$text;
                     }
       }        }
   } else {    } else {
       if ($Apache::lonhomework::type ne 'exam') {        if ($Apache::lonhomework::type ne 'exam') {
Line 599  sub displayfoils { Line 648  sub displayfoils {
   }    }
   
   if ($target eq 'web') {    if ($target eq 'web') {
       &Apache::response::setup_prior_tries_hash(\&Apache::rankresponse::format_prior_answer,        my $data = [\@whichopt,'submissiongrading'];
  [\@whichopt,        my $questiontype;
  'submissiongrading']);        if ($Apache::lonhomework::type eq 'randomizetry') {
             $questiontype = $Apache::lonhomework::type,
         }
         &Apache::response::setup_prior_tries_hash(\&Apache::rankresponse::format_prior_answer,$data,$questiontype);
   }    }
   
   if ($target ne 'tex') {    if ($target ne 'tex') {
Line 690  sub bubbles { Line 742  sub bubbles {
   
  $current_length += (length($opt[$ind])+length($alphabet[$ind])+4)*2;   $current_length += (length($opt[$ind])+length($alphabet[$ind])+4)*2;
  if ($current_length<($textwidth-$leftmargin) and $ind!=$number_of_bubbles) {   if ($current_length<($textwidth-$leftmargin) and $ind!=$number_of_bubbles) {
     $line.='\hskip 1pc {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';      $line.='\hskip 4 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';
     $head.='lr';      $head.='lr';
  } else {   } else {
     $line=~s/\&\s*$//;      $line=~s/\&\s*$//;
     $result.='\vskip -2 mm\noindent\setlength{\tabcolsep}{2 mm}\begin{tabular}{'.$head.'}'.$line.'\\\\\end{tabular}\vskip 0 mm';      $result.='\vskip -1 mm\noindent\setlength{\tabcolsep}{2 mm}\renewcommand{\arraystretch}{1.25}\begin{tabular}{'.$head.'}'.$line.'\\\\\end{tabular}\vskip 0 mm';
     $line = '\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';;      $line = '\hskip 4 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';;
     $head ='lr';      $head ='lr';
     $current_length = (length($opt[$ind])+length($alphabet[$ind]))*2;      $current_length = (length($opt[$ind])+length($alphabet[$ind]))*2;
  }   }

Removed from v.1.167  
changed lines
  Added in v.1.175


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