--- loncom/homework/optionresponse.pm 2001/08/06 19:00:13 1.21
+++ loncom/homework/optionresponse.pm 2001/08/06 20:33:23 1.22
@@ -1,80 +1,67 @@
-# The LON-CAPA option response handler
-#
-# Option list style responses
-#
-# YEAR=2001
-# 1/19,2/7,2/19,2/21,2/22,3/1,5/4,5/21,5/31,6/1,6/2,6/5,6/11 Guy Albertelli
-# 6/12,6/16,6/26,6/27,7/18 Guy Albertelli
-# 8/6 Scott Harrison
-
+# The LearningOnline Network with CAPA
+# option list style responses
+# 2/21 Guy
package Apache::optionresponse;
use strict;
use Apache::response;
-# ======================================================================= BEGIN
sub BEGIN {
&Apache::lonxml::register('Apache::optionresponse',('optionresponse'));
}
-# ================================ Start option response (return scalar string)
sub start_optionresponse {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- my $result = '';
- #when in a radiobutton response use these
- &Apache::lonxml::register('Apache::optionresponse',('foilgroup','foil',
- 'conceptgroup'));
- push (@Apache::lonxml::namespace,'optionresponse');
- my $id = &Apache::response::start_response($parstack,$safeeval);
- if ($target eq 'edit') {
- $result .= &Apache::edit::start_table($token).
- "
Multiple Option Response Question | Delete:".
- &Apache::edit::deletelist($target,$token).
- " | |
\n";
- $result .= &Apache::edit::text_arg('Max Number Of Foils:','max',
- $token,'4')." |
";
- $result .= "\n";
- }
- if ($target eq 'modified') {
- my $constructtag = &Apache::edit::get_new_args($token,$parstack,
- $safeeval,'max');
- if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $result='';
+ #when in a radiobutton response use these
+ &Apache::lonxml::register('Apache::optionresponse',('foilgroup','foil','conceptgroup'));
+ push (@Apache::lonxml::namespace,'optionresponse');
+ my $id = &Apache::response::start_response($parstack,$safeeval);
+ if ($target eq 'edit') {
+ $result.=&Apache::edit::start_table($token)." |
Multiple Option Response Question |
+Delete:".
+ &Apache::edit::deletelist($target,$token)
+ ." | |
\n";
+ $result.=&Apache::edit::text_arg('Max Number Of Foils:','max',$token,'4')." |
";
+ $result.="\n";
+ }
+ if ($target eq 'modified') {
+ my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'max');
+ if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+ }
+ return $result;
}
-# ================================== End option response (return scalar string)
sub end_optionresponse {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- &Apache::response::end_response;
- pop @Apache::lonxml::namespace;
- my $result;
- if ($target eq 'edit') { $result = &Apache::edit::end_table(); }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ &Apache::response::end_response;
+ pop @Apache::lonxml::namespace;
+ my $result;
+ if ($target eq 'edit') { $result=&Apache::edit::end_table(); }
+ return $result;
}
-# ===================================== Start foil group (return scalar string)
-%Apache::response::foilgroup = {};
+%Apache::response::foilgroup={};
sub start_foilgroup {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- my $result = '';
- %Apache::response::foilgroup = {};
- $Apache::optionresponse::conceptgroup = 0;
- &Apache::response::setrandomnumber();
- if ($target eq 'edit') {
- my $optionlist = "\n";
- my $option;
- my @opt;
- eval '@opt ='.
- &Apache::lonxml::get_param('options',$parstack,$safeeval);
- my $count = 1;
- foreach $option (@opt) {
- $optionlist .= "\n";
- $count++;
- }
- my $insertlist = &Apache::edit::insertlist($target,$token);
- $result .= &Apache::edit::start_table($token);
- $result .= (<Select Options |
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+
+ my $result='';
+ %Apache::response::foilgroup={};
+ $Apache::optionresponse::conceptgroup=0;
+ &Apache::response::setrandomnumber();
+ if ($target eq 'edit') {
+ my $optionlist="\n";
+ my $option;
+ my @opt;
+ eval '@opt ='. &Apache::lonxml::get_param('options',$parstack,$safeeval);
+ my $count=1;
+ foreach $option (@opt) {
+ $optionlist.="\n";
+ $count++;
+ }
+ my $insertlist=&Apache::edit::insertlist($target,$token);
+ $result.=&Apache::edit::start_table($token);
+ $result.= (<Select Options |
Add new Option:
|
@@ -84,287 +71,248 @@ sub start_foilgroup {
|
$insertlist
ENDTABLE
- }
- if ($target eq 'modified') {
- my @options;
- my $optchanged=0;
- eval '@options ='.
- &Apache::lonxml::get_param('options',$parstack,$safeeval);
- if ($ENV{"form.$Apache::lonxml::curdepth.deleteopt"}) {
- my $delopt=$ENV{"form.$Apache::lonxml::curdepth.deleteopt"};
- &Apache::lonxml::debug("Deleting :$delopt:");
- splice(@options,$delopt-1,1);
- $optchanged = 1;
- }
- if ($ENV{"form.$Apache::lonxml::curdepth.options"}) {
- my $newopt = $ENV{"form.$Apache::lonxml::curdepth.options"};
- if ($options[0]) {
- push(@options,$newopt);
- } else {
- $options[0] = $newopt;
- }
- $optchanged = 1;
- }
- if ($optchanged) {
- $result = "';
+ } # else nothing changed so just use the default mechanism
+ }
+ return $result;
}
-# ======================================= End foil group (return scalar string)
sub end_foilgroup {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- my $result;
- if ($target eq 'grade' || $target eq 'web') {
- my $name;
- my ($count,$max) = &getfoilcounts($parstack,$safeeval);
- if ($count>$max) { $count = $max }
- &Apache::lonxml::debug("Count is $count from $max");
- my @opt;
- eval '@opt ='.
- &Apache::lonxml::get_param('options',$parstack,$safeeval);
- &Apache::lonxml::debug("Options are $#opt");
- if ($target eq 'web') {
- $result=&displayfoils($count,@opt);
- } elsif ( $target eq 'grade') {
- if ( defined $ENV{'form.submitted'}) {
- my @whichopt = &whichfoils($count);
- my $temp=1;my $name;
- my $allresponse;
- my $right=0;
- my $wrong=0;
- my $ignored=0;
- foreach $name (@whichopt) {
- my $response = $ENV{'form.HWVAL_'.
- $Apache::inputtags::response['-1'].
- ":$temp"};
- $allresponse .= "$response:";
- if ( $response =~ /[^\s]/) {
- &Apache::lonxml::debug("submitted a $response".
- " \n");
- my $value = $Apache::response::foilgroup{$name.
- '.value'};
- if ($value eq $response) {$right++;} else {$wrong++;}
- } else {
- $ignored++;
- }
- $temp++;
- }
- my $id = $Apache::inputtags::response['-1'];
- $Apache::lonhomework::results{"resource.".
- $Apache::inputtags::part.".$id.submission"} = $allresponse;
- &Apache::lonxml::debug("Got $right right and $wrong wrong, ".
- "and $ignored were ignored");
- if ($wrong==0 && $ignored==0) {
- $Apache::lonhomework::results{"resource.".
- $Apache::inputtags::part.".$id.awarddetail"}
- = 'EXACT_ANS';
- } else {
- $Apache::lonhomework::results{"resource.".
- $Apache::inputtags::part.".$id.awarddetail"}
- = 'INCORRECT';
- }
- }
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+
+ my $result;
+ if ($target eq 'grade' || $target eq 'web') {
+ my $name;
+ my ($count,$max) = &getfoilcounts($parstack,$safeeval);
+ if ($count>$max) { $count=$max }
+ &Apache::lonxml::debug("Count is $count from $max");
+ my @opt;
+ eval '@opt ='.&Apache::lonxml::get_param('options',$parstack,$safeeval);
+ &Apache::lonxml::debug("Options are $#opt");
+ if ($target eq 'web') {
+ $result=&displayfoils($count,@opt);
+ } elsif ( $target eq 'grade') {
+ if ( defined $ENV{'form.submitted'}) {
+ my @whichopt = &whichfoils($count);
+ my $temp=1;my $name;
+ my $allresponse;
+ my $right=0;
+ my $wrong=0;
+ my $ignored=0;
+ foreach $name (@whichopt) {
+ my $response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1'].":$temp"};
+ $allresponse.="$response:";
+ if ( $response =~ /[^\s]/) {
+ &Apache::lonxml::debug("submitted a $response \n");
+ my $value=$Apache::response::foilgroup{$name.'.value'};
+ if ($value eq $response) {$right++;} else {$wrong++;}
+ } else {
+ $ignored++;
+ }
+ $temp++;
}
+ my $id = $Apache::inputtags::response['-1'];
+ $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=$allresponse;
+ &Apache::lonxml::debug("Got $right right and $wrong wrong, and $ignored were ignored");
+ if ($wrong==0 && $ignored==0) {
+ $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='EXACT_ANS';
+ } else {
+ $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='INCORRECT';
+ }
+ }
}
- if ($target eq 'edit') {
- $result .= &Apache::edit::end_table();
- }
- return $result;
+ }
+ if ($target eq 'edit') {
+ $result.=&Apache::edit::end_table();
+ }
+ return $result;
}
-# ==================================== Get foil counts (return 2 element array)
sub getfoilcounts {
- my ($parstack,$safeeval) = @_;
- my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2');
- # +1 since instructors will count from 1
- my $count = $#{ $Apache::response::foilgroup{'names'} }+1;
- return ($count,$max);
+ my ($parstack,$safeeval)=@_;
+ my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2');
+ # +1 since instructors will count from 1
+ my $count = $#{ $Apache::response::foilgroup{'names'} }+1;
+ return ($count,$max);
}
-# =============================================== Which foils (return an array)
sub whichfoils {
- my ($max)=@_;
- my @names = @{ $Apache::response::foilgroup{'names'} };
- my @whichopt =();
- while ((($#whichopt+1) < $max) && ($#names > -1)) {
- &Apache::lonxml::debug("Have $#whichopt max is $max");
- my $aopt=int(rand($#names+1));
- &Apache::lonxml::debug("From $#whichopt $max $#names elms, picking ".
- $aopt);
- $aopt=splice(@names,$aopt,1);
- &Apache::lonxml::debug("Picked $aopt");
- push (@whichopt,$aopt);
- }
- return @whichopt;
+ my ($max)=@_;
+ my @names = @{ $Apache::response::foilgroup{'names'} };
+ my @whichopt =();
+ while ((($#whichopt+1) < $max) && ($#names > -1)) {
+ &Apache::lonxml::debug("Have $#whichopt max is $max");
+ my $aopt=int(rand($#names+1));
+ &Apache::lonxml::debug("From $#whichopt $max $#names elms, picking $aopt");
+ $aopt=splice(@names,$aopt,1);
+ &Apache::lonxml::debug("Picked $aopt");
+ push (@whichopt,$aopt);
+ }
+ return @whichopt;
}
-# ======================================== Display foils (return scalar string)
sub displayfoils {
- my ($max,@opt) = @_;
- my @names = @{ $Apache::response::foilgroup{'names'} };
- my @truelist;
- my @falselist;
- my $result;
- my $name;
- my @whichopt = &whichfoils($max);
- my $optionlist = "\n";
- my $option;
- foreach $option (@opt) {
- $optionlist .= "\n";
- }
- if ($Apache::lonhomework::history{"resource.".
- $Apache::inputtags::part.
- ".solved"} =~ /^correct/ ) {
- foreach $name (@whichopt) {
- $result.=" ".$Apache::response::foilgroup{$name.'.value'}.
- ":".$Apache::response::foilgroup{$name.'.text'}."\n";
- }
- } else {
- my $temp=1;
- foreach $name (@whichopt) {
- $result .= " \n".$Apache::response::foilgroup{$name.'.text'}."\n";
- $temp++;
- }
+ my ($max,@opt)=@_;
+ my @names = @{ $Apache::response::foilgroup{'names'} };
+ my @truelist;
+ my @falselist;
+ my $result;
+ my $name;
+ my @whichopt = &whichfoils($max);
+ my $optionlist="\n";
+ my $option;
+ foreach $option (@opt) {
+ $optionlist.="\n";
+ }
+ if ($Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"} =~ /^correct/ ) {
+ foreach $name (@whichopt) {
+ $result.=" ".$Apache::response::foilgroup{$name.'.value'}.
+ ":".$Apache::response::foilgroup{$name.'.text'}."\n";
+ }
+ } else {
+ my $temp=1;
+ foreach $name (@whichopt) {
+ $result.=" \n".$Apache::response::foilgroup{$name.'.text'}."\n";
+ $temp++;
}
- return $result." ";
+ }
+ return $result." ";
}
-# ================================== Start concept group (return scalar string)
+
sub start_conceptgroup {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- $Apache::optionresponse::conceptgroup = 1;
- %Apache::response::conceptgroup = {};
- my $result;
- if ($target eq 'edit') {
- $result .= &Apache::edit::tag_start($target,$token,
- "Concept Grouped Foils");
- $result .= &Apache::edit::text_arg('Concept:','concept',$token,'50').
- " |
";
- $result .= "\n";
- }
- if ($target eq 'modified') {
- my $constructtag = &Apache::edit::get_new_args($token,$parstack,
- $safeeval,'concept');
- if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ $Apache::optionresponse::conceptgroup=1;
+ %Apache::response::conceptgroup={};
+ my $result;
+ if ($target eq 'edit') {
+ $result.=&Apache::edit::tag_start($target,$token,"Concept Grouped Foils");
+ $result.=&Apache::edit::text_arg('Concept:','concept',$token,'50')." |
";
+ $result.="\n";
+ }
+ if ($target eq 'modified') {
+ my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'concept');
+ if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+ }
+ return $result;
}
-# ==================================== End concept group (return scalar string)
sub end_conceptgroup {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- $Apache::optionresponse::conceptgroup = 0;
- my $result = '';
- if ($target eq 'web' || $target eq 'grade') {
- #if not there aren't any foils to display and thus no question
- if (defined(@{ $Apache::response::conceptgroup{'names'} })) {
- my @names = @{ $Apache::response::conceptgroup{'names'} };
- my $pick = int rand $#names+1;
- my $name = $names[$pick];
- push @{ $Apache::response::foilgroup{'names'} }, $name;
- $Apache::response::foilgroup{"$name.value"} =
- $Apache::response::conceptgroup{"$name.value"};
- $Apache::response::foilgroup{"$name.text"} =
- $Apache::response::conceptgroup{"$name.text"};
- my $concept =
- &Apache::lonxml::get_param('concept',$parstack,$safeeval);
- $Apache::response::foilgroup{"$name.concept"} = $concept;
- &Apache::lonxml::debug("Selecting $name in $concept");
- }
- }
- if ($target eq 'edit') {
- $result = &Apache::edit::end_table();
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ $Apache::optionresponse::conceptgroup=0;
+ my $result='';
+ if ($target eq 'web' || $target eq 'grade') {
+ #if not there aren't any foils to display and thus no question
+ if (defined(@{ $Apache::response::conceptgroup{'names'} })) {
+ my @names = @{ $Apache::response::conceptgroup{'names'} };
+ my $pick=int rand $#names+1;
+ my $name=$names[$pick];
+ push @{ $Apache::response::foilgroup{'names'} }, $name;
+ $Apache::response::foilgroup{"$name.value"} = $Apache::response::conceptgroup{"$name.value"};
+ $Apache::response::foilgroup{"$name.text"} = $Apache::response::conceptgroup{"$name.text"};
+ my $concept = &Apache::lonxml::get_param('concept',$parstack,$safeeval);
+ $Apache::response::foilgroup{"$name.concept"} = $concept;
+ &Apache::lonxml::debug("Selecting $name in $concept");
+ }
+ }
+ if ($target eq 'edit') {
+ $result=&Apache::edit::end_table();
+ }
+ return $result;
}
-# ======================================================== Insert concept group
sub insert_conceptgroup {
- my $result="\n\t\t".&insert_foil().
- "\n\t\t\n";
- return $result;
+ my $result="\n\t\t".&insert_foil()."\n\t\t\n";
+ return $result;
}
-# =========================================== Start foil (return scalar string)
sub start_foil {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- my $result = '';
- if ($target eq 'web') { &Apache::lonxml::startredirection; }
- if ($target eq 'edit') {
- $result = &Apache::edit::tag_start($target,$token,"Foil");
- my $level = '-2';
- if ($$tagstack['-2'] eq 'conceptgroup') { $level = '-3'; }
- my @opt;
- eval '@opt ='.&Apache::lonxml::get_param('options',$parstack,
- $safeeval,$level);
- $result .= &Apache::edit::text_arg('Name:','name',$token);
- $result .= &Apache::edit::select_or_text_arg('Correct Option:',
- 'value',
- ['unused',(@opt)],$token,
- '15');
- $result .= ' |
';
- }
- if ($target eq 'modified') {
- my $constructtag = &Apache::edit::get_new_args($token,$parstack,
- $safeeval,'value',
- 'name');
- if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $result='';
+ if ($target eq 'web') { &Apache::lonxml::startredirection; }
+ if ($target eq 'edit') {
+ $result=&Apache::edit::tag_start($target,$token,"Foil");
+ my $level='-2';
+ if ($$tagstack['-2'] eq 'conceptgroup') { $level = '-3'; }
+ my @opt;
+ eval '@opt ='.&Apache::lonxml::get_param('options',$parstack,$safeeval,$level);
+ $result.=&Apache::edit::text_arg('Name:','name',$token);
+ $result.= &Apache::edit::select_or_text_arg('Correct Option:','value',['unused',(@opt)],$token,'15');
+ $result .= ' |
';
+ }
+ if ($target eq 'modified') {
+ my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'value','name');
+ if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+ }
+ return $result;
}
-# ============================================= End foil (return scalar string)
sub end_foil {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
- my $text = '';
- my $result = '';
- if ($target eq 'web') { $text=&Apache::lonxml::endredirection; }
- if ($target eq 'web' || $target eq 'grade') {
- my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
- if ($value ne 'unused') {
- my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
- &Apache::lonxml::debug("Got a name of :$name:");
- if (!$name) { $name = $Apache::lonxml::curdepth; }
- &Apache::lonxml::debug("Using a name of :$name:");
- if ( $Apache::optionresponse::conceptgroup ) {
- push @{ $Apache::response::conceptgroup{'names'} }, $name;
- $Apache::response::conceptgroup{"$name.value"} = $value;
- $Apache::response::conceptgroup{"$name.text"} = $text;
- } else {
- push @{ $Apache::response::foilgroup{'names'} }, $name;
- $Apache::response::foilgroup{"$name.value"} = $value;
- $Apache::response::foilgroup{"$name.text"} = $text;
- }
- }
- }
- if ($target eq 'edit') {
- $result .= &Apache::edit::tag_end($target,$token,'');
- }
- return $result;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $text ='';
+ my $result = '';
+ if ($target eq 'web') { $text=&Apache::lonxml::endredirection; }
+ if ($target eq 'web' || $target eq 'grade') {
+ my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
+ if ($value ne 'unused') {
+ my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
+ &Apache::lonxml::debug("Got a name of :$name:");
+ if (!$name) { $name=$Apache::lonxml::curdepth; }
+ &Apache::lonxml::debug("Using a name of :$name:");
+ if ( $Apache::optionresponse::conceptgroup ) {
+ push @{ $Apache::response::conceptgroup{'names'} }, $name;
+ $Apache::response::conceptgroup{"$name.value"} = $value;
+ $Apache::response::conceptgroup{"$name.text"} = $text;
+ } else {
+ push @{ $Apache::response::foilgroup{'names'} }, $name;
+ $Apache::response::foilgroup{"$name.value"} = $value;
+ $Apache::response::foilgroup{"$name.text"} = $text;
+ }
+ }
+ }
+ if ($target eq 'edit') {
+ $result.= &Apache::edit::tag_end($target,$token,'');
+ }
+ return $result;
}
-# ========================================== Insert foil (return scalar string)
sub insert_foil {
- return '
+ return '
';
}
-
1;
-
__END__
|