undef, $width, $height, $datetime, $model, $lens, $id)
or die "Couldn't update width/height in SQL: $!";
- # Tags
- my @tags = $exiftool->GetValue('Keywords', 'ValueConv');
- if (scalar @tags == 0) {
- # This is XMP-dc:Subject, an RDF bag of tags.
- @tags = $exiftool->GetValue('Subject', 'ValueConv');
- }
- $dbh->do('DELETE FROM tags WHERE image=?',
- undef, $id)
- or die "Couldn't delete old tag information in SQL: $!";
-
- $q = $dbh->prepare('INSERT INTO tags (image,tag) VALUES (?,?)')
- or die "Couldn't prepare inserting tag information: $!";
-
-
- for my $tag (@tags) {
- $q->execute($id, guess_charset($tag))
- or die "Couldn't insert tag information in database: $!";
- }
-
# update the last_picture cache as well (this should of course be done
# via a trigger, but this is less complicated :-) )
$dbh->do('UPDATE last_picture_cache SET last_picture=GREATEST(last_picture, ?),last_update=CURRENT_TIMESTAMP WHERE (vhost,event)=(SELECT vhost,event FROM images WHERE id=?)',
my $r = shift;
my $dbh = Sesse::pr0n::Common::get_dbh();
- my ($event, $abspath, $datesort, $tag);
+ my ($event, $abspath, $datesort);
if ($r->path_info =~ /^\/\+all\/?/) {
$event = '+all';
$abspath = 1;
- $tag = undef;
- $datesort = 'DESC NULLS LAST';
- } elsif ($r->path_info =~ /^\/\+tags\/([a-zA-Z0-9-]+)\/?$/) {
- $tag = $1;
- $event = "+tags/$tag";
- $abspath = 1;
-
$datesort = 'DESC NULLS LAST';
} else {
# Find the event
or return error($r, "Could not extract event");
$event = $1;
$abspath = 0;
- $tag = undef;
$datesort = 'ASC NULLS LAST';
}
);
my $where;
- if (defined($tag)) {
- my $tq = $dbh->quote($tag);
- $where = " AND id IN ( SELECT image FROM tags WHERE tag=$tq )";
- } elsif ($event eq '+all') {
+ if ($event eq '+all') {
$where = '';
} else {
$where = ' AND event=' . $dbh->quote($event);
my ($date, $name);
- if ($event eq '+all' || defined($tag)) {
+ if ($event eq '+all') {
$ref = $dbh->selectrow_hashref("SELECT EXTRACT(EPOCH FROM MAX(last_update)) AS last_update FROM last_picture_cache WHERE vhost=?",
undef, Sesse::pr0n::Common::get_server_name($r))
or return error($r, "Could not list events", 404, "File not found");
if ($settings{'fullscreen'}) {
$res->content_type("text/html; charset=utf-8");
- if (defined($tag)) {
- my $title = Sesse::pr0n::Templates::process_template($res, $io, "tag-title", { tag => $tag });
- Sesse::pr0n::Templates::print_template($r, $io, "fullscreen-header", { title => $title });
- } else {
- Sesse::pr0n::Templates::print_template($r, $io, "fullscreen-header", { title => "$name [$event]" });
- }
+ Sesse::pr0n::Templates::print_template($r, $io, "fullscreen-header", { title => "$name [$event]" });
my @files = ();
while (my $ref = $q->fetchrow_hashref()) {
infobox => $infobox
});
} else {
- if (defined($tag)) {
- my $title = Sesse::pr0n::Templates::process_template($r, $io, "tag-title", { tag => $tag });
- Sesse::pr0n::Common::header($r, $io, $title);
- } else {
- Sesse::pr0n::Common::header($r, $io, "$name [$event]");
- }
+ Sesse::pr0n::Common::header($r, $io, "$name [$event]");
if (defined($date)) {
Sesse::pr0n::Templates::print_template($r, $io, "date", { date => $date });
}
# return $rc;
# }
- if ($r->path_info =~ /^\/\+tags\/?/) {
- # Tag cloud
- my $q = $dbh->prepare('SELECT tag,COUNT(*) AS frequency FROM tags t JOIN images i ON t.image=i.id WHERE vhost=? GROUP BY tag ORDER BY COUNT(*) DESC LIMIT 75')
- or return dberror($r, "Couldn't list events");
- $q->execute(Sesse::pr0n::Common::get_server_name($r))
- or return dberror($r, "Couldn't get events");
-
- Sesse::pr0n::Common::header($r, $io, Sesse::pr0n::Templates::fetch_template($r, 'tag-listing'));
- Sesse::pr0n::Templates::print_template($r, $io, 'mainmenu-tags');
-
- my $cloud = HTML::TagCloud->new;
-
- while (my $ref = $q->fetchrow_hashref()) {
- my $tag = $ref->{'tag'};
- my $html = HTML::Entities::encode_entities($tag); # is this right?
- my $uri = Sesse::pr0n::Common::pretty_escape($tag); # and this?
-
- $cloud->add($html, "/+tags/$uri/", $ref->{'frequency'});
- }
-
- $io->print($cloud->html_and_css());
- Sesse::pr0n::Common::footer($r, $io);
-
- $q->finish();
- } else {
- # main listing
+ # main listing
# my $q = $dbh->prepare('SELECT t1.id,t1.date,t1.name FROM events t1 LEFT JOIN images t2 ON t1.id=t2.event WHERE t1.vhost=? GROUP BY t1.id,t1.date,t1.name ORDER BY COALESCE(MAX(t2.date),\'1970-01-01 00:00:00\'),t1.id') or
# dberror($r, "Couldn't list events");
- my $q = $dbh->prepare('SELECT event,date,name FROM events e JOIN last_picture_cache c USING (vhost,event) WHERE vhost=? ORDER BY last_picture DESC NULLS LAST')
- or return dberror($r, "Couldn't list events");
- $q->execute(Sesse::pr0n::Common::get_server_name($r))
- or return dberror($r, "Couldn't get events");
-
- Sesse::pr0n::Common::header($r, $io, Sesse::pr0n::Templates::fetch_template($r, 'event-listing'));
+ my $q = $dbh->prepare('SELECT event,date,name FROM events e JOIN last_picture_cache c USING (vhost,event) WHERE vhost=? ORDER BY last_picture DESC NULLS LAST')
+ or return dberror($r, "Couldn't list events");
+ $q->execute(Sesse::pr0n::Common::get_server_name($r))
+ or return dberror($r, "Couldn't get events");
+
+ Sesse::pr0n::Common::header($r, $io, Sesse::pr0n::Templates::fetch_template($r, 'event-listing'));
- # See if there are any tags related to this vhost
- my $ref = $dbh->selectrow_hashref('SELECT * FROM tags t JOIN images i ON t.image=i.id WHERE vhost=? LIMIT 1',
- undef, Sesse::pr0n::Common::get_server_name($r));
- if (defined($ref)) {
- Sesse::pr0n::Templates::print_template($r, $io, 'mainmenu-events');
- }
+ my $allcaption = Sesse::pr0n::Templates::fetch_template($r, 'all-event-title');
+ $io->print(" <ul>\n");
+ $io->print(" <li><a href=\"+all/\">$allcaption</a></li>\n");
+ $io->print(" </ul>\n");
+
+ $io->print(" <ul>\n");
- my $allcaption = Sesse::pr0n::Templates::fetch_template($r, 'all-event-title');
- $io->print(" <ul>\n");
- $io->print(" <li><a href=\"+all/\">$allcaption</a></li>\n");
- $io->print(" </ul>\n");
+ while (my $ref = $q->fetchrow_hashref()) {
+ my $id = $ref->{'event'};
+ my $date = HTML::Entities::encode_entities($ref->{'date'});
+ my $name = HTML::Entities::encode_entities($ref->{'name'});
- $io->print(" <ul>\n");
-
- while (my $ref = $q->fetchrow_hashref()) {
- my $id = $ref->{'event'};
- my $date = HTML::Entities::encode_entities($ref->{'date'});
- my $name = HTML::Entities::encode_entities($ref->{'name'});
-
- $io->print(" <li><a href=\"$id/\">$name</a> ($date)</li>\n");
- }
+ $io->print(" <li><a href=\"$id/\">$name</a> ($date)</li>\n");
+ }
- $io->print(" </ul>\n");
- Sesse::pr0n::Common::footer($r, $io);
+ $io->print(" </ul>\n");
+ Sesse::pr0n::Common::footer($r, $io);
- $q->finish();
- }
+ $q->finish();
$io->setpos(0);
$res->body($io);
my $r = shift;
my $uri = $r->path_info;
- if ($uri eq '/' || $uri =~ /^\/\+tags\/?$/) {
+ if ($uri eq '/') {
return Sesse::pr0n::Listing::handler($r);
} elsif ($uri eq '/robots.txt' ||
$uri eq '/pr0n.css' ||
} elsif ($uri =~ m#^/newevent$#) {
return Sesse::pr0n::NewEvent::handler($r);
} elsif ($uri =~ /^\/[a-zA-Z0-9-]+\/?$/ ||
- $uri =~ /^\/\+all\/?$/ ||
- $uri =~ /^\/\+tags\/[a-zA-Z0-9-]+\/?$/) {
+ $uri =~ /^\/\+all\/?$/) {
return Sesse::pr0n::Index::handler($r);
} elsif ($uri =~ m#^/[a-zA-Z0-9-]+/(\d+x\d+(\@\d+(\.\d+)?)?/|original/)((?:no)?box/)?[a-zA-Z0-9._()-]+$#) {
return Sesse::pr0n::Image::handler($r);
CREATE INDEX exif_info_key ON exif_info ( key );
CLUSTER exif_info_key ON exif_info;
-CREATE TABLE tags (
- image integer NOT NULL REFERENCES images (id) ON DELETE CASCADE,
- tag varchar NOT NULL,
-
- PRIMARY KEY ( image, tag )
-);
-CREATE INDEX tags_tag ON tags ( tag );
-
GRANT INSERT ON TABLE deleted_images TO pr0n;
GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE events TO pr0n;
GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE fake_files TO pr0n;
GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE shadow_files TO pr0n;
GRANT SELECT,UPDATE ON TABLE users TO pr0n;
GRANT SELECT,INSERT,DELETE ON TABLE exif_info TO pr0n;
-GRANT SELECT,INSERT,DELETE ON TABLE tags TO pr0n;
GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE last_picture_cache TO pr0n;
+++ /dev/null
-Alle bilder som er tagget '%TAG%'
+++ /dev/null
-<p class="mainmenu">Events | <a href="/+tags/">Tags</a></p>
+++ /dev/null
-<p class="mainmenu"><a href="/">Events</a> | Tags</p>
+++ /dev/null
-All images tagged '%TAG%'
+++ /dev/null
-All images tagged '%TAG%'
+++ /dev/null
-Alle bilder som er tagget '%TAG%'
+++ /dev/null
-Alle bilder som er tagget '%TAG%'
+++ /dev/null
-Alle bilder som er tagget '%TAG%'