--- loncom/homework/optionresponse.pm 2011/11/08 19:38:05 1.173.2.2
+++ loncom/homework/optionresponse.pm 2011/06/07 17:27:37 1.176
@@ -1,7 +1,7 @@
# LearningOnline Network with CAPA
# option list style responses
#
-# $Id: optionresponse.pm,v 1.173.2.2 2011/11/08 19:38:05 raeburn Exp $
+# $Id: optionresponse.pm,v 1.176 2011/06/07 17:27:37 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -155,9 +155,13 @@ ENDTABLE
splice(@options,$delopt-1,1);
$optchanged=1;
}
- if ($env{"form.$Apache::lonxml::curdepth.options"} ne '') {
+ if ($env{"form.$Apache::lonxml::curdepth.options"}) {
my $newopt = $env{"form.$Apache::lonxml::curdepth.options"};
- push(@options,$newopt);
+ if ($options[0]) {
+ push(@options,$newopt);
+ } else {
+ $options[0]=$newopt;
+ }
$optchanged=1;
}
my $rebuildtag = &Apache::edit::get_new_args($token,$parstack,$safeeval,
@@ -209,7 +213,7 @@ sub end_foilgroup {
my $randomize = &Apache::lonxml::get_param('randomize',$parstack,
$safeeval,'-2');
if ($target eq 'web' || $target eq 'tex') {
- $result.=&displayfoils($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,$tex_option_switch,@opt);
+ $result.=&displayfoils($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,@opt);
$Apache::lonxml::post_evaluate=0;
} elsif ( $target eq 'answer') {
$result.=&displayanswers($max,$randomize,@opt);
@@ -221,7 +225,26 @@ sub end_foilgroup {
my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";
push (@{ $Apache::lonhomework::analyze{"$part_id.options"} },@opt);
} 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()) {
+
my @whichopt = &whichfoils($max,$randomize);
my $temp=1;my $name;
my %responsehash;
@@ -282,7 +305,10 @@ sub end_foilgroup {
my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER';
&Apache::response::handle_previous(\%previous,$ad);
}
- } elsif (!$Apache::lonhomework::scantronmode) {
+ } elsif ($nonlenient) {
+#
+# Non-lenient mode. All right or all wrong
+#
my $ad;
if ($wrong==0 && $ignored==0) {
$ad='EXACT_ANS';
@@ -298,6 +324,9 @@ sub end_foilgroup {
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;
&Apache::response::handle_previous(\%previous,$ad);
} else {
+#
+# This is lenient mode
+#
my $ad;
if ($wrong==0 && $right==0) {
#nothing submitted only assign a score if we
@@ -417,8 +446,7 @@ sub check_for_invalid {
}
sub displayfoils {
- my ($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,
- $tex_option_switch,@opt)=@_;
+ my ($target,$max,$randomize,$TeXlayout,$checkboxvalue,$checkboxchoices,@opt)=@_;
if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}
my @names = @{ $Apache::response::foilgroup{'names'} };
my @truelist;
@@ -428,13 +456,10 @@ sub displayfoils {
my $displayoptionintex=1;
my @alphabet = ('A'..'Z');
my @whichopt = &whichfoils($max,$randomize);
- unless (($target eq 'tex') && ($tex_option_switch eq 'nochoice')) {
- &check_for_invalid(\@whichopt,\@opt);
- }
+ &check_for_invalid(\@whichopt,\@opt);
my $part=$Apache::inputtags::part;
my $id=$Apache::inputtags::response[-1];
my $break;
- my $solved=$Apache::lonhomework::history{"resource.$part.solved"};
if ( ($target ne 'tex') &&
&Apache::response::show_answer() ) {
my $temp=1;
@@ -825,6 +850,9 @@ sub end_foil {
&Apache::lonxml::warning(&mt('Foils without names exist. This can cause problems to malfunction.'));
$name=$Apache::lonxml::curdepth;
}
+ if ($name eq "0") {
+ &Apache::lonxml::error(&mt('Foil name [_1] is not supported. Please choose another name.',''.$name.''));
+ }
&Apache::lonxml::debug("Using a name of :$name:");
if (defined($Apache::response::foilnames{$name})) {
&Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique.",''.$name.''));