aboutsummaryrefslogtreecommitdiffstats
path: root/web/alert.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'web/alert.cgi')
-rwxr-xr-xweb/alert.cgi54
1 files changed, 30 insertions, 24 deletions
diff --git a/web/alert.cgi b/web/alert.cgi
index 71249759e..896ca9ccc 100755
--- a/web/alert.cgi
+++ b/web/alert.cgi
@@ -24,6 +24,7 @@ use mySociety::MaPit;
use mySociety::VotingArea;
use mySociety::Web qw(ent);
use Cobrand;
+use Utils;
sub main {
my $q = shift;
@@ -56,7 +57,7 @@ EOF
} elsif ($q->param('type') && $q->param('feed')) {
$title = _('Local RSS feeds and email alerts');
$out = alert_local_form($q);
- } elsif ($q->param('pc') || ($q->param('e') && $q->param('n'))) {
+ } elsif ($q->param('pc') || ($q->param('lat') || $q->param('lon'))) {
$title = _('Local RSS feeds and email alerts');
$out = alert_list($q);
} else {
@@ -72,21 +73,25 @@ Page::do_fastcgi(\&main);
sub alert_list {
my ($q, @errors) = @_;
- my @vars = qw(pc rznvy e n);
+ my @vars = qw(pc rznvy lat lon);
my %input = map { $_ => scalar $q->param($_) } @vars;
my %input_h = map { $_ => $q->param($_) ? ent($q->param($_)) : '' } @vars;
- my($error, $e, $n);
- if ($input{e} || $input{n}) {
- $e = $input{e};
- $n = $input{n};
+ my($error, $lat, $lon);
+ if ($input{lat} || $input{lon}) {
+ $lat = $input{lat};
+ $lon = $input{lon};
} else {
try {
- ($e, $n, $error) = FixMyStreet::Geocode::lookup($input{pc}, $q);
+ ($lat, $lon, $error) = FixMyStreet::Geocode::lookup($input{pc}, $q);
} catch Error::Simple with {
$error = shift;
};
}
+
+ # truncate the lat,lon for nicer urls
+ ( $lat, $lon ) = map { Utils::truncate_coordinate($_) } ( $lat, $lon );
+
return FixMyStreet::Geocode::list_choices($error, '/alert', $q) if ref($error) eq 'ARRAY';
return alert_front_page($q, $error) if $error;
@@ -102,7 +107,7 @@ sub alert_list {
my @types = (@$mySociety::VotingArea::council_parent_types, @$mySociety::VotingArea::council_child_types);
my %councils = map { $_ => 1 } @$mySociety::VotingArea::council_parent_types;
- my $areas = mySociety::MaPit::call('point', "27700/$e,$n", type => \@types);
+ my $areas = mySociety::MaPit::call('point', "4326/$lon,$lat", type => \@types);
my $cobrand = Page::get_cobrand($q);
my ($success, $error_msg) = Cobrand::council_check($cobrand, { all_councils => $areas }, $q, 'alert');
if (!$success){
@@ -194,18 +199,17 @@ for the county council.'))) . '</div><div id="rss_buttons">';
}
} else {
# Hopefully impossible in the UK!
- throw Error::Simple('An area with three tiers of council? Impossible! '. $e . ' ' . $n . ' ' . join('|',keys %$areas));
+ throw Error::Simple('An area with three tiers of council? Impossible! '. $lat . ' ' . $lon . ' ' . join('|',keys %$areas));
}
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($e, $n, 'G');
my $dist = mySociety::Gaze::get_radius_containing_population($lat, $lon, 200000);
$dist = int($dist * 10 + 0.5);
$dist = $dist / 10.0;
my $checked = '';
- $checked = ' checked' if $q->param('feed') && $q->param('feed') eq "local:$e:$n";
+ $checked = ' checked' if $q->param('feed') && $q->param('feed') eq "local:$lat:$lon";
my $cobrand_form_elements = Cobrand::form_elements($cobrand, 'alerts', $q);
- my $pics = Cobrand::recent_photos($cobrand, 5, $e, $n, $dist);
+ my $pics = Cobrand::recent_photos($cobrand, 5, $lat, $lon, $dist);
$pics = '<div id="alert_photos">' . $q->h2(_('Photos of recent nearby reports')) . $pics . '</div>' if $pics;
my $header;
if ($pretty_pc) {
@@ -231,20 +235,20 @@ feed, or enter your email address to subscribe to an email alert.'));
my $rss_label = sprintf(_('Problems within %skm of this location'), $dist);
$out .= <<EOF;
<p id="rss_local">
-<input type="radio" name="feed" id="local:$e:$n" value="local:$e:$n"$checked>
-<label for="local:$e:$n">$rss_label</label>
+<input type="radio" name="feed" id="local:$lat:$lon" value="local:$lat:$lon"$checked>
+<label for="local:$lat:$lon">$rss_label</label>
EOF
- my $rss_feed = Cobrand::url($cobrand, "/rss/n/$e,$n", $q);
- my $default_link = Cobrand::url($cobrand, "/alert?type=local;feed=local:$e:$n", $q);
+ my $rss_feed = Cobrand::url($cobrand, "/rss/l/$lat,$lon", $q);
+ my $default_link = Cobrand::url($cobrand, "/alert?type=local;feed=local:$lat:$lon", $q);
my $rss_details = _('(a default distance which covers roughly 200,000 people)');
$out .= $rss_details;
$out .= " <a href='$rss_feed'><img src='/i/feed.png' width='16' height='16' title='"
. _('RSS feed of nearby problems') . "' alt='" . _('RSS feed') . "' border='0'></a>";
$out .= '</p> <p id="rss_local_alt">' . _('(alternatively the RSS feed can be customised, within');
- my $rss_feed_2k = Cobrand::url($cobrand, "/rss/n/$e,$n/2", $q);
- my $rss_feed_5k = Cobrand::url($cobrand, "/rss/n/$e,$n/5", $q);
- my $rss_feed_10k = Cobrand::url($cobrand, "/rss/n/$e,$n/10", $q);
- my $rss_feed_20k = Cobrand::url($cobrand, "/rss/n/$e,$n/20", $q);
+ my $rss_feed_2k = Cobrand::url($cobrand, "/rss/l/$lat,$lon/2", $q);
+ my $rss_feed_5k = Cobrand::url($cobrand, "/rss/l/$lat,$lon/5", $q);
+ my $rss_feed_10k = Cobrand::url($cobrand, "/rss/l/$lat,$lon/10", $q);
+ my $rss_feed_20k = Cobrand::url($cobrand, "/rss/l/$lat,$lon/20", $q);
$out .= <<EOF;
<a href="$rss_feed_2k">2km</a> / <a href="$rss_feed_5k">5km</a>
/ <a href="$rss_feed_10k">10km</a> / <a href="$rss_feed_20k">20km</a>)
@@ -271,8 +275,8 @@ EOF
rss_feed_5k => $rss_feed_5k,
rss_feed_10k => $rss_feed_10k,
rss_feed_20k => $rss_feed_20k,
- e => $e,
- n => $n,
+ lat => $lat,
+ lon => $lon,
options => $options );
my $cobrand_page = Page::template_include('alert-options', $q, Page::template_root($q), %vars);
$out = $cobrand_page if ($cobrand_page);
@@ -526,8 +530,10 @@ sub alert_do_subscribe {
$alert_id = FixMyStreet::Alert::create($email, 'council_problems', $cobrand, $cobrand_data, $1, $1);
} elsif ($feed =~ /^ward:(\d+):(\d+)/) {
$alert_id = FixMyStreet::Alert::create($email, 'ward_problems', $cobrand, $cobrand_data, $1, $2);
- } elsif ($feed =~ /^local:(\d+):(\d+)/) {
- $alert_id = FixMyStreet::Alert::create($email, 'local_problems', $cobrand, $cobrand_data, $1, $2);
+ } elsif ($feed =~ m{ \A local: ( [\+\-]? \d+ \.? \d* ) : ( [\+\-]? \d+ \.? \d* ) }xms ) {
+ my $lat = $1;
+ my $lon = $2;
+ $alert_id = FixMyStreet::Alert::create($email, 'local_problems', $cobrand, $cobrand_data, $lon, $lat);
}
} else {
throw FixMyStreet::Alert::Error('Invalid type');