--- 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
"; - } + if ($status eq 'CAN_ANSWER') { + # create a page header and exit + return "$name\n\n"; + } elsif ($status eq 'SHOW_ANSWER') { + return "$name\n\n"; + } + } return ''; } sub end_problem { my ($target,$token,$parstack,$parser,$safeeval)=@_; my $result=''; + my $status=$Apache::inputtags::status['-1']; unless ($target eq 'meta') { if ( $target eq 'grade' && $Apache::inputtags::part eq '0') { # if part is zero, no s existed, so we need to the grading @@ -64,9 +83,15 @@ sub end_problem { } elsif ($Apache::inputtags::part eq '0') { # if part is zero, no s existed, so we need show the current # grading status - $result.= &Apache::inputtags::gradestatus; + $result.= &Apache::inputtags::gradestatus($Apache::inputtags::part); } - if ($target eq 'web') { $result.="\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.