--- loncom/lonnet/perl/lonnet.pm 2001/04/16 23:16:31 1.122 +++ loncom/lonnet/perl/lonnet.pm 2001/05/30 21:53:17 1.127 @@ -28,18 +28,18 @@ # revokecustomrole (udom,uname,url,rdom,rnam,rolename) : Revoke a custom role # appenv(hash) : adds hash to session environment # delenv(varname) : deletes all environment entries starting with varname -# store(hashref,symb,courseid,udom,uname,homeserver) +# store(hashref,symb,courseid,udom,uname) # : stores hash permanently for this url # hashref needs to be given, and should be a \%hashname # the remaining args aren't required and if they aren't # passed or are '' they will be derived from the ENV -# cstore(hashref,symb,courseid,udom,uname,homeserver) +# cstore(hashref,symb,courseid,udom,uname) # : same as store but uses the critical interface to # guarentee a store -# restore(symb,courseid,udom,uname,homeserver) +# restore(symb,courseid,udom,uname) # : returns hash for this symb, all args are optional -# if they aren't given they will be derived from the current -# enviroment +# if they aren't given they will be derived from the +# current enviroment # 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 array from namesp @@ -102,8 +102,10 @@ # 3/2 Gerd Kortemeyer # 3/15,3/19 Scott Harrison # 3/19,3/20 Gerd Kortemeyer -# 3/22,3/27 Scott Harrison - +# 3/22,3/27,4/2,4/16,4/17 Scott Harrison +# 5/26,5/28 Gerd Kortemeyer +# 5/30 H. K. Ng +# package Apache::lonnet; use strict; @@ -686,7 +688,13 @@ sub devalidate { # ----------------------------------------------------------------------- Store sub store { - my ($storehash,$symb,$namespace,$domain,$stuname,$home) = @_; + my ($storehash,$symb,$namespace,$domain,$stuname) = @_; + my $home=''; + + if ($stuname) { + $home=&homeserver($stuname,$domain); + } + if (!$symb) { unless ($symb=&symbread()) { return ''; } } &devalidate($symb); @@ -701,13 +709,19 @@ sub store { $namevalue.=escape($_).'='.escape($$storehash{$_}).'&'; } keys %$storehash; $namevalue=~s/\&$//; - return critical("store:$domain:$stuname:$namespace:$symb:$namevalue","$home"); + return reply("store:$domain:$stuname:$namespace:$symb:$namevalue","$home"); } # -------------------------------------------------------------- Critical Store sub cstore { - my ($storehash,$symb,$namespace,$domain,$stuname,$home) = @_; + my ($storehash,$symb,$namespace,$domain,$stuname) = @_; + my $home=''; + + if ($stuname) { + $home=&homeserver($stuname,$domain); + } + if (!$symb) { unless ($symb=&symbread()) { return ''; } } &devalidate($symb); @@ -729,7 +743,13 @@ sub cstore { # --------------------------------------------------------------------- Restore sub restore { - my ($symb,$namespace,$domain,$stuname,$home) = @_; + my ($symb,$namespace,$domain,$stuname) = @_; + my $home=''; + + if ($stuname) { + $home=&homeserver($stuname,$domain); + } + if (!$symb) { unless ($symb=escape(&symbread())) { return ''; } } else { @@ -862,8 +882,10 @@ sub rolesinit { } } } split(/&/,$rolesdump); + my $adv=0; map { %thesepriv=(); + if ($_ ne 'st') { $adv=1; } map { if ($_ ne '') { my ($privilege,$restrictions)=split(/&/,$_); @@ -880,6 +902,8 @@ sub rolesinit { map { $thesestr.=':'.$_.'&'.$thesepriv{$_}; } keys %thesepriv; $userroles.='user.priv.'.$_.'='.$thesestr."\n"; } keys %allroles; + $userroles.='user.adv='.$adv."\n"; + $ENV{'user.adv'}=$adv; } return $userroles; } @@ -1259,8 +1283,7 @@ sub metadata_query { my ($query,$custom,$customshow)=@_; # need to put in a library server loop here and return a hash my %rhash; -# for my $server (keys %libserv) { - for my $server ('msul3') { + for my $server (keys %libserv) { unless ($custom or $customshow) { my $reply=&reply("querysend:".&escape($query),$server); $rhash{$server}=$reply; @@ -1689,49 +1712,45 @@ sub EXT { } } elsif ($realm eq 'course') { # ---------------------------------------------------------- course.description - my $section=''; - if ($ENV{'request.course.sec'}) { - $section='_'.$ENV{'request.course.sec'}; - } - return $ENV{'course.'.$ENV{'request.course.id'}.$section.'.'. + return $ENV{'course.'.$ENV{'request.course.id'}.'.'. $spacequalifierrest}; } elsif ($realm eq 'resource') { - if ($ENV{'request.course.id'}) { + if ($ENV{'request.course.id'}) { # ----------------------------------------------------- Cascading lookup scheme - my $symbp=&symbread(); - my $mapp=(split(/\_\_\_/,$symbp))[0]; + my $symbp=&symbread(); + my $mapp=(split(/\_\_\_/,$symbp))[0]; - my $symbparm=$symbp.'.'.$spacequalifierrest; - my $mapparm=$mapp.'___(all).'.$spacequalifierrest; + my $symbparm=$symbp.'.'.$spacequalifierrest; + my $mapparm=$mapp.'___(all).'.$spacequalifierrest; - my $seclevel= + my $seclevel= $ENV{'request.course.id'}.'.['. $ENV{'request.course.sec'}.'].'.$spacequalifierrest; - my $seclevelr= + my $seclevelr= $ENV{'request.course.id'}.'.['. $ENV{'request.course.sec'}.'].'.$symbparm; - my $seclevelm= + my $seclevelm= $ENV{'request.course.id'}.'.['. $ENV{'request.course.sec'}.'].'.$mapparm; - my $courselevel= + my $courselevel= $ENV{'request.course.id'}.'.'.$spacequalifierrest; - my $courselevelr= + my $courselevelr= $ENV{'request.course.id'}.'.'.$symbparm; - my $courselevelm= + my $courselevelm= $ENV{'request.course.id'}.'.'.$mapparm; # ----------------------------------------------------------- first, check user - my %resourcedata=get('resourcedata', + my %resourcedata=get('resourcedata', ($courselevelr,$courselevelm,$courselevel)); - if (($resourcedata{$courselevelr}!~/^error\:/) && - ($resourcedata{$courselevelr}!~/^con_lost/)) { + if (($resourcedata{$courselevelr}!~/^error\:/) && + ($resourcedata{$courselevelr}!~/^con_lost/)) { - if ($resourcedata{$courselevelr}) { - return $resourcedata{$courselevelr}; } - if ($resourcedata{$courselevelm}) { - return $resourcedata{$courselevelm}; } - if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } + if ($resourcedata{$courselevelr}) { + return $resourcedata{$courselevelr}; } + if ($resourcedata{$courselevelm}) { + return $resourcedata{$courselevelm}; } + if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } } else { if ($resourcedata{$courselevelr}!~/No such file/) { @@ -1789,7 +1808,7 @@ sub EXT { # ---------------------------------------------------- Any other user namespace } elsif ($realm eq 'environment') { # ----------------------------------------------------------------- environment - return $ENV{$spacequalifierrest}; + return $ENV{'environment.'.$spacequalifierrest}; } elsif ($realm eq 'system') { # ----------------------------------------------------------------- system.time if ($space eq 'time') {