+
+ # Fix common error: pr0n.sesse.net/+foo -> pr0n.sesse.net/+foo/
+ if ($r->uri !~ /\/$/) {
+ $r->headers_out->{'location'} = $r->uri . "/";
+ return Apache2::Const::REDIRECT;
+ }
+
+ # find the last modification
+ my $ref = $dbh->selectrow_hashref('SELECT EXTRACT(EPOCH FROM last_update) AS last_update FROM last_picture_cache WHERE vhost=? ORDER BY last_update DESC LIMIT 1',
+ undef, $r->get_server_name)
+ or error($r, "Could not find any events", 404, "File not found");
+ $r->set_last_modified($ref->{'last_update'});
+ $r->content_type('text/html; charset=utf-8');
+
+ # If the client can use cache, do so
+ if ((my $rc = $r->meets_conditions) != Apache2::Const::OK) {
+ return $rc;
+ }
+
+ if ($r->uri =~ /^\/\+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 dberror($r, "Couldn't list events");
+ $q->execute($r->get_server_name)
+ or dberror($r, "Couldn't get events");
+
+ Sesse::pr0n::Common::header($r, Sesse::pr0n::Templates::fetch_template($r, 'tag-listing'));
+ Sesse::pr0n::Templates::print_template($r, 'mainmenu-tags');