]> git.sesse.net Git - pr0n/blob - perl/Sesse/pr0n/Listing.pm
Try to use XML::TemplateSAX. Not too happy with it in this case, though,
[pr0n] / perl / Sesse / pr0n / Listing.pm
1 package Sesse::pr0n::Listing;
2 use strict;
3 use warnings;
4
5 use Sesse::pr0n::Common qw(error dberror);
6
7 sub handler {
8         my $r = shift;
9         my $dbh = Sesse::pr0n::Common::get_dbh();
10
11         # Internal? (Ugly?)
12         if ($r->get_server_name =~ /internal/ || $r->get_server_name =~ /skoyen\.bilder\.knatten\.com/) {
13                 my $user = Sesse::pr0n::Common::check_access($r);
14                 if (!defined($user)) {
15                         return Apache2::Const::OK;
16                 }
17         }
18
19
20         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')
21                 or dberror($r, "Couldn't list events");
22         $q->execute($r->get_server_name)
23                 or dberror($r, "Couldn't get events");
24
25         my @events = ();
26         while (my $ref = $q->fetchrow_hashref()) {
27                 my $id = $ref->{'event'};
28                 my $date = Encode::decode_utf8($ref->{'date'});
29                 my $name = Encode::decode_utf8($ref->{'name'});
30         
31                 push @events, {
32                         'a' => $name,
33                         'a/href' => "$id/",
34                         'date' => $date
35                 };
36         }
37         $q->finish();
38
39         Sesse::pr0n::Templates::output_page($r, 'listing.xml', { 'ul' => \@events });
40         return Apache2::Const::OK;
41 }
42
43 1;
44
45