/usr/local/CPAN/onsearch/OnSearch/URL.pm
package OnSearch::URL;
#$Id: URL.pm,v 1.2 2005/07/11 19:19:51 kiesling Exp $
my ($VERSION)= ('$Revision: 1.2 $' =~ /:\s+(.*)\s+\$/);
use OnSearch;
use OnSearch::AppConfig;
require Exporter;
require DynaLoader;
our (@ISA, @EXPORT);
@ISA = qw(Exporter DynaLoader);
@EXPORT = qw(map_url);
###
### Map the path to either a file, a cached URL, or a site URL.
###
sub map_url {
my $path = $_[0];
my $url;
my $onsearchdir = OnSearch::AppConfig->str ('OnSearchDir');
if ($path =~ m"$onsearchdir/websites") {
return $url if ($url = remote_url ($path));
} else {
return $url if ($url = local_url ($path));
}
return undef;
}
sub remote_url {
my $path = $_[0];
my $server_domain = $ENV{DOCUMENT_ROOT};
my $onsearchdir = OnSearch::AppConfig->str ('OnSearchDir');
my $symlinks_ok = OnSearch::AppConfig->str ('HasSymLinks');
my ($actual_server_dir, $server_cache_dir, $urlpath);
if ($symlinks_ok && -l $server_domain) {
if ($path !~ m"$server_domain"i) {
$actual_server_dir = readlink ($server_domain);
} else {
$actual_server_dir = $server_domain;
}
} else {
$actual_server_dir = $server_domain;
}
$server_cachedir = "$actual_server_dir/$onsearchdir/websites/";
if ($path =~ m"^$server_cachedir") {
($urlpath) = ($path =~ m"^$server_cachedir(.*)");
$urlpath = 'http://' . $urlpath;
return $urlpath;
}
return undef;
}
sub local_url {
my $path = $_[0];
my $server_domain = $ENV{DOCUMENT_ROOT};
my $server_name = $ENV{SERVER_NAME};
my $server_port = $ENV{SERVER_PORT};
my $symlinks_ok = OnSearch::AppConfig->str ('HasSymLinks');
my ($sitepath, $url, $actual_dir);
if ($symlinks_ok && -l $server_domain) {
if ($path !~ m"$server_domain"i) {
$actual_dir = readlink ($server_domain);
} else {
$actual_dir = $server_domain;
}
} else {
$actual_dir = $server_domain;
}
if ($path =~ m"^$actual_dir"i) {
($path) = ($path =~ m"^$actual_dir(.*)");
if ($path !~ /^\//) { $path = '/' . $path; }
my $server_url = "http://$server_name" .
(($server_port ne '80') ? ":$server_port" : '');
return "$server_url$path";
}
return undef;
}