X-Git-Url: https://git.sesse.net/?p=pr0n;a=blobdiff_plain;f=perl%2FSesse%2Fpr0n%2FIndex.pm;h=1be7b9e63e2a1ccf436519561005f5281432c2eb;hp=5082486e996056142860ae70a0ec9410ef63e268;hb=HEAD;hpb=736afd0147b66c93283d4033649891503187ec6a diff --git a/perl/Sesse/pr0n/Index.pm b/perl/Sesse/pr0n/Index.pm index 5082486..d72be98 100644 --- a/perl/Sesse/pr0n/Index.pm +++ b/perl/Sesse/pr0n/Index.pm @@ -48,7 +48,6 @@ sub handler { start => 1, num => 250, all => 1, - infobox => 1, rot => 0, sel => 0, fullscreen => 0, @@ -59,19 +58,19 @@ sub handler { my $where; if ($event eq '+all') { - $where = ''; + $where = ' AND (event,vhost) IN ( SELECT event,vhost FROM events WHERE NOT hidden )'; } else { $where = ' AND event=' . $dbh->quote($event); } - # Any NEF files => default to processing - my $ref = $dbh->selectrow_hashref("SELECT * FROM images WHERE vhost=? $where AND ( LOWER(filename) LIKE '%.nef' OR LOWER(filename) LIKE '%.cr2' ) LIMIT 1", + # Any NEF files with no non-NEF renders => default to processing + my $ref = $dbh->selectrow_hashref("SELECT * FROM images WHERE vhost=? $where AND ( LOWER(filename) LIKE '%.nef' OR LOWER(filename) LIKE '%.cr2' ) AND render_id IS NULL LIMIT 1", undef, Sesse::pr0n::Common::get_server_name($r)) and $defsettings{'xres'} = $defsettings{'yres'} = undef; my %settings = %defsettings; - for my $s (qw(thumbxres thumbyres xres yres start num all infobox rot sel fullscreen model lens author)) { + for my $s (qw(thumbxres thumbyres xres yres start num all rot sel fullscreen model lens author)) { my $val = $r->param($s); if (defined($val) && $val =~ /^(\d+)$/) { $settings{$s} = $val; @@ -94,7 +93,6 @@ sub handler { my $start = $settings{'start'}; my $num = $settings{'num'}; my $all = $settings{'all'}; - my $infobox = $settings{'infobox'} ? '' : 'nobox/'; my $rot = $settings{'rot'}; my $sel = $settings{'sel'}; my $model = $settings{'model'}; @@ -124,9 +122,8 @@ sub handler { } } if (defined($author)) { - my $aq = $dbh->quote($author); - - $where .= " AND takenby=$aq"; + my @authors = split /,/, $author; + $where .= " AND takenby IN (" . join(', ', map { $dbh->quote($_) } @authors) . ")"; } if (defined($num) && $num == -1) { @@ -158,13 +155,57 @@ sub handler { # } # Count the number of selected images. - $ref = $dbh->selectrow_hashref("SELECT COUNT(*) AS num_selected FROM images WHERE vhost=? $where AND selected=\'t\'", undef, Sesse::pr0n::Common::get_server_name($r)); + $ref = $dbh->selectrow_hashref("SELECT COUNT(*) AS num_selected FROM images WHERE vhost=? $where AND selected AND NOT is_render", undef, Sesse::pr0n::Common::get_server_name($r)); my $num_selected = $ref->{'num_selected'}; # Find all images related to this event. my $limit = (defined($start) && defined($num) && !$settings{'fullscreen'}) ? (" LIMIT $num OFFSET " . ($start-1)) : ""; - my $q = $dbh->prepare("SELECT *, (date - INTERVAL '6 hours')::date AS day FROM images WHERE vhost=? $where ORDER BY (date - INTERVAL '6 hours')::date $datesort,takenby,date,filename $limit") + my $extra_joins = ""; + my $extra_fields = ""; + if ($settings{'fullscreen'}) { + $extra_joins = <<"EOF"; + LEFT JOIN exif_info exif_prog ON images.id=exif_prog.image AND exif_prog.key = 'ExposureProgram' + LEFT JOIN exif_info exif_focal ON images.id=exif_focal.image AND exif_focal.key = 'FocalLength' + LEFT JOIN exif_info exif_shutter ON images.id=exif_shutter.image AND exif_shutter.key = 'ExposureTime' + LEFT JOIN exif_info exif_fnum ON images.id=exif_fnum.image AND exif_fnum.key = 'FNumber' + LEFT JOIN exif_info exif_iso1 ON images.id=exif_iso1.image AND exif_iso1.key = 'ISO' + LEFT JOIN exif_info exif_iso2 ON images.id=exif_iso2.image AND exif_iso2.key = 'ISOSetting' + LEFT JOIN exif_info exif_ev1 ON images.id=exif_ev1.image AND exif_ev1.key = 'ExposureBiasValue' + LEFT JOIN exif_info exif_ev2 ON images.id=exif_ev2.image AND exif_ev2.key = 'ExposureCompensation' + LEFT JOIN exif_info exif_date ON images.id=exif_date.image AND exif_date.key = 'DateTimeOriginal' + LEFT JOIN exif_info exif_model ON images.id=exif_model.image AND exif_model.key = 'Model' + LEFT JOIN exif_info exif_flash ON images.id=exif_flash.image AND exif_flash.key = 'Flash' +EOF + $extra_fields = <<"EOF"; + exif_prog.value AS "ExposureProgram", + exif_focal.value AS "FocalLength", + exif_shutter.value AS "ExposureTime", + exif_fnum.value AS "FNumber", + exif_iso1.value AS "ISO", + exif_iso2.value AS "ISOSetting", + exif_ev1.value AS "ExposureBiasValue", + exif_ev2.value AS "ExposureCompensation", + exif_date.value AS "DateTimeOriginal", + exif_model.value AS "Model", + exif_flash.value AS "Flash", +EOF + } + + my $q = $dbh->prepare(<<"EOF") +SELECT *, + $extra_fields + (date - INTERVAL '6 hours')::date AS day +FROM + images + $extra_joins +WHERE + vhost=? + $where + AND NOT is_render +ORDER BY (date - INTERVAL '6 hours')::date $datesort,takenby,date,filename +$limit +EOF or return dberror($r, "prepare()"); $q->execute(Sesse::pr0n::Common::get_server_name($r)) or return dberror($r, "image enumeration"); @@ -181,11 +222,13 @@ sub handler { while (my $ref = $q->fetchrow_hashref()) { my $width = defined($ref->{'width'}) ? $ref->{'width'} : -1; my $height = defined($ref->{'height'}) ? $ref->{'height'} : -1; - push @files, [ $ref->{'event'}, $ref->{'filename'}, $width, $height ]; + my @parts = Sesse::pr0n::Common::make_infobox_parts($ref); + @parts = map { $_->[1] ? "" . HTML::Entities::encode_entities($_->[0]) . "" : HTML::Entities::encode_entities($_->[0]) } @parts; + push @files, [ $ref->{'event'}, $ref->{'filename'}, $width, $height, join('', @parts) ]; } for my $i (0..$#files) { - my $line = sprintf " [ \"%s\", \"%s\", %d, %d ]", @{$files[$i]}; + my $line = sprintf " [ \"%s\", \"%s\", %d, %d, \"%s\" ]", @{$files[$i]}; $line .= "," unless ($i == $#files); $io->print($line . "\n"); } @@ -202,8 +245,7 @@ sub handler { Sesse::pr0n::Templates::print_template($r, $io, "fullscreen-footer", { returnurl => $returnurl, start => $settings{'start'} - 1, - sel => $settings{'sel'}, - infobox => $infobox + sel => $settings{'sel'} }); } else { Sesse::pr0n::Common::header($r, $io, "$name [$event]"); @@ -215,8 +257,6 @@ sub handler { Sesse::pr0n::Templates::print_template($r, $io, "overloadmode"); } - print_viewres($r, $io, $event, \%settings, \%defsettings); - print_infobox($r, $io, $event, \%settings, \%defsettings); print_selected($r, $io, $event, \%settings, \%defsettings) if ($num_selected > 0); print_fullscreen($r, $io, $event, \%settings, \%defsettings); print_nextprev($r, $io, $event, $where, \%settings, \%defsettings); @@ -230,6 +270,7 @@ sub handler { COUNT(*) AS num FROM images WHERE vhost=? $where + AND NOT is_render GROUP BY 1,2 ORDER BY 1,2") or die "Couldn't prepare to find equipment: $!"; @@ -345,12 +386,18 @@ sub handler { $imgsz = " width=\"$width\" height=\"$height\""; } + # Add fullscreen link. + my %fssettings = %settings; + $fssettings{'fullscreen'} = 1; + my $fsquery = Sesse::pr0n::Common::get_query_string(\%fssettings, \%defsettings); + $fsquery .= '#' . $img_num; + my $filename = $ref->{'filename'}; - my $uri = $infobox . $filename; + my $uri = $filename; if (defined($xres) && defined($yres) && $xres != -1 && $xres != -2) { - $uri = "${xres}x$yres/$infobox$filename"; + $uri = "${xres}x$yres/$filename"; } elsif (defined($xres) && $xres == -1) { - $uri = "original/$infobox$filename"; + $uri = "original/$filename"; } my $prefix = ""; @@ -363,7 +410,7 @@ sub handler { } else { $io->print(" "); } - $io->print("\"\"$imgsz\n"); + $io->print("\"\"$imgsz\n"); if ($rot == 1) { $io->print(" 90 print("

\n"); } -sub print_viewres { - my ($r, $io, $event, $settings, $defsettings) = @_; - my @alternatives = qw(320x256 512x384 640x480 800x600 1024x768 1152x864 1280x960 1400x1050 1600x1200 1920x1440 2048x1536 2304x1728); - chomp (my $unlimited = Sesse::pr0n::Templates::fetch_template($r, 'viewres-unlimited')); - chomp (my $original = Sesse::pr0n::Templates::fetch_template($r, 'viewres-original')); - push @alternatives, [ $unlimited, -2, -2 ]; - push @alternatives, [ $original, -1, -1 ]; - - print_changes($r, $io, $event, 'viewres', $settings, $defsettings, - 'xres', 'yres', \@alternatives); -} - -sub print_infobox { - my ($r, $io, $event, $settings, $defsettings) = @_; - - chomp (my $title = Sesse::pr0n::Templates::fetch_template($r, 'infobox')); - chomp (my $on = Sesse::pr0n::Templates::fetch_template($r, 'infobox-on')); - chomp (my $off = Sesse::pr0n::Templates::fetch_template($r, 'infobox-off')); - - $io->print("

$title:\n"); - - my %newsettings = %$settings; - - if ($settings->{'infobox'} == 1) { - $io->print($on); - } else { - $newsettings{'infobox'} = 1; - Sesse::pr0n::Common::print_link($io, $on, "/$event/", \%newsettings, $defsettings); - } - - $io->print(' '); - - if ($settings->{'infobox'} == 0) { - $io->print($off); - } else { - $newsettings{'infobox'} = 0; - Sesse::pr0n::Common::print_link($io, $off, "/$event/", \%newsettings, $defsettings); - } - - $io->print('

'); -} - sub print_nextprev { my ($r, $io, $event, $where, $settings, $defsettings) = @_; my $start = $settings->{'start'}; @@ -496,7 +501,7 @@ sub print_nextprev { return unless (defined($start) && defined($num)); # determine total number - my $ref = $dbh->selectrow_hashref("SELECT count(*) AS num_images FROM images WHERE vhost=? $where", + my $ref = $dbh->selectrow_hashref("SELECT count(*) AS num_images FROM images WHERE vhost=? $where AND NOT is_render", undef, Sesse::pr0n::Common::get_server_name($r)) or return dberror($r, "image enumeration"); my $num_images = $ref->{'num_images'};