aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2011-08-04 17:20:12 +0100
committerMatthew Somerville <matthew@mysociety.org>2011-08-04 17:20:12 +0100
commit2c70a5164318a7b186b6cb827cc0b68c39175e1a (patch)
treea111c273c072790eccb7ee1bdb600ab56ebd512b /perllib/FixMyStreet/App/Controller
parent3b27ff9e84fe57cbf5bc4bf90b08899b62747220 (diff)
Get Open311 RSS working, whether it's given a ResultSet or a lower level statement handle.
Diffstat (limited to 'perllib/FixMyStreet/App/Controller')
-rw-r--r--perllib/FixMyStreet/App/Controller/Open311.pm30
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Rss.pm25
2 files changed, 27 insertions, 28 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Open311.pm b/perllib/FixMyStreet/App/Controller/Open311.pm
index 94ef018e9..459ce12c9 100644
--- a/perllib/FixMyStreet/App/Controller/Open311.pm
+++ b/perllib/FixMyStreet/App/Controller/Open311.pm
@@ -363,44 +363,28 @@ sub get_requests : Private {
}
if ('rss' eq $c->stash->{format}) {
-# FIXME write new implementatin
-# my $cobrand = Page::get_cobrand($c);
-# my $alert_type = 'open311_requests_rss';
-# my $xsl = $c->cobrand->feed_xsl;
-# my $qs = '';
-# my %title_params;
-# my $out =
-# FixMyStreet::Alert::generate_rss('new_problems', $xsl,
-# $qs, \@args,
-# \%title_params, $cobrand,
-# $c, $criteria, $max_requests);
-# print $c->header( -type => 'application/xml; charset=utf-8' );
-# print $out;
- $c->stash->{search_criteria} = $criteria;
- $c->stash->{max_requests} = $max_requests;
- $c->stash->{query_func} = '/open311/rss_query';
- $c->forward( '/rss/output' );
+ $c->stash->{type} = 'new_problems';
+ $c->forward( '/rss/lookup_type' );
+ $c->forward( 'rss_query', [ $criteria, $max_requests ] );
+ $c->forward( '/rss/generate' );
} else {
$c->forward( 'output_requests', [ $criteria, $max_requests ] );
}
}
-# Based on Controller::Rss::query_main
sub rss_query : Private {
- my ( $self, $c ) = @_;
-
- my $criteria = $c->stash->{search_criteria};
- my $limit = $c->stash->{max_requests};
+ my ( $self, $c, $criteria, $limit ) = @_;
$limit = $c->config->{RSS_LIMIT}
unless $limit && $limit <= $c->config->{RSS_LIMIT};
my $attr = {
+ result_class => 'DBIx::Class::ResultClass::HashRefInflator',
order_by => { -desc => 'confirmed' },
rows => $limit
};
my $problems = $c->cobrand->problems->search( $criteria, $attr );
- $c->stash->{query_main} = $problems;
+ $c->stash->{problems} = $problems;
}
# Example
diff --git a/perllib/FixMyStreet/App/Controller/Rss.pm b/perllib/FixMyStreet/App/Controller/Rss.pm
index 640c0bb47..45a16a9dd 100755
--- a/perllib/FixMyStreet/App/Controller/Rss.pm
+++ b/perllib/FixMyStreet/App/Controller/Rss.pm
@@ -151,13 +151,21 @@ sub local_problems_ll : Private {
sub output : Private {
my ( $self, $c ) = @_;
+ $c->forward( 'lookup_type' );
+ $c->forward( 'query_main' );
+ $c->forward( 'generate' );
+}
+
+sub lookup_type : Private {
+ my ( $self, $c ) = @_;
$c->stash->{alert_type} = $c->model('DB::AlertType')->find( { ref => $c->stash->{type} } );
$c->detach( '/page_error_404_not_found', [ _('Unknown alert type') ] )
unless $c->stash->{alert_type};
+}
- my $query_func = $c->stash->{query_func} || 'query_main';
- $c->forward( $query_func );
+sub generate : Private {
+ my ( $self, $c ) = @_;
# Do our own encoding
$c->stash->{rss} = new XML::RSS(
@@ -171,8 +179,15 @@ sub output : Private {
uri => 'http://www.georss.org/georss'
);
- while (my $row = $c->stash->{query_main}->fetchrow_hashref) {
- $c->forward( 'add_row', [ $row ] );
+ my $problems = $c->stash->{problems};
+ if ( $problems->can('fetchrow_hashref') ) {
+ while ( my $row = $problems->fetchrow_hashref ) {
+ $c->forward( 'add_row', [ $row ] );
+ }
+ } else {
+ while ( my $row = $problems->next ) {
+ $c->forward( 'add_row', [ $row ] );
+ }
}
$c->forward( 'add_parameters' );
@@ -211,7 +226,7 @@ sub query_main : Private {
} else {
$q->execute();
}
- $c->stash->{query_main} = $q;
+ $c->stash->{problems} = $q;
}
sub add_row : Private {