--- loncom/lonnet/perl/lonnet.pm	2000/11/15 23:25:59	1.64
+++ loncom/lonnet/perl/lonnet.pm	2000/11/24 19:59:31	1.69
@@ -67,7 +67,7 @@
 # 10/04 Gerd Kortemeyer
 # 10/04 Guy Albertelli
 # 10/06,10/09,10/10,10/11,10/14,10/20,10/23,10/25,10/26,10/27,10/28,10/29, 
-# 10/30,10/31,11/2,11/14,11/15 Gerd Kortemeyer
+# 10/30,10/31,11/2,11/14,11/15,11/16,11/20,11/21,11/22,11/25 Gerd Kortemeyer
 
 package Apache::lonnet;
 
@@ -122,8 +122,7 @@ sub reply {
     my ($cmd,$server)=@_;
     my $answer=subreply($cmd,$server);
     if ($answer eq 'con_lost') { $answer=subreply($cmd,$server); }
-    if (($answer=~/^error:/) || ($answer=~/^refused/) || 
-        ($answer=~/^rejected/)) {
+    if (($answer=~/^refused/) || ($answer=~/^rejected/)) {
        &logthis("<font color=blue>WARNING:".
                 " $cmd to $server returned $answer</font>");
     }
@@ -777,8 +776,9 @@ sub allowed {
     }
 
 # Course: uri itself is a course
-
-    if ($ENV{'user.priv.'.$ENV{'request.role'}.'./'.$uri}
+    my $courseuri=$uri;
+    $courseuri=~s/\_(\d)/\/$1/;
+    if ($ENV{'user.priv.'.$ENV{'request.role'}.'./'.$courseuri}
        =~/$priv\&([^\:]*)/) {
        $thisallowed.=$1;
     }
@@ -1194,6 +1194,7 @@ sub condval {
 
 sub EXT {
     my $varname=shift;
+    unless ($varname) { return ''; }
     my ($realm,$space,$qualifier,@therest)=split(/\./,$varname);
     my $rest;
     if ($therest[0]) {
@@ -1258,20 +1259,41 @@ sub EXT {
     } elsif ($realm eq 'resource') {
       if ($ENV{'request.course.id'}) {
 # ----------------------------------------------------- Cascading lookup scheme
-       my $reslevel=
-	    $ENV{'request.course.id'}.'.'.&symbread().'.'.$spacequalifierrest;
+       my $symbp=&symbread();
+       my $mapp=(split(/\_\_\_/,$symbp))[0];
+
+       my $symbparm=$symbp.'.'.$spacequalifierrest;
+       my $mapparm=$mapp.'___(all).'.$spacequalifierrest;
+
        my $seclevel=
-            $ENV{'request.course.id'}.'.'.
-		$ENV{'request.course.sec'}.'.'.$spacequalifierrest;
+            $ENV{'request.course.id'}.'.['.
+		$ENV{'request.course.sec'}.'].'.$spacequalifierrest;
+       my $seclevelr=
+            $ENV{'request.course.id'}.'.['.
+		$ENV{'request.course.sec'}.'].'.$symbparm;
+       my $seclevelm=
+            $ENV{'request.course.id'}.'.['.
+		$ENV{'request.course.sec'}.'].'.$mapparm;
+
        my $courselevel=
             $ENV{'request.course.id'}.'.'.$spacequalifierrest;
+       my $courselevelr=
+            $ENV{'request.course.id'}.'.'.$symbparm;
+       my $courselevelm=
+            $ENV{'request.course.id'}.'.'.$mapparm;
+
 
 # ----------------------------------------------------------- first, check user
-      my %resourcedata=get('resourcedata',($reslevel,$seclevel,$courselevel));
-      if ($resourcedata{$reslevel}!~/^error\:/) {
-       if ($resourcedata{$reslevel}) { return $resourcedata{$reslevel}; }
-       if ($resourcedata{$seclevel}) { return $resourcedata{$seclevel}; }
+      my %resourcedata=get('resourcedata',
+                           ($courselevelr,$courselevelm,$courselevel));
+      if ($resourcedata{$courselevelr}!~/^error\:/) {
+
+       if ($resourcedata{$courselevelr}) { 
+          return $resourcedata{$courselevelr}; }
+       if ($resourcedata{$courselevelm}) { 
+          return $resourcedata{$courselevelm}; }
        if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; }
+
       }
 # -------------------------------------------------------- second, check course
         my $section='';
@@ -1282,28 +1304,41 @@ sub EXT {
               $ENV{'course.'.$ENV{'request.course.id'}.$section.'.domain'}.':'.
               $ENV{'course.'.$ENV{'request.course.id'}.$section.'.num'}.
               ':resourcedata:'.
-              escape($reslevel).':'.escape($seclevel).':'.escape($courselevel),
+ escape($seclevelr).':'.escape($seclevelm).':'.escape($seclevel).':'.
+ escape($courselevelr).':'.escape($courselevelm).':'.escape($courselevel),
 		   $ENV{'course.'.$ENV{'request.course.id'}.$section.'.home'});
       if ($reply!~/^error\:/) {
         map {
            my ($name,$value)=split(/\=/,$_);
            $resourcedata{unescape($name)}=unescape($value);  
         } split(/\&/,$reply);
-       if ($resourcedata{$reslevel}) { return $resourcedata{$reslevel}; }
-       if ($resourcedata{$seclevel}) { return $resourcedata{$seclevel}; }  
+
+       if ($resourcedata{$seclevelr}) { return $resourcedata{$seclevelr}; }
+       if ($resourcedata{$seclevelm}) { return $resourcedata{$seclevelm}; }  
+       if ($resourcedata{$seclevel}) { return $resourcedata{$seclevel}; }
+
+       if ($resourcedata{$courselevelr}) { 
+          return $resourcedata{$courselevelr}; }
+       if ($resourcedata{$courselevelm}) { 
+          return $resourcedata{$courselevelm}; }
        if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; }
+
       }
 
 # ------------------------------------------------------ third, check map parms
-       
-       if ($ENV{'resource.parms.'.$reslevel}) {
-	   return $ENV{'resource.parms.'.$reslevel};
+       my %parmhash=();
+       my $thisparm='';       
+       if (tie(%parmhash,'GDBM_File',
+          $ENV{'request.course.fn'}.'_parms.db',&GDBM_READER,0640)) {
+           $thisparm=$parmhash{$symbparm};
+	   untie(%parmhash);
        }
+       if ($thisparm) { return $thisparm; }
      }
      
 # --------------------------------------------- last, look in resource metadata
 	my $uri=&declutter($ENV{'request.filename'});
-        my $filename=$perlvar{'lonDocRoot'}.'/res/'.$ENV.'.meta';
+        my $filename=$perlvar{'lonDocRoot'}.'/res/'.$uri.'.meta';
         if (-e $filename) {
             my @content;
             {
@@ -1328,21 +1363,6 @@ sub EXT {
     return '';
 }
 
-# ---------------------------------------- Append resource parms to environment
-
-sub appendparms {
-    my ($symb,$parms)=@_;
-    my %storehash=();
-    my $prefix='resource.parms.'.$ENV{'request.course.id'}.'.'.$symb;
-    map {
-	my ($typename,$value)=split(/\=/,$_);
-        my ($type,$name)=split(/\:/,$typename);
-        $storehash{$prefix.'.'.unescape($name)}=unescape($value);
-	$storehash{$prefix.'.'.unescape($name).'.type'}=unescape($type);
-    } split(/\&/,$parms);
-    &appenv(%storehash);
-}
-
 # ------------------------------------------------- Update symbolic store links
 
 sub symblist {
@@ -1374,7 +1394,6 @@ sub symbread {
     my %hash;
     my %bighash;
     my $syval='';
-    my $parms='';
     if (($ENV{'request.course.fn'}) && ($thisfn)) {
         if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db',
                       &GDBM_READER,0640)) {
@@ -1396,13 +1415,15 @@ sub symbread {
                             &GDBM_READER,0640)) {
 # ---------------------------------------------- Get ID(s) for current resource
               my $ids=$bighash{'ids_/res/'.$thisfn};
+              unless ($ids) { 
+                 $ids=$bighash{'ids_/'.$thisfn};
+              }
               if ($ids) {
 # ------------------------------------------------------------------- Has ID(s)
                  my @possibilities=split(/\,/,$ids);
                  if ($#possibilities==0) {
 # ----------------------------------------------- There is only one possibility
 		     my ($mapid,$resid)=split(/\./,$ids);
-                     $parms=$bighash{'param_'.$ids};
                      $syval=declutter($bighash{'map_id_'.$mapid}).'___'.$resid;
                  } else {
 # ------------------------------------------ There is more than one possibility
@@ -1413,7 +1434,6 @@ sub symbread {
          		    my ($mapid,$resid)=split(/\./,$_);
                             if ($bighash{'map_type_'.$mapid} ne 'page') {
 				$realpossible++;
-                                $parms=$bighash{'param_'.$_};
                                 $syval=declutter($bighash{'map_id_'.$mapid}).
                                        '___'.$resid;
                             }
@@ -1426,9 +1446,6 @@ sub symbread {
            } 
         }
         if ($syval) {
-           if ($parms) {
-	       &appendparms($syval.'___'.$thisfn,$parms);
-           }
            return $syval.'___'.$thisfn; 
         }
     }