version 1.523.2.5, 2004/09/20 20:14:14
|
version 1.542, 2004/09/17 02:40:35
|
Line 821 sub getsection {
|
Line 821 sub getsection {
|
} |
} |
|
|
|
|
my $disk_caching_disabled=1; |
my $disk_caching_disabled=0; |
|
|
sub devalidate_cache { |
sub devalidate_cache { |
my ($cache,$id,$name) = @_; |
my ($cache,$id,$name) = @_; |
delete $$cache{$id.'.time'}; |
delete $$cache{$id.'.time'}; |
delete $$cache{$id.'.file'}; |
|
delete $$cache{$id}; |
delete $$cache{$id}; |
if (1 || $disk_caching_disabled) { return; } |
if (1 || $disk_caching_disabled) { return; } |
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
Line 865 sub is_cached {
|
Line 864 sub is_cached {
|
return (undef,undef); |
return (undef,undef); |
} else { |
} else { |
if (time-($$cache{$id.'.time'})>$time) { |
if (time-($$cache{$id.'.time'})>$time) { |
if (exists($$cache{$id.'.file'})) { |
# &logthis("Devalidating $id - ".time-($$cache{$id.'.time'})); |
foreach my $filename (@{ $$cache{$id.'.file'} }) { |
&devalidate_cache($cache,$id,$name); |
my $mtime=(stat($filename))[9]; |
return (undef,undef); |
#+1 is to take care of edge effects |
|
if ($mtime && (($mtime+1) < ($$cache{$id.'.time'}))) { |
|
# &logthis("Upping $mtime - ".$$cache{$id.'.time'}. |
|
# "$id because of $filename"); |
|
} else { |
|
&logthis("Devalidating $filename $id - ".(time-($$cache{$id.'.time'}))); |
|
&devalidate_cache($cache,$id,$name); |
|
return (undef,undef); |
|
} |
|
} |
|
$$cache{$id.'.time'}=time; |
|
} else { |
|
# &logthis("Devalidating $id - ".time-($$cache{$id.'.time'})); |
|
&devalidate_cache($cache,$id,$name); |
|
return (undef,undef); |
|
} |
|
} |
} |
} |
} |
return ($$cache{$id},1); |
return ($$cache{$id},1); |
Line 927 sub save_cache {
|
Line 910 sub save_cache {
|
eval <<'EVALBLOCK'; |
eval <<'EVALBLOCK'; |
$hash{$id.'.time'}=$$cache{$id.'.time'}; |
$hash{$id.'.time'}=$$cache{$id.'.time'}; |
$hash{$id}=freeze({'item'=>$$cache{$id}}); |
$hash{$id}=freeze({'item'=>$$cache{$id}}); |
if (exists($$cache{$id.'.file'})) { |
|
$hash{$id.'.file'}=freeze({'item'=>$$cache{$id.'.file'}}); |
|
} |
|
EVALBLOCK |
EVALBLOCK |
if ($@) { |
if ($@) { |
&logthis("<font color='red'>save_cache blew up :$@:$name</font>"); |
&logthis("<font color='red'>save_cache blew up :$@:$name</font>"); |
Line 980 sub load_cache_item {
|
Line 960 sub load_cache_item {
|
} else { |
} else { |
if (($$cache{$id.'.time'}+$time) < time) { |
if (($$cache{$id.'.time'}+$time) < time) { |
$$cache{$id.'.time'}=$hash{$id.'.time'}; |
$$cache{$id.'.time'}=$hash{$id.'.time'}; |
{ |
my $hashref=thaw($hash{$id}); |
my $hashref=thaw($hash{$id}); |
$$cache{$id}=$hashref->{'item'}; |
$$cache{$id}=$hashref->{'item'}; |
|
} |
|
if (exists($hash{$id.'.file'})) { |
|
my $hashref=thaw($hash{$id.'.file'}); |
|
$$cache{$id.'.file'}=$hashref->{'item'}; |
|
} |
|
} |
} |
} |
} |
EVALBLOCK |
EVALBLOCK |
Line 1118 sub subscribe {
|
Line 1092 sub subscribe {
|
sub repcopy { |
sub repcopy { |
my $filename=shift; |
my $filename=shift; |
$filename=~s/\/+/\//g; |
$filename=~s/\/+/\//g; |
if ($filename=~/^\/home\/httpd\/html\/adm\//) { return OK; } |
if ($filename=~m|^/home/httpd/html/adm/|) { return OK; } |
|
if ($filename=~m|^/home/httpd/html/lonUsers/|) { return OK; } |
|
if ($filename=~m|^/home/httpd/html/userfiles/| or |
|
$filename=~m|^/*uploaded/|) { |
|
return &repcopy_userfile($filename); |
|
} |
$filename=~s/[\n\r]//g; |
$filename=~s/[\n\r]//g; |
my $transname="$filename.in.transfer"; |
my $transname="$filename.in.transfer"; |
if ((-e $filename) || (-e $transname)) { return OK; } |
if ((-e $filename) || (-e $transname)) { return OK; } |
Line 1184 sub ssi_body {
|
Line 1163 sub ssi_body {
|
my ($filelink,%form)=@_; |
my ($filelink,%form)=@_; |
my $output=($filelink=~/^http\:/?&externalssi($filelink): |
my $output=($filelink=~/^http\:/?&externalssi($filelink): |
&ssi($filelink,%form)); |
&ssi($filelink,%form)); |
$output=~s/^.*?\<body[^\>]*\>//si; |
|
$output=~s/(.*)\<\/body\s*\>.*?$/$1/si; |
|
$output=~ |
$output=~ |
s/\/\/ BEGIN LON\-CAPA Internal.+\/\/ END LON\-CAPA Internal\s//gs; |
s/\/\/ BEGIN LON\-CAPA Internal.+\/\/ END LON\-CAPA Internal\s//gs; |
|
$output=~s/^.*?\<body[^\>]*\>//si; |
|
$output=~s/(.*)\<\/body\s*\>.*?$/$1/si; |
return $output; |
return $output; |
} |
} |
|
|
Line 1320 sub process_coursefile {
|
Line 1299 sub process_coursefile {
|
# input: name of form element, coursedoc=1 means this is for the course |
# input: name of form element, coursedoc=1 means this is for the course |
# output: url of file in userspace |
# output: url of file in userspace |
|
|
sub userfileupload { |
sub clean_filename { |
my ($formname,$coursedoc,$subdir)=@_; |
my ($fname)=@_; |
if (!defined($subdir)) { $subdir='unknown'; } |
|
my $fname=$ENV{'form.'.$formname.'.filename'}; |
|
# Replace Windows backslashes by forward slashes |
# Replace Windows backslashes by forward slashes |
$fname=~s/\\/\//g; |
$fname=~s/\\/\//g; |
# Get rid of everything but the actual filename |
# Get rid of everything but the actual filename |
Line 1332 sub userfileupload {
|
Line 1309 sub userfileupload {
|
$fname=~s/\s+/\_/g; |
$fname=~s/\s+/\_/g; |
# Replace all other weird characters by nothing |
# Replace all other weird characters by nothing |
$fname=~s/[^\w\.\-]//g; |
$fname=~s/[^\w\.\-]//g; |
|
# Replace all .\d. sequences with _\d. so they no longer look like version |
|
# numbers |
|
$fname=~s/\.(\d+)(?=\.)/_$1/g; |
|
return $fname; |
|
} |
|
|
|
sub userfileupload { |
|
my ($formname,$coursedoc,$subdir)=@_; |
|
if (!defined($subdir)) { $subdir='unknown'; } |
|
my $fname=$ENV{'form.'.$formname.'.filename'}; |
|
$fname=&clean_filename($fname); |
# See if there is anything left |
# See if there is anything left |
unless ($fname) { return 'error: no uploaded file'; } |
unless ($fname) { return 'error: no uploaded file'; } |
chop($ENV{'form.'.$formname}); |
chop($ENV{'form.'.$formname}); |
Line 1425 sub removeuserfile {
|
Line 1413 sub removeuserfile {
|
return &reply("removeuserfile:$docudom/$docuname/$fname",$home); |
return &reply("removeuserfile:$docudom/$docuname/$fname",$home); |
} |
} |
|
|
|
sub mkdiruserfile { |
|
my ($docuname,$docudom,$dir)=@_; |
|
my $home=&homeserver($docuname,$docudom); |
|
return &reply("mkdiruserfile:".&escape("$docudom/$docuname/$dir"),$home); |
|
} |
|
|
|
sub renameuserfile { |
|
my ($docuname,$docudom,$old,$new)=@_; |
|
my $home=&homeserver($docuname,$docudom); |
|
return &reply("renameuserfile:$docudom:$docuname:".&escape("$old").':'. |
|
&escape("$new"),$home); |
|
} |
|
|
# ------------------------------------------------------------------------- Log |
# ------------------------------------------------------------------------- Log |
|
|
sub log { |
sub log { |
Line 2644 sub put {
|
Line 2645 sub put {
|
return &reply("put:$udomain:$uname:$namespace:$items",$uhome); |
return &reply("put:$udomain:$uname:$namespace:$items",$uhome); |
} |
} |
|
|
|
# ---------------------------------------------------------- putstore interface |
|
|
|
sub putstore { |
|
my ($namespace,$storehash,$udomain,$uname)=@_; |
|
if (!$udomain) { $udomain=$ENV{'user.domain'}; } |
|
if (!$uname) { $uname=$ENV{'user.name'}; } |
|
my $uhome=&homeserver($uname,$udomain); |
|
my $items=''; |
|
my %allitems = (); |
|
foreach (keys %$storehash) { |
|
if ($_ =~ m/^([^\:]+):([^\:]+):([^\:]+)$/) { |
|
my $key = $1.':keys:'.$2; |
|
$allitems{$key} .= $3.':'; |
|
} |
|
$items.=$_.'='.&escape($$storehash{$_}).'&'; |
|
} |
|
foreach (keys %allitems) { |
|
$allitems{$_} =~ s/\:$//; |
|
$items.= $_.'='.$allitems{$_}.'&'; |
|
} |
|
$items=~s/\&$//; |
|
return &reply("put:$udomain:$uname:$namespace:$items",$uhome); |
|
} |
|
|
# ------------------------------------------------------ critical put interface |
# ------------------------------------------------------ critical put interface |
|
|
sub cput { |
sub cput { |
Line 2726 sub allowed {
|
Line 2751 sub allowed {
|
|
|
if (defined($ENV{'allowed.'.$priv})) { return $ENV{'allowed.'.$priv}; } |
if (defined($ENV{'allowed.'.$priv})) { return $ENV{'allowed.'.$priv}; } |
# Free bre access to adm and meta resources |
# Free bre access to adm and meta resources |
|
if (((($uri=~/^adm\//) && ($uri !~ m|/bulletinboard$|)) |
if ((($uri=~/^adm\//) || ($uri=~/\.meta$/)) && ($priv eq 'bre')) { |
|| ($uri=~/\.meta$/)) && ($priv eq 'bre')) { |
return 'F'; |
return 'F'; |
} |
} |
|
|
Line 3146 sub fetch_enrollment_query {
|
Line 3171 sub fetch_enrollment_query {
|
$cmd = &escape($cmd); |
$cmd = &escape($cmd); |
my $query = 'fetchenrollment'; |
my $query = 'fetchenrollment'; |
my $queryid=&reply("querysend:".$query.':'.$dom.':'.$ENV{'user.name'}.':'.$cmd,$homeserver); |
my $queryid=&reply("querysend:".$query.':'.$dom.':'.$ENV{'user.name'}.':'.$cmd,$homeserver); |
unless ($queryid=~/^\Q$host\E\_/) { return 'error: '.$queryid; } |
unless ($queryid=~/^\Q$host\E\_/) { |
|
&logthis('fetch_enrollment_query: invalid queryid: '.$queryid.' for host: '.$host.' and homeserver: '.$homeserver.' context: '.$context.' '.$cnum); |
|
return 'error: '.$queryid; |
|
} |
my $reply = &get_query_reply($queryid); |
my $reply = &get_query_reply($queryid); |
unless ( ($reply =~/^timeout/) || ($reply =~/^error/) ) { |
if ( ($reply =~/^timeout/) || ($reply =~/^error/) ) { |
|
&logthis('fetch_enrollment_query error: '.$reply.' for '.$dom.' '.$ENV{'user.name'}.' for '.$queryid.' context: '.$context.' '.$cnum); |
|
} else { |
my @responses = split/:/,$reply; |
my @responses = split/:/,$reply; |
if ($homeserver eq $perlvar{'lonHostID'}) { |
if ($homeserver eq $perlvar{'lonHostID'}) { |
foreach (@responses) { |
foreach (@responses) { |
Line 3165 sub fetch_enrollment_query {
|
Line 3195 sub fetch_enrollment_query {
|
my $filename = $dom.'_'.$key.'_'.$_.'_classlist.xml'; |
my $filename = $dom.'_'.$key.'_'.$_.'_classlist.xml'; |
my $destname = $pathname.'/'.$filename; |
my $destname = $pathname.'/'.$filename; |
my $xml_classlist = &reply("autoretrieve:".$filename,$homeserver); |
my $xml_classlist = &reply("autoretrieve:".$filename,$homeserver); |
unless ($xml_classlist =~ /^error/) { |
if ($xml_classlist =~ /^error/) { |
|
&logthis('fetch_enrollment_query - autoretrieve error: '.$xml_classlist.' for '.$filename.' from server: '.$homeserver.' '.$context.' '.$cnum); |
|
} else { |
if ( open(FILE,">$destname") ) { |
if ( open(FILE,">$destname") ) { |
print FILE &unescape($xml_classlist); |
print FILE &unescape($xml_classlist); |
close(FILE); |
close(FILE); |
|
} else { |
|
&logthis('fetch_enrollment_query - error opening classlist file '.$destname.' '.$context.' '.$cnum); |
} |
} |
} |
} |
} |
} |
Line 3678 sub revokecustomrole {
|
Line 3712 sub revokecustomrole {
|
$deleteflag); |
$deleteflag); |
} |
} |
|
|
|
# ------------------------------------------------------------ Disk usage |
# ------------------------------------------------------------ Portfolio Director Lister |
sub diskusage { |
# returns listing of contents of user's /userfiles/portfolio/ directory |
my ($udom,$uname,$directoryRoot)=@_; |
# |
$directoryRoot =~ s/\/$//; |
|
my $listing=&reply('du:'.$directoryRoot,homeserver($uname,$udom)); |
sub portfoliolist { |
|
my ($currentPath, $currentFile) = @_; |
|
my ($udom, $uname, $portfolioRoot); |
|
$uname=$ENV{'user.name'}; |
|
$udom=$ENV{'user.domain'}; |
|
# really should interrogate the system for home directory information, but . . . |
|
$portfolioRoot = '/home/httpd/lonUsers/'.$udom.'/'; |
|
$uname =~ /^(.?)(.?)(.?)/; |
|
$portfolioRoot = $portfolioRoot.$1.'/'.$2.'/'.$3.'/'.$uname.'/userfiles/portfolio'; |
|
my $listing = &reply('ls:'.$portfolioRoot.$currentPath, &homeserver($uname,$udom)); |
|
return $listing; |
|
} |
|
|
|
sub portfoliomanage { |
|
|
|
#FIXME please user the existing remove userfile function instead and |
|
#add a userfilerename functions. |
|
#FIXME uhome should never be an argument to any lonnet functions |
|
|
|
# handles deleting and renaming files in user's userfiles/portfolio/ directory |
|
# |
|
my ($filename, $fileaction, $filenewname) = @_; |
|
my ($udom, $uname, $uhome); |
|
$uname=$ENV{'user.name'}; |
|
$udom=$ENV{'user.domain'}; |
|
$uhome=$ENV{'user.home'}; |
|
my $listing = reply('portfoliomanage:'.$uname.':'.$udom.':'.$filename.':'.$fileaction.':'.$filenewname, $uhome); |
|
return $listing; |
return $listing; |
} |
} |
|
|
Line 4220 sub metadata {
|
Line 4227 sub metadata {
|
my ($uri,$what,$liburi,$prefix,$depthcount)=@_; |
my ($uri,$what,$liburi,$prefix,$depthcount)=@_; |
$uri=&declutter($uri); |
$uri=&declutter($uri); |
# if it is a non metadata possible uri return quickly |
# if it is a non metadata possible uri return quickly |
if (($uri eq '') || (($uri =~ m|^/*adm/|) && ($uri !~ m|^adm/includes|)) || |
if (($uri eq '') || |
|
(($uri =~ m|^/*adm/|) && |
|
($uri !~ m|^adm/includes|) && ($uri !~ m|/bulletinboard$|)) || |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ /^~/) || |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ /^~/) || |
($uri =~ m|home/[^/]+/public_html/|)) { |
($uri =~ m|home/[^/]+/public_html/|)) { |
return undef; |
return undef; |
Line 4253 sub metadata {
|
Line 4262 sub metadata {
|
unless ($filename=~/\.meta$/) { $filename.='.meta'; } |
unless ($filename=~/\.meta$/) { $filename.='.meta'; } |
my $metastring; |
my $metastring; |
if ($uri !~ m|^uploaded/|) { |
if ($uri !~ m|^uploaded/|) { |
my $file=&filelocation('',&clutter($filename)); |
$metastring=&getfile(&filelocation('',&clutter($filename))); |
push(@{$metacache{$uri.'.file'}},$file); |
|
$metastring=&getfile($file); |
|
} |
} |
my $parser=HTML::LCParser->new(\$metastring); |
my $parser=HTML::LCParser->new(\$metastring); |
my $token; |
my $token; |
Line 4468 sub metadata_generate_part0 {
|
Line 4475 sub metadata_generate_part0 {
|
sub gettitle { |
sub gettitle { |
my $urlsymb=shift; |
my $urlsymb=shift; |
my $symb=&symbread($urlsymb); |
my $symb=&symbread($urlsymb); |
unless ($symb) { |
if ($symb) { |
unless ($urlsymb) { $urlsymb=$ENV{'request.filename'}; } |
my ($result,$cached)=&is_cached(\%titlecache,$symb,'title',600); |
return &metadata($urlsymb,'title'); |
if (defined($cached)) { return $result; } |
} |
my ($map,$resid,$url)=&decode_symb($symb); |
my ($result,$cached)=&is_cached(\%titlecache,$symb,'title',600); |
my $title=''; |
if (defined($cached)) { return $result; } |
my %bighash; |
my ($map,$resid,$url)=&decode_symb($symb); |
if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', |
my $title=''; |
&GDBM_READER(),0640)) { |
my %bighash; |
my $mapid=$bighash{'map_pc_'.&clutter($map)}; |
if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', |
$title=$bighash{'title_'.$mapid.'.'.$resid}; |
&GDBM_READER(),0640)) { |
untie %bighash; |
my $mapid=$bighash{'map_pc_'.&clutter($map)}; |
} |
$title=$bighash{'title_'.$mapid.'.'.$resid}; |
$title=~s/\&colon\;/\:/gs; |
untie %bighash; |
if ($title) { |
} |
return &do_cache(\%titlecache,$symb,$title,'title'); |
$title=~s/\&colon\;/\:/gs; |
} |
if ($title) { |
$urlsymb=$url; |
return &do_cache(\%titlecache,$symb,$title,'title'); |
} |
} else { |
my $title=&metadata($urlsymb,'title'); |
return &metadata($urlsymb,'title'); |
if (!$title) { $title=(split('/',$urlsymb))[-1]; } |
} |
return $title; |
} |
} |
|
|
# ------------------------------------------------- Update symbolic store links |
# ------------------------------------------------- Update symbolic store links |
Line 4966 sub receipt {
|
Line 4973 sub receipt {
|
# the local server. |
# the local server. |
|
|
sub getfile { |
sub getfile { |
my ($file,$caller) = @_; |
my ($file) = @_; |
|
|
if ($file !~ m|^/*uploaded/(\w+)/(\w+)/(.+)$|) { |
if ($file =~ m|^/*uploaded/|) { $file=&filelocation("",$file); } |
# normal file from res space |
&repcopy($file); |
&repcopy($file); |
return &readfile($file); |
return &readfile($file); |
} |
} |
|
|
sub repcopy_userfile { |
my $info; |
my ($file)=@_; |
my $cdom = $1; |
|
my $cnum = $2; |
if ($file =~ m|^/*uploaded/|) { $file=&filelocation("",$file); } |
my $filename = $3; |
if ($file =~ m|^/home/httpd/html/lonUsers/|) { return OK; } |
my $path = $Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles'; |
|
my ($lwpresp,$rtncode); |
my ($cdom,$cnum,$filename) = |
my $localfile = $path.'/'.$cdom.'/'.$cnum.'/'.$filename; |
($file=~m|^\Q$perlvar{'lonDocRoot'}\E/+userfiles/+([^/]+)/+([^/]+)/+(.*)|); |
if (-e "$localfile") { |
my ($info,$rtncode); |
my @fileinfo = stat($localfile); |
my $uri="/uploaded/$cdom/$cnum/$filename"; |
$lwpresp = &getuploaded('HEAD',$file,$cdom,$cnum,\$info,\$rtncode); |
if (-e "$file") { |
|
my @fileinfo = stat($file); |
|
my $lwpresp = &getuploaded('HEAD',$uri,$cdom,$cnum,\$info,\$rtncode); |
if ($lwpresp ne 'ok') { |
if ($lwpresp ne 'ok') { |
if ($rtncode eq '404') { |
if ($rtncode eq '404') { |
unlink($localfile); |
unlink($file); |
} |
} |
#my $ua=new LWP::UserAgent; |
#my $ua=new LWP::UserAgent; |
#my $request=new HTTP::Request('GET',&tokenwrapper($file)); |
#my $request=new HTTP::Request('GET',&tokenwrapper($uri)); |
#my $response=$ua->request($request); |
#my $response=$ua->request($request); |
#if ($response->is_success()) { |
#if ($response->is_success()) { |
# return $response->content; |
# return $response->content; |
Line 4999 sub getfile {
|
Line 5008 sub getfile {
|
return -1; |
return -1; |
} |
} |
if ($info < $fileinfo[9]) { |
if ($info < $fileinfo[9]) { |
return &readfile($localfile); |
return OK; |
} |
} |
$info = ''; |
$info = ''; |
$lwpresp = &getuploaded('GET',$file,$cdom,$cnum,\$info,\$rtncode); |
$lwpresp = &getuploaded('GET',$uri,$cdom,$cnum,\$info,\$rtncode); |
if ($lwpresp ne 'ok') { |
if ($lwpresp ne 'ok') { |
return -1; |
return -1; |
} |
} |
} else { |
} else { |
$lwpresp = &getuploaded('GET',$file,$cdom,$cnum,\$info,\$rtncode); |
my $lwpresp = &getuploaded('GET',$uri,$cdom,$cnum,\$info,\$rtncode); |
if ($lwpresp ne 'ok') { |
if ($lwpresp ne 'ok') { |
my $ua=new LWP::UserAgent; |
my $ua=new LWP::UserAgent; |
my $request=new HTTP::Request('GET',&tokenwrapper($file)); |
my $request=new HTTP::Request('GET',&tokenwrapper($uri)); |
my $response=$ua->request($request); |
my $response=$ua->request($request); |
if ($response->is_success()) { |
if ($response->is_success()) { |
return $response->content; |
$info=$response->content; |
} else { |
} else { |
return -1; |
return -1; |
} |
} |
Line 5022 sub getfile {
|
Line 5031 sub getfile {
|
if ($filename =~ m|^(.+)/[^/]+$|) { |
if ($filename =~ m|^(.+)/[^/]+$|) { |
push @parts, split(/\//,$1); |
push @parts, split(/\//,$1); |
} |
} |
|
my $path = $perlvar{'lonDocRoot'}.'/userfiles'; |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
$path .= '/'.$part; |
$path .= '/'.$part; |
if (!-e $path) { |
if (!-e $path) { |
Line 5029 sub getfile {
|
Line 5039 sub getfile {
|
} |
} |
} |
} |
} |
} |
open (FILE,">$localfile"); |
open(FILE,">$file"); |
print FILE $info; |
print FILE $info; |
close(FILE); |
close(FILE); |
if ($caller eq 'uploadrep') { |
return OK; |
return 'ok'; |
|
} |
|
return $info; |
|
} |
} |
|
|
sub tokenwrapper { |
sub tokenwrapper { |
Line 5091 sub filelocation {
|
Line 5098 sub filelocation {
|
$location = $file; |
$location = $file; |
$location =~ s:/~(.*?)/(.*):/home/$1/public_html/$2:; |
$location =~ s:/~(.*?)/(.*):/home/$1/public_html/$2:; |
} elsif ($file=~/^\/*uploaded/) { # is an uploaded file |
} elsif ($file=~/^\/*uploaded/) { # is an uploaded file |
$location=$file; |
my ($udom,$uname,$filename)= |
|
($file=~m|^/+uploaded/+([^/]+)/+([^/]+)/+(.*)$|); |
|
my $home=&homeserver($uname,$udom); |
|
my $is_me=0; |
|
my @ids=¤t_machine_ids(); |
|
foreach my $id (@ids) { if ($id eq $home) { $is_me=1; } } |
|
if ($is_me) { |
|
$location=&Apache::loncommon::propath($udom,$uname). |
|
'/userfiles/'.$filename; |
|
} else { |
|
$location=$Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles/'. |
|
$udom.'/'.$uname.'/'.$filename; |
|
} |
} else { |
} else { |
$file=~s/^\Q$perlvar{'lonDocRoot'}\E//; |
$file=~s/^\Q$perlvar{'lonDocRoot'}\E//; |
$file=~s:^/res/:/:; |
$file=~s:^/res/:/:; |
Line 5287 BEGIN {
|
Line 5306 BEGIN {
|
$hostip{$id}=$ip; |
$hostip{$id}=$ip; |
$iphost{$ip}=$id; |
$iphost{$ip}=$id; |
if ($role eq 'library') { $libserv{$id}=$name; } |
if ($role eq 'library') { $libserv{$id}=$name; } |
} else { |
|
if ($configline) { |
|
&logthis("Skipping hosts.tab line -$configline-"); |
|
} |
|
} |
} |
} |
} |
close($config); |
close($config); |
Line 5982 put($namespace,$storehash,$udom,$uname)
|
Line 5997 put($namespace,$storehash,$udom,$uname)
|
|
|
=item * |
=item * |
|
|
|
putstore($namespace,$storehash,$udomain,$uname) : stores hash in namesp |
|
keys used in storehash include version information (e.g., 1:$symb:message etc.) as |
|
used in records written by &store and retrieved by &restore. This function |
|
was created for use in editing discussion posts, without incrementing the |
|
version number included in the key for a particular post. The colon |
|
separated list of attribute names (e.g., the value associated with the key |
|
1:keys:$symb) is also generated and passed in the ampersand separated |
|
items sent to lonnet::reply(). |
|
|
|
=item * |
|
|
cput($namespace,$storehash,$udom,$uname) : critical put |
cput($namespace,$storehash,$udom,$uname) : critical put |
($udom and $uname are optional) |
($udom and $uname are optional) |
|
|