Apache-Gallery
view release on metacpan or search on metacpan
lib/Apache/Gallery.pm view on Meta::CPAN
# Let Apache serve icons without us modifying the request
if ($r->uri =~ m/^\/icons/i) {
return $::MP2 ? Apache2::Const::DECLINED() : Apache::Constants::DECLINED();
}
# Lookup the file in the cache and scale the image if the cached
# image does not exist
if ($r->uri =~ m/\.cache\//i) {
my $filename = $r->filename().$r->path_info();
$filename =~ s/\.cache//;
$filename =~ m/\/(\d+)x(\d+)\-/;
my $image_width = $1;
my $image_height = $2;
$filename =~ s/\/(\d+)x(\d+)\-//;
my ($width, $height, $type) = imgsize($filename);
my $imageinfo = get_imageinfo($r, $filename, $type, $width, $height);
my $cached = scale_picture($r, $filename, $image_width, $image_height, $imageinfo);
my $file = cache_dir($r, 0);
$file =~ s/\.cache//;
my $subr = $r->lookup_file($file);
$r->content_type($subr->content_type());
if ($::MP2) {
my $fileinfo = stat($file);
my $nonce = md5_base64($fileinfo->ino.$fileinfo->mtime);
if ($r->headers_in->{"If-None-Match"} eq $nonce) {
return Apache2::Const::HTTP_NOT_MODIFIED();
}
if ($r->headers_in->{"If-Modified-Since"} && str2time($r->headers_in->{"If-Modified-Since"}) < $fileinfo->mtime) {
return Apache2::Const::HTTP_NOT_MODIFIED();
}
$r->headers_out->{"Content-Length"} = $fileinfo->size;
$r->headers_out->{"Last-Modified-Date"} = time2str($fileinfo->mtime);
$r->headers_out->{"ETag"} = $nonce;
$r->sendfile($file);
return Apache2::Const::OK();
}
else {
$r->path_info('');
$r->filename($file);
return Apache::Constants::DECLINED();
}
}
my $uri = $r->uri;
$uri =~ s/\/$//;
unless (-f $filename or -d $filename) {
show_error($r, 404, "404!", "No such file or directory: ".uri_escape($r->uri, $escape_rule));
return $::MP2 ? Apache2::Const::OK() : Apache::Constants::OK();
}
my $doc_pattern = $r->dir_config('GalleryDocFile');
unless ($doc_pattern) {
$doc_pattern = '\.(mpe?g|avi|mov|asf|wmv|doc|mp3|ogg|pdf|rtf|wav|dlt|txt|html?|csv|eps)$'
}
my $img_pattern = $r->dir_config('GalleryImgFile');
unless ($img_pattern) {
$img_pattern = '\.(jpe?g|png|tiff?|ppm)$'
}
# Let Apache serve files we don't know how to handle anyway
if (-f $filename && $filename !~ m/$img_pattern/i) {
return $::MP2 ? Apache2::Const::DECLINED() : Apache::Constants::DECLINED();
}
if (-d $filename) {
unless (-d cache_dir($r, 0)) {
unless (create_cache($r, cache_dir($r, 0))) {
return $::MP2 ? Apache2::Const::OK() : Apache::Constants::OK();
}
}
my $tpl_dir = $r->dir_config('GalleryTemplateDir');
# Instead of reading the templates every single time
# we need them, create a hash of template names and
# the associated Text::Template objects.
my %templates = create_templates({layout => "$tpl_dir/layout.tpl",
index => "$tpl_dir/index.tpl",
directory => "$tpl_dir/directory.tpl",
picture => "$tpl_dir/picture.tpl",
file => "$tpl_dir/file.tpl",
comment => "$tpl_dir/dircomment.tpl",
nocomment => "$tpl_dir/nodircomment.tpl",
rss => "$tpl_dir/rss.tpl",
rss_item => "$tpl_dir/rss_item.tpl",
navdirectory => "$tpl_dir/navdirectory.tpl",
});
my %tpl_vars;
$tpl_vars{TITLE} = "Index of: $uri";
if ($media_rss_enabled) {
# Put the RSS feed on all directory listings
$tpl_vars{META} = '<link rel="alternate" href="?rss=1" type="application/rss+xml" title="" id="gallery" />';
}
unless (opendir (DIR, $filename)) {
show_error ($r, 500, $!, "Unable to access directory $filename: $!");
return $::MP2 ? Apache2::Const::OK() : Apache::Constants::OK();
}
$tpl_vars{MENU} = generate_menu($r);
( run in 2.426 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )