--- loncom/xml/lonxml.pm 2002/12/03 22:04:43 1.216 +++ loncom/xml/lonxml.pm 2003/01/09 22:45:50 1.221.2.1 @@ -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.221.2.1 2003/01/09 22:45:50 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 @@ -351,7 +352,7 @@ sub printtokenheader { if ($target eq 'web') { my %idhash=&Apache::lonnet::idrget($tudom,($tuname)); return - '<img align="right" src="/cgi-bin/barcode.gif?encode='.$token.'" />'. + '<img align="right" src="/cgi-bin/barcode.png?encode='.$token.'" />'. 'Checked out for '.$plainname. '<br />User: '.$tuname.' at '.$tudom. '<br />ID: '.$idhash{$tuname}. @@ -373,6 +374,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(<<ENDSMENU); + menu.switchbutton($row,$col,'$imgsrc','$texttop','$textbot','$action','$description'); +ENDSMENU +} + sub registerurl { my $forcereg=shift; my $target = shift; @@ -421,6 +434,62 @@ 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 = (<<ENDREGTHIS); <script language="JavaScript"> @@ -456,6 +525,7 @@ ENDPARM menu.switchbutton (9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource'); $hwkadd + $editbutton } function LONCAPAstale() { @@ -470,7 +540,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); } @@ -743,13 +813,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 +831,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') { @@ -1052,7 +1122,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 +1145,7 @@ sub get_all_text { pop(@$pars); pop(@Apache::lonxml::pwd); } + if (($depth >=0) && ($#$pars == 0) ) { $top_empty=1; } } } else { while ($#$pars > -1) {