--- loncom/homework/optionresponse.pm 2004/09/29 05:47:33 1.120
+++ loncom/homework/optionresponse.pm 2005/06/21 21:00:55 1.128
@@ -1,7 +1,7 @@
# LearningOnline Network with CAPA
# option list style responses
#
-# $Id: optionresponse.pm,v 1.120 2004/09/29 05:47:33 albertel Exp $
+# $Id: optionresponse.pm,v 1.128 2005/06/21 21:00:55 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -29,6 +29,7 @@ package Apache::optionresponse;
use strict;
use Apache::response();
use Apache::lonlocal;
+use Apache::lonnet;
BEGIN {
&Apache::lonxml::register('Apache::optionresponse',('optionresponse'));
@@ -121,14 +122,14 @@ ENDTABLE
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"};
+ 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 ($env{"form.$Apache::lonxml::curdepth.options"}) {
+ my $newopt = $env{"form.$Apache::lonxml::curdepth.options"};
if ($options[0]) {
push(@options,$newopt);
} else {
@@ -164,6 +165,8 @@ sub end_foilgroup {
my $name;
my @opt;
eval '@opt ='.&Apache::lonxml::get_param('options',$parstack,$safeeval);
+ &Apache::lonxml::debug("options:".join(':',@opt));
+
my $TeXlayout=&Apache::lonxml::get_param('TeXlayout',$parstack,$safeeval,
-2,0);
if ($target eq 'tex' && $tex_option_switch eq 'nochoice') {@opt=();}
@@ -182,7 +185,7 @@ 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') {
- if ( defined $ENV{'form.submitted'}) {
+ if ( &Apache::response::submitted()) {
my @whichopt = &whichfoils($max,$randomize);
my $temp=1;my $name;
my %responsehash;
@@ -192,7 +195,7 @@ sub end_foilgroup {
my $ignored=0;
foreach $name (@whichopt) {
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];
}
if ( $response =~ /[^\s]/) {
@@ -220,7 +223,16 @@ sub end_foilgroup {
$responsestr;
$Apache::lonhomework::results{"resource.$part.$id.submissiongrading"}=$gradestr;
- if (!$Apache::lonhomework::scantronmode) {
+ if ($Apache::lonhomework::type eq 'survey') {
+ if ($ignored == 0) {
+ my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED';
+ &Apache::response::handle_previous(\%previous,$ad);
+ } elsif ($wrong==0 && $right==0) {
+ } else {
+ my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER';
+ &Apache::response::handle_previous(\%previous,$ad);
+ }
+ } elsif (!$Apache::lonhomework::scantronmode) {
my $ad;
if ($wrong==0 && $ignored==0) {
$ad='EXACT_ANS';
@@ -348,7 +360,7 @@ sub displayfoils {
if ($text=~/^\s*$/) {
$text=$value.$text;
} else {
- $text=$value.': '.$text;
+ $text=''.$value.': '.$text;
}
} else {
$text=''.$text;
@@ -375,13 +387,13 @@ sub displayfoils {
}
my $lastopt=$lastresponse{$name};
my $optionlist="\n";
- my $option;
- foreach $option (@opt) {
- if ($option eq $lastopt) {
- $optionlist.="\n";
- } else {
- $optionlist.="\n";
- }
+ foreach my $option (@opt) {
+ my $escopt=&HTML::Entities::encode($option,'\'"&<>');
+ if ($option eq $lastopt) {
+ $optionlist.="\n";
+ } else {
+ $optionlist.="\n";
+ }
}
if ($target ne 'tex') {
if ($Apache::lonhomework::type ne 'exam') {
@@ -502,11 +514,11 @@ sub bubbles {
my $number_of_bubbles = $#opt + 1;
my $current_length = 0;
my $textwidth;
- if ($ENV{'form.textwidth'} ne '') {
- $ENV{'form.textwidth'}=~/(\d+)/;
+ if ($env{'form.textwidth'} ne '') {
+ $env{'form.textwidth'}=~/(\d+)/;
$textwidth=$1;
} else {
- $ENV{'textwidth'}=~/(\d*)\.?(\d*)/;
+ $env{'form.textwidth'}=~/(\d*)\.?(\d*)/;
$textwidth=$1.'.'.$2;
}
for (my $ind=0;$ind<=$number_of_bubbles;$ind++) {
@@ -614,10 +626,16 @@ sub end_foil {
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer'
|| $target eq 'tex' || $target eq 'analyze') {
my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
+ if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') {
+ $text='\vskip 5mm $\triangleright$ '.$text;
+ }
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; }
+ if (!$name) {
+ &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:");
if (defined($Apache::response::foilnames{$name})) {
&Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique.",$name));
@@ -628,20 +646,12 @@ sub end_foil {
&& !&Apache::response::showallfoils() ) {
push @{ $Apache::response::conceptgroup{'names'} }, $name;
$Apache::response::conceptgroup{"$name.value"} = $value;
- if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') {
- $Apache::response::conceptgroup{"$name.text"} = '\vskip 4 mm $\triangleright$ '.$text;
- } else {
- $Apache::response::conceptgroup{"$name.text"} = $text;
- }
+ $Apache::response::conceptgroup{"$name.text"} = $text;
$Apache::response::conceptgroup{"$name.location"} = $location;
} else {
push @{ $Apache::response::foilgroup{'names'} }, $name;
$Apache::response::foilgroup{"$name.value"} = $value;
- if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') {
- $Apache::response::foilgroup{"$name.text"} = '\vskip 5 mm $\triangleright$ '.$text;
- } else {
- $Apache::response::foilgroup{"$name.text"} = $text;
- }
+ $Apache::response::foilgroup{"$name.text"} = $text;
$Apache::response::foilgroup{"$name.location"} = $location;
}
}