--- loncom/xml/lonxml.pm 2002/12/03 22:04:43 1.216
+++ loncom/xml/lonxml.pm 2003/01/13 22:18:34 1.224
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.216 2002/12/03 22:04:43 sakharuk Exp $
+# $Id: lonxml.pm,v 1.224 2003/01/13 22:18:34 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -101,6 +101,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
@@ -191,7 +192,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 +227,10 @@ sub xmlend {
} else {
$sender.=' Hide';
- }
- }
+ }
+ $sender.=' Delete';
+ }
} else {
if ($screenname) {
$sender=''.$screenname.'';
@@ -351,7 +355,7 @@ sub printtokenheader {
if ($target eq 'web') {
my %idhash=&Apache::lonnet::idrget($tudom,($tuname));
return
- '
'.
+ '
'.
'Checked out for '.$plainname.
'
User: '.$tuname.' at '.$tudom.
'
ID: '.$idhash{$tuname}.
@@ -373,6 +377,18 @@ sub fontsettings() {
return $headerstring;
}
+
+##
+## switchmenu - modeled on lonmenu::switchmenu, but better.
+## Helper function for registerurl
+##
+sub switchmenu {
+ my ($row,$col,$imgsrc,$texttop,$textbot,$action,$description)=@_;
+ return(<
@@ -456,6 +528,7 @@ ENDPARM
menu.switchbutton
(9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource');
$hwkadd
+ $editbutton
}
function LONCAPAstale() {
@@ -470,7 +543,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);
}
@@ -701,7 +774,7 @@ sub inner_xmlparse {
if ($token->[0] eq 'E') {
&end_tag($stack,$parstack,$token);
}
- }
+ }
if ($#$pars > -1) {
pop @$pars;
pop @Apache::lonxml::pwd;
@@ -743,13 +816,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];
@@ -761,7 +834,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') {
@@ -1043,7 +1116,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;
@@ -1052,7 +1127,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')) {
@@ -1074,6 +1150,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) {