site/cgi-bin/modules/BSE/Thumb/Imager.pm
site/cgi-bin/modules/BSE/Thumb/Imager/Colourize.pm
site/cgi-bin/modules/BSE/Thumb/Imager/RandomCrop.pm
+site/cgi-bin/modules/BSE/ThumbCommon.pm
site/cgi-bin/modules/BSE/ThumbLow.pm
site/cgi-bin/modules/BSE/UI.pm
site/cgi-bin/modules/BSE/UI/AdminAudit.pm
description text not null,
+ ftype varchar(20) not null default 'img',
+
index owner(file_type, owner_id)
);
use Carp qw(confess);
use BSE::Util::HTML;
-our $VERSION = "1.000";
-
-sub thumb_base_url {
- '/cgi-bin/thumb.pl';
-}
+our $VERSION = "1.001";
sub format {
my ($self, %opts) = @_;
or return ( undef, "* invalid geometry string: $error *" );
my %im = map { $_ => $im->{$_} } $im->columns;
- my $base = $self->thumb_base_url;
@im{qw/width height type original/} =
$thumbs->thumb_dimensions_sized($geometry, @$im{qw/width height/});
and print STDERR " Generated $im{image}\n";
}
unless ($im{image}) {
- $im{image} = "$base?g=$geo_id&page=$im->{articleId}&image=$im->{id}";
+ $im{image} = $im->dynamic_thumb_url
+ (
+ geo => $geo_id
+ );
if (defined $im{type}) {
$im{image} .= "&type.$im{type}";
package BSE::TB::File;
use strict;
use Squirrel::Row;
+use BSE::ThumbCommon;
use vars qw/@ISA/;
-@ISA = qw/Squirrel::Row/;
+@ISA = qw/Squirrel::Row BSE::ThumbCommon/;
use Carp 'confess';
-our $VERSION = "1.001";
+our $VERSION = "1.002";
sub columns {
return qw/id file_type owner_id filename display_name content_type
size_in_bytes is_public name display_order src category
- alt width height url description/;
+ alt width height url description ftype/;
}
sub table {
width => 0,
height => 0,
url => '',
+ ftype => "img",
);
}
return $data;
}
+sub dynamic_thumb_url {
+ my ($self, %opts) = @_;
+
+ my $geo = delete $opts{geo}
+ or Carp::confess("Missing geo parameter");
+
+ return "/cgi-bin/thumb.pl?s=file&g=$geo&image=$self->{id}";
+}
+
1;
use strict;
# represents an image from the database
use Squirrel::Row;
+use BSE::ThumbCommon;
use vars qw/@ISA/;
-@ISA = qw/Squirrel::Row/;
+@ISA = qw/Squirrel::Row BSE::ThumbCommon/;
use Carp qw(confess);
-use BSE::Util::HTML qw(escape_html);
-our $VERSION = "1.001";
+our $VERSION = "1.002";
sub columns {
return qw/id articleId image alt width height url displayOrder name
storage src ftype/;
}
-sub _handler_object {
- my ($im, $cfg) = @_;
-
- my $module = "BSE::ImageHandler::" . ucfirst($im->ftype);
- (my $file = $module . ".pm") =~ s(::)(/)g;
- require $file;
- my $handler = $module->new(cfg => $cfg);
-}
-
sub formatted {
my ($self, %opts) = @_;
);
}
-sub thumb {
- my ($im, %opts) = @_;
-
- my $cfg = delete $opts{cfg}
- or confess "Missing cfg parameter";
-
- my $handler = $im->_handler_object($cfg);
-
- return $handler->thumb
- (
- image => $im,
- %opts,
- );
-}
-
sub popimage {
my ($im, %opts) = @_;
return $data;
}
+sub dynamic_thumb_url {
+ my ($self, %opts) = @_;
+
+ my $geo = delete $opts{geo}
+ or Carp::confess("missing geo option");
+
+ return $self->thumb_base_url
+ . "?g=$geo&page=$self->{articleId}&image=$self->{id}";
+}
+
+sub thumb_base_url {
+ '/cgi-bin/thumb.pl';
+}
+
+sub full_filename {
+ my ($self) = @_;
+
+ return BSE::TB::Images->image_dir() . "/" . $self->image;
+}
+
+# compatibility with BSE::TB::File
+sub filename {
+ my ($self) = @_;
+
+ return $self->image;
+}
+
1;
@ISA = qw(Squirrel::Table);
use BSE::TB::Image;
-our $VERSION = "1.000";
+our $VERSION = "1.001";
sub rowClass {
return 'BSE::TB::Image';
return map [ $_->{image}, $_->{storage}, $_ ], BSE::TB::Images->all;
}
+sub image_dir {
+ require BSE::CfgInfo;
+
+ return BSE::CfgInfo::cfg_image_dir(BSE::Cfg->single);
+}
+
1;
package BSE::ThumbCommon;
use strict;
+use Carp ();
+
+our $VERSION = "1.000";
# common code between article images and BSE::TB::File
sub _handler_object {
my ($im, $cfg) = @_;
+ $cfg ||= BSE::Cfg->single;
+
my $module = "BSE::ImageHandler::" . ucfirst($im->ftype);
(my $file = $module . ".pm") =~ s(::)(/)g;
require $file;
sub thumb {
my ($im, %opts) = @_;
- my $cfg = delete $opts{cfg}
- or confess "Missing cfg parameter";
+ my $cfg = delete $opts{cfg};
my $handler = $im->_handler_object($cfg);
package BSE::UI::Thumb;
use strict;
use base 'BSE::UI::Dispatch'; # for error
-use BSE::TB::Images;
use BSE::CfgInfo qw(cfg_image_dir);
use BSE::Util::Thumb;
-our $VERSION = "1.001";
+our $VERSION = "1.003";
sub dispatch {
my ($class, $req) = @_;
my $geometry_id = $cgi->param('g');
my $image_id = $cgi->param('image');
my $article_id = $cgi->param('page');
+ my $source = $cgi->param("s") || "article";
my $error;
my $geometry = $cfg->entry('thumb geometries', $geometry_id)
or return $class->error($req, "** cannot find thumb geometry $geometry_id **");
$thumbs->validate_geometry($geometry, \$error)
or return $class->error($req, "invalid geometry string: $error");
- my $image = BSE::TB::Images->getByPkey($image_id);
- $image && $image->{articleId} == $article_id
- or return $class->error($req, "image not found");
+ my $image;
+ if ($source eq "article") {
+ require BSE::TB::Images;
+ $image = BSE::TB::Images->getByPkey($image_id);
+ $image && $image->{articleId} == $article_id
+ or return $class->error($req, "image not found");
+ }
+ elsif ($source eq "file") {
+ require BSE::TB::Files;
+ $image = BSE::TB::Files->getByPkey($image_id)
+ or return $class->error($req, "image not found");
+ }
my $do_cache = $cfg->entry('basic', 'cache_thumbnails', 1);
my $image_dir = cfg_image_dir($cfg);
my $cache_dir = $cfg->entry('paths', 'scalecache', "$image_dir/scaled");
my $cache_base_url = $cfg->entry('paths', 'scalecacheurl', '/images/scaled');
- my ($start_type) = $image->{image} =~ /\.(\w+)$/;
+ my ($start_type) = $image->filename =~ /\.(\w+)$/;
$start_type ||= 'png';
my ($width, $height, $type) =
else {
# not caching, just generate it
- my $filename = "$image_dir/$image->{image}";
+ my $filename = $image->full_filename;
-e $filename
or return $class->error($req, "image file missing");
use BSE::CfgInfo qw(cfg_image_dir);
use BSE::StorageMgr::Thumbs;
-our $VERSION = "1.000";
+our $VERSION = "1.001";
# returns a list of $url, $filename, $basename
sub generate_thumb {
my $cache_dir = $cfg->entry('paths', 'scalecache', "$image_dir/scaled");
my $cache_base_url = $cfg->entry('paths', 'scalecacheurl', '/images/scaled');
- my ($start_type) = $image->{image} =~ /\.(\w+)$/;
+ my ($start_type) = $image->filename =~ /\.(\w+)$/;
$start_type ||= 'png';
my ($width, $height, $type) =
$thumbs->thumb_dimensions_sized($geometry, @$image{qw/width height/}, $start_type);
- my $basename = "$geometry_id-$image->{image}";
+ my $basename = "$geometry_id-" . $image->filename;
if ($type eq 'jpeg' && $basename !~ /\.jpe?g$/i) {
$basename .= ".jpg";
$cache_url = $storage->url($basename);
}
else {
- my $image_filename = "$image_dir/$image->{image}";
+ my $image_filename = $image->full_filename;
unless (-e $image_filename) {
warn "Image file $image_filename missing\n";
- die "Image file $image->{image} missing\n";
+ die "Image file ", $image->filename, " missing\n";
}
my $error;
Column height;int(11);YES;NULL;
Column url;varchar(255);YES;NULL;
Column description;text;NO;NULL;
+Column ftype;varchar(20);NO;img;
Index PRIMARY;1;[id]
Index owner;0;[file_type;owner_id]
Table bse_locations