--- loncom/homework/structuretags.pm 2000/12/04 21:51:30 1.19
+++ loncom/homework/structuretags.pm 2001/01/05 20:05:26 1.27
@@ -6,7 +6,7 @@ use strict;
use Apache::lonnet;
sub BEGIN {
- &Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','web','tex','part'));
+ &Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','web','tex','part','preduedate','postanswerdate','solved','notsolved'));
}
sub start_web {
@@ -43,20 +43,39 @@ sub start_problem {
#adeed vars to the scripting enviroment
my $expression='$external::part='.$Apache::inputtags::part.';';
&Apache::run::run($expression,$safeeval);
-
+ my $status;
+ my $datemsg;
+ if ($target ne 'meta') {
+ ($status,$datemsg) = &Apache::lonhomework::check_date('0');
+ push (@Apache::inputtags::status,$status);
+ my $expression='$external::datestatus="'.$status.'";';
+ $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";';
+ &Apache::run::run($expression,$safeeval);
+ if ( $status eq 'CLOSED' ) {
+ my $bodytext=&Apache::lonxml::get_all_text("/problem",$$parser[$#$parser]);
+ if ( $target eq "web" ) {
+ return "
Problem is not open to be viewed. The problem $datemsg
";
+ }
+ }
+ }
if ($target eq 'web') {
- # create a page header and exit
my $args ='';
if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
my $name = &Apache::run::run("{$args;".'return $name}',$safeeval);
- return "$name\n\n\n"; }
+ if ($target eq 'web') {
+ if ($status eq 'CAN_ANSWER') {
+ $result.="\n";
+ } elsif ($status eq 'SHOW_ANSWER') {
+ $result.="\n";
+ }
+ }
} else {
if ($Apache::inputtags::part eq '0') {
$result=&Apache::response::mandatory_part_meta;
@@ -83,10 +108,10 @@ sub start_block {
$code .=';return $condition;';
# print "
$code
";
my $result = &Apache::run::run($code,$safeeval);
+ &Apache::lonxml::debug("block :$code: returned :$result:");
if ( ! $result ) {
-# my $skip=$$parser[$#$parser]->get_text("/block");
my $skip=&Apache::lonxml::get_all_text("/block",$$parser[$#$parser]);
-# print "skipped $skip";
+ &Apache::lonxml::debug("skipping ahead :$skip: $$parser[$#$parser]");
}
return "";
}
@@ -187,6 +212,18 @@ sub start_part {
@Apache::inputtags::responselist = ();
if ($target eq 'meta') {
return &Apache::response::mandatory_part_meta;
+ } else {
+ my ($status,$datemsg) = &Apache::lonhomework::check_date("OPEN_DATE",$id);
+ push (@Apache::inputtags::status,$status);
+ my $expression='$external::datestatus="'.$status.'";';
+ $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";';
+ &Apache::run::run($expression,$safeeval);
+ if ( $status eq 'CLOSED' ) {
+ my $bodytext=&Apache::lonxml::get_all_text("/part",$$parser[$#$parser]);
+ if ( $target eq "web" ) {
+ return "
Part is not open to be viewed. It $datemsg
";
+ }
+ }
}
return '';
}
@@ -194,10 +231,70 @@ sub start_part {
sub end_part {
my ($target,$token,$parstack,$parser,$safeeval)=@_;
&Apache::lonxml::debug("in end_part $target ");
+ pop @Apache::inputtags::status;
if ( $target eq 'meta' ) { return ''; }
- if ( $target eq 'grade' ) { return &Apaceh::inputtags::grade; }
- return &Apache::inputtags::gradestatus;
+ if ( $target eq 'grade' ) { return &Apache::inputtags::grade; }
+ return &Apache::inputtags::gradestatus($Apache::inputtags::part);
+}
+
+sub start_preduedate {
+ my ($target,$token,$parstack,$parser,$safeeval)=@_;
+ if ($target ne 'meta') {
+ if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER') {
+ &Apache::lonxml::get_all_text("/preduedate",$$parser[$#$parser]);
+ }
+ }
+ return '';
+}
+
+sub end_preduedate {
+ return '';
+}
+
+sub start_postanswerdate {
+ my ($target,$token,$parstack,$parser,$safeeval)=@_;
+ if ($target ne 'meta') {
+ if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
+ &Apache::lonxml::get_all_text("/postanswerdate",$$parser[$#$parser]);
+ }
+ }
+ return '';
+}
+
+sub end_postanswerdate {
+ return '';
+}
+
+sub start_notsolved {
+ my ($target,$token,$parstack,$parser,$safeeval)=@_;
+ if ($target ne 'meta') {
+ my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
+ &Apache::lonxml::debug("not solved has :$gradestatus:");
+ if ($gradestatus =~ /^correct/) {
+ &Apache::lonxml::debug("skipping");
+ &Apache::lonxml::get_all_text("/notsolved",$$parser[$#$parser]);
+ }
+ }
+ return '';
}
+sub end_notsolved {
+ return '';
+}
+
+sub start_solved {
+ my ($target,$token,$parstack,$parser,$safeeval)=@_;
+ if ($target ne 'meta') {
+ my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
+ if ($gradestatus !~ /^correct/) {
+ &Apache::lonxml::get_all_text("/solved",$$parser[$#$parser]);
+ }
+ }
+ return '';
+}
+
+sub end_solved {
+ return '';
+}
1;
__END__
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.