--- loncom/lonnet/perl/lonnet.pm 2000/12/02 12:41:48 1.75 +++ loncom/lonnet/perl/lonnet.pm 2000/12/12 23:43:05 1.79 @@ -45,7 +45,8 @@ # EXT(name) : value of a variable # symblist(map,hash) : Updates symbolic storage links # symbread([filename]) : returns the data handle (filename optional) -# rndseed() : returns a random seed +# rndseed() : returns a random seed +# receipt() : returns a receipt to be given out to users # getfile(filename) : returns the contents of filename, or a -1 if it can't # be found, replicates and subscribes to the file # filelocation(dir,file) : returns a farily clean absolute reference to file @@ -80,7 +81,7 @@ # 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,11/16,11/20,11/21,11/22,11/25,11/27, -# 12/02 Gerd Kortemeyer +# 12/02,12/12 Gerd Kortemeyer package Apache::lonnet; @@ -383,7 +384,7 @@ sub idget { $idlist=~tr/A-Z/a-z/; my $reply=&reply("idget:$udom:".$idlist,$tryserver); my @answer=(); - if ($reply ne 'con_lost') { + if (($reply ne 'con_lost') && ($reply!~/^error\:/)) { @answer=split(/\&/,$reply); } ; my $i; @@ -1425,26 +1426,14 @@ sub EXT { my $reply=&reply('get:'. $ENV{'course.'.$ENV{'request.course.id'}.$section.'.domain'}.':'. $ENV{'course.'.$ENV{'request.course.id'}.$section.'.num'}. - ':resourcedata:'. - escape($seclevelr).':'.escape($seclevelm).':'.escape($seclevel).':'. - escape($courselevelr).':'.escape($courselevelm).':'.escape($courselevel), + ':resourcedata:'. + &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{$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}; } - + map { + if ($_) { return &unescape($_); } + } split(/\&/,$reply); } # ------------------------------------------------------ third, check map parms @@ -1460,8 +1449,12 @@ sub EXT { # --------------------------------------------- last, look in resource metadata + $spacequalifierrest=~s/\./\_/; my $metadata=&metadata($ENV{'request.filename'},$spacequalifierrest); if ($metadata) { return $metadata; } + $metadata=&metadata($ENV{'request.filename'}, + 'parameter_'.$spacequalifierrest); + if ($metadata) { return $metadata; } # ---------------------------------------------------- Any other user namespace } elsif ($realm eq 'environment') { @@ -1480,6 +1473,7 @@ sub EXT { sub metadata { my ($uri,$what)=@_; + $uri=&declutter($uri); my $filename=$uri; $uri=~s/\.meta$//; @@ -1506,7 +1500,11 @@ sub metadata { map { $metacache{$uri.':'.$unikey.'.'.$_}=$token->[2]->{$_}; } @{$token->[3]}; - $metacache{$uri.':'.$unikey}=$parser->get_text('/'.$entry); + unless ( + $metacache{$uri.':'.$unikey}=$parser->get_text('/'.$entry) + ) { $metacache{$uri.':'.$unikey}= + $metacache{$uri.':'.$unikey.'.default'}; + } } } } @@ -1632,6 +1630,27 @@ sub rndseed { .$symbchck); } +sub ireceipt { + my ($funame,$fudom,$fucourseid,$fusymb)=@_; + my $cuname=unpack("%32C*",$funame); + my $cudom=unpack("%32C*",$fudom); + my $cucourseid=unpack("%32C*",$fucourseid); + my $cusymb=unpack("%32C*",$fusymb); + my $cunique=unpack("%32C*",$perlvar{'lonReceipt'}); + return unpack("%32C*",$perlvar{'lonHostID'}).'-'. + ($cunique%$cuname+ + $cunique%$cudom+ + $cusymb%$cuname+ + $cusymb%$cudom+ + $cucourseid%$cuname+ + $cucourseid%$cudom); +} + +sub receipt { + return &ireceipt($ENV{'user.name'},$ENV{'user.domain'}, + $ENV{'request.course.id'},&symbread()); +} + # ------------------------------------------------------------ Serves up a file # returns either the contents of the file or a -1 sub getfile {