File:  [LON-CAPA] / loncom / homework / radiobuttonresponse.pm
Revision 1.4: download - view: text, annotated - select for diffs
Thu Jan 11 22:17:30 2001 UTC (23 years, 5 months ago) by albertel
Branches: MAIN
CVS tags: HEAD
- radiobuttons appear

# The LearningOnline Network with CAPA
# mutliple choice style responses

# 11/23,11/24,11/28 Gerd Kortemeyer

package Apache::radiobuttonresponse;
use strict;

sub BEGIN {
  &Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse'));
}

sub start_radiobuttonresponse {
  my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
  #when in a radiobutton response use these
  &Apache::lonxml::register('Apache::radiobuttonresponse',('foilgroup','foil'));
  my $id = &Apache::response::start_response($parstack,$safeeval);
  return '';
}

sub end_radiobuttonresponse {
  &Apache::response::end_response;
  return '';
}

%Apache::response::foilgroup={};
sub start_foilgroup {
  %Apache::response::foilgroup={};
}

#FIXME needs to stablely do random picks
sub end_foilgroup {
  my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
  my $name;
  my $result;
  my @names = @{ $Apache::response::foilgroup{'names'} };
  my @truelist;
  my @falselist;
  my $rndseed=&Apache::lonnet::rndseed();
  $rndseed=$rndseed
    +&Apache::lonnet::numval($Apache::inputtags::part)
      +&Apache::lonnet::numval($Apache::inputtags::response['-1']);
  srand($rndseed*10);
  foreach $name (@names) {
    $result.="<br><b>$name</b> is <i> $Apache::response::foilgroup{$name.'.value'} </i>";
    if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
      push (@truelist,$name);
    } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
      push (@falselist,$name);
    } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') {
    } else {
      &Apache::lonxml::error("Unknow state $Apache::response::foilgroup{$name.'.value'} for $name in <foilgroup>");
    }
  }
  my $rrargs ='';
  if ( $#$parstack > 0 ) { $rrargs=$$parstack['-2']; }
  my $max = &Apache::run::run("{$rrargs;".'return $max}',$safeeval);
  my $whichtrue = rand $#truelist;
  &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
  my @whichfalse =();
  my $temp=0;
  while ((($#whichfalse+2) < $max) && ($#falselist > -1)) {
    my $afalse=rand $#falselist;
    &Apache::lonxml::debug("From $#falselist elms, picking $afalse");
    $afalse=splice(@falselist,$afalse,1);
    &Apache::lonxml::debug("Picked $afalse");
    push (@whichfalse,$afalse);
  }
  my $where = rand $max;
  splice(@whichfalse,$where,0,$truelist[$whichtrue]);
  my $temp;
  foreach $temp (@whichfalse) {
    $result.='<input type="radio" name="bob">'.$Apache::response::foilgroup{$temp.'.text'}."</input><br />\n";
  }
  return $result;
}

sub start_foil {
  &Apache::lonxml::debug("redirection be  $Apache::lonxml::redirection");
  $Apache::lonxml::redirection--;
}

sub end_foil {
  my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
  if ($target eq 'web' || $target eq 'grade') {
    my $args ='';
    if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
    my $name = &Apache::run::run("{$args;".'return $name}',$safeeval);
    push @{ $Apache::response::foilgroup{'names'} }, $name;
    my $value = &Apache::run::run("{$args;".'return $value}',$safeeval);
    $Apache::response::foilgroup{"$name.value"} = $value;
    $Apache::response::foilgroup{"$name.text"} = $Apache::lonxml::outputstack;
  }
  
  $Apache::lonxml::redirection++;
  &Apache::lonxml::debug("redirection is  $Apache::lonxml::redirection");
  if ($Apache::lonxml::redirection == 1) { 
    &Apache::lonxml::debug("reset $Apache::lonxml::outputstack");
    $Apache::lonxml::outputstack=''; 
  }
  return '';
}

1;
__END__
 

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.