aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2015-01-22 15:57:45 +0000
committerMatthew Somerville <matthew-github@dracos.co.uk>2015-02-13 11:44:07 +0000
commitda63f72c27e16d491f9103b9a8cbdb2fd96d2b59 (patch)
treecfd6df35b4c41028943d8a1e669345b81be41913 /perllib/FixMyStreet/App/Controller
parent04117b8be30b5d82d50cdc047ac4e7c19864f8ed (diff)
Make sure all co-ordinates are stringified.
This includes MapIt postcode lookups, geocoding, query parameters, tile clicks. Stringifying truncates them to six decimal places, which means we no longer need any "short" versions anywhere, and the JSON response will always uses a decimal point regardless of locale.
Diffstat (limited to 'perllib/FixMyStreet/App/Controller')
-rw-r--r--perllib/FixMyStreet/App/Controller/Alert.pm5
-rw-r--r--perllib/FixMyStreet/App/Controller/Around.pm20
-rw-r--r--perllib/FixMyStreet/App/Controller/Council.pm7
-rw-r--r--perllib/FixMyStreet/App/Controller/Location.pm18
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Questionnaire.pm4
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm2
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm8
7 files changed, 23 insertions, 41 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Alert.pm b/perllib/FixMyStreet/App/Controller/Alert.pm
index e821b7467..1aa70b497 100644
--- a/perllib/FixMyStreet/App/Controller/Alert.pm
+++ b/perllib/FixMyStreet/App/Controller/Alert.pm
@@ -441,11 +441,6 @@ sub determine_location : Private {
$c->go('index');
}
- # truncate the lat,lon for nicer urls
- ( $c->stash->{latitude}, $c->stash->{longitude} ) =
- map { Utils::truncate_coordinate($_) }
- ( $c->stash->{latitude}, $c->stash->{longitude} );
-
my $dist =
mySociety::Gaze::get_radius_containing_population( $c->stash->{latitude},
$c->stash->{longitude}, 200000 );
diff --git a/perllib/FixMyStreet/App/Controller/Around.pm b/perllib/FixMyStreet/App/Controller/Around.pm
index 0e42b8a17..413af814f 100644
--- a/perllib/FixMyStreet/App/Controller/Around.pm
+++ b/perllib/FixMyStreet/App/Controller/Around.pm
@@ -40,8 +40,10 @@ sub around_index : Path : Args(0) {
# Try to create a location for whatever we have
my $ret = $c->forward('/location/determine_location_from_coords')
|| $c->forward('/location/determine_location_from_pc');
- return unless $ret;
- return $c->res->redirect('/') if $ret == -1 && !$partial_report;
+ unless ($ret) {
+ return $c->res->redirect('/') unless $c->req->param('pc') || $partial_report;
+ return;
+ }
# Check to see if the spot is covered by a area - if not show an error.
return unless $c->cobrand->moniker eq 'fixmybarangay' || $c->forward('check_location_is_acceptable');
@@ -158,12 +160,6 @@ sub display_location : Private {
my $latitude = $c->stash->{latitude};
my $longitude = $c->stash->{longitude};
- # truncate the lat,lon for nicer rss urls, and strings for outputting
- my $short_latitude = Utils::truncate_coordinate($latitude);
- my $short_longitude = Utils::truncate_coordinate($longitude);
- $c->stash->{short_latitude} = $short_latitude;
- $c->stash->{short_longitude} = $short_longitude;
-
# Deal with pin hiding/age
my $all_pins = $c->req->param('all_pins') ? 1 : undef;
$c->stash->{all_pins} = $all_pins;
@@ -171,7 +167,7 @@ sub display_location : Private {
# get the map features
my ( $on_map_all, $on_map, $around_map, $distance ) =
- FixMyStreet::Map::map_features( $c, $short_latitude, $short_longitude,
+ FixMyStreet::Map::map_features( $c, $latitude, $longitude,
$interval );
# copy the found reports to the stash
@@ -199,8 +195,8 @@ sub display_location : Private {
$c->stash->{page} = 'around'; # So the map knows to make clickable pins, update on pan
FixMyStreet::Map::display_map(
$c,
- latitude => $short_latitude,
- longitude => $short_longitude,
+ latitude => $latitude,
+ longitude => $longitude,
clickable => 1,
pins => \@pins,
area => $c->cobrand->areas_on_around,
@@ -317,7 +313,7 @@ sub _geocode : Private {
if ( ref($suggestions) eq 'ARRAY' ) {
foreach (@$suggestions) {
push @addresses, decode_utf8($_->{address});
- push @locations, { address => decode_utf8($_->{address}), lat => $_->{latitude}, long => $_->{longitude} };
+ push @locations, { address => decode_utf8($_->{address}), lat => $_->{latitude}, long => $_->{longitude} };
}
$response = { suggestions => \@addresses, locations => \@locations };
} else {
diff --git a/perllib/FixMyStreet/App/Controller/Council.pm b/perllib/FixMyStreet/App/Controller/Council.pm
index 8a174c254..a5915aa46 100644
--- a/perllib/FixMyStreet/App/Controller/Council.pm
+++ b/perllib/FixMyStreet/App/Controller/Council.pm
@@ -49,9 +49,6 @@ sub load_and_check_areas : Private {
$area_types = $c->cobrand->area_types;
}
- my $short_latitude = Utils::truncate_coordinate($latitude);
- my $short_longitude = Utils::truncate_coordinate($longitude);
-
my $all_areas;
my %params;
@@ -62,7 +59,7 @@ sub load_and_check_areas : Private {
my %area_types = map { $_ => 1 } @$area_types;
$all_areas =
mySociety::MaPit::call( 'point',
- "4326/$short_longitude,$short_latitude", %params );
+ "4326/$longitude,$latitude", %params );
$c->stash->{all_areas_mapit} = $all_areas;
$all_areas = {
map { $_ => $all_areas->{$_} }
@@ -72,7 +69,7 @@ sub load_and_check_areas : Private {
} else {
$all_areas =
mySociety::MaPit::call( 'point',
- "4326/$short_longitude,$short_latitude", %params,
+ "4326/$longitude,$latitude", %params,
type => $area_types );
}
if ($all_areas->{error}) {
diff --git a/perllib/FixMyStreet/App/Controller/Location.pm b/perllib/FixMyStreet/App/Controller/Location.pm
index 8a68b2b3d..5e5349a6c 100644
--- a/perllib/FixMyStreet/App/Controller/Location.pm
+++ b/perllib/FixMyStreet/App/Controller/Location.pm
@@ -6,6 +6,7 @@ BEGIN {extends 'Catalyst::Controller'; }
use Encode;
use FixMyStreet::Geocode;
+use Utils;
=head1 NAME
@@ -32,8 +33,8 @@ sub determine_location_from_coords : Private {
my $longitude = $c->req->param('longitude') || $c->req->param('lon');
if ( defined $latitude && defined $longitude ) {
- $c->stash->{latitude} = $latitude;
- $c->stash->{longitude} = $longitude;
+ ($c->stash->{latitude}, $c->stash->{longitude}) =
+ map { Utils::truncate_coordinate($_) } ($latitude, $longitude);
# Also save the pc if there is one
if ( my $pc = $c->req->param('pc') ) {
@@ -50,7 +51,7 @@ sub determine_location_from_coords : Private {
User has searched for a location - try to find it for them.
-Return -1 if nothing provided.
+Return false if nothing provided.
If one match is found returns true and lat/lng is set.
@@ -64,18 +65,19 @@ sub determine_location_from_pc : Private {
my ( $self, $c, $pc ) = @_;
# check for something to search
- $pc ||= $c->req->param('pc') || return -1;
+ $pc ||= $c->req->param('pc') || return;
$c->stash->{pc} = $pc; # for template
if ( $pc =~ /^(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)$/ ) {
- $c->stash->{latitude} = $1;
- $c->stash->{longitude} = $2;
+ ($c->stash->{latitude}, $c->stash->{longitude}) =
+ map { Utils::truncate_coordinate($_) } ($1, $2);
return $c->forward( 'check_location' );
}
if ( $c->cobrand->country eq 'GB' && $pc =~ /^([A-Z])([A-Z])([\d\s]{4,})$/i) {
if (my $convert = gridref_to_latlon( $1, $2, $3 )) {
- $c->stash->{latitude} = $convert->{latitude};
- $c->stash->{longitude} = $convert->{longitude};
+ ($c->stash->{latitude}, $c->stash->{longitude}) =
+ map { Utils::truncate_coordinate($_) }
+ ($convert->{latitude}, $convert->{longitude});
return $c->forward( 'check_location' );
}
}
diff --git a/perllib/FixMyStreet/App/Controller/Questionnaire.pm b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
index 46d6350d7..70edcabe3 100755
--- a/perllib/FixMyStreet/App/Controller/Questionnaire.pm
+++ b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
@@ -279,10 +279,6 @@ sub display : Private {
my $problem = $c->stash->{questionnaire}->problem;
- ( $c->stash->{short_latitude}, $c->stash->{short_longitude} ) =
- map { Utils::truncate_coordinate($_) }
- ( $problem->latitude, $problem->longitude );
-
$c->stash->{updates} = [ $c->model('DB::Comment')->search(
{ problem_id => $problem->id, state => 'confirmed' },
{ order_by => 'confirmed' }
diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm
index 88a49f6c9..e188a085d 100644
--- a/perllib/FixMyStreet/App/Controller/Report.pm
+++ b/perllib/FixMyStreet/App/Controller/Report.pm
@@ -159,7 +159,7 @@ sub format_problem_for_display : Private {
my $problem = $c->stash->{problem};
- ( $c->stash->{short_latitude}, $c->stash->{short_longitude} ) =
+ ( $c->stash->{latitude}, $c->stash->{longitude} ) =
map { Utils::truncate_coordinate($_) }
( $problem->latitude, $problem->longitude );
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index ed5be4e99..ebc5cc6a0 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -540,8 +540,8 @@ sub determine_location_from_tile_click : Private {
);
# store it on the stash
- $c->stash->{latitude} = $latitude;
- $c->stash->{longitude} = $longitude;
+ ($c->stash->{latitude}, $c->stash->{longitude}) =
+ map { Utils::truncate_coordinate($_) } ($latitude, $longitude);
# set a flag so that the form is not considered submitted. This will prevent
# errors showing on the fields.
@@ -1090,10 +1090,6 @@ sub generate_map : Private {
my $latitude = $c->stash->{latitude};
my $longitude = $c->stash->{longitude};
- ( $c->stash->{short_latitude}, $c->stash->{short_longitude} ) =
- map { Utils::truncate_coordinate($_) }
- ( $c->stash->{latitude}, $c->stash->{longitude} );
-
# Don't do anything if the user skipped the map
if ( $c->stash->{report}->used_map ) {
$c->stash->{page} = 'new';