--- loncom/homework/bridgetask.pm 2006/11/13 21:47:33 1.204
+++ loncom/homework/bridgetask.pm 2006/11/27 20:42:42 1.208
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.204 2006/11/13 21:47:33 albertel Exp $
+# $Id: bridgetask.pm,v 1.208 2006/11/27 20:42:42 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -380,6 +380,13 @@ sub nest {
}
}
+sub start_delay {
+ push(@delay,1);
+}
+sub end_delay {
+ pop(@delay);
+}
+
sub nested_parse {
my ($str,$env,$args) = @_;
my @old_env = @Apache::scripttag::parser_env;
@@ -791,6 +798,9 @@ sub start_Task {
if ($target eq 'webgrade') {
$result.="\n".'
';
&Apache::lonxml::startredirection();
+ &start_delay();
+ $dimension{$top}{'result'}=$result;
+ undef($result);
}
} elsif ($target eq 'edit') {
$result.=$form_tag_start.
@@ -1257,7 +1267,13 @@ DONEBUTTON
&Apache::structuretags::finalize_storage();
}
} elsif ($target eq 'webgrade') {
- $result.=&Apache::lonxml::endredirection();
+ if (&nest()) {
+ &Apache::lonxml::endredirection();
+ &end_delay();
+ $result.=$dimension{$top}{'result'};
+ } else {
+ $result.=&Apache::lonxml::endredirection();
+ }
my $dim = $top;
foreach my $id (@{$dimension{$dim}{'criterias'}} ) {
my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
@@ -2101,11 +2117,14 @@ sub start_Dimension {
$dimension{$top}{'criteria.'.$dim.'.mandatory'}=
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
push(@{$dimension{$top}{'criterias'}},$dim);
+ $dimension{$dim}{'nested'}=$top;
}
push(@Apache::bridgetask::dimension,$dim);
&Apache::lonxml::startredirection();
- &enable_dimension_parsing($dim);
- return &internal_location($dim);
+ if (!&skip_dimension_parsing($dim)) {
+ &enable_dimension_parsing($dim);
+ }
+ return;# &internal_location($dim);
}
sub start_QuestionText {
@@ -2193,7 +2212,6 @@ sub end_Dimension {
my $instance=&get_instance($dim);
my $version=&get_version();
if ($target eq 'web') {
- $result .= "\n".'
'."\n";
$result .= &nested_parse(\$dimension{$dim}{'intro'},[@_]);
my @instances = $instance;
if (&Apache::response::showallfoils()) {
@@ -2247,13 +2265,20 @@ sub end_Dimension {
@{$dimension{$dim}{'criterias'}}) {
my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
if ($type eq 'dimension') {
- $result.=$dimension{$id}{'result'};
- next;
+ if (defined($dimension{$id}{'result'})) {
+ $result.=$dimension{$id}{'result'};
+ next;
+ } else {
+ $dim_info .=
+ &nested_parse(\$dimension{$dim}{'criteria.'.$id},
+ [@_],{'set_dim_id' => $id});
+ }
+ } else {
+ my $criteria =
+ &nested_parse(\$dimension{$dim}{'criteria.'.$id},
+ [@_]);
+ $dim_info .= &layout_web_Criteria($dim,$id,$criteria);
}
- my $criteria =
- &nested_parse(\$dimension{$dim}{'criteria.'.$id},
- [@_]);
- $dim_info .= &layout_web_Criteria($dim,$id,$criteria);
}
# puts the results at the end of the dimension
$result .= $dim_info;
@@ -2263,7 +2288,10 @@ sub end_Dimension {
# $result=~s/\Q$internal_location\E/$dim_info/;
}
}
- $result .= "\n
\n";
+ if ($result !~ /^\s*$/s) {
+ $result = "\n".'
'.
+ "\n".$result."\n
\n";
+ }
} elsif ($target eq 'webgrade') {
# in case of any side effects that we need
&nested_parse(\$dimension{$dim}{'intro'},[@_]);
@@ -2595,12 +2623,12 @@ sub start_Criteria {
my $dim = &get_dim_id();
my $id=&get_id($parstack,$safeeval);
if ($target eq 'web' || $target eq 'webgrade') {
- if ($target eq 'webgrade' && $dim ne 'top') {
+ if ($target eq 'webgrade') {
&Apache::lonxml::debug(" for $dim $id stashing results into $dim ");
$dimension{$dim}{'result'} .= &internal_location($id);
} else {
&Apache::lonxml::debug(" not stashing $dim $id");
- $result .= &internal_location($id);
+ #$result .= &internal_location($id);
}
}
&Apache::lonxml::debug("Criteria $id with $dim");