version 1.76, 2001/05/15 20:50:03
|
version 1.81, 2001/05/30 15:27:13
|
Line 7
|
Line 7
|
# 2/21,3/13 Guy |
# 2/21,3/13 Guy |
# 3/29,5/4 Gerd Kortemeyer |
# 3/29,5/4 Gerd Kortemeyer |
# 5/10 Scott Harrison |
# 5/10 Scott Harrison |
|
# 5/26 Gerd Kortemeyer |
|
# 5/27 H. K. Ng |
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
Line 15 use strict;
|
Line 17 use strict;
|
use HTML::TokeParser; |
use HTML::TokeParser; |
use Safe; |
use Safe; |
use Safe::Hole; |
use Safe::Hole; |
|
use Math::Cephes qw(:trigs :hypers :bessels erf erfc); |
use Opcode; |
use Opcode; |
|
|
sub register { |
sub register { |
Line 34 use Apache::run;
|
Line 37 use Apache::run;
|
use Apache::londefdef; |
use Apache::londefdef; |
use Apache::scripttag; |
use Apache::scripttag; |
use Apache::edit; |
use Apache::edit; |
|
use Apache::lonnet; |
|
use Apache::File; |
|
|
#================================================== Main subroutine: xmlparse |
#================================================== Main subroutine: xmlparse |
#debugging control, to turn on debugging modify the correct handler |
#debugging control, to turn on debugging modify the correct handler |
$Apache::lonxml::debug=0; |
$Apache::lonxml::debug=0; |
Line 168 sub xmlparse {
|
Line 174 sub xmlparse {
|
my $safehole = new Safe::Hole; |
my $safehole = new Safe::Hole; |
$safeeval->permit("entereval"); |
$safeeval->permit("entereval"); |
$safeeval->permit(":base_math"); |
$safeeval->permit(":base_math"); |
|
$safeeval->permit("sort"); |
$safeeval->deny(":base_io"); |
$safeeval->deny(":base_io"); |
$safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); |
$safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); |
|
|
|
$safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin'); |
|
$safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos'); |
|
$safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan'); |
|
$safehole->wrap(\&Math::Cephes::sinh,$safeeval,'&sinh'); |
|
$safehole->wrap(\&Math::Cephes::cosh,$safeeval,'&cosh'); |
|
$safehole->wrap(\&Math::Cephes::tanh,$safeeval,'&tanh'); |
|
$safehole->wrap(\&Math::Cephes::asinh,$safeeval,'&asinh'); |
|
$safehole->wrap(\&Math::Cephes::acosh,$safeeval,'&acosh'); |
|
$safehole->wrap(\&Math::Cephes::atanh,$safeeval,'&atanh'); |
|
$safehole->wrap(\&Math::Cephes::erf,$safeeval,'&erf'); |
|
$safehole->wrap(\&Math::Cephes::erfc,$safeeval,'&erfc'); |
|
$safehole->wrap(\&Math::Cephes::j0,$safeeval,'&j0'); |
|
$safehole->wrap(\&Math::Cephes::j1,$safeeval,'&j1'); |
|
$safehole->wrap(\&Math::Cephes::jn,$safeeval,'&jn'); |
|
$safehole->wrap(\&Math::Cephes::jv,$safeeval,'&jv'); |
|
$safehole->wrap(\&Math::Cephes::y0,$safeeval,'&y0'); |
|
$safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1'); |
|
$safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn'); |
|
$safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv'); |
|
|
#need to inspect this class of ops |
#need to inspect this class of ops |
# $safeeval->deny(":base_orig"); |
# $safeeval->deny(":base_orig"); |
$safeinit .= ';$external::target='.$target.';'; |
$safeinit .= ';$external::target='.$target.';'; |
Line 569 ENDSCRIPT
|
Line 597 ENDSCRIPT
|
return $result; |
return $result; |
} |
} |
|
|
|
sub storefile { |
|
my ($file,$contents)=@_; |
|
if (my $fh=Apache::File->new('>'.$file)) { |
|
print $fh $contents; |
|
$fh->close(); |
|
} |
|
} |
|
|
|
sub inserteditinfo { |
|
my ($result,$filecontents)=@_; |
|
unless ($filecontents) { |
|
$filecontents=(<<SIMPLECONTENT); |
|
<html> |
|
<head> |
|
<title> |
|
Title of Document Goes Here |
|
</title> |
|
</head> |
|
<body bgcolor="#FFFFFF"> |
|
|
|
Body of Document Goes Here |
|
|
|
</body> |
|
</html> |
|
SIMPLECONTENT |
|
} |
|
my $editheader='<a href="#editsection">Edit below</a><hr />'; |
|
my $editfooter=(<<ENDFOOTER); |
|
<hr /> |
|
<a name="editsection" /> |
|
<form method="post"> |
|
<textarea cols="80" rows="40" name="filecont">$filecontents</textarea> |
|
<br /> |
|
<input type="submit" name="savethisfile" value="Save this file" /> |
|
</form> |
|
ENDFOOTER |
|
$result=~s/(\<body[^\>]*\>)/$1$editheader/is; |
|
$result=~s/(\<\/body\>)/$editfooter/is; |
|
return $result; |
|
} |
|
|
sub handler { |
sub handler { |
my $request=shift; |
my $request=shift; |
|
|
Line 582 sub handler {
|
Line 651 sub handler {
|
$request->content_type('text/html'); |
$request->content_type('text/html'); |
} |
} |
|
|
# $request->print(<<ENDHEADER); |
|
#<html> |
|
#<head> |
|
#<title>Just test</title> |
|
#</head> |
|
#<body bgcolor="#FFFFFF"> |
|
#ENDHEADER |
|
# &Apache::lonhomework::send_header($request); |
|
$request->send_http_header; |
$request->send_http_header; |
|
|
return OK if $request->header_only; |
return OK if $request->header_only; |
|
|
|
|
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
|
# |
|
# Edit action? Save file. |
|
# |
|
unless ($ENV{'request.state'} eq 'published') { |
|
if ($ENV{'form.savethisfile'}) { |
|
&storefile($file,$ENV{'form.filecont'}); |
|
} |
|
} |
my %mystyle; |
my %mystyle; |
my $result = ''; |
my $result = ''; |
my $filecontents=&Apache::lonnet::getfile($file); |
my $filecontents=&Apache::lonnet::getfile($file); |
if ($filecontents == -1) { |
if ($filecontents == -1) { |
&Apache::lonxml::error("<b> Unable to find <i>$file</i></b>"); |
$result=(<<ENDNOTFOUND); |
|
<html> |
|
<head> |
|
<title>File not found</title> |
|
</head> |
|
<body bgcolor="#FFFFFF"> |
|
<b>File not found: $file</b> |
|
</body> |
|
</html> |
|
ENDNOTFOUND |
$filecontents=''; |
$filecontents=''; |
} else { |
} else { |
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle); |
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle); |
} |
} |
|
|
|
# |
|
# Edit action? Insert editing commands |
|
# |
|
unless ($ENV{'request.state'} eq 'published') { |
|
$result=&inserteditinfo($result,$filecontents); |
|
} |
|
|
$request->print($result); |
$request->print($result); |
|
|
writeallows($request->uri); |
writeallows($request->uri); |