version 1.55, 2001/08/17 14:24:29
|
version 1.69, 2001/10/05 12:39:13
|
Line 2
|
Line 2
|
# definition of tags that give a structure to a document |
# definition of tags that give a structure to a document |
# 2/19 Guy |
# 2/19 Guy |
# 6/26/2001 fixed extra web display at end of <web></web> tags |
# 6/26/2001 fixed extra web display at end of <web></web> tags |
# 8/17 Gerd Kortemeyer |
# 8/17,8/18,8/20 Gerd Kortemeyer |
|
|
package Apache::structuretags; |
package Apache::structuretags; |
|
|
Line 63 sub page_start {
|
Line 63 sub page_start {
|
return ($result,$head_tag_start,$body_tag_start); |
return ($result,$head_tag_start,$body_tag_start); |
} |
} |
|
|
|
sub initialize_storage { |
|
%Apache::lonhomework::results=(); |
|
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
|
if ($ENV{'request.state'} eq 'construct') { |
|
%Apache::lonhomework::history= |
|
&Apache::lonnet::restore($ENV{'request.uri'},'nohist_construct',$domain,$name); |
|
my ($temp)=keys %Apache::lonhomework::history ; |
|
&Apache::lonxml::debug("Return message of $temp"); |
|
} else { |
|
%Apache::lonhomework::history= |
|
&Apache::lonnet::restore($symb,$courseid,$domain,$name); |
|
} |
|
#ignore error conditions |
|
my ($temp)=keys %Apache::lonhomework::history ; |
|
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
|
} |
|
|
|
# -------------------------------------------------------------finalize_storage |
|
# Stores away the result has to a student's environment |
|
# checks form.grade_ for specific values, other wises stores |
|
# to the running users environment |
|
sub finalize_storage { |
|
my $result; |
|
my ($temp) = keys %Apache::lonhomework::results; |
|
if ( $temp ne '' ) { |
|
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
|
if ($ENV{'request.state'} eq 'construct') { |
|
$result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, |
|
$ENV{'request.uri'},'nohist_construct', |
|
$domain,$name); |
|
&Apache::lonxml::debug('Construct Store return message:'.$result); |
|
} else { |
|
$result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, |
|
$symb,$courseid,$domain,$name); |
|
&Apache::lonxml::debug('Store return message:'.$result); |
|
} |
|
} |
|
return $result; |
|
} |
|
|
|
sub checkout_msg { |
|
return (<<ENDCHECKOUT); |
|
<h2>The resource needs to be checked out</h2> |
|
As a resource gets checked out, a unique timestamped ID is given to it, and a |
|
permanent record is left in the system.<p /> |
|
<font color=red> |
|
Checking out resources is subject to course policies, and may exclude future |
|
credit even if done erroneously.<p /> |
|
</font> |
|
<form method=post> |
|
<input type=button name="doescheckout" |
|
value="Check out Exam for Viewing" |
|
onClick="if (confirm('Check out Exam?')) { this.form.submit(); }" /> |
|
</form> |
|
ENDCHECKOUT |
|
} |
|
|
sub start_problem { |
sub start_problem { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
|
|
Line 70 sub start_problem {
|
Line 127 sub start_problem {
|
$Apache::inputtags::part='0'; |
$Apache::inputtags::part='0'; |
@Apache::inputtags::responselist = (); |
@Apache::inputtags::responselist = (); |
@Apache::inputtags::previous=(); |
@Apache::inputtags::previous=(); |
|
&initialize_storage(); |
$Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type'); |
$Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type'); |
&Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:"); |
&Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:"); |
if ($Apache::lonhomework::type eq '') { |
if ($Apache::lonhomework::type eq '') { |
Line 82 sub start_problem {
|
Line 140 sub start_problem {
|
&Apache::lonxml::debug("Using default type, problem, :$uri:"); |
&Apache::lonxml::debug("Using default type, problem, :$uri:"); |
} |
} |
} |
} |
#adeed vars to the scripting enviroment |
|
|
#added vars to the scripting enviroment |
my $expression='$external::part='.$Apache::inputtags::part.';'; |
my $expression='$external::part='.$Apache::inputtags::part.';'; |
&Apache::run::run($expression,$safeeval); |
&Apache::run::run($expression,$safeeval); |
my $status; |
my $status; |
Line 92 sub start_problem {
|
Line 151 sub start_problem {
|
my ($result,$head_tag_start,$body_tag_start)= |
my ($result,$head_tag_start,$body_tag_start)= |
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); |
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); |
|
|
if ($target eq 'web' || $target eq 'grade') { |
|
|
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') { |
|
#handle exam checkout |
|
if ($Apache::lonhomework::type eq 'exam') { |
|
my $token=$Apache::lonhomework::history{"resource.0.outtoken"}; |
|
if (($ENV{'form.doescheckout'}) && (!$token)) { |
|
$token=&Apache::lonxml::maketoken(); |
|
$Apache::lonhomework::history{"resource.0.outtoken"}=$token; |
|
} |
|
$body_tag_start.=&Apache::lonxml::printtokenheader($target,$token); |
|
} |
|
|
|
#handle rand seed in construction space |
|
my $rndseed; |
|
if ($ENV{'request.state'} eq "construct") { |
|
$rndseed=$ENV{'form.rndseed'}; |
|
if (!$rndseed) { |
|
$rndseed=time; |
|
$ENV{'form.rndseed'}=$rndseed; |
|
} |
|
&Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval); |
|
} |
($status,$accessmsg) = &Apache::lonhomework::check_access('0'); |
($status,$accessmsg) = &Apache::lonhomework::check_access('0'); |
push (@Apache::inputtags::status,$status); |
push (@Apache::inputtags::status,$status); |
my $expression='$external::datestatus="'.$status.'";'; |
my $expression='$external::datestatus="'.$status.'";'; |
Line 109 sub start_problem {
|
Line 189 sub start_problem {
|
if ($status eq 'CLOSED') { |
if ($status eq 'CLOSED') { |
$msg.='The problem '.$accessmsg; |
$msg.='The problem '.$accessmsg; |
} elsif ($status eq 'UNCHECKEDOUT') { |
} elsif ($status eq 'UNCHECKEDOUT') { |
$msg.='The resource needs to be checked out'; |
$msg.=&checkout_msg; |
} |
} |
return $result.$msg.'<br />'; |
$result.=$msg.'<br />'; |
} |
} |
} |
} elsif ($target eq 'web') { |
} |
my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval); |
if ($target eq 'web') { |
if ($name eq '') { |
my $name= &Apache::lonxml::get_param('name',$parstack,$safeeval); |
$name=&Apache::lonnet::EXT('resource.title'); |
if ($name eq '') { |
if ($name eq 'con_lost') { $name = ''; } |
$name=&Apache::lonnet::EXT('resource.title'); |
} |
if ($name eq 'con_lost') { $name = ''; } |
$Apache::lonhomework::name=$name; |
} |
if ($status eq 'CAN_ANSWER') { |
$Apache::lonhomework::name=$name; |
# create a page header and exit |
if ($status eq 'CAN_ANSWER') { |
$result.="$head_tag_start<title>$name</title></head>\n |
# create a page header and exit |
|
$result.="$head_tag_start<title>$name</title></head>\n |
|
$body_tag_start\n |
$body_tag_start\n |
<form name=\"lonhomework\" method=\"POST\" action=\"".$ENV{'request.uri'}."\">". |
<form name=\"lonhomework\" method=\"POST\" action=\"".$ENV{'request.uri'}."\">". |
'<input type="hidden" name="submitted" value="yes" />'; |
'<input type="hidden" name="submitted" value="yes" />'; |
if ($ENV{'request.state'} eq "construct") { |
if ($ENV{'request.state'} eq "construct") { |
$result.='<input type="hidden" name="problemmode" value="View" /> |
$result.= |
<input type="submit" name="problemmode" value="Edit" /><hr />'; |
'<input type="hidden" name="problemmode" value="View" /> |
|
<input type="submit" name="problemmode" value="Edit" /> |
|
Random Seed:<input type="text" name="rndseed" width="10" value="'. |
|
$rndseed.'" /><hr />'; |
|
} |
|
# if we are viewing someone else preserve that info |
|
if (defined $ENV{'form.grade_symb'}) { |
|
foreach my $field ('symb','courseid','domain','username') { |
|
$result .= '<input type="hidden" name="grade_'.$field. |
|
'" value="'.$ENV{"form.grade_$field"}.'" />'."\n"; |
|
} |
|
} |
|
} elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' |
|
|| $status eq 'CLOSED') { |
|
$result.=$head_tag_start. |
|
"<title>$name</title></head>\n$body_tag_start\n"; |
} |
} |
return $result; |
|
} elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' || $status eq 'CLOSED') { |
|
return $result.$head_tag_start."<title>$name</title></head>\n$body_tag_start\n"; |
|
} |
} |
} |
} elsif ($target eq 'edit') { |
if ($target eq 'edit') { |
|
$result.=$head_tag_start."</head>".$body_tag_start. |
$result.=$head_tag_start."</head>".$body_tag_start. |
'<form name="lonhomework" method="POST" action="'.$ENV{'request.uri'}.'"> |
'<form name="lonhomework" method="POST" action="'. |
|
$ENV{'request.uri'}.'"> |
<input type="hidden" name="submitted" value="edit" /> |
<input type="hidden" name="submitted" value="edit" /> |
<input type="hidden" name="problemmode" value="Edit" /> |
<input type="hidden" name="problemmode" value="Edit" /> |
<input type="submit" name="problemmode" value="View" /> |
<input type="submit" name="problemmode" value="View" /> |
Line 148 sub start_problem {
|
Line 238 sub start_problem {
|
'; |
'; |
my $temp=&Apache::edit::insertlist($target,$token); |
my $temp=&Apache::edit::insertlist($target,$token); |
$result.=$temp; |
$result.=$temp; |
return $result; |
} elsif ($target eq 'modified') { |
} |
|
if ($target eq 'modified') { |
|
$result=$token->[4]; |
$result=$token->[4]; |
$result.=&Apache::edit::handle_insert(); |
$result.=&Apache::edit::handle_insert(); |
return $result; |
} else { |
|
# page_start returned a starting result, delete it if we don't need it |
|
$result = ''; |
} |
} |
return ''; |
return $result; |
} |
} |
|
|
sub end_problem { |
sub end_problem { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $result=''; |
my $result=''; |
my $status=$Apache::inputtags::status['-1']; |
my $status=$Apache::inputtags::status['-1']; |
if ($target eq 'grade' || $target eq 'web' ) { |
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ) { |
if ( $target eq 'grade' && $Apache::inputtags::part eq '0' && |
if ( $target eq 'grade' && $Apache::inputtags::part eq '0' && |
$status eq 'CAN_ANSWER') { |
$status eq 'CAN_ANSWER') { |
# if part is zero, no <part>s existed, so we need to the grading |
# if part is zero, no <part>s existed, so we need to the grading |
&Apache::inputtags::grade; |
&Apache::inputtags::grade; |
} elsif ($Apache::inputtags::part eq '0') { |
} elsif ( $target eq 'web' && $Apache::inputtags::part eq '0') { |
# if part is zero, no <part>s existed, so we need show the current |
# if part is zero, no <part>s existed, so we need show the current |
# grading status |
# grading status |
$result.= &Apache::inputtags::gradestatus($Apache::inputtags::part); |
$result.= &Apache::inputtags::gradestatus($Apache::inputtags::part); |
} |
} |
if ($target eq 'web') { |
if ( |
|
($target eq 'web' && ($ENV{'request.state'} ne 'construct')) || |
|
($target eq 'answer') |
|
) { |
if ($status eq 'CAN_ANSWER') { |
if ($status eq 'CAN_ANSWER') { |
$result.="</form></body>\n"; |
$result.="</form></body>\n"; |
} elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') { |
} elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') { |
Line 180 sub end_problem {
|
Line 273 sub end_problem {
|
} |
} |
$result.=&Apache::lonxml::xmlend(); |
$result.=&Apache::lonxml::xmlend(); |
} |
} |
} |
if ($target eq 'grade') { |
if ($target eq 'meta') { |
&Apache::lonhomework::showhash(%Apache::lonhomework::results); |
|
&finalize_storage(); |
|
} |
|
} elsif ($target eq 'meta') { |
if ($Apache::inputtags::part eq '0') { |
if ($Apache::inputtags::part eq '0') { |
$result=&Apache::response::mandatory_part_meta; |
$result=&Apache::response::mandatory_part_meta; |
} |
} |
} |
} elsif ($target eq 'edit') { |
if ($target eq 'edit') { |
|
&Apache::lonxml::debug("in end_problem with $target, edit"); |
&Apache::lonxml::debug("in end_problem with $target, edit"); |
$result='<br /><input type="submit" name="submit" value="Submit Changes" />'; |
$result='<br /><input type="submit" name="submit" value="Submit Changes" />'; |
} |
} |
Line 229 sub end_library {
|
Line 324 sub end_library {
|
sub start_block { |
sub start_block { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
|
|
if ($target eq 'web' || $target eq 'grade') { |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') { |
my $code = @$parstack[$#$parstack]; |
my $code = @$parstack[$#$parstack]; |
$code =~ s/\"//g; |
$code =~ s/\"//g; |
$code .=';return $condition;'; |
$code .=';return $condition;'; |
Line 343 sub start_part {
|
Line 438 sub start_part {
|
@Apache::inputtags::previous=(); |
@Apache::inputtags::previous=(); |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
return &Apache::response::mandatory_part_meta; |
return &Apache::response::mandatory_part_meta; |
} elsif ($target eq 'web' || $target eq 'grade') { |
} elsif ($target eq 'web' || $target eq 'grade' || $target eq 'answer') { |
my ($status,$accessmsg) = &Apache::lonhomework::check_access($id); |
my ($status,$accessmsg) = &Apache::lonhomework::check_access($id); |
push (@Apache::inputtags::status,$status); |
push (@Apache::inputtags::status,$status); |
my $expression='$external::datestatus="'.$status.'";'; |
my $expression='$external::datestatus="'.$status.'";'; |
Line 376 sub end_part {
|
Line 471 sub end_part {
|
|
|
sub start_preduedate { |
sub start_preduedate { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
if ($target eq 'web' || $target eq 'grade') { |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') { |
if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' && |
if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' && |
$Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' ) { |
$Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' ) { |
&Apache::lonxml::get_all_text("/preduedate",$$parser[$#$parser]); |
&Apache::lonxml::get_all_text("/preduedate",$$parser[$#$parser]); |
Line 405 sub end_postanswerdate {
|
Line 500 sub end_postanswerdate {
|
|
|
sub start_notsolved { |
sub start_notsolved { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
if ($target eq 'web' || $target eq 'grade') { |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') { |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
&Apache::lonxml::debug("not solved has :$gradestatus:"); |
&Apache::lonxml::debug("not solved has :$gradestatus:"); |
if ($gradestatus =~ /^correct/) { |
if ($gradestatus =~ /^correct/) { |
Line 422 sub end_notsolved {
|
Line 517 sub end_notsolved {
|
|
|
sub start_solved { |
sub start_solved { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
if ($target eq 'web' || $target eq 'grade') { |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer') { |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; |
if ($gradestatus !~ /^correct/) { |
if ($gradestatus !~ /^correct/) { |
&Apache::lonxml::get_all_text("/solved",$$parser[$#$parser]); |
&Apache::lonxml::get_all_text("/solved",$$parser[$#$parser]); |
Line 481 sub delete_startouttext {
|
Line 576 sub delete_startouttext {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
# my $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']); |
# my $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']); |
my $text=$$parser['-1']->get_text("/endouttext"); |
my $text=$$parser['-1']->get_text("/endouttext"); |
my $token=$$parser['-1']->get_token(); |
my $ntoken=$$parser['-1']->get_token(); |
&Apache::lonxml::debug("Deleting :$text: and :$token->[0]:$token->[1]:$token->[2]: for startouttext"); |
&Apache::lonxml::debug("Deleting :$text: and :$ntoken->[0]:$ntoken->[1]:$ntoken->[2]: for startouttext"); |
&Apache::lonxml::end_tag($tagstack,$parstack,$token); |
&Apache::lonxml::end_tag($tagstack,$parstack,$ntoken); |
# Deleting 2 parallel tag pairs, but we need the numbers later to look like |
# Deleting 2 parallel tag pairs, but we need the numbers later to look like |
# they did the last time round |
# they did the last time round |
&Apache::lonxml::increasedepth($token); |
&Apache::lonxml::increasedepth($ntoken); |
&Apache::lonxml::decreasedepth($token); |
&Apache::lonxml::decreasedepth($ntoken); |
return 1; |
return 1; |
} |
} |
|
|