aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2015-09-01 10:07:30 +0100
committerMatthew Somerville <matthew@mysociety.org>2015-09-03 16:14:18 +0100
commit8544bafc365406ac9a403e80fe07cc361a7d1d5b (patch)
treeda90a4a20c9f3d653335b3c8369b900211b47dd0
parent8ef9368785c1950ae0aea8c13584288d395662d6 (diff)
Use base URL in cobrand alert for no-body report.
If a cobrand has a body restriction, then a report without any body won't be shown on it, so we need to make sure links to the report (in email alerts and RSS) are to the base URL, not the cobrand.
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Rss.pm6
-rw-r--r--perllib/FixMyStreet/Cobrand/Default.pm3
-rw-r--r--perllib/FixMyStreet/Cobrand/UKCouncils.pm11
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/AlertType.pm12
-rw-r--r--t/app/controller/rss.t7
5 files changed, 19 insertions, 20 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Rss.pm b/perllib/FixMyStreet/App/Controller/Rss.pm
index b58b79937..b817fe326 100755
--- a/perllib/FixMyStreet/App/Controller/Rss.pm
+++ b/perllib/FixMyStreet/App/Controller/Rss.pm
@@ -264,11 +264,7 @@ sub add_row : Private {
(my $link = $alert_type->item_link) =~ s/{{(.*?)}}/$row->{$1}/g;
(my $desc = _($alert_type->item_description)) =~ s/{{(.*?)}}/$row->{$1}/g;
- my $hashref_restriction = $c->cobrand->body_restriction;
- my $base_url = $c->cobrand->base_url;
- if ( $hashref_restriction && $row->{bodies_str} && $row->{bodies_str} ne $hashref_restriction ) {
- $base_url = $c->config->{BASE_URL};
- }
+ my $base_url = $c->cobrand->base_url_for_report($row);
my $url = $base_url . $link;
my %item = (
diff --git a/perllib/FixMyStreet/Cobrand/Default.pm b/perllib/FixMyStreet/Cobrand/Default.pm
index 8cd392073..c347d5750 100644
--- a/perllib/FixMyStreet/Cobrand/Default.pm
+++ b/perllib/FixMyStreet/Cobrand/Default.pm
@@ -108,7 +108,8 @@ sub base_url { FixMyStreet->config('BASE_URL') }
=head2 base_url_for_report
Return the base url for a report (might be different in a two-tier county, but
-most of the time will be same as base_url).
+most of the time will be same as base_url). Report may be an object, or a
+hashref.
=cut
diff --git a/perllib/FixMyStreet/Cobrand/UKCouncils.pm b/perllib/FixMyStreet/Cobrand/UKCouncils.pm
index 2c231bc39..074da0915 100644
--- a/perllib/FixMyStreet/Cobrand/UKCouncils.pm
+++ b/perllib/FixMyStreet/Cobrand/UKCouncils.pm
@@ -109,8 +109,15 @@ sub recent_photos {
# Returns true if the cobrand owns the problem.
sub owns_problem {
my ($self, $report) = @_;
- my $bodies = $report->bodies;
- my %areas = map { %{$_->areas} } values %$bodies;
+ my @bodies;
+ if (ref $report eq 'HASH') {
+ return unless $report->{bodies_str};
+ @bodies = split /,/, $report->{bodies_str};
+ @bodies = FixMyStreet::App->model('DB::Body')->search({ id => \@bodies })->all;
+ } else { # Object
+ @bodies = values %{$report->bodies};
+ }
+ my %areas = map { %{$_->areas} } @bodies;
return $areas{$self->council_id} ? 1 : undef;
}
diff --git a/perllib/FixMyStreet/DB/ResultSet/AlertType.pm b/perllib/FixMyStreet/DB/ResultSet/AlertType.pm
index e59011ba9..25c727e25 100644
--- a/perllib/FixMyStreet/DB/ResultSet/AlertType.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/AlertType.pm
@@ -88,11 +88,7 @@ sub email_alerts ($) {
$data{state_message} = _("This report is currently marked as open.");
}
- my $hashref_restriction = $cobrand->body_restriction;
- my $url = $cobrand->base_url( $row->{alert_cobrand_data} );
- if ( $hashref_restriction && $row->{bodies_str} ne $hashref_restriction ) {
- $url = mySociety::Config::get('BASE_URL');
- }
+ my $url = $cobrand->base_url_for_report($row);
# this is currently only for new_updates
if ($row->{item_text}) {
if ( $cobrand->moniker ne 'zurich' && $row->{alert_user_id} == $row->{user_id} ) {
@@ -171,7 +167,6 @@ sub email_alerts ($) {
my $longitude = $alert->parameter;
my $latitude = $alert->parameter2;
- my $hashref_restriction = $cobrand->body_restriction;
my $d = mySociety::Gaze::get_radius_containing_population($latitude, $longitude, 200000);
# Convert integer to GB locale string (with a ".")
$d = mySociety::Locale::in_gb_locale {
@@ -195,10 +190,7 @@ sub email_alerts ($) {
alert_id => $alert->id,
parameter => $row->{id},
} );
- my $url = $cobrand->base_url( $alert->cobrand_data );
- if ( $hashref_restriction && $row->{bodies_str} ne $hashref_restriction ) {
- $url = mySociety::Config::get('BASE_URL');
- }
+ my $url = $cobrand->base_url_for_report($row);
$data{data} .= $url . "/report/" . $row->{id} . " - $row->{title}\n\n";
if ( exists $row->{geocode} && $row->{geocode} ) {
my $nearest_st = _get_address_from_gecode( $row->{geocode} );
diff --git a/t/app/controller/rss.t b/t/app/controller/rss.t
index ae1c0d193..db653c094 100644
--- a/t/app/controller/rss.t
+++ b/t/app/controller/rss.t
@@ -127,11 +127,14 @@ $mech->content_contains( '18 North Bridge, Edinburgh' );
$report->delete();
+my $council = $mech->create_body_ok(2333, 'Hart Council');
+my $county = $mech->create_body_ok(2227, 'Hampshire Council');
+
my $now = DateTime->now();
my $report_to_council = FixMyStreet::App->model('DB::Problem')->find_or_create(
{
postcode => 'GU51 4AE',
- bodies_str => '2333',
+ bodies_str => $council->id,
areas => ',2333,2227,',
category => 'Other',
title => 'council report',
@@ -155,7 +158,7 @@ my $report_to_council = FixMyStreet::App->model('DB::Problem')->find_or_create(
my $report_to_county_council = FixMyStreet::App->model('DB::Problem')->find_or_create(
{
postcode => 'GU51 4AE',
- bodies_str => '2227',
+ bodies_str => $county->id,
areas => ',2333,2227,',
category => 'Other',
title => 'county report',