}
# Internal? (Ugly?)
- if ($r->get_server_name =~ /internal/) {
+ if ($r->get_server_name =~ /internal/ || $r->get_server_name =~ /skoyen\.bilder\.knatten\.com/) {
my $user = Sesse::pr0n::Common::check_access($r);
if (!defined($user)) {
return Apache2::Const::OK;
my %defsettings = (
thumbxres => 80,
thumbyres => 64,
- xres => undef,
- yres => undef,
+ xres => -1,
+ yres => -1,
start => 1,
num => -1,
all => 1,
fullscreen => 0,
);
+ # Any NEF files => default to processing
+ my $ref = $dbh->selectrow_hashref('SELECT * FROM images WHERE event=? AND LOWER(filename) LIKE \'%.nef\' LIMIT 1',
+ undef, $event)
+ and $defsettings{'xres'} = $defsettings{'yres'} = undef;
+
# Reduce the front page load when in overload mode.
if (Sesse::pr0n::Overload::is_in_overload($r)) {
$defsettings{'num'} = 100;
$num = undef;
}
- my $ref = $dbh->selectrow_hashref('SELECT * FROM events WHERE id=? AND vhost=?',
+ $ref = $dbh->selectrow_hashref('SELECT name,date,EXTRACT(EPOCH FROM last_update) AS last_update FROM events WHERE id=? AND vhost=?',
undef, $event, $r->get_server_name)
or error($r, "Could not find event $event", 404, "File not found");
- my $name = $ref->{'name'};
- my $date = $ref->{'date'};
+ my $date = HTML::Entities::encode_entities(Encode::decode_utf8($ref->{'date'}));
+ my $name = HTML::Entities::encode_entities(Encode::decode_utf8($ref->{'name'}));
+ $r->set_last_modified($ref->{'last_update'});
+
+ # If the client can use cache, do so
+ if ((my $rc = $r->meets_conditions) != Apache2::Const::OK) {
+ return $rc;
+ }
# Count the number of selected images.
$ref = $dbh->selectrow_hashref("SELECT COUNT(*) AS num_selected FROM images WHERE event=? AND selected=\'t\'", undef, $event);
$r->content_type("text/html; charset=utf-8");
Sesse::pr0n::Templates::print_template($r, "fullscreen-header", { title => "$name [$event]" });
while (my $ref = $q->fetchrow_hashref()) {
- $r->print(" \"" . $ref->{'filename'} . "\",\n");
+ $r->print(" \"" . $infobox . $ref->{'filename'} . "\",\n");
}
my %settings_no_fullscreen = %settings;
vhost => $r->get_server_name,
event => $event,
start => $settings{'start'} - 1,
- returnurl => $returnurl
+ returnurl => $returnurl,
+ sel => $settings{'sel'},
});
} else {
Sesse::pr0n::Common::header($r, "$name [$event]");
print_nextprev($r, $event, \%settings, \%defsettings);
print_selected($r, $event, \%settings, \%defsettings) if ($num_selected > 0);
print_fullscreen($r, $event, \%settings, \%defsettings);
+
+ # Find the equipment used
+ my $eq = $dbh->prepare('
+ SELECT DISTINCT
+ model.value AS model,
+ coalesce(lens_spec.value, lens.value) AS lens
+ FROM images i
+ LEFT JOIN exif_info model ON i.id=model.image
+ LEFT JOIN ( SELECT * FROM exif_info WHERE tag=\'Lens\' ) lens ON i.id=lens.image
+ LEFT JOIN ( SELECT * FROM exif_info WHERE tag=\'LensSpec\') lens_spec ON i.id=lens_spec.image
+ WHERE event=? AND model.tag=\'Model\'
+ ORDER BY 1,2')
+ or die "Couldn't prepare to find equipment: $!";
+ $eq->execute($event)
+ or die "Couldn't find equipment: $!";
+
+ my @equipment = ();
+ my %cameras_seen = ();
+ while (my $ref = $eq->fetchrow_hashref) {
+ if (!defined($ref->{'lens'}) && exists($cameras_seen{$ref->{'model'}})) {
+ #
+ # Some compact cameras seem to add lens info sometimes and not at other
+ # times; if we have seen a camera with at least one specific lens earlier,
+ # just ignore entries without a lens.
+ #
+ next;
+ }
+ push @equipment, $ref;
+ $cameras_seen{$ref->{'model'}} = 1;
+ }
+ $eq->finish;
+
+ if (scalar @equipment > 0) {
+ Sesse::pr0n::Templates::print_template($r, "equipment-start");
+ for my $e (@equipment) {
+ $r->print(" <li>" . $e->{'model'});
+ if (defined($e->{'lens'})) {
+ $r->print(", " . $e->{'lens'} . "</li>\n");
+ } else {
+ $r->print("</li>\n");
+ }
+ }
+ Sesse::pr0n::Templates::print_template($r, "equipment-end");
+ }
+
my $toclose = 0;
my $lastupl = "";
# Print out all thumbnails
if ($rot == 1) {
$r->print(" <form method=\"post\" action=\"/rotate\">\n");
+ $r->print(" <input type=\"hidden\" name=\"event\" value=\"$event\" />\n");
while (my $ref = $q->fetchrow_hashref()) {
my $imgsz = "";
}
my $filename = $ref->{'filename'};
- my $uri = $filename;
+ my $uri = $infobox . $filename;
if (defined($xres) && defined($yres) && $xres != -1) {
$uri = "${xres}x$yres/$infobox$filename";
} elsif (defined($xres) && $xres == -1) {
}
my $filename = $ref->{'filename'};
- my $uri = $filename;
+ my $uri = $infobox . $filename;
if (defined($xres) && defined($yres) && $xres != -1) {
$uri = "${xres}x$yres/$infobox$filename";
} elsif (defined($xres) && $xres == -1) {
}
my $filename = $ref->{'filename'};
- my $uri = $filename;
+ my $uri = $infobox . $filename;
if (defined($xres) && defined($yres) && $xres != -1) {
$uri = "${xres}x$yres/$infobox$filename";
} elsif (defined($xres) && $xres == -1) {
my %newsettings = %$settings;
$newsettings{'start'} = $newstart;
chomp (my $title = Sesse::pr0n::Templates::fetch_template($r, 'prevpage'));
- Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)\n", "/$event/", \%newsettings, $defsettings);
+ chomp (my $accesskey = Sesse::pr0n::Templates::fetch_template($r, 'prevaccesskey'));
+ Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)\n", "/$event/", \%newsettings, $defsettings, $accesskey);
}
# This
my %newsettings = %$settings;
$newsettings{'start'} = $newstart;
chomp (my $title = Sesse::pr0n::Templates::fetch_template($r, 'nextpage'));
- Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)", "/$event/", \%newsettings, $defsettings);
+ chomp (my $accesskey = Sesse::pr0n::Templates::fetch_template($r, 'nextaccesskey'));
+ Sesse::pr0n::Common::print_link($r, "$title ($newstart-$newend)", "/$event/", \%newsettings, $defsettings, $accesskey);
}
$r->print(" </p>\n");