my ($inner)=@_; my ($nodeloc,$title,$alt)=$inner=~m#^pmdev://([^|]+)(?:\|([^|]*)(?:\|([^|]*))?)?$#; return "[$inner]" unless $nodeloc; my $N; my ($textlink, $display, $comment)=('') x 3; if ($nodeloc=~/^\?/) { $textlink=qq(); if (!$title and $nodeloc=~/node(?:_id)?=([^&;]+)/) { $title=$1; } } elsif ($nodeloc=~/\D/) { my ($node,$view,$type)=split /;/,$nodeloc; if ($type) { $comment=""; my $T=getType($type); $N=getNode($node,$T) if $T; } elsif ($node=~/\D/) { $comment=""; ($N)=getNodeWhere({title=>$node}); } else { $comment=""; $N=getNodeById($node); } $display=$view; } else { $comment=""; $N=getNodeById($nodeloc); }; my $PMDEV=getNode( 'pmdev', 'usergroup' ); return join '',$comment, defined($alt) ? $alt : $title||$N->{title}||"" unless Everything::isApproved($USER,$PMDEV); return "[$inner]" unless $textlink || $N; return join '',$comment, $textlink ? $textlink.$q->escapeHTML($title||$nodeloc)."" : linkNode($N,$title||$N->{title}, $display ? { displaytype => $display } : () ) ;