--- loncom/lonnet/perl/lonnet.pm	2000/08/22 15:27:35	1.24
+++ loncom/lonnet/perl/lonnet.pm	2000/09/04 11:25:46	1.28
@@ -4,7 +4,9 @@
 # Functions for use by content handlers:
 #
 # plaintext(short)   : plain text explanation of short term
-# allowed(short,url) : returns codes for allowed actions F,R,S,C
+# fileembstyle(ext)  : embed style in page for file extension
+# filedescription(ext) : descriptor text for file extension
+# allowed(short,url) : returns codes for allowed actions F,R,S,X,C
 # definerole(rolename,sys,dom,cou) : define a custom role rolename
 #                      set priviledges in format of lonTabs/roles.tab for
 #                      system, domain and course level, 
@@ -21,12 +23,15 @@
 # restore            : returns hash for this url
 # eget(namesp,array) : returns hash with keys from array filled in from namesp
 # get(namesp,array)  : returns hash with keys from array filled in from namesp
+# del(namesp,array)  : deletes keys out of arry from namesp
 # put(namesp,hash)   : stores hash in namesp
 # dump(namesp)       : dumps the complete namespace into a hash
 # ssi(url,hash)      : does a complete request cycle on url to localhost, posts
 #                      hash
 # repcopy(filename)  : replicate file
 # dirlist(url)       : gets a directory listing
+# condval(index)     : value of condition index based on state
+# varval(name)       : value of a variable 
 #
 # 6/1/99,6/2,6/10,6/11,6/12,6/14,6/26,6/28,6/29,6/30,
 # 7/1,7/2,7/9,7/10,7/12,7/14,7/15,7/19,
@@ -38,7 +43,7 @@
 # 06/26 Ben Tyszka
 # 06/30,07/15,07/17,07/18,07/20,07/21,07/22,07/25 Gerd Kortemeyer
 # 08/14 Ben Tyszka
-# 08/22 Gerd Kortemeyer
+# 08/22,08/28,08/31,09/01,09/02 Gerd Kortemeyer
 
 package Apache::lonnet;
 
@@ -47,7 +52,7 @@ use Apache::File;
 use LWP::UserAgent();
 use HTTP::Headers;
 use vars 
-qw(%perlvar %hostname %homecache %spareid %hostdom %libserv %pr %prp $readit);
+qw(%perlvar %hostname %homecache %spareid %hostdom %libserv %pr %prp %fe %fd $readit);
 use IO::Socket;
 use Apache::Constants qw(:common :http);
 
@@ -525,6 +530,19 @@ sub get {
    return %returnhash;
 }
 
+# --------------------------------------------------------------- del interface
+
+sub del {
+   my ($namespace,@storearr)=@_;
+   my $items='';
+   map {
+       $items.=escape($_).'&';
+   } @storearr;
+   $items=~s/\&$//;
+   return reply("del:$ENV{'user.domain'}:$ENV{'user.name'}:$namespace:$items",
+                 $ENV{'user.home'});
+}
+
 # -------------------------------------------------------------- dump interface
 
 sub dump {
@@ -644,6 +662,20 @@ sub plaintext {
     return $prp{$short};
 }
 
+# ------------------------------------------------------------------ Plain Text
+
+sub fileembstyle {
+    my $ending=shift;
+    return $fe{$ending};
+}
+
+# ------------------------------------------------------------ Description Text
+
+sub filedecription {
+    my $ending=shift;
+    return $fd{$ending};
+}
+
 # ----------------------------------------------------------------- Assign Role
 
 sub assignrole {
@@ -745,6 +777,56 @@ sub dirlist {
    }
 }
 
+# -------------------------------------------------------- Value of a Condition
+
+sub condval {
+    my $condidx=shift;
+    my $result=0;
+    if ($ENV{'request.course'}) {
+       if (defined($ENV{'acc.cond.'.$ENV{'request.course'}.'.'.$condidx})) {
+          my $operand='|';
+	  my @stack;
+          map {
+              if ($_ eq '(') {
+                 push @stack,($operand,$result)
+              } elsif ($_ eq ')') {
+                  my $before=pop @stack;
+		  if (pop @stack eq '&') {
+		      $result=$result>$before?$before:$result;
+                  } else {
+                      $result=$result>$before?$result:$before;
+                  }
+              } elsif (($_ eq '&') || ($_ eq '|')) {
+                  $operand=$_;
+              } else {
+                  my $new=
+                       substr($ENV{'user.state.'.$ENV{'request.course'}},$_,1);
+                  if ($operand eq '&') {
+                     $result=$result>$new?$new:$result;
+                  } else {
+                     $result=$result>$new?$result:$new;
+                  }                  
+              }
+          } ($ENV{'acc.cond.'.$ENV{'request.course'}.'.'.$condidx}=~
+             /(\d+|\(|\)|\&|\|)/g);
+       }
+    }
+    return $result;
+}
+
+# --------------------------------------------------------- Value of a Variable
+
+sub varval {
+    my ($realm,$space,@components)=split(/\./,shift);
+    my $value='';
+    if ($realm eq 'user') {
+    } elsif ($realm eq 'course') {
+    } elsif ($realm eq 'session') {
+    } elsif ($realm eq 'system') {
+    }
+    return $value;
+}
+
 # -------------------------------------------------------- Escape Special Chars
 
 sub escape {
@@ -823,6 +905,20 @@ if ($readit ne 'done') {
     }
 }
 
+# ------------------------------------------------------------- Read file types
+{
+    my $config=Apache::File->new("$perlvar{'lonTabDir'}/filetypes.tab");
+
+    while (my $configline=<$config>) {
+       chomp($configline);
+       my ($ending,$emb,@descr)=split(/\s+/,$configline);
+       if ($descr[0] ne '') { 
+         $fe{$ending}=$emb;
+         $fd{$ending}=join(' ',@descr);
+       }
+    }
+}
+
 
 $readit='done';
 &logthis('<font color=yellow>INFO: Read configuration</font>');