--- loncom/xml/lonxml.pm 2002/11/13 23:21:07 1.215
+++ loncom/xml/lonxml.pm 2003/02/03 18:03:53 1.227
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.215 2002/11/13 23:21:07 albertel Exp $
+# $Id: lonxml.pm,v 1.227 2003/02/03 18:03:53 harris41 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -41,7 +41,6 @@
# 6/1/1 Gerd Kortemeyer
# 2/21,3/13 Guy
# 3/29,5/4 Gerd Kortemeyer
-# 5/10 Scott Harrison
# 5/26 Gerd Kortemeyer
# 5/27 H. K. Ng
# 6/2,6/3,6/8,6/9 Gerd Kortemeyer
@@ -101,6 +100,7 @@ use Apache::File();
use Apache::loncommon();
use Apache::lonfeedback();
use Apache::lonmsg();
+use Apache::loncacc();
#================================================== Main subroutine: xmlparse
#debugging control, to turn on debugging modify the correct handler
@@ -144,8 +144,8 @@ $Apache::lonxml::registered=0;
# a pointer the the Apache request object
$Apache::lonxml::request='';
-# a problem number counter, and check on hether it is used
-$Apache::lonxml::counter=0;
+# a problem number counter, and check on ether it is used
+$Apache::lonxml::counter=1;
$Apache::lonxml::counter_changed=0;
#internal check on whether to look at style defs
@@ -191,7 +191,8 @@ sub xmlend {
my $idx;
for ($idx=1;$idx<=$contrib{'version'};$idx++) {
my $hidden=($contrib{'hidden'}=~/\.$idx\./);
- unless (($hidden) && (!$seeid)) {
+ my $deleted=($contrib{'deleted'}=~/\.$idx\./);
+ unless ((($hidden) && (!$seeid)) || ($deleted)) {
my $message=$contrib{$idx.':message'};
$message=~s/\n/\
/g;
$message=&Apache::lontexconvert::msgtexconverted($message);
@@ -225,8 +226,10 @@ sub xmlend {
} else {
$sender.=' Hide';
- }
- }
+ }
+ $sender.=' Delete';
+ }
} else {
if ($screenname) {
$sender=''.$screenname.'';
@@ -267,7 +270,7 @@ sub tokeninputfield {
my $defhost=$Apache::lonnet::perlvar{'lonHostID'};
$defhost=~tr/a-z/A-Z/;
return (<
+\n";
@@ -388,12 +403,11 @@ sub registerurl {
(!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) &&
(!$forcereg)) {
return $result.
- '';
+ '';
}
if ($Apache::lonxml::registered && !$forcereg) { return ''; }
$Apache::lonxml::registered=1;
- my $nothing='';
- if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; }
+ my $reopen=&Apache::lonmenu::reopenmenu();
my $newmail='';
if (&Apache::lonmsg::newmail()) {
$newmail='menu.setstatus("you have","messages");';
@@ -421,13 +435,69 @@ ENDGRDS
ENDPARM
}
}
+ ###
+ ### Determine whether or not to display the 'cstr' button for this
+ ### resource
+ ###
+ my $editbutton = '';
+ if ($ENV{'user.author'}) {
+ if ($ENV{'request.role'}=~/^(ca|au)/) {
+ # Set defaults for authors
+ my ($top,$bottom) = ('con-','struct');
+ my $action = "go('/priv/".$ENV{'user.name'}."');";
+ my $cadom = $ENV{'request.role.domain'};
+ my $caname = $ENV{'user.name'};
+ my $desc = "Enter my resource construction space";
+ # Set defaults for co-authors
+ if ($ENV{'request.role'} =~ /^ca/) {
+ ($cadom,$caname)=($ENV{'request.role'}=~/(\w+)\/(\w+)$/);
+ ($top,$bottom) = ('co con-','struct');
+ $action = 'go("/priv/'.$caname.'");';
+ $desc = "Enter construction space as co-author";
+ }
+ # Check that we are on the correct machine
+ my $home = &Apache::lonnet::homeserver($caname,$cadom);
+ if ($home eq $Apache::lonnet::perlvar{'lonHostID'}) {
+ $editbutton=&switchmenu
+ (6,1,$top,,$bottom,$action,$desc);
+ }
+ }
+ ##
+ ## Determine if user can edit url.
+ ##
+ my $cfile='';
+ my $cfuname='';
+ my $cfudom='';
+ if ($ENV{'request.filename'}) {
+ my $file=&Apache::lonnet::declutter($ENV{'request.filename'});
+ $file=~s/^(\w+)\/(\w+)/\/priv\/$2/;
+ # Chech that the user has permission to edit this resource
+ ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);
+ if (defined($cfudom)) {
+ if (&Apache::lonnet::homeserver($cfuname,$cfudom)
+ eq $Apache::lonnet::perlvar{'lonHostID'}) {
+ $cfile=$file;
+ }
+ }
+ }
+ # Finally, turn the button on or off
+ if ($cfile) {
+ $editbutton=&switchmenu
+ (6,1,'cstr.gif','edit','resource',
+ 'go("'.$cfile.'");',"Edit this resource");
+ } elsif ($editbutton eq '') {
+ $editbutton = ' menu.clearbut(6,1);';
+ }
+ }
+ ###
+ ###
$result = (<
// BEGIN LON-CAPA Internal
function LONCAPAreg() {
- menu=window.open("$nothing","LONCAPAmenu","",false);
+ menu=$reopen;
menu.clearTimeout(menu.menucltim);
$timesync
$newmail
@@ -438,7 +508,7 @@ ENDPARM
menu.currentStale=0;
menu.clearbut(3,1);
menu.switchbutton
- (6,3,'catalog.gif','catalog','info','catalog_info()');
+ (6,3,'catalog.gif','catalog','info','catalog_info()','Show catalog information');
menu.switchbutton
(8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)','Provide my evaluation of this resource');
menu.switchbutton
@@ -456,10 +526,11 @@ ENDPARM
menu.switchbutton
(9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource');
$hwkadd
+ $editbutton
}
function LONCAPAstale() {
- menu=window.open("$nothing","LONCAPAmenu","",false);
+ menu=$reopen
menu.currentStale=1;
if (menu.reloadURL!='' && menu.reloadURL!= null) {
menu.switchbutton
@@ -470,7 +541,7 @@ ENDPARM
menu.clearbut(7,3);
menu.menucltim=menu.setTimeout(
'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
- 'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3)',
+ 'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3);clearbut(6,1)',
2000);
}
@@ -486,7 +557,7 @@ ENDREGTHIS
// BEGIN LON-CAPA Internal
function LONCAPAreg() {
- menu=window.open("$nothing","LONCAPAmenu","",false);
+ menu=$reopen
$timesync
menu.currentStale=1;
menu.clearbut(2,1);
@@ -598,7 +669,7 @@ sub htmlclean {
sub latex_special_symbols {
my ($current_token,$stack,$parstack)=@_;
- $current_token=~s/\\/\\char92 /g;
+ $current_token=~s/\\ /\\char92 /g;
$current_token=~s/\^/\\char94 /g;
$current_token=~s/\~/\\char126 /g;
$current_token=~s/(&[^a-z\#])/\\$1/g;
@@ -623,8 +694,7 @@ sub inner_xmlparse {
if ($metamode<1) {
my $text=$token->[1];
if ($token->[0] eq 'C' && $target eq 'tex') {
- $text = '%'.$text;
- $text =~ s/[\n\r]//g;
+ $text = '%'.$text."\n";
}
$result.=$text;
}
@@ -702,7 +772,7 @@ sub inner_xmlparse {
if ($token->[0] eq 'E') {
&end_tag($stack,$parstack,$token);
}
- }
+ }
if ($#$pars > -1) {
pop @$pars;
pop @Apache::lonxml::pwd;
@@ -716,7 +786,7 @@ sub inner_xmlparse {
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) {
$finaloutput=&afterburn($finaloutput);
- }
+ }
return $finaloutput;
}
@@ -744,13 +814,13 @@ sub callsub {
}
if (!$deleted) {
if ($space) {
- &Apache::lonxml::debug("Calling sub $sub in $space $metamode");
+ #&Apache::lonxml::debug("Calling sub $sub in $space $metamode");
$sub1="$space\:\:$sub";
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
$parstack,$parser,$safeeval,
$style);
} else {
- &Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
+ #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
if ($metamode <1) {
if (defined($token->[4]) && ($metamode < 1)) {
$currentstring = $token->[4];
@@ -762,7 +832,7 @@ sub callsub {
# &Apache::lonxml::debug("nodefalt:$nodefault:");
if ($currentstring eq '' && $nodefault eq '') {
if ($target eq 'edit') {
- &Apache::lonxml::debug("doing default edit for $token->[1]");
+ #&Apache::lonxml::debug("doing default edit for $token->[1]");
if ($token->[0] eq 'S') {
$currentstring = &Apache::edit::tag_start($target,$token);
} elsif ($token->[0] eq 'E') {
@@ -1044,7 +1114,9 @@ sub store_counter {
sub get_all_text {
my($tag,$pars)= @_;
&Apache::lonxml::debug("Got a ".ref($pars));
+ my $gotfullstack=1;
if (ref($pars) ne 'ARRAY') {
+ $gotfullstack=0;
$pars=[$pars];
}
my $depth=0;
@@ -1053,7 +1125,8 @@ sub get_all_text {
if ( $tag =~ m:^/: ) {
my $tag=substr($tag,1);
#&Apache::lonxml::debug("have:$tag:");
- while (($depth >=0) && ($#$pars > -1)) {
+ my $top_empty=0;
+ while (($depth >=0) && ($#$pars > -1) && (!$top_empty)) {
while (($depth >=0) && ($token = $$pars[-1]->get_token)) {
#&Apache::lonxml::debug("e token:$token->[0]:$depth:$token->[1]:".$#$pars.":".$#Apache::lonxml::pwd);
if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) {
@@ -1075,6 +1148,16 @@ sub get_all_text {
pop(@$pars);
pop(@Apache::lonxml::pwd);
}
+ if (($depth >=0) && ($#$pars == 0) ) { &debug("here4");$top_empty=1; }
+ }
+ if ($top_empty && $depth >= 0) {
+ #never found the end tag ran out of text, throw error send back blank
+ &error('Never found end tag for <'.$tag.'>');
+ if ($gotfullstack) {
+ my $newstring=''.$tag.'>'.$result;
+ &Apache::lonxml::newparser($pars,\$newstring);
+ }
+ $result='';
}
} else {
while ($#$pars > -1) {
@@ -1181,7 +1264,7 @@ sub afterburn {
$matchthis=~s/\_+/\\s\+/g;
$result=~s/($matchthis)/\$1\<\/a\>/s;
$result.=(<<"ENDSCRIPT");
-
ENDSCRIPT