--- loncom/xml/lonxml.pm	2001/08/23 22:12:24	1.126
+++ loncom/xml/lonxml.pm	2001/10/05 16:55:12	1.135
@@ -13,7 +13,10 @@
 # 6/12,6/13 H. K. Ng
 # 6/16 Gerd Kortemeyer
 # 7/27 H. K. Ng
-# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20,8/23 Gerd Kortemeyer
+# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20,8/23,8/24 Gerd Kortemeyer
+# Guy Albertelli
+# 9/26 Gerd Kortemeyer
+
 
 package Apache::lonxml; 
 use vars 
@@ -216,16 +219,17 @@ sub maketoken {
 }
 
 sub printtokenheader {
-    my ($target,$token,$symb,$tuname,$tudom,$tcrsid)=@_;
+    my ($target,$token,$tsymb,$tcrsid,$tudom,$tuname)=@_;
     unless ($token) { return ''; }
 
-    unless ($symb) {
-	$symb=&Apache::lonnet::symbread();
+    my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
+    unless ($tsymb) {
+	$tsymb=$symb;
     }
     unless ($tuname) {
-	$tuname=$ENV{'user.name'};
-        $tudom=$ENV{'user.domain'};
-        $tcrsid=$ENV{'request.course.id'};
+	$tuname=$name;
+        $tudom=$domain;
+        $tcrsid=$courseid;
     }
 
     my %reply=&Apache::lonnet::get('environment',
@@ -260,7 +264,11 @@ sub fontsettings() {
 
 sub registerurl {
     my $forcereg=shift;
-    if ($Apache::lonxml::registered) { return ''; }
+    if ($ENV{'request.publicaccess'}) {
+	return 
+         '<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>';
+    }
+    if ($Apache::lonxml::registered && !$forcereg) { return ''; }
     $Apache::lonxml::registered=1;
     if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
         my $hwkadd='';
@@ -322,9 +330,11 @@ ENDPARM
     function LONCAPAstale() {
 	  menu=window.open("","LONCAPAmenu");
           menu.currentStale=1;
-          //menu.clearbut(7,1);
-          //menu.clearbut(7,2);
-          //menu.clearbut(7,3);
+          menu.switchbutton
+             (3,1,'reload.gif','return','location','go(currentURL)');
+          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)',
@@ -662,6 +672,11 @@ sub setup_globals {
     $Apache::lonxml::metamode = 1;
     $Apache::lonxml::evaluate = 1;
     $Apache::lonxml::import = 0;
+  } elsif ($target eq 'answer') {
+    $Apache::lonxml::redirection = 0;
+    $Apache::lonxml::metamode = 1;
+    $Apache::lonxml::evaluate = 1;
+    $Apache::lonxml::import = 1;
   } elsif ($target eq 'grade') {
     &startredirection;
     $Apache::lonxml::metamode = 0;
@@ -1084,7 +1099,25 @@ sub get_param {
   if ( ! $context ) { $context = -1; }
   my $args ='';
   if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
-  return &Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #'
+  if ( $args =~ /my \$$param=\"/ ) {
+    return &Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #'
+  } else {
+    return undef;
+  }
+}
+
+sub get_param_var {
+  my ($param,$parstack,$safeeval,$context) = @_;
+  if ( ! $context ) { $context = -1; }
+  my $args ='';
+  if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
+  if ( $args !~ /my \$$param=\"/ ) { return undef; }
+  my $value=&Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #'
+  if ($value =~ /^[\$\@\%]/) {
+    return &Apache::run::run("return $value",$safeeval,1);
+  } else {
+    return $value;
+  }
 }
 
 sub register_insert {
@@ -1097,13 +1130,16 @@ sub register_insert {
     if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; }
     if ( $line =~ /TABLE/ ) { last; }
     my ($tag,$descrip,$color,$function,$show) = split(/,/, $line);
-    $insertlist{"$tagnum.tag"} = $tag;
-    $insertlist{"$tagnum.description"} = $descrip;
-    $insertlist{"$tagnum.color"} = $color;
-    $insertlist{"$tagnum.function"} = $function;
-    $insertlist{"$tagnum.show"}= $show;
-    $insertlist{"$tag.num"}=$tagnum;
-    $tagnum++;
+    if ($tag) {
+      $insertlist{"$tagnum.tag"} = $tag;
+      $insertlist{"$tagnum.description"} = $descrip;
+      $insertlist{"$tagnum.color"} = $color;
+      $insertlist{"$tagnum.function"} = $function;
+      if (!defined($show)) { $show='yes'; }
+      $insertlist{"$tagnum.show"}= $show;
+      $insertlist{"$tag.num"}=$tagnum;
+      $tagnum++;
+    }
   }
   $i++; #skipping TABLE line
   $tagnum = 0;
@@ -1132,10 +1168,7 @@ sub description {
 # calls to lonnet functions for this setup.
 # - looks for form.grade_ parameters
 sub whichuser {
-  my $symb=&Apache::lonnet::symbread();
-  my $courseid=$ENV{'request.course.id'};
-  my $domain=$ENV{'user.domain'};
-  my $name=$ENV{'user.name'};
+  my ($symb,$courseid,$domain,$name);
   if (defined($ENV{'form.grade_symb'})) {
     my $tmp_courseid=$ENV{'form.grade_courseid'};
     my $allowed=&Apache::lonnet::allowed('mgr',$tmp_courseid);
@@ -1145,6 +1178,11 @@ sub whichuser {
       $domain=$ENV{'form.grade_domain'};
       $name=$ENV{'form.grade_username'};
     }
+  } else {
+    $symb=&Apache::lonnet::symbread();
+    $courseid=$ENV{'request.course.id'};
+    $domain=$ENV{'user.domain'};
+    $name=$ENV{'user.name'};
   }
   return ($symb,$courseid,$domain,$name);
 }