# Let Apache serve icons without us modifying the request
if ($r->uri =~ m/^\/icons/i) {
if ($r->uri =~ m/^\/icons\/gallery\/([^\/]+$)/i) {
- $filename = "/usr/share/libapache-gallery-perl/icons/$filename";
- $r->filename($filename);
- }
- return $::MP2 ? Apache2::Const::DECLINED() : Apache::Constants::DECLINED();
+ $filename = "/usr/share/libapache-gallery-perl/icons/$1";
+ return send_file($r,$filename);
+ } else {
+ 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
my $file = cache_dir($r, 0);
$file =~ s/\.cache//;
- my $subr = $r->lookup_file($file);
- $r->content_type($subr->content_type());
+ return send_file($r,$file);
- 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();
- }
}
return $::MP2 ? Apache2::Const::FORBIDDEN() : Apache::Constants::FORBIDDEN();
}
}
+ if (defined $ENV{QUERY_STRING} && $ENV{QUERY_STRING} eq 'thumbonly' &&
+ $r->dir_config('GalleryAllowThumbonly') &&
+ -f $filename) {
+
+ my ($width, $height, $type) = imgsize($filename);
+ my @filetypes = qw(JPG TIF PNG PPM GIF);
+ if (grep $type eq $_, @filetypes) {
+ my ($thumbnailwidth, $thumbnailheight) = get_thumbnailsize($r, $width, $height);
+ my $imageinfo = get_imageinfo($r, $filename, $type, $width, $height);
+ my $cached = get_scaled_picture_name($filename, $thumbnailwidth, $thumbnailheight);
+ $r->headers_out->set(Location => uri_escape(".cache/$cached", $escape_rule));
+ return $::MP2 ? Apache2::Const::REDIRECT() : Apache::Constants::REDIRECT();
+ }
+ }
# Create cache dir if not existing
my @tmp = split (/\//, $filename);
}
+sub send_file {
+ my ($r,$file) = @_;
+ 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();
+ }
+}
+
sub cache_dir {
my ($r, $strip_filename) = @_;
Set to 1 or 0, default is 0
+=item B<GalleryAllowThumbOnly>
+
+If true, B<GalleryAllowThumbOnly> allows fooimg.jpg?thumbonly urls
+to output the thumbnail of the image. This is useful when including
+images in a blog (or similar).
+
+Defaults to '0' (false).
+
=item B<GallerySlideshowIntervals>
With this option you can configure which intervals can be selected for