version 1.107, 2001/03/15 20:56:14
|
version 1.127, 2001/05/30 21:53:17
|
Line 3
|
Line 3
|
# |
# |
# Functions for use by content handlers: |
# Functions for use by content handlers: |
# |
# |
|
# metadata_query(sql-query-string,custom-metadata-regex) : |
|
# returns file handle of where sql and |
|
# regex results will be stored for query |
# plaintext(short) : plain text explanation of short term |
# plaintext(short) : plain text explanation of short term |
# fileembstyle(ext) : embed style in page for file extension |
# fileembstyle(ext) : embed style in page for file extension |
# filedescription(ext) : descriptor text for file extension |
# filedescription(ext) : descriptor text for file extension |
Line 25
|
Line 28
|
# revokecustomrole (udom,uname,url,rdom,rnam,rolename) : Revoke a custom role |
# revokecustomrole (udom,uname,url,rdom,rnam,rolename) : Revoke a custom role |
# appenv(hash) : adds hash to session environment |
# appenv(hash) : adds hash to session environment |
# delenv(varname) : deletes all environment entries starting with varname |
# delenv(varname) : deletes all environment entries starting with varname |
# store(hash) : stores hash permanently for this url |
# store(hashref,symb,courseid,udom,uname) |
# cstore(hash) : critical store |
# : stores hash permanently for this url |
# restore : returns hash 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) |
|
# : same as store but uses the critical interface to |
|
# guarentee a store |
|
# 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 |
# eget(namesp,array) : returns hash with keys from array filled in from namesp |
# 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 |
# get(namesp,array) : returns hash with keys from array filled in from namesp |
# del(namesp,array) : deletes keys out of array from namesp |
# del(namesp,array) : deletes keys out of array from namesp |
Line 49
|
Line 61
|
# receipt() : returns a receipt to be given out to users |
# receipt() : returns a receipt to be given out to users |
# getfile(filename) : returns the contents of filename, or a -1 if it can't |
# getfile(filename) : returns the contents of filename, or a -1 if it can't |
# be found, replicates and subscribes to the file |
# be found, replicates and subscribes to the file |
# filelocation(dir,file) : returns a farily clean absolute reference to file |
# filelocation(dir,file) : returns a fairly clean absolute reference to file |
# from the directory dir |
# from the directory dir |
# hreflocation(dir,file) : same as filelocation, but for hrefs |
# hreflocation(dir,file) : same as filelocation, but for hrefs |
# log(domain,user,home,msg) : write to permanent log for user |
# log(domain,user,home,msg) : write to permanent log for user |
Line 88
|
Line 100
|
# 09/01,10/01,11/01 Gerd Kortemeyer |
# 09/01,10/01,11/01 Gerd Kortemeyer |
# 02/27/01 Scott Harrison |
# 02/27/01 Scott Harrison |
# 3/2 Gerd Kortemeyer |
# 3/2 Gerd Kortemeyer |
# 3/15 Scott Harrison |
# 3/15,3/19 Scott Harrison |
|
# 3/19,3/20 Gerd Kortemeyer |
|
# 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; |
package Apache::lonnet; |
|
|
use strict; |
use strict; |
Line 625 sub log {
|
Line 641 sub log {
|
return critical("log:$dom:$nam:$what",$hom); |
return critical("log:$dom:$nam:$what",$hom); |
} |
} |
|
|
|
# --------------------------------------------- Set Expire Date for Spreadsheet |
|
|
|
sub expirespread { |
|
my ($uname,$udom,$stype,$usymb)=@_; |
|
my $cid=$ENV{'request.course.id'}; |
|
if ($cid) { |
|
my $now=time; |
|
my $key=$uname.':'.$udom.':'.$stype.':'.$usymb; |
|
return &reply('put:'.$ENV{'course.'.$cid.'.domain'}.':'. |
|
$ENV{'course.'.$cid.'.num'}. |
|
':nohist_expirationdates:'. |
|
&escape($key).'='.$now, |
|
$ENV{'course.'.$cid.'.home'}) |
|
} |
|
return 'ok'; |
|
} |
|
|
|
# ----------------------------------------------------- Devalidate Spreadsheets |
|
|
|
sub devalidate { |
|
my $symb=shift; |
|
my $cid=$ENV{'request.course.id'}; |
|
if ($cid) { |
|
my $key=$ENV{'user.name'}.':'.$ENV{'user.domain'}.':'; |
|
my $status= |
|
&reply('del:'.$ENV{'course.'.$cid.'.domain'}.':'. |
|
$ENV{'course.'.$cid.'.num'}. |
|
':nohist_calculatedsheets:'. |
|
&escape($key.'studentcalc:'), |
|
$ENV{'course.'.$cid.'.home'}) |
|
.' '. |
|
&reply('del:'.$ENV{'user.domain'}.':'. |
|
$ENV{'user.name'}. |
|
':nohist_calculatedsheets_'.$cid.':'. |
|
&escape($key.'assesscalc:'.$symb), |
|
$ENV{'user.home'}); |
|
unless ($status eq 'ok ok') { |
|
&logthis('Could not devalidate spreadsheet '. |
|
$ENV{'user.name'}.' at '.$ENV{'user.domain'}.' for '. |
|
$symb.': '.$status); |
|
} |
|
} |
|
} |
|
|
# ----------------------------------------------------------------------- Store |
# ----------------------------------------------------------------------- Store |
|
|
sub store { |
sub store { |
my %storehash=@_; |
my ($storehash,$symb,$namespace,$domain,$stuname) = @_; |
my $symb; |
my $home=''; |
unless ($symb=escape(&symbread())) { return ''; } |
|
my $namespace; |
if ($stuname) { |
unless ($namespace=$ENV{'request.course.id'}) { return ''; } |
$home=&homeserver($stuname,$domain); |
|
} |
|
|
|
if (!$symb) { unless ($symb=&symbread()) { return ''; } } |
|
|
|
&devalidate($symb); |
|
|
|
$symb=escape($symb); |
|
if (!$namespace) { unless ($namespace=$ENV{'request.course.id'}) { return ''; } } |
|
if (!$domain) { $domain=$ENV{'user.domain'}; } |
|
if (!$stuname) { $stuname=$ENV{'user.name'}; } |
|
if (!$home) { $home=$ENV{'user.home'}; } |
my $namevalue=''; |
my $namevalue=''; |
map { |
map { |
$namevalue.=escape($_).'='.escape($storehash{$_}).'&'; |
$namevalue.=escape($_).'='.escape($$storehash{$_}).'&'; |
} keys %storehash; |
} keys %$storehash; |
$namevalue=~s/\&$//; |
$namevalue=~s/\&$//; |
return reply( |
return reply("store:$domain:$stuname:$namespace:$symb:$namevalue","$home"); |
"store:$ENV{'user.domain'}:$ENV{'user.name'}:$namespace:$symb:$namevalue", |
|
"$ENV{'user.home'}"); |
|
} |
} |
|
|
# -------------------------------------------------------------- Critical Store |
# -------------------------------------------------------------- Critical Store |
|
|
sub cstore { |
sub cstore { |
my %storehash=@_; |
my ($storehash,$symb,$namespace,$domain,$stuname) = @_; |
my $symb; |
my $home=''; |
unless ($symb=escape(&symbread())) { return ''; } |
|
my $namespace; |
if ($stuname) { |
unless ($namespace=$ENV{'request.course.id'}) { return ''; } |
$home=&homeserver($stuname,$domain); |
|
} |
|
|
|
if (!$symb) { unless ($symb=&symbread()) { return ''; } } |
|
|
|
&devalidate($symb); |
|
|
|
$symb=escape($symb); |
|
if (!$namespace) { unless ($namespace=$ENV{'request.course.id'}) { return ''; } } |
|
if (!$domain) { $domain=$ENV{'user.domain'}; } |
|
if (!$stuname) { $stuname=$ENV{'user.name'}; } |
|
if (!$home) { $home=$ENV{'user.home'}; } |
|
|
my $namevalue=''; |
my $namevalue=''; |
map { |
map { |
$namevalue.=escape($_).'='.escape($storehash{$_}).'&'; |
$namevalue.=escape($_).'='.escape($$storehash{$_}).'&'; |
} keys %storehash; |
} keys %$storehash; |
$namevalue=~s/\&$//; |
$namevalue=~s/\&$//; |
return critical( |
return critical("store:$domain:$stuname:$namespace:$symb:$namevalue","$home"); |
"store:$ENV{'user.domain'}:$ENV{'user.name'}:$namespace:$symb:$namevalue", |
|
"$ENV{'user.home'}"); |
|
} |
} |
|
|
# --------------------------------------------------------------------- Restore |
# --------------------------------------------------------------------- Restore |
|
|
sub restore { |
sub restore { |
my $symb; |
my ($symb,$namespace,$domain,$stuname) = @_; |
unless ($symb=escape(&symbread())) { return ''; } |
my $home=''; |
my $namespace; |
|
unless ($namespace=$ENV{'request.course.id'}) { return ''; } |
if ($stuname) { |
my $answer=reply( |
$home=&homeserver($stuname,$domain); |
"restore:$ENV{'user.domain'}:$ENV{'user.name'}:$namespace:$symb", |
} |
"$ENV{'user.home'}"); |
|
|
if (!$symb) { |
|
unless ($symb=escape(&symbread())) { return ''; } |
|
} else { |
|
$symb=&escape($symb); |
|
} |
|
if (!$namespace) { unless ($namespace=$ENV{'request.course.id'}) { return ''; } } |
|
if (!$domain) { $domain=$ENV{'user.domain'}; } |
|
if (!$stuname) { $stuname=$ENV{'user.name'}; } |
|
if (!$home) { $home=$ENV{'user.home'}; } |
|
my $answer=&reply("restore:$domain:$stuname:$namespace:$symb","$home"); |
|
|
my %returnhash=(); |
my %returnhash=(); |
map { |
map { |
my ($name,$value)=split(/\=/,$_); |
my ($name,$value)=split(/\=/,$_); |
Line 792 sub rolesinit {
|
Line 882 sub rolesinit {
|
} |
} |
} |
} |
} split(/&/,$rolesdump); |
} split(/&/,$rolesdump); |
|
my $adv=0; |
map { |
map { |
%thesepriv=(); |
%thesepriv=(); |
|
if ($_ ne 'st') { $adv=1; } |
map { |
map { |
if ($_ ne '') { |
if ($_ ne '') { |
my ($privilege,$restrictions)=split(/&/,$_); |
my ($privilege,$restrictions)=split(/&/,$_); |
Line 810 sub rolesinit {
|
Line 902 sub rolesinit {
|
map { $thesestr.=':'.$_.'&'.$thesepriv{$_}; } keys %thesepriv; |
map { $thesestr.=':'.$_.'&'.$thesepriv{$_}; } keys %thesepriv; |
$userroles.='user.priv.'.$_.'='.$thesestr."\n"; |
$userroles.='user.priv.'.$_.'='.$thesestr."\n"; |
} keys %allroles; |
} keys %allroles; |
|
$userroles.='user.adv='.$adv."\n"; |
|
$ENV{'user.adv'}=$adv; |
} |
} |
return $userroles; |
return $userroles; |
} |
} |
Line 1186 sub definerole {
|
Line 1280 sub definerole {
|
# ---------------- Make a metadata query against the network of library servers |
# ---------------- Make a metadata query against the network of library servers |
|
|
sub metadata_query { |
sub metadata_query { |
my ($query)=@_; |
my ($query,$custom,$customshow)=@_; |
my $reply=&reply("querysend:".&escape($query),'msul3'); |
# need to put in a library server loop here and return a hash |
|
my %rhash; |
|
for my $server (keys %libserv) { |
|
unless ($custom or $customshow) { |
|
my $reply=&reply("querysend:".&escape($query),$server); |
|
$rhash{$server}=$reply; |
|
} |
|
else { |
|
my $reply=&reply("querysend:".&escape($query).':'. |
|
&escape($custom).':'.&escape($customshow), |
|
$server); |
|
$rhash{$server}=$reply; |
|
} |
|
} |
|
return \%rhash; |
} |
} |
|
|
# ------------------------------------------------------------------ Plain Text |
# ------------------------------------------------------------------ Plain Text |
Line 1563 sub EXT {
|
Line 1671 sub EXT {
|
if ($realm eq 'user') { |
if ($realm eq 'user') { |
# --------------------------------------------------------------- user.resource |
# --------------------------------------------------------------- user.resource |
if ($space eq 'resource') { |
if ($space eq 'resource') { |
my %restored=&restore; |
my %restored=&restore(); |
return $restored{$qualifierrest}; |
return $restored{$qualifierrest}; |
# ----------------------------------------------------------------- user.access |
# ----------------------------------------------------------------- user.access |
} elsif ($space eq 'access') { |
} elsif ($space eq 'access') { |
Line 1604 sub EXT {
|
Line 1712 sub EXT {
|
} |
} |
} elsif ($realm eq 'course') { |
} elsif ($realm eq 'course') { |
# ---------------------------------------------------------- course.description |
# ---------------------------------------------------------- course.description |
my $section=''; |
return $ENV{'course.'.$ENV{'request.course.id'}.'.'. |
if ($ENV{'request.course.sec'}) { |
|
$section='_'.$ENV{'request.course.sec'}; |
|
} |
|
return $ENV{'course.'.$ENV{'request.course.id'}.$section.'.'. |
|
$spacequalifierrest}; |
$spacequalifierrest}; |
} elsif ($realm eq 'resource') { |
} elsif ($realm eq 'resource') { |
if ($ENV{'request.course.id'}) { |
if ($ENV{'request.course.id'}) { |
# ----------------------------------------------------- Cascading lookup scheme |
# ----------------------------------------------------- Cascading lookup scheme |
my $symbp=&symbread(); |
my $symbp=&symbread(); |
my $mapp=(split(/\_\_\_/,$symbp))[0]; |
my $mapp=(split(/\_\_\_/,$symbp))[0]; |
|
|
my $symbparm=$symbp.'.'.$spacequalifierrest; |
my $symbparm=$symbp.'.'.$spacequalifierrest; |
my $mapparm=$mapp.'___(all).'.$spacequalifierrest; |
my $mapparm=$mapp.'___(all).'.$spacequalifierrest; |
|
|
my $seclevel= |
my $seclevel= |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.sec'}.'].'.$spacequalifierrest; |
$ENV{'request.course.sec'}.'].'.$spacequalifierrest; |
my $seclevelr= |
my $seclevelr= |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.sec'}.'].'.$symbparm; |
$ENV{'request.course.sec'}.'].'.$symbparm; |
my $seclevelm= |
my $seclevelm= |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.sec'}.'].'.$mapparm; |
$ENV{'request.course.sec'}.'].'.$mapparm; |
|
|
my $courselevel= |
my $courselevel= |
$ENV{'request.course.id'}.'.'.$spacequalifierrest; |
$ENV{'request.course.id'}.'.'.$spacequalifierrest; |
my $courselevelr= |
my $courselevelr= |
$ENV{'request.course.id'}.'.'.$symbparm; |
$ENV{'request.course.id'}.'.'.$symbparm; |
my $courselevelm= |
my $courselevelm= |
$ENV{'request.course.id'}.'.'.$mapparm; |
$ENV{'request.course.id'}.'.'.$mapparm; |
|
|
# ----------------------------------------------------------- first, check user |
# ----------------------------------------------------------- first, check user |
my %resourcedata=get('resourcedata', |
my %resourcedata=get('resourcedata', |
($courselevelr,$courselevelm,$courselevel)); |
($courselevelr,$courselevelm,$courselevel)); |
if (($resourcedata{$courselevelr}!~/^error\:/) && |
if (($resourcedata{$courselevelr}!~/^error\:/) && |
($resourcedata{$courselevelr}!~/^con_lost/)) { |
($resourcedata{$courselevelr}!~/^con_lost/)) { |
|
|
if ($resourcedata{$courselevelr}) { |
if ($resourcedata{$courselevelr}) { |
return $resourcedata{$courselevelr}; } |
return $resourcedata{$courselevelr}; } |
if ($resourcedata{$courselevelm}) { |
if ($resourcedata{$courselevelm}) { |
return $resourcedata{$courselevelm}; } |
return $resourcedata{$courselevelm}; } |
if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } |
if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } |
|
|
} else { |
} else { |
if ($resourcedata{$courselevelr}!~/No such file/) { |
if ($resourcedata{$courselevelr}!~/No such file/) { |
Line 1704 sub EXT {
|
Line 1808 sub EXT {
|
# ---------------------------------------------------- Any other user namespace |
# ---------------------------------------------------- Any other user namespace |
} elsif ($realm eq 'environment') { |
} elsif ($realm eq 'environment') { |
# ----------------------------------------------------------------- environment |
# ----------------------------------------------------------------- environment |
return $ENV{$spacequalifierrest}; |
return $ENV{'environment.'.$spacequalifierrest}; |
} elsif ($realm eq 'system') { |
} elsif ($realm eq 'system') { |
# ----------------------------------------------------------------- system.time |
# ----------------------------------------------------------------- system.time |
if ($space eq 'time') { |
if ($space eq 'time') { |