--- loncom/xml/lonxml.pm 2003/02/25 21:27:07 1.239
+++ loncom/xml/lonxml.pm 2003/05/22 20:19:18 1.256
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.239 2003/02/25 21:27:07 sakharuk Exp $
+# $Id: lonxml.pm,v 1.256 2003/05/22 20:19:18 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -196,6 +196,13 @@ sub xmlend {
my $message=$contrib{$idx.':message'};
$message=~s/\n/\
/g;
$message=&Apache::lontexconvert::msgtexconverted($message);
+ if ($contrib{$idx.':attachmenturl'}) {
+ my ($fname,$ft)
+ =($contrib{$idx.':attachmenturl'}=~/\/(\w+)\.(\w+)$/);
+ $message.='
Attachment: '.$fname.'.'.$ft.'';
+ }
if ($message) {
if ($hidden) {
$message=''.$message.'';
@@ -248,7 +255,7 @@ sub xmlend {
}
if ($discussiononly) {
$discussion.=(<
+
ENDDISCUSS
$discussion.=&Apache::lonfeedback::generate_preview_button();
@@ -370,8 +380,11 @@ sub printtokenheader {
sub fontsettings() {
my $headerstring='';
if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) {
- $headerstring.=
- '';
+ $headerstring.=
+ '';
+ } elsif (!$ENV{'browser.mathml'}) {
+ $headerstring.=
+ '';
}
return $headerstring;
}
@@ -391,6 +404,7 @@ sub xmlparse {
&Apache::inputtags::initialize_inputtags();
&Apache::outputtags::initialize_outputtags();
&Apache::edit::initialize_edit();
+
#
# do we have a course style file?
#
@@ -407,8 +421,7 @@ sub xmlparse {
}
}
}
-
- #&printalltags();
+#&printalltags();
my @pars = ();
my $pwd=$ENV{'request.filename'};
$pwd =~ s:/[^/]*$::;
@@ -427,6 +440,7 @@ sub xmlparse {
my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars,
$safeeval,\%style_for_target);
+
if ($ENV{'request.uri'}) {
&writeallows($ENV{'request.uri'});
}
@@ -464,7 +478,7 @@ sub latex_special_symbols {
$current_token=~s/\\ /\\char92 /g;
$current_token=~s/\^/\\char94 /g;
$current_token=~s/\~/\\char126 /g;
- $current_token=~s/(&[^a-z\#])/\\$1/g;
+ $current_token=~s/(&[^A-Za-z\#])/\\$1/g;
$current_token=~s/([^&])\#/$1\\#/g;
$current_token=~s/(\$|_|{|})/\\$1/g;
$current_token=~s/\\char92 /\\texttt{\\char92}/g;
@@ -516,10 +530,10 @@ sub inner_xmlparse {
while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) {
my $lasttag=$$stack[-1];
if ($token->[1] =~ /^$lasttag$/i) {
- &Apache::lonxml::warning('Using tag </'.$token->[1].'> as end tag to <'.$$stack[-1].'>');
+ &Apache::lonxml::warning('Using tag </'.$token->[1].'> on line '.$token->[3].' as end tag to <'.$$stack[-1].'>');
last;
} else {
- &Apache::lonxml::warning('Found tag </'.$token->[1].'> when looking for </'.$$stack[-1].'> in file');
+ &Apache::lonxml::warning('Found tag </'.$token->[1].'> on line '.$token->[3].' when looking for </'.$$stack[-1].'> in file');
&end_tag($stack,$parstack,$token);
}
}
@@ -546,9 +560,10 @@ sub inner_xmlparse {
}
}
if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) {
- if ($target eq 'tex') {
- $result=&latex_special_symbols($result,$stack,$parstack);
- }
+ #Style file definitions should be correct
+ if ($target eq 'tex' && ($Apache::lonxml::usestyle)) {
+ $result=&latex_special_symbols($result,$stack,$parstack);
+ }
}
# Encode any high ASCII characters
@@ -707,6 +722,7 @@ sub init_safespace {
$safeeval->permit("sort");
$safeeval->deny(":base_io");
$safehole->wrap(\&Apache::scripttag::xmlparse,$safeeval,'&xmlparse');
+ $safehole->wrap(\&Apache::outputtags::multipart,$safeeval,'&multipart');
$safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT');
$safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');
@@ -788,6 +804,7 @@ sub init_safespace {
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
$rndseed=&Apache::lonnet::rndseed($symb,$courseid,$domain,$name);
$safeinit .= ';$external::randomseed='.$rndseed.';';
+ &Apache::lonxml::debug("Setting rndseed to $rndseed");
&Apache::run::run($safeinit,$safeeval);
}
@@ -795,7 +812,7 @@ sub default_homework_load {
my ($safeeval)=@_;
&Apache::lonxml::debug('Loading default_homework');
my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm');
- if ($default == -1) {
+ if ($default eq -1) {
&Apache::lonxml::error("Unable to find default_homework.lcpm");
} else {
&Apache::run::run($default,$safeeval);
@@ -887,18 +904,23 @@ sub get_all_text_unbalanced {
}
sub increment_counter {
- $Apache::lonxml::counter++;
+ my ($increment) = @_;
+ if (defined($increment) && $increment gt 0) {
+ $Apache::lonxml::counter+=$increment;
+ } else {
+ $Apache::lonxml::counter++;
+ }
$Apache::lonxml::counter_changed=1;
}
sub init_counter {
if (defined($ENV{'form.counter'})) {
$Apache::lonxml::counter=$ENV{'form.counter'};
+ $Apache::lonxml::counter_changed=0;
} else {
$Apache::lonxml::counter=1;
- &store_counter();
+ $Apache::lonxml::counter_changed=1;
}
- $Apache::lonxml::counter_changed=0;
}
sub store_counter {
@@ -1100,6 +1122,14 @@ sub inserteditinfo {
my ($result,$filecontents)=@_;
$filecontents = &HTML::Entities::encode($filecontents);
# my $editheader='Edit below
';
+ my $xml_help = ''.
+ &Apache::loncommon::help_open_topic("Greek_Symbols",'Greek Symbols',
+ undef,undef,600)
+ .' | '.
+ &Apache::loncommon::help_open_topic("Other_Symbols",'Other Symbols',
+ undef,undef,600)
+ .' |
';
+ my $titledisplay=&display_title();
my $buttons=(<
@@ -1110,12 +1140,14 @@ BUTTONS
+$titledisplay
ENDFOOTER
# $result=~s/(\]*\>)/$1$editheader/is;
$result=~s/(\<\/body\>)/$editfooter/is;
@@ -1150,37 +1182,37 @@ sub get_target {
}
sub handler {
- my $request=shift;
-
- my $target=&get_target();
-
- $Apache::lonxml::debug=0;
-
- if ($ENV{'browser.mathml'}) {
- $request->content_type('text/xml');
- } else {
- $request->content_type('text/html');
- }
- &Apache::loncommon::no_cache($request);
- $request->send_http_header;
-
- return OK if $request->header_only;
+ my $request=shift;
+
+ my $target=&get_target();
+
+ $Apache::lonxml::debug=0;
+
+ if ($ENV{'browser.mathml'}) {
+ $request->content_type('text/xml');
+ } else {
+ $request->content_type('text/html');
+ }
+ &Apache::loncommon::no_cache($request);
+ $request->send_http_header;
+
+ 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'}) || ($ENV{'form.attemptclean'})) {
- &storefile($file,$ENV{'form.filecont'});
- }
- }
- my %mystyle;
- my $result = '';
- my $filecontents=&Apache::lonnet::getfile($file);
- if ($filecontents == -1) {
- $result=(<
File not found
@@ -1191,40 +1223,54 @@ sub handler {
ENDNOTFOUND
$filecontents='';
- if ($ENV{'request.state'} ne 'published') {
- $filecontents=&createnewhtml();
- $ENV{'form.editmode'}='Edit'; #force edit mode
- }
- } else {
- unless ($ENV{'request.state'} eq 'published') {
- if ($ENV{'form.attemptclean'}) {
- $filecontents=&htmlclean($filecontents,1);
- }
- }
- if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) {
- $result = &Apache::lonxml::xmlparse($request,$target,$filecontents,
- '',%mystyle);
+ if ($ENV{'request.state'} ne 'published') {
+ $filecontents=&createnewhtml();
+ $ENV{'form.editmode'}='Edit'; #force edit mode
+ }
+ } else {
+ unless ($ENV{'request.state'} eq 'published') {
+ if ($ENV{'form.attemptclean'}) {
+ $filecontents=&htmlclean($filecontents,1);
+ }
+ }
+ if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) {
+ $result = &Apache::lonxml::xmlparse($request,$target,$filecontents,
+ '',%mystyle);
+ }
}
- }
-
+
#
# Edit action? Insert editing commands
#
- unless ($ENV{'request.state'} eq 'published') {
- if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) {
- my $displayfile=$request->uri;
- $displayfile=~s/^\/[^\/]*//;
- $result=''.$displayfile.
- '
';
- $result=&inserteditinfo($result,$filecontents);
+ unless ($ENV{'request.state'} eq 'published') {
+ if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) {
+ my $displayfile=$request->uri;
+ $displayfile=~s/^\/[^\/]*//;
+ $result=''.$displayfile.
+ '
';
+ $result=&inserteditinfo($result,$filecontents);
+ }
}
- }
-
- writeallows($request->uri);
-
- $request->print($result);
-
- return OK;
+
+ writeallows($request->uri);
+
+
+ $request->print($result);
+
+ return OK;
+}
+
+sub display_title {
+ my $result;
+ if ($ENV{'request.state'} eq 'construct') {
+ my $title=&Apache::lonnet::gettitle();
+ if (!defined($title) || $title eq '') {
+ $title = $ENV{'request.filename'};
+ $title = substr($title, rindex($title, '/') + 1);
+ }
+ $result = "";
+ }
+ return $result;
}
sub debug {
@@ -1372,7 +1418,7 @@ sub description {
# calls to lonnet functions for this setup.
# - looks for form.grade_ parameters
sub whichuser {
- my ($symb,$courseid,$domain,$name);
+ my ($symb,$courseid,$domain,$name,$publicuser);
if (defined($ENV{'form.grade_symb'})) {
my $tmp_courseid=$ENV{'form.grade_courseid'};
my $allowed=&Apache::lonnet::allowed('mgr',$tmp_courseid);
@@ -1383,12 +1429,18 @@ sub whichuser {
$name=$ENV{'form.grade_username'};
}
} else {
- $symb=&Apache::lonnet::symbread();
- $courseid=$ENV{'request.course.id'};
- $domain=$ENV{'user.domain'};
- $name=$ENV{'user.name'};
+ $symb=&Apache::lonnet::symbread();
+ $courseid=$ENV{'request.course.id'};
+ $domain=$ENV{'user.domain'};
+ $name=$ENV{'user.name'};
+ if ($name eq 'public' && $domain eq 'public') {
+ if (!defined($ENV{'form.username'})) {
+ $ENV{'form.username'}.=time.rand(10000000);
+ }
+ $name.=$ENV{'form.username'};
+ }
}
- return ($symb,$courseid,$domain,$name);
+ return ($symb,$courseid,$domain,$name,$publicuser);
}
1;