version 1.67, 2001/09/14 20:17:35
|
version 1.73, 2001/12/04 14:53:59
|
Line 68 sub initialize_storage {
|
Line 68 sub initialize_storage {
|
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
if ($ENV{'request.state'} eq 'construct') { |
if ($ENV{'request.state'} eq 'construct') { |
%Apache::lonhomework::history= |
%Apache::lonhomework::history= |
&Apache::lonnet::restore($ENV{'request.uri'},'nohist_construct',$domain,$name); |
&Apache::lonnet::tmprestore($ENV{'request.uri'},'',$domain,$name); |
my ($temp)=keys %Apache::lonhomework::history ; |
my ($temp)=keys %Apache::lonhomework::history ; |
&Apache::lonxml::debug("Return message of $temp"); |
&Apache::lonxml::debug("Return message of $temp"); |
} else { |
} else { |
Line 90 sub finalize_storage {
|
Line 90 sub finalize_storage {
|
if ( $temp ne '' ) { |
if ( $temp ne '' ) { |
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
if ($ENV{'request.state'} eq 'construct') { |
if ($ENV{'request.state'} eq 'construct') { |
$result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, |
$result=&Apache::lonnet::tmpstore(\%Apache::lonhomework::results, |
$ENV{'request.uri'},'nohist_construct', |
$ENV{'request.uri'},'',$domain,$name); |
$domain,$name); |
|
&Apache::lonxml::debug('Construct Store return message:'.$result); |
&Apache::lonxml::debug('Construct Store return message:'.$result); |
} else { |
} else { |
$result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, |
$result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, |
Line 128 sub start_problem {
|
Line 127 sub start_problem {
|
@Apache::inputtags::responselist = (); |
@Apache::inputtags::responselist = (); |
@Apache::inputtags::previous=(); |
@Apache::inputtags::previous=(); |
&initialize_storage(); |
&initialize_storage(); |
|
if ($target eq 'web') { |
|
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
|
} |
$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 152 sub start_problem {
|
Line 154 sub start_problem {
|
&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 |
#handle exam checkout |
if ($Apache::lonhomework::type eq 'exam') { |
if ($Apache::lonhomework::type eq 'exam') { |
my $token=$Apache::lonhomework::history{"resource.0.outtoken"}; |
my $token=$Apache::lonhomework::history{"resource.0.outtoken"}; |
Line 210 sub start_problem {
|
Line 212 sub start_problem {
|
$result.= |
$result.= |
'<input type="hidden" name="problemmode" value="View" /> |
'<input type="hidden" name="problemmode" value="View" /> |
<input type="submit" name="problemmode" value="Edit" /> |
<input type="submit" name="problemmode" value="Edit" /> |
|
<input type="submit" name="problemmode" value="EditXML" /> |
Random Seed:<input type="text" name="rndseed" width="10" value="'. |
Random Seed:<input type="text" name="rndseed" width="10" value="'. |
$rndseed.'" /><hr />'; |
$rndseed.'" /> |
|
<input type="submit" name="changerandseed" value="Change" /> |
|
<input type="submit" name="resetdata" value="Reset Submissions" /> |
|
<hr />'; |
} |
} |
# if we are viewing someone else preserve that info |
# if we are viewing someone else preserve that info |
if (defined $ENV{'form.grade_symb'}) { |
if (defined $ENV{'form.grade_symb'}) { |
Line 233 sub start_problem {
|
Line 239 sub start_problem {
|
<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" /> |
|
<input type="submit" name="problemmode" value="EditXML" /> |
<input type="submit" name="Undo" value="undo" /> <hr /> |
<input type="submit" name="Undo" value="undo" /> <hr /> |
<input type="submit" name="submit" value="Submit Changes" /><br /> |
<input type="submit" name="submit" value="Submit Changes" /><br /> |
'; |
'; |
Line 252 sub end_problem {
|
Line 259 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 321 sub end_library {
|
Line 331 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 376 sub end_while {
|
Line 386 sub end_while {
|
# </randomlist> |
# </randomlist> |
sub start_randomlist { |
sub start_randomlist { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $body= &Apache::lonxml::get_all_text("/randomlist",$$parser[$#$parser]); |
if ($target eq 'answer' || $target eq 'grade' || $target eq 'web') { |
my $b_parser= HTML::TokeParser->new(\$body); |
my $body= &Apache::lonxml::get_all_text("/randomlist",$$parser[$#$parser]); |
my $b_tok; |
my $b_parser= HTML::TokeParser->new(\$body); |
my @randomlist; |
my $b_tok; |
my $list_item; |
my @randomlist; |
|
my $list_item; |
while($b_tok = $b_parser->get_token() ) { |
while($b_tok = $b_parser->get_token() ) { |
if($b_tok->[0] eq 'S') { # start tag |
if($b_tok->[0] eq 'S') { # start tag |
# get content of the tag until matching end tag |
# get content of the tag until matching end tag |
# get all text upto the matching tag |
# get all text upto the matching tag |
# and push the content into @randomlist |
# and push the content into @randomlist |
$list_item = &Apache::lonxml::get_all_text('/'.$b_tok->[1],$b_parser); |
$list_item = &Apache::lonxml::get_all_text('/'.$b_tok->[1],$b_parser); |
$list_item = "$b_tok->[4]"."$list_item"."</$b_tok->[1]>"; |
$list_item = "$b_tok->[4]"."$list_item"."</$b_tok->[1]>"; |
push(@randomlist,$list_item); |
push(@randomlist,$list_item); |
# print "<br /><b>START-TAG $b_tok->[1], $b_tok->[4], $list_item</b>"; |
# print "<br /><b>START-TAG $b_tok->[1], $b_tok->[4], $list_item</b>"; |
} |
} |
if($b_tok->[0] eq 'T') { # text |
if($b_tok->[0] eq 'T') { # text |
# what to do with text in between tags? |
# what to do with text in between tags? |
# print "<b>TEXT $b_tok->[1]</b><br />"; |
# print "<b>TEXT $b_tok->[1]</b><br />"; |
} |
} |
# if($b_tok->[0] eq 'E') { # end tag, should not happen |
# if($b_tok->[0] eq 'E') { # end tag, should not happen |
# print "<b>END-TAG $b_tok->[1]</b><br />"; |
# print "<b>END-TAG $b_tok->[1]</b><br />"; |
# } |
# } |
} |
} |
my @idx_arr = (0 .. $#randomlist); |
|
&Apache::structuretags::shuffle(\@idx_arr); |
|
my $bodytext = ''; |
|
for(0 .. $#randomlist) { |
|
$bodytext .= "$randomlist[ $idx_arr[$_] ]"; |
|
} |
|
|
|
&Apache::lonxml::newparser($parser,\$bodytext); |
my @idx_arr = (0 .. $#randomlist); |
|
&Apache::structuretags::shuffle(\@idx_arr); |
|
my $bodytext = ''; |
|
for(0 .. $#randomlist) { |
|
$bodytext .= "$randomlist[ $idx_arr[$_] ]"; |
|
} |
|
&Apache::lonxml::newparser($parser,\$bodytext); |
|
} |
return ""; |
return ""; |
} |
} |
|
|
sub shuffle { |
sub shuffle { |
my $a=shift; |
my $a=shift; |
my $i; |
my $i; |
&Apache::response::setrandomnumber(); |
if (defined(@$a)) { |
for($i=@$a;--$i;) { |
&Apache::response::setrandomnumber(); |
my $j=int rand($i+1); |
for($i=@$a;--$i;) { |
next if $i == $j; |
my $j=int rand($i+1); |
@$a[$i,$j] = @$a[$j,$i]; |
next if $i == $j; |
|
@$a[$i,$j] = @$a[$j,$i]; |
|
} |
} |
} |
} |
} |
|
|
Line 435 sub start_part {
|
Line 448 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 468 sub end_part {
|
Line 481 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 497 sub end_postanswerdate {
|
Line 510 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 514 sub end_notsolved {
|
Line 527 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 539 sub end_startouttext {
|
Line 552 sub end_startouttext {
|
my $text=''; |
my $text=''; |
|
|
if ($target eq 'edit') { |
if ($target eq 'edit') { |
$text=&Apache::lonxml::get_all_text("endouttext",$$parser[$#$parser]); |
$text=&Apache::lonxml::get_all_text("endouttext",$$parser[-1]); |
$result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td> |
$result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td> |
<td>Delete:". |
<td>Delete:". |
&Apache::edit::deletelist($target,$token) |
&Apache::edit::deletelist($target,$token) |
Line 573 sub delete_startouttext {
|
Line 586 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; |
} |
} |
|
|