--- loncom/homework/bridgetask.pm 2006/11/09 21:39:34 1.201
+++ loncom/homework/bridgetask.pm 2006/11/27 23:33:01 1.210
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.201 2006/11/09 21:39:34 albertel Exp $
+# $Id: bridgetask.pm,v 1.210 2006/11/27 23:33:01 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'};
@@ -1269,7 +1285,12 @@ DONEBUTTON
[@_]);
$criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
my $internal_location=&internal_location($id);
- $result=~s/\Q$internal_location\E/$criteria/;
+ if ($result =~ m/\Q$internal_location\E/) {
+ $result=~s/\Q$internal_location\E/$criteria/;
+ } else {
+ $result.=$criteria;
+ }
+
}
}
$result.="
";
@@ -2049,7 +2070,7 @@ sub start_Setup {
my $dim = &get_id($parstack,$safeeval);
push(@Apache::bridgetask::dimension,$dim);
&Apache::lonxml::startredirection();
- return &internal_location($dim);
+ return;# &internal_location($dim);
}
{
@@ -2101,11 +2122,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 {
@@ -2229,10 +2253,10 @@ sub end_Dimension {
my $question = ('sub' x $dimension{$dim}{'depth'}).'question';
$question =~ s/^(.)/uc($1)/e;
if ($dim_status eq 'pass') {
- $dim_info.=''.$question.' : you passed this '.$mandatory.' question
';
+ $dim_info.=''.$question.' : you passed the above '.$mandatory.' question
';
}
if ($dim_status eq 'fail') {
- $dim_info.=''.$question.' : you did not pass this '.$mandatory.' question
';
+ $dim_info.=''.$question.' : you did not pass the above '.$mandatory.' question
';
}
my %counts = &get_counts($dim,$instance,$parstack,
$safeeval);
@@ -2246,18 +2270,44 @@ 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;
- my $internal_location=&internal_location($dim);
- $result=~s/\Q$internal_location\E/$dim_info/;
+ # puts the results at the beginning of the dimension
+ # my $internal_location=&internal_location($dim);
+ # $result=~s/\Q$internal_location\E/$dim_info/;
+ }
+ }
+ if ($result !~ /^\s*$/s) {
+ # FIXME? this maybe unneccssary in the future, (CSE101 BT
+ # from Fall 2006 geenrate a div that attempts to hide some
+ # of the output in an odd way, this is a workaround so
+ # those old ones will continue to work. # It puts the
+ # LC_question div to come after any starting closie div
+ # that the dimension produces
+ if ($result =~ m{\s*}) {
+ $result =~ s{(\s*)}
+ {$1\n};
+ } else {
+ $result = "\n".'
'.
+ "\n".$result;
}
+ $result .= "\n
\n";
}
} elsif ($target eq 'webgrade') {
# in case of any side effects that we need
@@ -2281,7 +2331,11 @@ sub end_Dimension {
[@_]);
$criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
my $internal_location=&internal_location($id);
- $result=~s/\Q$internal_location\E/$criteria/;
+ if ($result =~ m/\Q$internal_location\E/) {
+ $result =~ s/\Q$internal_location\E/$criteria/;
+ } else {
+ $result.=$criteria ;
+ }
}
}
if (&nest()) {
@@ -2590,12 +2644,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");
@@ -2633,7 +2687,10 @@ sub layout_web_Criteria {
$status_display=~s/^([a-z])/uc($1)/e;
my $criteria_info.=
'
'."\n\t".'
'
- .$mandatory.' Criteria
'."\n\t".'
'."\n";
+ .$mandatory.' Criteria'."\n\t".'
'
+ ."\n";
+ $criteria =~ s/^\s*//s;
+ $criteria =~ s/\s*$//s;
$criteria_info.= $criteria;
$criteria_info.="\n\t".'
'.
"\n\t".'
'.$status_display.'
';
@@ -2675,6 +2732,8 @@ sub layout_webgrade_Criteria {
END_BUTTON
}
+ $criteria =~ s/^\s*//s;
+ $criteria =~ s/\s*$//s;
my $result = <