version 1.219, 2002/12/06 19:29:02
|
version 1.234, 2003/02/14 19:35:55
|
Line 41
|
Line 41
|
# 6/1/1 Gerd Kortemeyer |
# 6/1/1 Gerd Kortemeyer |
# 2/21,3/13 Guy |
# 2/21,3/13 Guy |
# 3/29,5/4 Gerd Kortemeyer |
# 3/29,5/4 Gerd Kortemeyer |
# 5/10 Scott Harrison |
|
# 5/26 Gerd Kortemeyer |
# 5/26 Gerd Kortemeyer |
# 5/27 H. K. Ng |
# 5/27 H. K. Ng |
# 6/2,6/3,6/8,6/9 Gerd Kortemeyer |
# 6/2,6/3,6/8,6/9 Gerd Kortemeyer |
Line 146 $Apache::lonxml::registered=0;
|
Line 145 $Apache::lonxml::registered=0;
|
$Apache::lonxml::request=''; |
$Apache::lonxml::request=''; |
|
|
# a problem number counter, and check on ether it is used |
# a problem number counter, and check on ether it is used |
$Apache::lonxml::counter=1; |
$Apache::lonxml::counter=4; |
$Apache::lonxml::counter_changed=0; |
$Apache::lonxml::counter_changed=0; |
|
|
#internal check on whether to look at style defs |
#internal check on whether to look at style defs |
Line 192 sub xmlend {
|
Line 191 sub xmlend {
|
my $idx; |
my $idx; |
for ($idx=1;$idx<=$contrib{'version'};$idx++) { |
for ($idx=1;$idx<=$contrib{'version'};$idx++) { |
my $hidden=($contrib{'hidden'}=~/\.$idx\./); |
my $hidden=($contrib{'hidden'}=~/\.$idx\./); |
unless (($hidden) && (!$seeid)) { |
my $deleted=($contrib{'deleted'}=~/\.$idx\./); |
|
unless ((($hidden) && (!$seeid)) || ($deleted)) { |
my $message=$contrib{$idx.':message'}; |
my $message=$contrib{$idx.':message'}; |
$message=~s/\n/\<br \/\>/g; |
$message=~s/\n/\<br \/\>/g; |
$message=&Apache::lontexconvert::msgtexconverted($message); |
$message=&Apache::lontexconvert::msgtexconverted($message); |
Line 226 sub xmlend {
|
Line 226 sub xmlend {
|
} else { |
} else { |
$sender.=' <a href="/adm/feedback?hide='. |
$sender.=' <a href="/adm/feedback?hide='. |
$symb.':::'.$idx.'">Hide</a>'; |
$symb.':::'.$idx.'">Hide</a>'; |
} |
} |
} |
$sender.=' <a href="/adm/feedback?deldisc='. |
|
$symb.':::'.$idx.'">Delete</a>'; |
|
} |
} else { |
} else { |
if ($screenname) { |
if ($screenname) { |
$sender='<i>'.$screenname.'</i>'; |
$sender='<i>'.$screenname.'</i>'; |
Line 268 sub tokeninputfield {
|
Line 270 sub tokeninputfield {
|
my $defhost=$Apache::lonnet::perlvar{'lonHostID'}; |
my $defhost=$Apache::lonnet::perlvar{'lonHostID'}; |
$defhost=~tr/a-z/A-Z/; |
$defhost=~tr/a-z/A-Z/; |
return (<<ENDINPUTFIELD) |
return (<<ENDINPUTFIELD) |
<script> |
<script type="text/javascript"> |
function updatetoken() { |
function updatetoken() { |
var comp=new Array; |
var comp=new Array; |
var barcode=unescape(document.tokeninput.barcode.value); |
var barcode=unescape(document.tokeninput.barcode.value); |
Line 352 sub printtokenheader {
|
Line 354 sub printtokenheader {
|
if ($target eq 'web') { |
if ($target eq 'web') { |
my %idhash=&Apache::lonnet::idrget($tudom,($tuname)); |
my %idhash=&Apache::lonnet::idrget($tudom,($tuname)); |
return |
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. |
'Checked out for '.$plainname. |
'<br />User: '.$tuname.' at '.$tudom. |
'<br />User: '.$tuname.' at '.$tudom. |
'<br />ID: '.$idhash{$tuname}. |
'<br />ID: '.$idhash{$tuname}. |
Line 374 sub fontsettings() {
|
Line 376 sub fontsettings() {
|
return $headerstring; |
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; |
|
my $result = ''; |
|
|
|
if ($target eq 'edit') { |
|
$result .="<script>\n". |
|
"if (typeof menu != 'undefined') {menu.currentURL=null;}\n". |
|
&Apache::loncommon::browser_and_searcher_javascript(). |
|
"\n</script>\n"; |
|
} |
|
if ((($ENV{'request.publicaccess'}) || |
|
(!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) && |
|
(!$forcereg)) { |
|
return $result. |
|
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
|
} |
|
if ($Apache::lonxml::registered && !$forcereg) { return ''; } |
|
$Apache::lonxml::registered=1; |
|
my $nothing=''; |
|
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
|
my $newmail=''; |
|
if (&Apache::lonmsg::newmail()) { |
|
$newmail='menu.setstatus("you have","messages");'; |
|
} |
|
my $timesync='menu.syncclock(1000*'.time.');'; |
|
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
|
my $hwkadd=''; |
|
if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
|
if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) { |
|
$hwkadd.=(<<ENDSUBM); |
|
menu.switchbutton(7,1,'subm.gif','view sub','missions','gocmd("/adm/grades","submission")', |
|
'View user submissions for this assessment resource'); |
|
ENDSUBM |
|
} |
|
if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) { |
|
$hwkadd.=(<<ENDGRDS); |
|
menu.switchbutton(7,2,'pgrd.gif','problem','grades','gocmd("/adm/grades","gradingmenu")', |
|
'Modify user grades for this assessment resource'); |
|
ENDGRDS |
|
} |
|
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { |
|
$hwkadd.=(<<ENDPARM); |
|
menu.switchbutton(7,3,'pparm.gif','problem','parms','gocmd("/adm/parmset","set")', |
|
'Modify deadlines, etc, for this assessment resource'); |
|
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"> |
|
// BEGIN LON-CAPA Internal |
|
|
|
function LONCAPAreg() { |
|
menu=window.open("$nothing","LONCAPAmenu","",false); |
|
menu.clearTimeout(menu.menucltim); |
|
$timesync |
|
$newmail |
|
menu.currentURL=window.location.pathname; |
|
menu.reloadURL=window.location.pathname; |
|
menu.currentSymb="$ENV{'request.symb'}"; |
|
menu.reloadSymb="$ENV{'request.symb'}"; |
|
menu.currentStale=0; |
|
menu.clearbut(3,1); |
|
menu.switchbutton |
|
(6,3,'catalog.gif','catalog','info','catalog_info()'); |
|
menu.switchbutton |
|
(8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)','Provide my evaluation of this resource'); |
|
menu.switchbutton |
|
(8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)','Provide feedback messages or contribute to the course discussion about this resource'); |
|
menu.switchbutton |
|
(8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)','Prepare a printable document'); |
|
menu.switchbutton |
|
(2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)','Go to the previous resource in the course sequence'); |
|
menu.switchbutton |
|
(2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)','Go to the next resource in the course sequence'); |
|
menu.switchbutton |
|
(9,1,'sbkm.gif','set','bookmark','set_bookmark()','Set a bookmark for this resource'); |
|
menu.switchbutton |
|
(9,2,'vbkm.gif','view','bookmark','edit_bookmarks()','Use or edit my bookmark collection'); |
|
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.currentStale=1; |
|
if (menu.reloadURL!='' && menu.reloadURL!= null) { |
|
menu.switchbutton |
|
(3,1,'reload.gif','return','location','go(reloadURL)','Return to the last known location in the course sequence'); |
|
} |
|
menu.clearbut(7,1); |
|
menu.clearbut(7,2); |
|
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(6,1)', |
|
2000); |
|
|
|
} |
|
|
|
// END LON-CAPA Internal |
|
</script> |
|
ENDREGTHIS |
|
|
|
} else { |
|
$result = (<<ENDDONOTREGTHIS); |
|
|
|
<script language="JavaScript"> |
|
// BEGIN LON-CAPA Internal |
|
|
|
function LONCAPAreg() { |
|
menu=window.open("$nothing","LONCAPAmenu","",false); |
|
$timesync |
|
menu.currentStale=1; |
|
menu.clearbut(2,1); |
|
menu.clearbut(2,3); |
|
menu.clearbut(8,1); |
|
menu.clearbut(8,2); |
|
menu.clearbut(8,3); |
|
if (menu.currentURL) { |
|
menu.switchbutton |
|
(3,1,'reload.gif','return','location','go(currentURL)'); |
|
} else { |
|
menu.clearbut(3,1); |
|
} |
|
} |
|
|
|
function LONCAPAstale() { |
|
} |
|
|
|
// END LON-CAPA Internal |
|
</script> |
|
ENDDONOTREGTHIS |
|
} |
|
return $result; |
|
} |
|
|
|
sub loadevents() { |
|
return 'LONCAPAreg();'; |
|
} |
|
|
|
sub unloadevents() { |
|
return 'LONCAPAstale();'; |
|
} |
|
|
|
sub printalltags { |
sub printalltags { |
my $temp; |
my $temp; |
foreach $temp (sort keys %Apache::lonxml::alltags) { |
foreach $temp (sort keys %Apache::lonxml::alltags) { |
Line 602 sub xmlparse {
|
Line 388 sub xmlparse {
|
my ($request,$target,$content_file_string,$safeinit,%style_for_target) = @_; |
my ($request,$target,$content_file_string,$safeinit,%style_for_target) = @_; |
|
|
&setup_globals($request,$target); |
&setup_globals($request,$target); |
|
&Apache::inputtags::initialize_inputtags(); |
|
&Apache::outputtags::initialize_outputtags(); |
|
&Apache::edit::initialize_edit(); |
# |
# |
# do we have a course style file? |
# do we have a course style file? |
# |
# |
Line 667 sub htmlclean {
|
Line 456 sub htmlclean {
|
} |
} |
|
|
sub latex_special_symbols { |
sub latex_special_symbols { |
my ($current_token,$stack,$parstack)=@_; |
my ($current_token,$stack,$parstack,$where)=@_; |
$current_token=~s/\\ /\\char92 /g; |
if ($where=='header') { |
$current_token=~s/\^/\\char94 /g; |
$current_token =~ s/_/ /g; |
$current_token=~s/\~/\\char126 /g; |
$current_token =~ s/\^/ /g; |
$current_token=~s/(&[^a-z\#])/\\$1/g; |
$current_token =~ s/&/\\&/g; |
$current_token=~s/([^&])\#/$1\\#/g; |
} else { |
$current_token=~s/(\$|_|{|})/\\$1/g; |
$current_token=~s/\\ /\\char92 /g; |
$current_token=~s/\\char92 /\\texttt{\\char92}/g; |
$current_token=~s/\^/\\char94 /g; |
$current_token=~s/>/\$>\$/g; #more |
$current_token=~s/\~/\\char126 /g; |
$current_token=~s/</\$<\$/g; #less |
$current_token=~s/(&[^a-z\#])/\\$1/g; |
if ($current_token=~m/\d%/) {$current_token =~ s/(\d)%/$1\\%/g;} #percent after digit |
$current_token=~s/([^&])\#/$1\\#/g; |
if ($current_token=~m/\s%/) {$current_token =~ s/(\s)%/$1\\%/g;} #persent after space |
$current_token=~s/(\$|_|{|})/\\$1/g; |
|
$current_token=~s/\\char92 /\\texttt{\\char92}/g; |
|
$current_token=~s/>/\$>\$/g; #more |
|
$current_token=~s/</\$<\$/g; #less |
|
if ($current_token=~m/\d%/) {$current_token =~ s/(\d)%/$1\\%/g;} #percent after digit |
|
if ($current_token=~m/\s%/) {$current_token =~ s/(\s)%/$1\\%/g;} #persent after space |
|
} |
return $current_token; |
return $current_token; |
} |
} |
|
|
Line 771 sub inner_xmlparse {
|
Line 566 sub inner_xmlparse {
|
if ($token->[0] eq 'E') { |
if ($token->[0] eq 'E') { |
&end_tag($stack,$parstack,$token); |
&end_tag($stack,$parstack,$token); |
} |
} |
} |
} |
if ($#$pars > -1) { |
if ($#$pars > -1) { |
pop @$pars; |
pop @$pars; |
pop @Apache::lonxml::pwd; |
pop @Apache::lonxml::pwd; |
Line 813 sub callsub {
|
Line 608 sub callsub {
|
} |
} |
if (!$deleted) { |
if (!$deleted) { |
if ($space) { |
if ($space) { |
&Apache::lonxml::debug("Calling sub $sub in $space $metamode"); |
#&Apache::lonxml::debug("Calling sub $sub in $space $metamode"); |
$sub1="$space\:\:$sub"; |
$sub1="$space\:\:$sub"; |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
$parstack,$parser,$safeeval, |
$parstack,$parser,$safeeval, |
$style); |
$style); |
} else { |
} 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 ($metamode <1) { |
if (defined($token->[4]) && ($metamode < 1)) { |
if (defined($token->[4]) && ($metamode < 1)) { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
Line 831 sub callsub {
|
Line 626 sub callsub {
|
# &Apache::lonxml::debug("nodefalt:$nodefault:"); |
# &Apache::lonxml::debug("nodefalt:$nodefault:"); |
if ($currentstring eq '' && $nodefault eq '') { |
if ($currentstring eq '' && $nodefault eq '') { |
if ($target eq 'edit') { |
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') { |
if ($token->[0] eq 'S') { |
$currentstring = &Apache::edit::tag_start($target,$token); |
$currentstring = &Apache::edit::tag_start($target,$token); |
} elsif ($token->[0] eq 'E') { |
} elsif ($token->[0] eq 'E') { |
Line 1113 sub store_counter {
|
Line 908 sub store_counter {
|
sub get_all_text { |
sub get_all_text { |
my($tag,$pars)= @_; |
my($tag,$pars)= @_; |
&Apache::lonxml::debug("Got a ".ref($pars)); |
&Apache::lonxml::debug("Got a ".ref($pars)); |
|
my $gotfullstack=1; |
if (ref($pars) ne 'ARRAY') { |
if (ref($pars) ne 'ARRAY') { |
|
$gotfullstack=0; |
$pars=[$pars]; |
$pars=[$pars]; |
} |
} |
my $depth=0; |
my $depth=0; |
Line 1122 sub get_all_text {
|
Line 919 sub get_all_text {
|
if ( $tag =~ m:^/: ) { |
if ( $tag =~ m:^/: ) { |
my $tag=substr($tag,1); |
my $tag=substr($tag,1); |
#&Apache::lonxml::debug("have:$tag:"); |
#&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)) { |
while (($depth >=0) && ($token = $$pars[-1]->get_token)) { |
#&Apache::lonxml::debug("e token:$token->[0]:$depth:$token->[1]:".$#$pars.":".$#Apache::lonxml::pwd); |
#&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')) { |
if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) { |
Line 1140 sub get_all_text {
|
Line 938 sub get_all_text {
|
} |
} |
} |
} |
} |
} |
|
if (($depth >=0) && ($#$pars == 0) ) { $top_empty=1; } |
if (($depth >=0) && ($#$pars > 0) ) { |
if (($depth >=0) && ($#$pars > 0) ) { |
pop(@$pars); |
pop(@$pars); |
pop(@Apache::lonxml::pwd); |
pop(@Apache::lonxml::pwd); |
} |
} |
} |
} |
|
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 { |
} else { |
while ($#$pars > -1) { |
while ($#$pars > -1) { |
while ($token = $$pars[-1]->get_token) { |
while ($token = $$pars[-1]->get_token) { |
Line 1196 sub parstring {
|
Line 1004 sub parstring {
|
foreach (@{$token->[3]}) { |
foreach (@{$token->[3]}) { |
unless ($_=~/\W/) { |
unless ($_=~/\W/) { |
my $val=$token->[2]->{$_}; |
my $val=$token->[2]->{$_}; |
$val =~ s/([\%\@\\\"])/\\$1/g; |
$val =~ s/([\%\@\\\"\'])/\\$1/g; |
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; } |
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; } |
$temp .= "my \$$_=\"$val\";" |
$temp .= "my \$$_=\"$val\";" |
} |
} |
Line 1250 sub afterburn {
|
Line 1058 sub afterburn {
|
$matchthis=~s/\_+/\\s\+/g; |
$matchthis=~s/\_+/\\s\+/g; |
$result=~s/($matchthis)/\<a name=\"$anchorname\"\>$1\<\/a\>/s; |
$result=~s/($matchthis)/\<a name=\"$anchorname\"\>$1\<\/a\>/s; |
$result.=(<<"ENDSCRIPT"); |
$result.=(<<"ENDSCRIPT"); |
<script> |
<script type="text/javascript"> |
document.location.hash='$anchorname'; |
document.location.hash='$anchorname'; |
</script> |
</script> |
ENDSCRIPT |
ENDSCRIPT |
Line 1486 sub get_param_var {
|
Line 1294 sub get_param_var {
|
if ( ! $context ) { $context = -1; } |
if ( ! $context ) { $context = -1; } |
my $args =''; |
my $args =''; |
if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; } |
if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; } |
|
&Apache::lonxml::debug("Args are $args param is $param"); |
if ($case_insensitive) { |
if ($case_insensitive) { |
if (! ($args=~s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei)) { |
if (! ($args=~s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei)) { |
return undef; |
return undef; |
} |
} |
} elsif ( $args !~ /my \$\Q$param\E=\"/ ) { return undef; } |
} elsif ( $args !~ /my \$\Q$param\E=\"/ ) { return undef; } |
my $value=&Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #' |
my $value=&Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #' |
if ($value =~ /^[\$\@\%]/) { |
&Apache::lonxml::debug("first run is $value"); |
return &Apache::run::run("return $value",$safeeval,1); |
if ($value =~ /^[\$\@\%]\w+$/) { |
|
&Apache::lonxml::debug("doing second"); |
|
my @result=&Apache::run::run("return $value",$safeeval,1); |
|
if (!defined($result[0])) { |
|
return $value |
|
} else { |
|
if (wantarray) { return @result; } else { return $result[0]; } |
|
} |
} else { |
} else { |
return $value; |
return $value; |
} |
} |