From: Steinar H. Gunderson Date: Fri, 22 Jun 2007 21:11:45 +0000 (+0200) Subject: Try to use XML::TemplateSAX. Not too happy with it in this case, though, X-Git-Url: https://git.sesse.net/?p=pr0n;a=commitdiff_plain;h=394c077f3c72f8e87afd8dbf8a26c9781b536440 Try to use XML::TemplateSAX. Not too happy with it in this case, though, so I'll revert in the next commit. --- diff --git a/perl/Sesse/pr0n/Listing.pm b/perl/Sesse/pr0n/Listing.pm index 02ac273..0d63c6d 100644 --- a/perl/Sesse/pr0n/Listing.pm +++ b/perl/Sesse/pr0n/Listing.pm @@ -16,30 +16,27 @@ sub handler { } } -# 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') or dberror($r, "Couldn't list events"); $q->execute($r->get_server_name) or dberror($r, "Couldn't get events"); - $r->content_type('text/html; charset=utf-8'); - - Sesse::pr0n::Common::header($r, Sesse::pr0n::Templates::fetch_template($r, 'event-listing')); - $r->print(" \n"); - Sesse::pr0n::Common::footer($r); - $q->finish(); + + Sesse::pr0n::Templates::output_page($r, 'listing.xml', { 'ul' => \@events }); return Apache2::Const::OK; } diff --git a/perl/Sesse/pr0n/Templates.pm b/perl/Sesse/pr0n/Templates.pm index 8ff1e03..8aa0134 100644 --- a/perl/Sesse/pr0n/Templates.pm +++ b/perl/Sesse/pr0n/Templates.pm @@ -3,6 +3,11 @@ use strict; use warnings; use Sesse::pr0n::Common qw(error dberror); +use XML::SAX::Expat; +use XML::SAX::Writer; +use XML::TemplateSAX::Buffer; +use XML::TemplateSAX::Cleaner; +use XML::TemplateSAX::Handler; BEGIN { use Exporter (); @@ -84,5 +89,36 @@ sub print_template { $r->print($text); } +sub output_page { + my ($r, $page, $params) = @_; + + $r->content_type('text/html; charset=utf-8'); + $params->{'version'} = $Sesse::pr0n::Common::VERSION; + + # build up the XML chain + my $consumer = ModPerlConsumer->new($r); + my $writer = XML::SAX::Writer->new(Output => $consumer); + my $cleaner = XML::TemplateSAX::Cleaner->new(Handler => $writer); + my $filter = XML::TemplateSAX::Handler->new(Handler => $cleaner, Content => $params); + my $parser = XML::SAX::Expat->new(Handler => $filter); + + # kick off the parsing + $parser->parse_string(fetch_template($r, $page)); +} + +# XML consumer for Apache2::Request +package ModPerlConsumer; + +our @ISA = qw( XML::SAX::Writer::ConsumerInterface ); +sub new { + my ($base, $r) = @_; + return $base->SUPER::new($r); +} + +sub output { + my ($self, $text) = @_; + $$self->print($text); +} + 1; diff --git a/templates/default/listing.xml b/templates/default/listing.xml new file mode 100644 index 0000000..6ad6d76 --- /dev/null +++ b/templates/default/listing.xml @@ -0,0 +1,25 @@ + + + + + Event listing + + + + +

Event listing

+ + + +
+
+ +