version 1.69, 2001/10/05 12:39:13
|
version 1.78, 2002/01/24 04:18:54
|
Line 1
|
Line 1
|
# The LearningOnline Network with CAPA |
# The LearningOnline Network with CAPA |
# definition of tags that give a structure to a document |
# definition of tags that give a structure to a document |
|
# |
|
# $Id$ |
|
# |
|
# Copyright Michigan State University Board of Trustees |
|
# |
|
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
|
# |
|
# LON-CAPA is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; either version 2 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# LON-CAPA is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with LON-CAPA; if not, write to the Free Software |
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
# |
|
# /home/httpd/html/adm/gpl.txt |
|
# |
|
# http://www.lon-capa.org/ |
|
# |
# 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,8/18,8/20 Gerd Kortemeyer |
# 8/17,8/18,8/20 Gerd Kortemeyer |
Line 9 package Apache::structuretags;
|
Line 34 package Apache::structuretags;
|
use strict; |
use strict; |
use Apache::lonnet; |
use Apache::lonnet; |
|
|
sub BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext')); |
&Apache::lonxml::register('Apache::structuretags',('block','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext')); |
# &Apache::lonxml::register_insert('problem','',('part','postanswerdate','preduedate')) |
# &Apache::lonxml::register_insert('problem','',('part','postanswerdate','preduedate')) |
} |
} |
Line 68 sub initialize_storage {
|
Line 93 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 115 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 152 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 210 sub start_problem {
|
Line 237 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 264 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 241 sub start_problem {
|
Line 273 sub start_problem {
|
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
$result=$token->[4]; |
$result=$token->[4]; |
$result.=&Apache::edit::handle_insert(); |
$result.=&Apache::edit::handle_insert(); |
|
} elsif ($target eq 'tex') { |
|
$result .= '\begin{document}\noindent\textbf{Problem.}\newline'; |
} else { |
} else { |
# page_start returned a starting result, delete it if we don't need it |
# page_start returned a starting result, delete it if we don't need it |
$result = ''; |
$result = ''; |
Line 284 sub end_problem {
|
Line 318 sub end_problem {
|
} elsif ($target eq 'edit') { |
} elsif ($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" />'; |
|
} elsif ($target eq 'tex') { |
|
$result .= '\end{document}'; |
} |
} |
return $result; |
return $result; |
} |
} |
Line 379 sub end_while {
|
Line 415 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 542 sub end_startouttext {
|
Line 581 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) |