aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r--perllib/FixMyStreet/App.pm2
-rw-r--r--perllib/FixMyStreet/App/Controller/JSON.pm82
-rw-r--r--perllib/FixMyStreet/App/Controller/Reports.pm5
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/Problem.pm14
4 files changed, 64 insertions, 39 deletions
diff --git a/perllib/FixMyStreet/App.pm b/perllib/FixMyStreet/App.pm
index 09a8609fe..4aa9cc75b 100644
--- a/perllib/FixMyStreet/App.pm
+++ b/perllib/FixMyStreet/App.pm
@@ -177,7 +177,7 @@ sub setup_request {
$c->log->debug( sprintf "Set lang to '%s' and cobrand to '%s'",
$set_lang, $cobrand->moniker );
- Problems::set_site_restriction_with_cobrand_object($cobrand);
+ $c->model('DB::Problem')->set_restriction( $cobrand->site_restriction() );
Memcached::set_namespace( FixMyStreet->config('BCI_DB_NAME') . ":" );
diff --git a/perllib/FixMyStreet/App/Controller/JSON.pm b/perllib/FixMyStreet/App/Controller/JSON.pm
index d3688f19a..cbd483f16 100644
--- a/perllib/FixMyStreet/App/Controller/JSON.pm
+++ b/perllib/FixMyStreet/App/Controller/JSON.pm
@@ -7,6 +7,7 @@ BEGIN { extends 'Catalyst::Controller'; }
use JSON;
use DateTime;
use DateTime::Format::ISO8601;
+use List::MoreUtils 'uniq';
=head1 NAME
@@ -69,42 +70,53 @@ sub problems : Local {
}
# query the database
- $c->stash->{response} =
- $type eq 'new_problems'
- ? Problems::created_in_interval( $start_date, $end_date )
- : Problems::fixed_in_interval( $start_date, $end_date );
-}
+ my ( $state, $date_col );
+ if ( $type eq 'new_problems' ) {
+ $state = 'confirmed';
+ $date_col = 'created';
+ } elsif ( $type eq 'fixed_problems' ) {
+ $state = 'fixed';
+ $date_col = 'lastupdate';
+ }
+
+ my $one_day = DateTime::Duration->new( days => 1 );
+ my @problems = $c->model('DB::Problem')->site_restricted->search( {
+ $date_col => {
+ '>=' => $start_dt,
+ '<=' => $end_dt + $one_day,
+ },
+ state => $state,
+ }, {
+ columns => [
+ 'id', 'title', 'council', 'category',
+ 'detail', 'name', 'anonymous', 'confirmed',
+ 'whensent', 'service',
+ ]
+ } );
+
+ my @councils;
+ foreach my $problem (@problems) {
+ $problem->name( '' ) if $problem->anonymous == 1;
+ $problem->service( 'Web interface' ) if $problem->service eq '';
+ if ($problem->council) {
+ (my $council = $problem->council) =~ s/\|.*//g;
+ my @council_ids = split /,/, $council;
+ push(@councils, @council_ids);
+ $problem->council( \@council_ids );
+ }
+ }
+ @councils = uniq @councils;
+ my $areas_info = mySociety::MaPit::call('areas', \@councils);
+ foreach my $problem (@problems) {
+ if ($problem->council) {
+ my @council_names = map { $areas_info->{$_}->{name} } @{$problem->council} ;
+ $problem->council( join(' and ', @council_names) );
+ }
+ }
-# If we convert this code to be fully DBIC based then the following snippet is a
-# good start. The roadblock to doing it fully is the 'site_restriction' in the
-# SQL which is currently provided as SQL, rather than something that could be
-# easily added to the DBIC query. The hardest cobrand to change would be the
-# cities - so perhaps do it after we know wether that needs to be kept or not.
-#
-# my $state =
-# $type eq 'new_problems' ? 'confirmed'
-# : $type eq 'fixed_problems' ? 'fixed_problems'
-# : die;
-#
-# my $one_day = DateTime::Duration->new( days => 1 );
-#
-# my $problems = $c->model('DB::Problem')->search(
-# {
-# created => {
-# '>=' => $start_dt,
-# '<=' => $end_dt + $one_day,
-# },
-# state => $state,
-# # ------ add is site_restriction here -------
-# },
-# {
-# columns => [
-# 'id', 'title', 'council', 'category',
-# 'detail', 'name', 'anonymous', 'confirmed',
-# 'whensent', 'service',
-# ]
-# }
-# );
+ @problems = map { { $_->get_columns } } @problems;
+ $c->stash->{response} = \@problems;
+}
sub end : Private {
my ( $self, $c ) = @_;
diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm
index 993cd752e..7cb9ad9fb 100644
--- a/perllib/FixMyStreet/App/Controller/Reports.pm
+++ b/perllib/FixMyStreet/App/Controller/Reports.pm
@@ -246,8 +246,7 @@ sub load_problems : Private {
my ( $self, $c ) = @_;
my $where = {
- state => [ 'confirmed', 'fixed' ],
- %{ Problems::site_restriction() }
+ state => [ 'confirmed', 'fixed' ]
};
if ($c->stash->{ward}) {
$where->{areas} = { 'like', '%' . $c->stash->{ward}->{id} . '%' }; # FIXME Check this is secure
@@ -255,7 +254,7 @@ sub load_problems : Private {
$where->{areas} = { 'like', '%' . $c->stash->{council}->{id} . '%' };
}
my $current_timestamp = Problems::current_timestamp();
- my $problems = $c->model('DB::Problem')->search(
+ my $problems = $c->model('DB::Problem')->site_restricted->search(
$where,
{
columns => [
diff --git a/perllib/FixMyStreet/DB/ResultSet/Problem.pm b/perllib/FixMyStreet/DB/ResultSet/Problem.pm
index 835ab1b45..b029caf3b 100644
--- a/perllib/FixMyStreet/DB/ResultSet/Problem.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/Problem.pm
@@ -40,4 +40,18 @@ sub summary_count {
);
}
+my $site_restriction;
+my $site_key;
+
+sub set_restriction {
+ my ( $rs, $sql, $key, $restriction ) = @_;
+ $site_key = $key;
+ $site_restriction = $restriction;
+}
+
+sub site_restricted {
+ my ( $rs ) = @_;
+ return $rs->search( $site_restriction );
+}
+
1;