Diff for /loncom/homework/optionresponse.pm between versions 1.122 and 1.136

version 1.122, 2004/12/04 00:41:26 version 1.136, 2007/01/17 10:46:13
Line 29  package Apache::optionresponse; Line 29  package Apache::optionresponse;
 use strict;  use strict;
 use Apache::response();  use Apache::response();
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   
 BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::optionresponse',('optionresponse'));    &Apache::lonxml::register('Apache::optionresponse',('optionresponse'));
Line 113  sub start_foilgroup { Line 114  sub start_foilgroup {
         <td>Delete an Option:          <td>Delete an Option:
   <select name="$Apache::lonxml::curdepth.deleteopt">$optionlist</select>    <select name="$Apache::lonxml::curdepth.deleteopt">$optionlist</select>
 ENDTABLE  ENDTABLE
       $result.= &Apache::edit::checked_arg('Print options:','texoptions',
    [ ['nochoice','Don\'t show option list'] ]
    ,$token);
     $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 121  ENDTABLE Line 125  ENDTABLE
     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);
     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:");
       splice(@options,$delopt-1,1);        splice(@options,$delopt-1,1);
       $optchanged=1;        $optchanged=1;
     }      }
     if ($ENV{"form.$Apache::lonxml::curdepth.options"}) {      if ($env{"form.$Apache::lonxml::curdepth.options"}) {
       my $newopt = $ENV{"form.$Apache::lonxml::curdepth.options"};        my $newopt = $env{"form.$Apache::lonxml::curdepth.options"};
       if ($options[0]) {        if ($options[0]) {
  push(@options,$newopt);   push(@options,$newopt);
       } else {        } else {
Line 136  ENDTABLE Line 140  ENDTABLE
       }        }
       $optchanged=1;        $optchanged=1;
     }      }
     if ($optchanged) {      my $rebuildtag = &Apache::edit::get_new_args($token,$parstack,$safeeval,
    ('texoptions'));
       if ($optchanged || $rebuildtag ) {
       $result = "<foilgroup options=\"(";        $result = "<foilgroup options=\"(";
       foreach my $option (@options) {        foreach my $option (@options) {
  $option=~s/\'/\\\'/g;   $option=~s/\'/\\\'/g;
Line 144  ENDTABLE Line 150  ENDTABLE
  $result .="'".$option."',";   $result .="'".$option."',";
       }        }
       chop $result;        chop $result;
       $result.=')">';        $result.=')" ';
         $result .= 'texoptions="'.$token->[2]{'texoptions'}.'" ';
         $result .= '>';
     } # else nothing changed so just use the default mechanism      } # else nothing changed so just use the default mechanism
   }    }
   if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {    if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {
Line 164  sub end_foilgroup { Line 172  sub end_foilgroup {
     my $name;      my $name;
     my @opt;      my @opt;
     eval '@opt ='.&Apache::lonxml::get_param('options',$parstack,$safeeval);      eval '@opt ='.&Apache::lonxml::get_param('options',$parstack,$safeeval);
       &Apache::lonxml::debug("options:".join(':',@opt));
   
     my $TeXlayout=&Apache::lonxml::get_param('TeXlayout',$parstack,$safeeval,      my $TeXlayout=&Apache::lonxml::get_param('TeXlayout',$parstack,$safeeval,
      -2,0);       -2,0);
     if ($target eq 'tex' && $tex_option_switch eq 'nochoice') {@opt=();}      if ($target eq 'tex' && $tex_option_switch eq 'nochoice') {@opt=();}
Line 175  sub end_foilgroup { Line 185  sub end_foilgroup {
       $result.=&displayfoils($target,$max,$randomize,$TeXlayout,@opt);        $result.=&displayfoils($target,$max,$randomize,$TeXlayout,@opt);
     } elsif ( $target eq 'answer') {      } elsif ( $target eq 'answer') {
       $result.=&displayanswers($max,$randomize,@opt);        $result.=&displayanswers($max,$randomize,@opt);
         
     } elsif ( $target eq 'analyze') {      } elsif ( $target eq 'analyze') {
  my @shown = &whichfoils($max,$randomize);   my @shown = &whichfoils($max,$randomize);
  &Apache::response::analyze_store_foilgroup(\@shown,   &Apache::response::analyze_store_foilgroup(\@shown,
Line 182  sub end_foilgroup { Line 193  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') {
       if ( defined $ENV{'form.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 192  sub end_foilgroup { Line 203  sub end_foilgroup {
  my $ignored=0;   my $ignored=0;
  foreach $name (@whichopt) {   foreach $name (@whichopt) {
   my $response=&Apache::response::getresponse($temp);    my $response=&Apache::response::getresponse($temp);
   if ($ENV{'form.submitted'} eq 'scantron' && $response=~/\S/) {    if ($env{'form.submitted'} eq 'scantron' && $response=~/\S/) {
       $response = $opt[$response];        $response = $opt[$response];
   }    }
   if ( $response =~ /[^\s]/) {    if ( $response =~ /[^\s]/) {
Line 292  sub whichfoils { Line 303  sub whichfoils {
 }  }
   
 sub displayanswers {  sub displayanswers {
   my ($max,$randomize,@opt)=@_;      my ($max,$randomize,@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 @whichopt = &whichfoils($max,$randomize);      my @whichopt = &whichfoils($max,$randomize);
   my $result=&Apache::response::answer_header('optionresponse');      my $result;
   foreach my $name (@whichopt) {      if ($Apache::lonhomework::type eq 'exam') {
     $result.=&Apache::response::answer_part('optionresponse',   my $i = 0;
      $Apache::response::foilgroup{$name.'.value'})   my %opt = map { ($_,$i++) } @opt;
   }  
   $result.=&Apache::response::answer_footer('optionresponse');   $i = 0;
   return $result;   my @alphabet = ('A'..'Z');
    foreach my $name (@whichopt) {
       $result.=&Apache::response::answer_header('optionresponse',$i++);
       $result.=&Apache::response::answer_part('optionresponse',
       $alphabet[$opt{$Apache::response::foilgroup{$name.'.value'}}]);
       $result.=&Apache::response::answer_part('optionresponse',
       $Apache::response::foilgroup{$name.'.value'});
       $result.=&Apache::response::answer_footer('optionresponse');
    }
       } else {
    $result=&Apache::response::answer_header('optionresponse');
    foreach my $name (@whichopt) {
       $result.=&Apache::response::answer_part('optionresponse',
       $Apache::response::foilgroup{$name.'.value'});
    }
    $result.=&Apache::response::answer_footer('optionresponse');
       }
       return $result;
 }  }
   
 sub check_for_invalid {  sub check_for_invalid {
Line 357  sub displayfoils { Line 385  sub displayfoils {
  if ($text=~/^\s*$/) {   if ($text=~/^\s*$/) {
     $text=$value.$text;      $text=$value.$text;
  } else {   } else {
     $text=$value.': '.$text;      $text='<b>'.$value.':</b> '.$text;
  }   }
     } else {      } else {
  $text='&#149;'.$text;   $text='&#149;'.$text;
Line 384  sub displayfoils { Line 412  sub displayfoils {
       }        }
       my $lastopt=$lastresponse{$name};        my $lastopt=$lastresponse{$name};
       my $optionlist="<option></option>\n";        my $optionlist="<option></option>\n";
       my $option;        foreach my $option (@opt) {
       foreach $option (@opt) {    my $escopt=&HTML::Entities::encode($option,'\'"&<>');
  if ($option eq $lastopt) {    if ($option eq $lastopt) {
   $optionlist.="<option selected=\"on\">$option</option>\n";        $optionlist.="<option value='".$escopt."' selected=\"selected\">$option</option>\n";
  } else {    } else {
   $optionlist.="<option>$option</option>\n";        $optionlist.="<option value='".$escopt."'>$option</option>\n";
  }    }
       }        }
       if ($target ne 'tex') {        if ($target ne 'tex') {
   if ($Apache::lonhomework::type ne 'exam') {    if ($Apache::lonhomework::type ne 'exam') {
Line 421  sub displayfoils { Line 449  sub displayfoils {
       $texoptionlist = &optionlist_correction($TeXlayout,@opt);        $texoptionlist = &optionlist_correction($TeXlayout,@opt);
   }    }
   if ($text=~/<drawoptionlist\s*\/>/) {    if ($text=~/<drawoptionlist\s*\/>/) {
       $text=~s|<drawoptionlist\s*/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |;        $text=~s|<drawoptionlist\s*\/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |g;
   }    }
   
   if ($text=~m/\\item /) {    if ($text=~m/\\item /) {
Line 511  sub bubbles { Line 539  sub bubbles {
     my $number_of_bubbles = $#opt + 1;      my $number_of_bubbles = $#opt + 1;
     my $current_length = 0;      my $current_length = 0;
     my $textwidth;      my $textwidth;
     if ($ENV{'form.textwidth'} ne '') {      if ($env{'form.textwidth'} ne '') {
  $ENV{'form.textwidth'}=~/(\d+)/;   $env{'form.textwidth'}=~/(\d+)/;
  $textwidth=$1;   $textwidth=$1;
     } else {      } else {
  $ENV{'textwidth'}=~/(\d*)\.?(\d*)/;   $env{'form.textwidth'}=~/(\d*)\.?(\d*)/;
  $textwidth=$1.'.'.$2;   $textwidth=$1.'.'.$2;
     }      }
     for (my $ind=0;$ind<=$number_of_bubbles;$ind++) {      for (my $ind=0;$ind<=$number_of_bubbles;$ind++) {
Line 529  sub bubbles { Line 557  sub bubbles {
     $head.='lr';      $head.='lr';
  } else {   } else {
     $line=~s/\&\s*$//;      $line=~s/\&\s*$//;
     $result.='\vskip -2 mm\noindent\begin{tabular}{'.$head.'}'.$line.'\\\\\end{tabular}\vskip 0 mm';      $result.='\vskip -2 mm\noindent\setlength{\tabcolsep}{2 mm}\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 -1 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;
Line 629  sub end_foil { Line 657  sub end_foil {
     if ($value ne 'unused') {      if ($value ne 'unused') {
       my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);        my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
       &Apache::lonxml::debug("Got a name of :$name:");        &Apache::lonxml::debug("Got a name of :$name:");
       if (!$name) { $name=$Apache::lonxml::curdepth; }        if ($name eq "") {
     &Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction.");
     $name=$Apache::lonxml::curdepth;
         }
       &Apache::lonxml::debug("Using a name of :$name:");        &Apache::lonxml::debug("Using a name of :$name:");
       if (defined($Apache::response::foilnames{$name})) {        if (defined($Apache::response::foilnames{$name})) {
   &Apache::lonxml::error(&mt("Foil name <b><tt>[_1]</tt></b> appears more than once. Foil names need to be unique.",$name));    &Apache::lonxml::error(&mt("Foil name <b><tt>[_1]</tt></b> appears more than once. Foil names need to be unique.",$name));
Line 658  sub end_foil { Line 689  sub end_foil {
   
 sub start_drawoptionlist {  sub start_drawoptionlist {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if ($target ne 'meta') {      if (($target ne 'meta')  && ($target ne 'answer')) {
  return $token->[4];   return $token->[4];
     }      }
 }  }
   
 sub end_drawoptionlist {  sub end_drawoptionlist {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if ($target ne 'meta') {      if (($target ne 'meta') && ($target ne 'answer')) {
  return $token->[2];   return $token->[2];
     }      }
 }  }

Removed from v.1.122  
changed lines
  Added in v.1.136


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