# 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 { #when in a radiobutton response use these &Apache::lonxml::register('Apache::radiobuttonresponse',('foilgroup','foil')); } sub end_radiobuttonresponse { } %Apache::response::foilgroup={}; sub start_foilgroup { %Apache::response::foilgroup={}; } sub end_foilgroup { my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; my $name; my $result; my @names = @{ $Apache::response::foilgroup{'names'} }; my @truelist; my @falselist; foreach $name (@names) { $result.="
$name is $Apache::response::foilgroup{$name.'.value'} "; 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 "); } } my $whichtrue = rand $#truelist; return $result; } sub start_foil { $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--; return ''; } 1; __END__