aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2011-06-17 23:09:05 +0100
committerMatthew Somerville <matthew@mysociety.org>2011-06-17 23:09:05 +0100
commit349b9f813f07da61ca117f49d1a3746979dffac8 (patch)
tree9661963edc9187063a97f8d4930c71bb17698e24 /perllib/FixMyStreet/App/Controller
parent5153ba514d7f4d8889ad55e8b1b7b18da63644d2 (diff)
Centralise UK location check to catch edge cases.
Diffstat (limited to 'perllib/FixMyStreet/App/Controller')
-rw-r--r--perllib/FixMyStreet/App/Controller/Around.pm14
-rw-r--r--perllib/FixMyStreet/App/Controller/Location.pm35
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Questionnaire.pm2
-rw-r--r--perllib/FixMyStreet/App/Controller/Reports.pm3
4 files changed, 30 insertions, 24 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Around.pm b/perllib/FixMyStreet/App/Controller/Around.pm
index 0c26220e0..a49d796fc 100644
--- a/perllib/FixMyStreet/App/Controller/Around.pm
+++ b/perllib/FixMyStreet/App/Controller/Around.pm
@@ -217,20 +217,6 @@ and that they are in UK (if we are in UK).
sub check_location_is_acceptable : Private {
my ( $self, $c ) = @_;
- # These should be set now
- my $lat = $c->stash->{latitude};
- my $lon = $c->stash->{longitude};
-
- # If in UK and we have a lat,lon coocdinate check it is in UK
- if ( $lat && $c->cobrand->country eq 'GB' ) {
- eval { Utils::convert_latlon_to_en( $lat, $lon ); };
- if ($@) {
- $c->stash->{location_error} =
- _( "We had a problem with the supplied co-ordinates - outside the UK?" );
- return;
- }
- }
-
# check that there are councils that can accept this location
$c->stash->{council_check_action} = 'submit_problem';
$c->stash->{remove_redundant_councils} = 1;
diff --git a/perllib/FixMyStreet/App/Controller/Location.pm b/perllib/FixMyStreet/App/Controller/Location.pm
index c1b119074..9f8260768 100644
--- a/perllib/FixMyStreet/App/Controller/Location.pm
+++ b/perllib/FixMyStreet/App/Controller/Location.pm
@@ -39,7 +39,7 @@ sub determine_location_from_coords : Private {
$c->stash->{pc} = $pc;
}
- return 1;
+ return $c->forward( 'check_location' );
}
return;
@@ -65,19 +65,13 @@ sub determine_location_from_pc : Private {
$c->stash->{pc} = $pc; # for template
my ( $latitude, $longitude, $error ) =
- eval { FixMyStreet::Geocode::lookup( $pc, $c ) };
-
- # Check that nothing blew up
- if ($@) {
- warn "Error: $@";
- return;
- }
+ FixMyStreet::Geocode::lookup( $pc, $c );
# If we got a lat/lng set to stash and return true
if ( defined $latitude && defined $longitude ) {
$c->stash->{latitude} = $latitude;
$c->stash->{longitude} = $longitude;
- return 1;
+ return $c->forward( 'check_location' );
}
# $error doubles up to return multiple choices by being an array
@@ -97,6 +91,29 @@ sub determine_location_from_pc : Private {
return;
}
+=head2 check_location
+
+Just make sure that for UK installs, our co-ordinates are indeed in the UK.
+
+=cut
+
+sub check_location : Private {
+ my ( $self, $c ) = @_;
+
+ if ( $c->stash->{latitude} && $c->cobrand->country eq 'GB' ) {
+ eval { Utils::convert_latlon_to_en( $c->stash->{latitude}, $c->stash->{longitude} ); };
+ if (my $error = $@) {
+ mySociety::Locale::pop(); # We threw exception, so it won't have happened.
+ $error = _('That location does not appear to be in Britain; please try again.')
+ if $error =~ /of the area covered/;
+ $c->stash->{location_error} = $error;
+ return;
+ }
+ }
+
+ return 1;
+}
+
=head1 AUTHOR
Struan Donald
diff --git a/perllib/FixMyStreet/App/Controller/Questionnaire.pm b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
index 5506e2dbd..19d057958 100755
--- a/perllib/FixMyStreet/App/Controller/Questionnaire.pm
+++ b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
@@ -79,7 +79,7 @@ sub submit : Path('submit') {
} elsif ( $c->req->params->{problem} ) {
$c->forward('submit_creator_fixed');
} else {
- return;
+ $c->detach( '/page_error_404_not_found' );
}
return 1;
diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm
index e1983c855..a3aeb8505 100644
--- a/perllib/FixMyStreet/App/Controller/Reports.pm
+++ b/perllib/FixMyStreet/App/Controller/Reports.pm
@@ -168,6 +168,7 @@ sub council_check : Private {
my ( $self, $c, $q_council ) = @_;
$q_council =~ s/\+/ /g;
+ $q_council =~ s/\.html//;
# Manual misspelling redirect
if ($q_council =~ /^rhondda cynon taff$/i) {
@@ -224,6 +225,8 @@ sub ward_check : Private {
my ( $self, $c, $ward ) = @_;
$ward =~ s/\+/ /g;
+ $ward =~ s/\.html//;
+
my $council = $c->stash->{council};
my $qw = mySociety::MaPit::call('areas', $ward,