aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--README.pod19
-rwxr-xr-xbin/gettext-extract4
-rwxr-xr-xbin/gettext-merge45
-rwxr-xr-xbin/import-flickr27
-rwxr-xr-xbin/make_css18
-rwxr-xr-xbin/send-questionnaires3
-rwxr-xr-xbin/send-reports90
-rwxr-xr-xbin/test-run72
-rwxr-xr-xbin/update-areas4
m---------commonlib0
-rw-r--r--conf/general-example12
-rw-r--r--conf/httpd.conf59
-rw-r--r--conf/packages4
-rw-r--r--db/alert_types.pl44
-rw-r--r--db/alert_types.sql22
-rw-r--r--db/alert_types_eha.pl9
-rw-r--r--db/alert_types_eha.sql11
-rw-r--r--db/migrate_from_osgb36_to_wgs84.pl201
-rw-r--r--db/schema.sql40
-rw-r--r--locale/FixMyStreet.po1602
-rw-r--r--locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po2663
-rw-r--r--locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po3104
-rw-r--r--notes/INSTALL110
-rw-r--r--notes/code_structure.txt11
-rw-r--r--notes/glossary.txt12
-rw-r--r--notes/osgb36_to_wgs84_notes.txt77
-rw-r--r--perllib/Carp/Always.pm162
-rw-r--r--perllib/Cobrand.pm7
-rw-r--r--perllib/Cobrands/Barnet/Util.pm10
-rw-r--r--perllib/Cobrands/Emptyhomes/Util.pm4
-rw-r--r--perllib/Cobrands/Fiksgatami/Util.pm62
-rw-r--r--perllib/Cobrands/Southampton/Util.pm113
-rw-r--r--perllib/FixMyStreet/Alert.pm44
-rw-r--r--perllib/FixMyStreet/Geocode.pm122
-rw-r--r--perllib/FixMyStreet/Map.pm168
-rw-r--r--perllib/FixMyStreet/Map/Bing.pm32
-rw-r--r--perllib/FixMyStreet/Map/BingOL.pm38
-rw-r--r--perllib/FixMyStreet/Map/Google.pm30
-rw-r--r--perllib/FixMyStreet/Map/OSM.pm188
-rw-r--r--perllib/FixMyStreet/Map/OSM/CycleMap.pm61
-rw-r--r--perllib/FixMyStreet/Map/OSM/StreetView.pm32
-rw-r--r--perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm32
-rw-r--r--perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm32
-rw-r--r--perllib/FixMyStreet/Map/Tilma/Original.pm172
-rw-r--r--perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm24
-rw-r--r--perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm23
-rw-r--r--perllib/Page.pm242
-rw-r--r--perllib/Problems.pm38
-rw-r--r--perllib/Utils.pm92
-rwxr-xr-xt/Cobrand.t2
-rwxr-xr-xt/Page.t34
-rw-r--r--t/utils.t41
-rw-r--r--templates/emails/alert-update2
-rw-r--r--templates/emails/submit-brent4
-rw-r--r--templates/emails/submit-council4
-rw-r--r--templates/website/cobrands/barnet/footer (renamed from templates/website/cobrands/barnet/barnet-footer)1
-rw-r--r--templates/website/cobrands/barnet/header (renamed from templates/website/cobrands/barnet/barnet-header)1
-rw-r--r--templates/website/cobrands/emptyhomes/faq-cy (renamed from templates/website/faq-eha.cy.html)0
-rwxr-xr-xtemplates/website/cobrands/emptyhomes/faq-en-gb (renamed from templates/website/faq-eha.html)0
-rw-r--r--templates/website/cobrands/emptyhomes/footer (renamed from templates/website/cobrands/emptyhomes/emptyhomes-footer)0
-rw-r--r--templates/website/cobrands/emptyhomes/header (renamed from templates/website/cobrands/emptyhomes/emptyhomes-header)2
-rw-r--r--templates/website/cobrands/fiksgatami/faq-nb124
-rw-r--r--templates/website/cobrands/fiksgatami/footer16
-rw-r--r--templates/website/cobrands/fiksgatami/header19
-rw-r--r--templates/website/cobrands/southampton/footer25
-rw-r--r--templates/website/cobrands/southampton/header127
-rwxr-xr-xtemplates/website/faq-en-gb (renamed from templates/website/faq.html)21
-rw-r--r--templates/website/header2
-rw-r--r--templates/website/problem2
-rwxr-xr-xweb-admin/index.cgi304
-rwxr-xr-xweb/ajax.cgi6
-rwxr-xr-xweb/alert.cgi168
-rw-r--r--web/cobrands/barnet/css/layout.css8
-rw-r--r--web/cobrands/fiksgatami/css.css148
-rw-r--r--web/cobrands/fiksgatami/css.scss41
-rw-r--r--web/cobrands/southampton/SCClogo.pngbin0 -> 2698 bytes
-rw-r--r--web/cobrands/southampton/accessInfo.gifbin0 -> 2537 bytes
-rw-r--r--web/cobrands/southampton/bg-box.gifbin0 -> 3009 bytes
-rw-r--r--web/cobrands/southampton/bg-button.gifbin0 -> 53 bytes
-rw-r--r--web/cobrands/southampton/bg-footer.gifbin0 -> 664 bytes
-rw-r--r--web/cobrands/southampton/bg-header.jpgbin0 -> 33045 bytes
-rw-r--r--web/cobrands/southampton/bg-input.gifbin0 -> 66 bytes
-rw-r--r--web/cobrands/southampton/bg-repeat.gifbin0 -> 94 bytes
-rw-r--r--web/cobrands/southampton/blue-line.gifbin0 -> 54 bytes
-rw-r--r--web/cobrands/southampton/bullet.gifbin0 -> 118 bytes
-rw-r--r--web/cobrands/southampton/bulletActiveSG.gifbin0 -> 109 bytes
-rw-r--r--web/cobrands/southampton/css.css47
-rw-r--r--web/cobrands/southampton/css.scss67
-rw-r--r--web/cobrands/southampton/ff.pngbin0 -> 267194 bytes
-rw-r--r--web/cobrands/southampton/forms.pngbin0 -> 303561 bytes
-rw-r--r--web/cobrands/southampton/ie6.pngbin0 -> 199421 bytes
-rw-r--r--web/cobrands/southampton/information.gifbin0 -> 1025 bytes
-rw-r--r--web/cobrands/southampton/line.gifbin0 -> 54 bytes
-rw-r--r--web/cobrands/southampton/logo.pngbin0 -> 1885 bytes
-rw-r--r--web/cobrands/southampton/mctv.pngbin0 -> 3182 bytes
-rw-r--r--web/cobrands/southampton/safari.pngbin0 -> 318409 bytes
-rw-r--r--web/cobrands/southampton/style.css87
-rwxr-xr-xweb/confirm.cgi2
-rwxr-xr-xweb/contact.cgi11
-rw-r--r--web/css/_main.scss135
-rw-r--r--web/css/cobrands/emptyhomes/emptyhomes.css4
-rw-r--r--web/css/core.css850
-rw-r--r--web/css/core.scss507
-rw-r--r--web/css/ie6-378.css2
-rw-r--r--web/css/ie6.css2
-rw-r--r--web/css/main.css178
-rw-r--r--web/css/main.scss14
-rw-r--r--web/down.default.html2
-rwxr-xr-xweb/faq.cgi12
-rwxr-xr-xweb/import.cgi44
-rwxr-xr-xweb/index.cgi408
-rw-r--r--web/js.js8
-rw-r--r--web/js/map-OpenLayers.js182
-rw-r--r--web/js/map-OpenStreetMap.js34
-rw-r--r--web/js/map-bing-ol.js41
-rw-r--r--web/js/map-bing.js3
-rw-r--r--web/js/map-google.js2
-rw-r--r--web/js/map-streetview.js34
-rw-r--r--web/js/map-tilma-ol.js33
-rw-r--r--web/js/map-tilma.js2
-rwxr-xr-xweb/photo.cgi2
-rwxr-xr-xweb/questionnaire.cgi23
-rwxr-xr-xweb/reports.cgi127
-rwxr-xr-xweb/rss.cgi75
-rwxr-xr-xweb/tms-signup.cgi2
-rw-r--r--web/xsl.eha.xsl2
-rw-r--r--web/xsl.xsl2
128 files changed, 9954 insertions, 4088 deletions
diff --git a/.gitignore b/.gitignore
index f9fe6ea90..cce185f08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,5 @@
/cities_bin
-/private_locale \ No newline at end of file
+/private_locale
+._*
+.sass-cache
+
diff --git a/README.pod b/README.pod
new file mode 100644
index 000000000..f6041e286
--- /dev/null
+++ b/README.pod
@@ -0,0 +1,19 @@
+
+=head1 NAME
+
+FixMyStreet
+
+=head1 DESCRIPTION
+
+FixMyStreet is a project that allows anyone to report an issue such as potholes,
+broken street lights, severe littering, water leaks. These issues are then
+routed to the correct body who can arrange to have them fixed.
+
+=head1 INSTALLING
+
+Installing from scratch can be a bit daunting but is fully documented in the
+notes/INSTALL file.
+
+We are hoping to make it much easier for you to try the code by letting you
+start a fully installed system with test data pre-loaded on Amazon's servers.
+More details will follow soon.
diff --git a/bin/gettext-extract b/bin/gettext-extract
index b354c11f2..24defd014 100755
--- a/bin/gettext-extract
+++ b/bin/gettext-extract
@@ -40,7 +40,7 @@ PO=locale/FixMyStreet.po
rm -f $PO
# Extract from Perl
-xgettext --add-comments=TRANS --language=Perl --keyword=_ --keyword=nget:1,2 --from-code=utf-8 -o $PO perllib/*.pm perllib/FixMyStreet/*.pm web/*.cgi bin/send-* db/alert_types_eha.pl
+xgettext --add-comments=TRANS --language=Perl --keyword=_ --keyword=nget:1,2 --from-code=utf-8 -o $PO `find perllib -name "*.pm"` web/*.cgi bin/send-* db/*.pl web-admin/*.cgi
# Fix headers
TEMP=`tempfile`
@@ -76,5 +76,5 @@ do
fi
done
-fixmystreet/bin/make_emptyhomes_po
+bin/make_emptyhomes_po
diff --git a/bin/gettext-merge b/bin/gettext-merge
new file mode 100755
index 000000000..84aa4fdb7
--- /dev/null
+++ b/bin/gettext-merge
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+# bin/gettext-merge
+# Update all .po files from new .pot
+#
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
+
+# Yuck
+if [ -e ../../locale ]
+then
+ cd ../../
+else if [ -e ../locale ]
+then
+ cd ../
+else if [ -e locale ]
+then
+ cd .
+else
+ echo "Please run with current directory fixmystreet"
+ exit 1
+fi
+fi
+fi
+
+for X in locale/*.UTF-8
+do
+ if [ -d $X ]
+ then
+ cd $X/LC_MESSAGES
+ echo $X
+ if [ -e EmptyHomes.po ]
+ then
+ msgmerge -o New.po EmptyHomes.po ../../FixMyStreet-EmptyHomes.po
+ mv New.po EmptyHomes.po
+ fi
+ if [ -e FixMyStreet.po ]
+ then
+ msgmerge -o New.po FixMyStreet.po ../../FixMyStreet.po
+ mv New.po FixMyStreet.po
+ fi
+ cd - >/dev/null
+ fi
+done
+
diff --git a/bin/import-flickr b/bin/import-flickr
index 992a6ac8e..f4a838547 100755
--- a/bin/import-flickr
+++ b/bin/import-flickr
@@ -24,7 +24,6 @@ use mySociety::Config;
use mySociety::DBHandle qw(dbh select_all);
use mySociety::EmailUtil;
use mySociety::Email;
-use mySociety::GeoUtil;
BEGIN {
mySociety::Config::set_file("$FindBin::Bin/../conf/general");
@@ -55,36 +54,36 @@ foreach (@$st) {
# XXX: Hmm... Use format=perl now Cal has added it for me! :)
while ($result =~ /<photo id="([^"]*)" owner="([^"]*)" secret="([^"]*)" server="([^"]*)" farm="([^"]*)" title="([^"]*)".*?latitude="([^"]*)" longitude="([^"]*)".*?machine_tags="([^"]*)"/g) {
- my ($id, $owner, $secret, $server, $farm, $title, $lat, $lon, $machine) = ($1, $2, $3, $4, $5, $6, $7, $8, $9);
+ my ($id, $owner, $secret, $server, $farm, $title, $latitude, $longitude, $machine) = ($1, $2, $3, $4, $5, $6, $7, $8, $9);
next if $ids{$id};
- if ($machine =~ /geo:/ && !$lat && !$lon) {
+ if ($machine =~ /geo:/ && !$latitude && !$longitude) {
# Have to fetch raw tags, as otherwise can't tell if it's negative, or how many decimal places
my $url = 'http://api.flickr.com/services/rest/?method=flickr.tags.getListPhoto&api_key=' . $key . '&photo_id=' . $id;
my $tags = get($url);
- ($lon) = $tags =~ /raw="geo:lon=([^"]*)"/i;
- ($lat) = $tags =~ /raw="geo:lat=([^"]*)"/i;
+ ($longitude) = $tags =~ /raw="geo:lon=([^"]*)"/i;
+ ($latitude) = $tags =~ /raw="geo:lat=([^"]*)"/i;
}
my $url = "http://farm$farm.static.flickr.com/$server/".$id.'_'.$secret.'_m.jpg';
my $image = get($url);
- problem_create($id, $owner, $title, $lat, $lon, $image);
+ problem_create($id, $owner, $title, $latitude, $longitude, $image);
}
sub problem_create {
- my ($photo_id, $owner, $title, $lat, $lon, $image) = @_;
+ my ($photo_id, $owner, $title, $latitude, $longitude, $image) = @_;
my ($name, $email) = dbh()->selectrow_array("select name, email from partial_user where service='flickr' and nsid=?", {}, $owner);
- my ($easting, $northing) = (0,0);
+
+ # set some defaults
$name ||= '';
- if ($lat && $lon) {
- # XXX This appears to be going wrong :(
- ($easting, $northing) = mySociety::GeoUtil::wgs84_to_national_grid($lat, $lon, 'G');
- }
+ $latitude ||= 0;
+ $longitude ||= 0;
+
my $id = dbh()->selectrow_array("select nextval('problem_id_seq')");
Utils::workaround_pg_bytea("insert into problem
- (id, postcode, easting, northing, title, detail, name,
+ (id, postcode, latitude, longitude, title, detail, name,
email, phone, photo, state, used_map, anonymous, category, areas)
values
(?, '', ?, ?, ?, '', ?, ?, '', ?, 'partial', 't', 'f', '', '')", 7,
- $id, $easting, $northing, $title, $name, $email, $image
+ $id, $latitude, $longitude, $title, $name, $email, $image
);
dbh()->do('insert into flickr_imported (id, problem_id) values (?, ?)', {}, $photo_id, $id);
diff --git a/bin/make_css b/bin/make_css
new file mode 100755
index 000000000..7e01da267
--- /dev/null
+++ b/bin/make_css
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# make_css:
+# Generate CSS files from SCSS files.
+# Curerntly the CSS files are also in version control, though I guess
+# in future they don't need to be, and compressed style could then be used.
+#
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org. WWW: http://www.mysociety.org
+#
+# $Id: send-reports,v 1.79 2010-01-06 16:50:26 louise Exp $
+
+DIRECTORY=$(cd `dirname $0` && pwd)
+
+for file in `find $DIRECTORY/../ -name "*.scss" ! -name "_*"`; do
+ sass --style expanded $file ${file/scss/css}
+done
+
diff --git a/bin/send-questionnaires b/bin/send-questionnaires
index eb67cd5d1..d3945bf12 100755
--- a/bin/send-questionnaires
+++ b/bin/send-questionnaires
@@ -17,6 +17,7 @@ use lib "$FindBin::Bin/../perllib";
use lib "$FindBin::Bin/../commonlib/perllib";
use File::Slurp;
use CGI; # XXX Awkward kludge
+use Encode;
use CronFns;
use Page;
@@ -62,7 +63,7 @@ foreach my $row (@$unsent) {
my @all_councils = split /,|\|/, $row->{council};
my $cobrand = $row->{cobrand};
my $lang = $row->{lang};
- Cobrand::set_lang_and_domain($cobrand, $lang);
+ Cobrand::set_lang_and_domain($cobrand, $lang, 1);
# Cobranded and non-cobranded messages can share a database. In this case, the conf file
# should specify a vhost to send the reports for each cobrand, so that they don't get sent
# more than once if there are multiple vhosts running off the same database. The email_host
diff --git a/bin/send-reports b/bin/send-reports
index d61269d96..96f259d5c 100755
--- a/bin/send-reports
+++ b/bin/send-reports
@@ -18,11 +18,14 @@ use lib "$FindBin::Bin/../commonlib/perllib";
use Encode;
use Error qw(:try);
use File::Slurp;
+use JSON;
+use LWP::Simple;
use CGI; # Trying awkward kludge
use CronFns;
use EastHantsWSDL;
use Cobrand;
+use Utils;
use mySociety::Config;
use mySociety::DBHandle qw(dbh);
use mySociety::Email;
@@ -49,10 +52,12 @@ my $base_url = mySociety::Config::get('BASE_URL');
my $site = CronFns::site($base_url);
my $query = "SELECT id, council, category, title, detail, name, email, phone,
- used_map, easting, northing, (photo is not null) as has_photo, lang,
+ used_map, latitude, longitude, (photo is not null) as has_photo, lang,
cobrand, cobrand_data
- FROM problem WHERE state in ('confirmed','fixed') AND whensent IS NULL
- AND council IS NOT NULL";
+ FROM problem
+ WHERE state in ('confirmed','fixed')
+ AND whensent IS NULL
+ AND council IS NOT NULL";
my $unsent = dbh()->selectall_arrayref($query, { Slice => {} });
my (%notgot, %note);
@@ -67,7 +72,7 @@ foreach my $row (@$unsent) {
# more than once if there are multiple vhosts running off the same database. The email_host
# call checks if this is the host that sends mail for this cobrand.
next unless (Cobrand::email_host($cobrand));
- Cobrand::set_lang_and_domain($cobrand, $row->{lang});
+ Cobrand::set_lang_and_domain($cobrand, $row->{lang}, 1);
if (dbh()->selectrow_array('select email from abuse where lower(email)=?', {}, lc($row->{email}))) {
dbh()->do("update problem set state='hidden' where id=?", {}, $row->{id});
dbh()->commit();
@@ -81,7 +86,7 @@ foreach my $row (@$unsent) {
# Template variables for the email
my $email_base_url = Cobrand::base_url_for_emails($cobrand, $cobrand_data);
- my %h = map { $_ => $row->{$_} } qw/title detail name email phone category easting northing/;
+ my %h = map { $_ => $row->{$_} } qw/title detail name email phone category latitude longitude/;
$h{url} = $email_base_url . '/report/' . $row->{id};
$h{phone_line} = $h{phone} ? _('Phone:') . " $h{phone}\n\n" : '';
if ($row->{has_photo}) {
@@ -94,7 +99,21 @@ foreach my $row (@$unsent) {
$h{fuzzy} = $row->{used_map} ? _('To view a map of the precise location of this issue')
: _('The user could not locate the problem on a map, but to see the area around the location they entered');
$h{closest_address} = '';
- $h{closest_address_machine} = '';
+
+ # If we are in the UK include eastings and northings, and nearest stuff
+ $h{easting_northing} = '';
+ if ( mySociety::Config::get('COUNTRY') eq 'GB' ) {
+
+ ( $h{easting}, $h{northing} ) = Utils::convert_latlon_to_en( $h{latitude}, $h{longitude} );
+
+ # email templates don't have conditionals so we need to farmat this here
+ $h{easting_northing} #
+ = "Easting: $h{easting}\n\n" #
+ . "Northing: $h{northing}\n\n";
+
+ $h{closest_address} = find_closest($row, $h{latitude}, $h{longitude});
+ }
+ $h{closest_address_machine} = $h{closest_address};
my (@to, @recips, $template, $areas_info);
if ($site eq 'emptyhomes') {
@@ -137,8 +156,8 @@ foreach my $row (@$unsent) {
my ($council_email, $confirmed, $note) = dbh()->selectrow_array(
"SELECT email,confirmed,note FROM contacts WHERE deleted='f'
and area_id=? AND category=?", {}, $council, $row->{category});
- $council_email = essex_contact($row->{easting}, $row->{northing}) if $council == 2225;
- $council_email = oxfordshire_contact($row->{easting}, $row->{northing}) if $council == 2237 && $council_email eq 'SPECIAL';
+ $council_email = essex_contact($row->{latitude}, $row->{longitude}) if $council == 2225;
+ $council_email = oxfordshire_contact($row->{latitude}, $row->{longitude}) if $council == 2237 && $council_email eq 'SPECIAL';
unless ($confirmed) {
$all_confirmed = 0;
$note = 'Council ' . $row->{council} . ' deleted'
@@ -159,23 +178,23 @@ foreach my $row (@$unsent) {
$template = 'submit-brent' if $row->{council} eq 2488 || $row->{council} eq 2237;
$template = File::Slurp::read_file("$FindBin::Bin/../templates/emails/$template");
- if ($h{category} eq 'Other') {
- $h{category_footer} = 'this type of local problem';
+ if ($h{category} eq _('Other')) {
+ $h{category_footer} = _('this type of local problem');
$h{category_line} = '';
} else {
$h{category_footer} = "'" . $h{category} . "'";
- $h{category_line} = "Category: $h{category}\n\n";
+ $h{category_line} = sprintf(_("Category: %s"), $h{category}) . "\n\n";
}
- $h{councils_name} = join(' and ', @dear);
- $h{multiple} = @dear>1 ? "[ This email has been sent to both councils covering the location of the problem, as the user did not categorise it; please ignore it if you're not the correct council to deal with the issue, or let us know what category of problem this is so we can add it to our system. ]\n\n"
+ $h{councils_name} = join(_(' and '), @dear);
+ $h{multiple} = @dear>1 ? "[ " . _("This email has been sent to both councils covering the location of the problem, as the user did not categorise it; please ignore it if you're not the correct council to deal with the issue, or let us know what category of problem this is so we can add it to our system.") . " ]\n\n"
: '';
$h{missing} = '';
if ($missing) {
my $name = $areas_info->{$missing}->{name};
- $h{missing} = '[ We realise this problem might be the responsibility of ' . $name
- . "; however, we don't currently have any contact details for them.
-If you know of an appropriate contact address, please do get in touch. ]\n\n";
+ $h{missing} = '[ '
+ . sprintf(_('We realise this problem might be the responsibility of %s; however, we don\'t currently have any contact details for them. If you know of an appropriate contact address, please do get in touch.'), $name)
+ . " ]\n\n";
}
}
@@ -190,6 +209,7 @@ If you know of an appropriate contact address, please do get in touch. ]\n\n";
$send_web = 0;
$send_email = 1;
} elsif (mySociety::Config::get('STAGING_SITE')) {
+ # on a staging server send emails to ourselves rather than the councils
@recips = ( mySociety::Config::get('CONTACT_EMAIL') );
} elsif ($site eq 'emptyhomes') {
my $council = $row->{council};
@@ -254,13 +274,19 @@ if ($verbose) {
}
}
+sub _get_district_for_contact {
+ my ( $lat, $lon ) = @_;
+ my $district =
+ mySociety::MaPit::call( 'point', "4326/$lon,$lat", type => 'DIS' );
+ ($district) = keys %$district;
+ return $district;
+}
+
# Essex has different contact addresses depending upon the district
# Might be easier if we start storing in the db all areas covered by a point
# Will do for now :)
sub essex_contact {
- my ($E, $N) = @_;
- my $district = mySociety::MaPit::call('point', "27700/$E,$N", type => 'DIS');
- ($district) = keys %$district;
+ my $district = _get_district_for_contact(@_);
my $email;
$email = 'eastarea' if $district == 2315 || $district == 2312;
$email = 'midarea' if $district == 2317 || $district == 2314 || $district == 2316;
@@ -272,9 +298,7 @@ sub essex_contact {
# Oxfordshire has different contact addresses depending upon the district
sub oxfordshire_contact {
- my ($E, $N) = @_;
- my $district = mySociety::MaPit::call('point', "27700/$E,$N", type => 'DIS');
- ($district) = keys %$district;
+ my $district = _get_district_for_contact(@_);
my $email;
$email = 'northernarea' if $district == 2419 || $district == 2420 || $district == 2421;
$email = 'southernarea' if $district == 2417 || $district == 2418;
@@ -322,3 +346,25 @@ sub post_easthants_message {
return $return;
}
+sub find_closest {
+ my ($row, $latitude, $longitude) = @_;
+ my $str = '';
+
+ return '' unless $row->{used_map};
+
+ # Get nearest road-type thing from Bing
+ my $url = "http://dev.virtualearth.net/REST/v1/Locations/$latitude,$longitude?c=en-GB&key=" . mySociety::Config::get('BING_MAPS_API_KEY');
+ my $j = LWP::Simple::get($url);
+ $j = JSON->new->utf8->allow_nonref->decode($j);
+ $str .= "Nearest road to the pin placed on the map (automatically generated by Bing Maps): $j->{resourceSets}[0]{resources}[0]{name}\n\n";
+
+ # Get nearest postcode from Matthew's random gazetteer (put in MaPit? Or elsewhere?)
+ $url = "http://gazetteer.dracos.vm.bytemark.co.uk/point/$latitude,$longitude.json";
+ $j = LWP::Simple::get($url);
+ $j = JSON->new->utf8->allow_nonref->decode($j);
+ if ($j->{postcode}) {
+ $str .= "Nearest postcode to the pin placed on the map (automatically generated): $j->{postcode}[0] ($j->{postcode}[1]m away)\n\n";
+ }
+ return $str;
+}
+
diff --git a/bin/test-run b/bin/test-run
index 15f9c3ed2..9c3142207 100755
--- a/bin/test-run
+++ b/bin/test-run
@@ -32,6 +32,8 @@ use Test::Harness;
use File::Find;
use lib "$FindBin::Bin/../perllib";
use Cobrand;
+use FixMyStreet::Geocode;
+use Utils;
my @actions = ('report', 'update', 'questionnaire', 'alert', 'static', 'cobrand', 'unit', 'eha_alert', 'import', 'rss');
my %actions_desc = (
@@ -213,6 +215,11 @@ sub submit_postcode{
sub submit_report {
my ($postcode, $x, $y, $easting, $northing, $user_num, $council, $texts, $cobrand ) = @_;
my @messages = @{$texts};
+
+ # convert easting, northing to lat lon
+ my ( $latitude, $longitude ) =
+ Utils::convert_en_to_latlon( $easting, $northing );
+
submit_postcode($cobrand, $postcode, $messages[0]);
{
# Writing values to hidden fields, so switching
@@ -235,8 +242,8 @@ sub submit_report {
y => $y,
pc => $postcode,
council => -1,
- easting => $easting,
- northing => $northing,
+ latitude => $latitude,
+ longitude => $longitude,
title => 'My test problem',
detail => 'Detail of my test problem',
anonymous => 1,
@@ -377,13 +384,20 @@ sub do_alert {
# sign up for alerts in an area
my $postcode = 'EH1 2NG';
- my $x = 2015; my $e = 325066;
- my $y = 4175; my $n = 673533;
+
+ my $x = 2015;
+ my $y = 4175;
+
+ my $e = 325066;
+ my $n = 673533;
+
+ my ( $lat, $lon ) = (55.948967, -3.201478);
+
my $messages = english_fms_messages();
submit_postcode('', $postcode, 'Problems in this area');
$wth->browser_follow_link(text => 'Email me new local problems');
$wth->browser_submit_form(form_name => 'alerts',
- fields => {feed => "local:" . $e . ":" . $n,
+ fields => {feed => "local:$lat:$lon",
rznvy => email_n(2)} );
$wth->browser_check_contents('Nearly Done!');
my $confirmation_email = $wth->email_get_containing(
@@ -396,7 +410,7 @@ sub do_alert {
$wth->browser_check_contents('successfully confirmed your alert');
# create and confirm a new problem in the area
- submit_report($postcode, $x, $y, 325000, 673387.096774193, 3, undef, $messages, '');
+ submit_report($postcode, $x, $y, $e, $n, 3, undef, $messages, '');
# run the alert script
call_send_emails();
@@ -419,6 +433,9 @@ sub do_eha_alert {
my $postcode = 'EH1 2NG';
my $x = 2015; my $e = 325066;
my $y = 4175; my $n = 673533;
+
+ my ( $lat, $lon ) = (55.948967, -3.201478);
+
my @texts = ('Eiddo gwag yn yr ardal hon',
'Adrodd am eiddo gwag',
'Nawr, gwiriwch eich e-bost',
@@ -428,7 +445,7 @@ sub do_eha_alert {
submit_postcode('cy.emptyhomes.', $postcode, $texts[0]);
$wth->browser_follow_link(text => 'Anfonwch fanylion eiddo gwag lleol newydd ataf i drwy\'r e-bost');
$wth->browser_submit_form(form_name => 'alerts',
- fields => {feed => "local:" . $e . ":" . $n,
+ fields => {feed => "local:$lat:$lon",
rznvy => email_n(4)} );
$wth->browser_check_contents($texts[2]);
my $confirmation_email = $wth->email_get_containing(
@@ -441,7 +458,7 @@ sub do_eha_alert {
$wth->browser_check_contents('Rydych wedi cadarnhau\'ch hysbysiad yn llwyddiannus.');
# create and confirm a new problem in the area
- submit_report($postcode, $x, $y, 325000, 673387.096774193, 3, undef, \@texts, 'cy.emptyhomes.');
+ submit_report($postcode, $x, $y, $e, $n, 3, undef, \@texts, 'cy.emptyhomes.');
# run the alert script
call_send_emails();
@@ -513,16 +530,37 @@ sub do_static {
# Check RSS feeds redirect to the right places and so on.
# Just checks header, doesn't check any contents.
sub do_rss {
- $wth->browser_get($base_url . '/rss/l/52.5/-1.9');
- die "Lat/lon redirect failed" unless $wth->browser_uri() =~ m{/rss/n/406886,289126$};
- $wth->browser_get($base_url . '/rss/2524/1779');
- die "Tile redirect failed" unless $wth->browser_uri() =~ m{/rss/n/407097,286935$};
- $wth->browser_get($base_url . '/rss/n/407097,286935');
+
+ my %redirects = (
+
+ # should always go to lat lon, except postcode (actually, query string)
+ '/rss/n/406886,289126' => '/rss/l/52.499994,-1.899993',
+ '/rss/2524/1779' => '/rss/l/52.480294,-1.896931',
+ '/rss/pc/SW1A1AA' => '/rss/pc/SW1A1AA',
+ '/rss/l/52.5/-1.9' => '/rss/l/52.5/-1.9',
+
+ # go to reports
+ '/rss/area/Birmingham' => '/rss/reports/Birmingham',
+ '/rss/area/Birmingham/Lozells' => '/rss/reports/Birmingham/Lozells+and+East+Handsworth',
+ );
+
+ my $error_count = 0;
+ foreach my $from ( sort keys %redirects ) {
+ my $to = $redirects{$from};
+ $wth->browser_get( $base_url . $from );
+ my ($got) = $wth->browser_uri() =~ m{(/rss/.*)$};
+
+ next if $got eq $to;
+
+ warn "RSS redirect from '$from' to '$to' failed - got '$got'";
+ $error_count++;
+ }
+
+ die "Found errors doing redirect - aborting" if $error_count;
+
+ $wth->browser_get($base_url . '/rss/l/52.5/-1.94');
$wth->browser_check_contents('New local problems on FixMyStreet');
- $wth->browser_get($base_url . '/rss/pc/SW1A1AA');
- die "Postcode redirect failed" unless $wth->browser_uri() =~ m{/rss/n/529090,179645$};
- $wth->browser_get($base_url . '/rss/area/Birmingham');
- die "One-tier redirect failed" unless $wth->browser_uri() =~ m{/rss/reports/Birmingham$};
+
$wth->browser_get($base_url . '/rss/reports/Birmingham');
$wth->browser_check_contents('New problems to Birmingham City Council on FixMyStreet');
$wth->browser_get($base_url . '/rss/reports/Birmingham/Lozells');
diff --git a/bin/update-areas b/bin/update-areas
index ed463708a..bbc933faf 100755
--- a/bin/update-areas
+++ b/bin/update-areas
@@ -33,11 +33,11 @@ BEGIN {
}
print "Fetching problems...\n";
-my $ids = select_all("select id, easting, northing from problem where areas=''");
+my $ids = select_all("select id, latitude, longitude from problem where areas=''");
print "Updating areas...\n";
my $c = 0;
foreach (@$ids) {
- my $areas = mySociety::MaPit::get_voting_areas_by_location({easting=>$_->{easting}, northing=>$_->{northing}}, 'polygon');
+ my $areas = mySociety::MaPit::get_voting_areas_by_location({latitude=>$_->{latitude}, longitude=>$_->{longitude}}, 'polygon');
$areas = ',' . join(',', sort keys %$areas) . ',';
dbh()->do('update problem set areas=? where id=?', {}, $areas, $_->{id});
dbh()->commit();
diff --git a/commonlib b/commonlib
-Subproject e0ffea0186a31514b0a05efd30fc76e83f68d3d
+Subproject eceed7e282edf5886dce3c1f306189134dc932f
diff --git a/conf/general-example b/conf/general-example
index 0a5c9e44d..9da852bb8 100644
--- a/conf/general-example
+++ b/conf/general-example
@@ -25,14 +25,11 @@ define('OPTION_BCI_DB_NAME', 'bci');
define('OPTION_BCI_DB_USER', 'bci');
define('OPTION_BCI_DB_PASS', '');
-define('OPTION_DRESS_DB_HOST', 'localhost');
-define('OPTION_DRESS_DB_PORT', '5432');
-define('OPTION_DRESS_DB_NAME', 'dress');
-define('OPTION_DRESS_DB_USER', 'dress');
-define('OPTION_DRESS_DB_PASS', '');
-
define('OPTION_BASE_URL', 'http://www.example.org');
+# Which country are you operating in? ISO3166-alpha2 code please
+define('OPTION_COUNTRY', 'GB');
+
define('OPTION_TESTING_EMAIL', 'testing@example.com');
define('OPTION_EMAIL_DOMAIN', 'example.org');
define('OPTION_CONTACT_EMAIL', 'team@'.OPTION_EMAIL_DOMAIN);
@@ -47,8 +44,9 @@ define('OPTION_STAGING_SITE', 1);
define('OPTION_UPLOAD_CACHE', '/upload/');
define('OPTION_GEO_CACHE', '/cache/');
define('OPTION_GOOGLE_MAPS_API_KEY', '');
+define('OPTION_BING_MAPS_API_KEY', '');
-define('OPTION_MAPIT_URL', 'http://services.mysociety.org/mapit');
+define('OPTION_MAPIT_URL', 'http://mapit.mysociety.org/');
define('OPTION_MAP_TYPE', 'Tilma::Original::1_10k');
define('OPTION_EVEL_URL', 'http://services.mysociety.org/evel');
define('OPTION_GAZE_URL', 'http://gaze.mysociety.org/gaze');
diff --git a/conf/httpd.conf b/conf/httpd.conf
index 1e6b8979e..d9d564f79 100644
--- a/conf/httpd.conf
+++ b/conf/httpd.conf
@@ -1,24 +1,40 @@
-# Apache configuration for Broken Civic Infrastructure.
+# Apache configuration for FixMyStreet.
#
-# Add lines something like this to your main /etc/apache/httpd.conf:
+# Add lines something like this to your /etc/apache2/sites-enabled/fixmystreet -
+# replacing '/home/yourname/fixmystreet' with the path to your install
#
# # FixMyStreet
# <VirtualHost *:80>
-# ServerName fixmystreet.owl
-# DocumentRoot /home/francis/devel/fixmystreet/web/
-# <Directory /home/francis/devel/fixmystreet/web>
-# Include /home/francis/devel/fixmystreet/conf/httpd.conf
+# ServerName fixmystreet.yourservername
+# DocumentRoot /home/yourname/fixmystreet/web/
+#
+# # Pull in the specific config
+# Include /home/yourname/fixmystreet/conf/httpd.conf
+#
+# <Directory /home/yourname/fixmystreet/web>
+# # You also need to enable cgi files to run as CGI scripts. For example:
+# # on production servers these are run under fastcgi
+# Options +ExecCGI
+# AddHandler cgi-script .cgi
+# </Directory>
+#
+# <Directory /home/yourname/fixmystreet/web-admin>
+# #
+# # WARNING - enable auth here on production machine
+# #
+# Options +ExecCGI
+# AddHandler cgi-script .cgi
# </Directory>
-# Alias /admin/ /home/francis/devel/fixmystreet/web-admin/
-# </VirtualHost>
#
-# You also need to enable cgi files to run as CGI scripts. For example:
+# Alias /admin/ /home/yourname/fixmystreet/web-admin/
+#
+# Alias /jslib/ "/home/yourname/fixmystreet/commonlib/jslib/"
+#
+# </VirtualHost>
#
-# Options +ExecCGI
-# AddHandler cgi-script .cgi
#
-# Copyright (c) 2006 UK Citizens Online Democracy. All rights reserved.
-# Email: francis@mysociety.org; WWW: http://www.mysociety.org
+# Copyright (c) 2006 UK Citizens Online Democracy. All rights reserved. Email:
+# francis@mysociety.org; WWW: http://www.mysociety.org
#
# $Id: httpd.conf,v 1.40 2009-10-21 15:22:36 louise Exp $
@@ -46,14 +62,15 @@ RewriteRule ^/[Tt]/([0-9A-Za-z]{16,18}).*$ /tms-signup.cgi?token=$1
RewriteRule ^/rss/([0-9]+)$ /rss.cgi?type=new_updates;id=$1 [QSA]
# RSS feeds for new local problems
-RewriteRule ^/rss/([0-9]+)[,/]([0-9]+)$ /rss.cgi?type=local_problems;x=$1;y=$2 [QSA]
-RewriteRule ^/rss/n/([0-9]+)[,/]([0-9]+)$ /rss.cgi?type=local_problems;e=$1;n=$2 [QSA]
-RewriteRule ^/rss/l/([0-9.-]+)[,/]([0-9.-]+)$ /rss.cgi?type=local_problems;lat=$1;lon=$2 [QSA]
-RewriteRule ^/rss/([0-9]+)[,/]([0-9]+)/([0-9]+)$ /rss.cgi?type=local_problems;x=$1;y=$2;d=$3 [QSA]
-RewriteRule ^/rss/n/([0-9]+)[,/]([0-9]+)/([0-9]+)$ /rss.cgi?type=local_problems;e=$1;n=$2;d=$3 [QSA]
+RewriteRule ^/rss/([0-9]+)[,/]([0-9]+)$ /rss.cgi?type=local_problems;x=$1;y=$2 [QSA]
+RewriteRule ^/rss/n/([0-9]+)[,/]([0-9]+)$ /rss.cgi?type=local_problems;e=$1;n=$2 [QSA]
+RewriteRule ^/rss/l/([0-9.-]+)[,/]([0-9.-]+)$ /rss.cgi?type=local_problems;lat=$1;lon=$2 [QSA]
+RewriteRule ^/rss/([0-9]+)[,/]([0-9]+)/([0-9]+)$ /rss.cgi?type=local_problems;x=$1;y=$2;d=$3 [QSA]
+RewriteRule ^/rss/n/([0-9]+)[,/]([0-9]+)/([0-9]+)$ /rss.cgi?type=local_problems;e=$1;n=$2;d=$3 [QSA]
RewriteRule ^/rss/l/([0-9.-]+)[,/]([0-9.-]+)/([0-9]+)$ /rss.cgi?type=local_problems;lat=$1;lon=$2;d=$3 [QSA]
-RewriteRule ^/rss/pc/(.*)$ /rss.cgi?type=local_problems;pc=$1 [QSA]
-RewriteRule ^/rss/problems$ /rss.cgi?type=new_problems [QSA]
+RewriteRule ^/rss/pc/(.*)/([0-9]+)$ /rss.cgi?type=local_problems;pc=$1;d=$2 [QSA]
+RewriteRule ^/rss/pc/(.*)$ /rss.cgi?type=local_problems;pc=$1 [QSA]
+RewriteRule ^/rss/problems$ /rss.cgi?type=new_problems [QSA]
# RSS feeds for voting areas
RewriteRule ^/rss/council/([0-9]+)$ /rss/reports/$1 [R=permanent]
@@ -77,7 +94,7 @@ RewriteRule ^/alerts/?$ /alert [R=permanent]
RewriteRule ^/json/problems/new$ /json.cgi?type=new_problems [QSA]
RewriteRule ^/json/problems/fixed$ /json.cgi?type=fixed_problems [QSA]
-ProxyPass /tilma/ http://tilma.mysociety.org/
+ProxyPass /tilma/ http://tilma.mysociety.org/
ProxyPassReverse /tilma/ http://tilma.mysociety.org/
# CGI files can be referred without CGI
diff --git a/conf/packages b/conf/packages
index bbdb4aa29..b8324300d 100644
--- a/conf/packages
+++ b/conf/packages
@@ -26,4 +26,6 @@ libjson-perl
libimage-size-perl
libmath-bigint-gmp-perl
libtext-template-perl
-gettext \ No newline at end of file
+gettext
+libtest-exception-perl
+libhaml-ruby
diff --git a/db/alert_types.pl b/db/alert_types.pl
new file mode 100644
index 000000000..fd1243982
--- /dev/null
+++ b/db/alert_types.pl
@@ -0,0 +1,44 @@
+# This file is only here so that the strings from alert_types.sql
+# get into the .po translation file.
+
+# New updates on a particular problem report
+ _('Updates on {{title}}'),
+ _('Updates on {{title}}'),
+ _('Update by {{name}}'),
+
+# New problems anywhere on the site
+ _('New problems on FixMyStreet'),
+ _('The latest problems reported by users'),
+
+# New fixed problems anywhere on the site
+ _('Problems recently reported fixed on FixMyStreet'),
+ _('The latest problems reported fixed by users'),
+
+# New problems around a location
+ _('New local problems on FixMyStreet'),
+ _('The latest local problems reported by users'),
+
+# New problems around a location
+ _('New local problems on FixMyStreet'),
+ _('The latest local problems reported by users'),
+
+# New problems around a postcode
+ _('New problems near {{POSTCODE}} on FixMyStreet'),
+ _('The latest local problems reported by users'),
+
+# New problems around a postcode with a particular state
+ _('New problems NEAR {{POSTCODE}} on FixMyStreet'),
+ _('The latest local problems reported by users'),
+
+# New problems sent to a particular council
+ _('New problems to {{COUNCIL}} on FixMyStreet'),
+ _('The latest problems for {{COUNCIL}} reported by users'),
+
+# New problems within a particular ward sent to a particular council
+ _('New problems for {{COUNCIL}} within {{WARD}} ward on FixMyStreet'
+ _('The latest problems for {{COUNCIL}} within {{WARD}} ward reported by users'),
+
+# New problems within a particular voting area (ward, constituency, whatever)
+ _('New problems within {{NAME}}''s boundary on FixMyStreet'),
+ _('The latest problems within {{NAME}}''s boundary reported by users'),
+
diff --git a/db/alert_types.sql b/db/alert_types.sql
index 82a8c71f8..fb1aac1d0 100644
--- a/db/alert_types.sql
+++ b/db/alert_types.sql
@@ -53,6 +53,28 @@ values ('local_problems_state', '', '',
'problem_find_nearby(?, ?, ?) as nearby,problem', 'nearby.problem_id = problem.id and problem.state in (?)', 'created desc',
'{{title}}, {{confirmed}}', '/report/{{id}}', '{{detail}}', 'alert-problem-nearby');
+-- New problems around a postcode
+insert into alert_type
+(ref, head_sql_query, head_table,
+ head_title, head_link, head_description,
+ item_table, item_where, item_order,
+ item_title, item_link, item_description, template)
+values ('postcode_local_problems', '', '',
+ 'New problems near {{POSTCODE}} on FixMyStreet', '/', 'The latest local problems reported by users',
+ 'problem_find_nearby(?, ?, ?) as nearby,problem', 'nearby.problem_id = problem.id and problem.state in (''confirmed'', ''fixed'')', 'created desc',
+ '{{title}}, {{confirmed}}', '/report/{{id}}', '{{detail}}', 'alert-problem-nearby');
+
+-- New problems around a postcode with a particular state
+insert into alert_type
+(ref, head_sql_query, head_table,
+ head_title, head_link, head_description,
+ item_table, item_where, item_order,
+ item_title, item_link, item_description, template)
+values ('postcode_local_problems_state', '', '',
+ 'New problems NEAR {{POSTCODE}} on FixMyStreet', '/', 'The latest local problems reported by users',
+ 'problem_find_nearby(?, ?, ?) as nearby,problem', 'nearby.problem_id = problem.id and problem.state in (?)', 'created desc',
+ '{{title}}, {{confirmed}}', '/report/{{id}}', '{{detail}}', 'alert-problem-nearby');
+
-- New problems sent to a particular council
insert into alert_type
(ref, head_sql_query, head_table,
diff --git a/db/alert_types_eha.pl b/db/alert_types_eha.pl
index 0e0bdd162..b090522e6 100644
--- a/db/alert_types_eha.pl
+++ b/db/alert_types_eha.pl
@@ -1,14 +1,8 @@
# This file is only here so that the strings from alert_types_eha.sql
# get into the .po translation file.
-# New updates on a particular problem report
- _('Updates on {{title}}'),
- _('Updates on {{title}}'),
- _('Update by {{name}}'),
-
# New problems anywhere on the site
_('New reports on reportemptyhomes.com'),
- _('The latest empty properties reported by users'),
# New fixed problems anywhere on the site
_('Properties recently reported as put back to use on reportemptyhomes.com'),
@@ -18,6 +12,9 @@
_('New local reports on reportemptyhomes.com'),
_('The latest local reports reported by users'),
+# New problems around a postcode
+ _('New reports on reportemptyhomes.com near {{POSTCODE}}'),
+
# New problems sent to a particular council
_('New reports to {{COUNCIL}} on reportemptyhomes.com'),
_('The latest reports for {{COUNCIL}} reported by users'),
diff --git a/db/alert_types_eha.sql b/db/alert_types_eha.sql
index c949ea2f8..17f44fcd9 100644
--- a/db/alert_types_eha.sql
+++ b/db/alert_types_eha.sql
@@ -42,6 +42,17 @@ values ('local_problems', '', '',
'problem_find_nearby(?, ?, ?) as nearby,problem', 'nearby.problem_id = problem.id and problem.state in (''confirmed'', ''fixed'')', 'created desc',
'{{title}}, {{confirmed}}', '/report/{{id}}', '{{detail}}', 'alert-problem-nearby');
+-- New problems around a postcode
+insert into alert_type
+(ref, head_sql_query, head_table,
+ head_title, head_link, head_description,
+ item_table, item_where, item_order,
+ item_title, item_link, item_description, template)
+values ('postcode_local_problems', '', '',
+ 'New reports on reportemptyhomes.com near {{POSTCODE}}', '/', 'The latest local reports reported by users',
+ 'problem_find_nearby(?, ?, ?) as nearby,problem', 'nearby.problem_id = problem.id and problem.state in (''confirmed'', ''fixed'')', 'created desc',
+ '{{title}}, {{confirmed}}', '/report/{{id}}', '{{detail}}', 'alert-problem-nearby');
+
-- New problems sent to a particular council
insert into alert_type
(ref, head_sql_query, head_table,
diff --git a/db/migrate_from_osgb36_to_wgs84.pl b/db/migrate_from_osgb36_to_wgs84.pl
new file mode 100644
index 000000000..abd504fb8
--- /dev/null
+++ b/db/migrate_from_osgb36_to_wgs84.pl
@@ -0,0 +1,201 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+=head1 DESCRIPTION
+
+This script will take a FMS database with eastings and northings in and migrate
+it to latitude and longitude. It touches the following tables and functions:
+
+=cut
+
+use FindBin;
+use lib "$FindBin::Bin/../perllib";
+use lib "$FindBin::Bin/../commonlib/perllib";
+
+use mySociety::Config;
+use mySociety::DBHandle qw(dbh);
+use Utils;
+
+BEGIN {
+ mySociety::Config::set_file("$FindBin::Bin/../conf/general");
+ mySociety::DBHandle::configure(
+ Name => mySociety::Config::get('BCI_DB_NAME'),
+ User => mySociety::Config::get('BCI_DB_USER'),
+ Password => mySociety::Config::get('BCI_DB_PASS'),
+ Host => mySociety::Config::get( 'BCI_DB_HOST', undef ),
+ Port => mySociety::Config::get( 'BCI_DB_PORT', undef )
+ );
+}
+
+my $UPDATE_BATCH_SIZE = 500;
+
+migrate_problem_table();
+migrate_problem_find_nearby_function();
+migrate_alert_table();
+
+=head2 problem table
+
+Add columns 'latitude' and 'longitude'.
+Update all entries coverting from e,n to lon,lat.
+Make the lat, lon columns not null.
+Drop the 'problem_state_easting_northing_idx' index.
+Create new index 'problem_state_latitude_longitude_idx'.
+Drop the 'easting' and 'northing' columns.
+
+=cut
+
+sub migrate_problem_table {
+
+ my $dbh = dbh();
+
+ # add columns
+ print "add latitude, longitude columns\n";
+ $dbh->do("ALTER TABLE problem ADD $_ double precision")
+ for qw(latitude longitude);
+ $dbh->commit;
+
+ # create a query for rows that need converting
+ my $rows_to_convert_query = $dbh->prepare( #
+ "SELECT id, easting, northing FROM problem"
+ . " WHERE latitude is NULL limit $UPDATE_BATCH_SIZE"
+ );
+
+ # update query
+ my $update_lat_lon_query = $dbh->prepare( #
+ "UPDATE problem SET latitude = ?, longitude = ? WHERE id = ?"
+ );
+
+ # loop through the entries in batches updating rows that need it. Do this in
+ # Perl rather than SQL for conveniance.
+ while (1) {
+ $rows_to_convert_query->execute;
+ last unless $rows_to_convert_query->rows;
+ while ( my $r = $rows_to_convert_query->fetchrow_hashref ) {
+ my ( $latitude, $longitude ) =
+ Utils::convert_en_to_latlon( $r->{easting}, $r->{northing} );
+ print "update problem $r->{id}: ( $latitude, $longitude )\n";
+ $update_lat_lon_query->execute( $latitude, $longitude, $r->{id} );
+ }
+ $dbh->commit; # every batch of updates
+ }
+
+ print "make latitude, longitude columns not null\n";
+ $dbh->do("ALTER TABLE problem ALTER COLUMN $_ SET NOT NULL")
+ for qw(latitude longitude);
+ $dbh->commit;
+
+ # drop old index, create new one
+ print "drop and create indexes\n";
+ $dbh->do("DROP INDEX problem_state_easting_northing_idx");
+ $dbh->do( "CREATE INDEX problem_state_latitude_longitude_idx "
+ . "ON problem(state, latitude, longitude)" );
+ $dbh->commit;
+
+ # drop columns
+ print "drop easting, northing columns\n";
+ $dbh->do("ALTER TABLE problem DROP $_") for qw(easting northing);
+ $dbh->commit;
+
+}
+
+=head2 problem_find_nearby function
+
+Convert to use lat and long.
+Also swap parameter order so that it is lat,lon rather than lon,lat to be consistent with pledgebank etc
+
+=cut
+
+sub migrate_problem_find_nearby_function {
+ my $dbh = dbh();
+
+ print "drop the existing problem_find_nearby function\n";
+ $dbh->do(
+"DROP FUNCTION problem_find_nearby ( double precision, double precision, double precision)"
+ );
+
+ print "create the new one\n";
+ $dbh->do(<<'SQL_END');
+ create function problem_find_nearby(double precision, double precision, double precision)
+ returns setof problem_nearby_match as
+ '
+ -- trunc due to inaccuracies in floating point arithmetic
+ select problem.id,
+ R_e() * acos(trunc(
+ (sin(radians($1)) * sin(radians(latitude))
+ + cos(radians($1)) * cos(radians(latitude))
+ * cos(radians($2 - longitude)))::numeric, 14)
+ ) as distance
+ from problem
+ where
+ longitude is not null and latitude is not null
+ and radians(latitude) > radians($1) - ($3 / R_e())
+ and radians(latitude) < radians($1) + ($3 / R_e())
+ and (abs(radians($1)) + ($3 / R_e()) > pi() / 2 -- case where search pt is near pole
+ or angle_between(radians(longitude), radians($2))
+ < $3 / (R_e() * cos(radians($1 + $3 / R_e()))))
+ -- ugly -- unable to use attribute name "distance" here, sadly
+ and R_e() * acos(trunc(
+ (sin(radians($1)) * sin(radians(latitude))
+ + cos(radians($1)) * cos(radians(latitude))
+ * cos(radians($2 - longitude)))::numeric, 14)
+ ) < $3
+ order by distance desc
+' language sql
+SQL_END
+
+ $dbh->commit;
+}
+
+=head2 alert table
+
+NOTE: only for alert_types 'local_problems' or 'local_problems_state'
+
+parameter: convert easting to longitude
+parameter2: convert nothing to latitude
+
+create a new column 'is_migrated' to use during migration in case of crash.
+
+=cut
+
+sub migrate_alert_table {
+ my $dbh = dbh();
+
+ print "Adding 'is_migrated' column\n";
+ $dbh->do("ALTER TABLE alert ADD COLUMN is_migrated bool DEFAULT false");
+ $dbh->commit;
+
+ # create a query for rows that need converting
+ my $rows_to_convert_query = $dbh->prepare( #
+ "SELECT id, parameter, parameter2 FROM alert"
+ . " WHERE alert_type IN ('local_problems','local_problems_state')"
+ . " AND is_migrated = false"
+ . " LIMIT $UPDATE_BATCH_SIZE"
+ );
+
+ # update query
+ my $update_lat_lon_query = $dbh->prepare( #
+ "UPDATE alert SET parameter2 = ?, parameter = ?, is_migrated = true"
+ . " WHERE id = ?"
+ );
+
+ # loop through the entries in batches updating rows that need it. Do this in
+ # Perl rather than SQL for conveniance.
+ while (1) {
+ $rows_to_convert_query->execute;
+ last unless $rows_to_convert_query->rows;
+ while ( my $r = $rows_to_convert_query->fetchrow_hashref ) {
+ my ( $latitude, $longitude ) =
+ Utils::convert_en_to_latlon( $r->{parameter}, $r->{parameter2} );
+ print "update alert $r->{id}: ( $latitude, $longitude )\n";
+ $update_lat_lon_query->execute( $latitude, $longitude, $r->{id} );
+ }
+ $dbh->commit; # every batch of updates
+ }
+
+ print "drop 'is_migrated' column\n";
+ $dbh->do("ALTER TABLE alert DROP COLUMN is_migrated");
+ $dbh->commit;
+}
+
diff --git a/db/schema.sql b/db/schema.sql
index 53d188244..fbff047fb 100644
--- a/db/schema.sql
+++ b/db/schema.sql
@@ -121,8 +121,8 @@ create table problem (
-- Problem details
postcode text not null,
- easting double precision not null,
- northing double precision not null,
+ latitude double precision not null,
+ longitude double precision not null,
council text, -- the council(s) we'll report this problem to
areas text not null, -- the voting areas this location is in
category text not null default 'Other',
@@ -155,7 +155,7 @@ create table problem (
whensent timestamp,
send_questionnaire boolean not null default 't'
);
-create index problem_state_easting_northing_idx on problem(state, easting, northing);
+create index problem_state_latitude_longitude_idx on problem(state, latitude, longitude);
create table questionnaire (
id serial not null primary key,
@@ -196,25 +196,41 @@ create type problem_nearby_match as (
distance double precision -- km
);
--- problem_find_nearby EASTING NORTHING DISTANCE
--- Find problems within DISTANCE (km) of (EASTING, NORTHING).
+-- problem_find_nearby LATITUDE LONGITUDE DISTANCE
+-- Find locations within DISTANCE (km) of (LATITUDE, LONGITUDE).
create function problem_find_nearby(double precision, double precision, double precision)
returns setof problem_nearby_match as
-- Write as SQL function so that we don't have to construct a temporary
-- table or results set in memory. That means we can't check the values of
-- the parameters, sadly.
+ -- Through sheer laziness, just use great-circle distance; that'll be off
+ -- by ~0.1%:
+ -- http://www.ga.gov.au/nmd/geodesy/datums/distance.jsp
+ -- We index locations on lat/lon so that we can select the locations which lie
+ -- within a wedge of side about 2 * DISTANCE. That cuts down substantially
+ -- on the amount of work we have to do.
'
-- trunc due to inaccuracies in floating point arithmetic
select problem.id,
- sqrt(($1 - easting) ^ 2
- + ($2 - northing) ^ 2)
- as distance
+ R_e() * acos(trunc(
+ (sin(radians($1)) * sin(radians(latitude))
+ + cos(radians($1)) * cos(radians(latitude))
+ * cos(radians($2 - longitude)))::numeric, 14)
+ ) as distance
from problem
where
+ longitude is not null and latitude is not null
+ and radians(latitude) > radians($1) - ($3 / R_e())
+ and radians(latitude) < radians($1) + ($3 / R_e())
+ and (abs(radians($1)) + ($3 / R_e()) > pi() / 2 -- case where search pt is near pole
+ or angle_between(radians(longitude), radians($2))
+ < $3 / (R_e() * cos(radians($1 + $3 / R_e()))))
-- ugly -- unable to use attribute name "distance" here, sadly
- sqrt(($1 - easting) ^ 2
- + ($2 - northing) ^ 2)
- < $3 * 1000
+ and R_e() * acos(trunc(
+ (sin(radians($1)) * sin(radians(latitude))
+ + cos(radians($1)) * cos(radians(latitude))
+ * cos(radians($2 - longitude)))::numeric, 14)
+ ) < $3
order by distance desc
' language sql; -- should be "stable" rather than volatile per default?
@@ -277,7 +293,7 @@ create table alert_type (
create table alert (
id serial not null primary key,
alert_type text not null references alert_type(ref),
- parameter text, -- e.g. Problem ID for new updates
+ parameter text, -- e.g. Problem ID for new updates, Longitude for local problem alerts
parameter2 text, -- e.g. Latitude for local problem alerts
email text not null,
confirmed integer not null default 0,
diff --git a/locale/FixMyStreet.po b/locale/FixMyStreet.po
index f7a3b172d..cbef4561c 100644
--- a/locale/FixMyStreet.po
+++ b/locale/FixMyStreet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: matthew@mysociety.org\n"
-"POT-Creation-Date: 2009-11-24 13:51+0000\n"
+"POT-Creation-Date: 2011-03-21 13:15+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <team@fixmystreet.com>\n"
@@ -17,112 +17,122 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: fixmystreet/perllib/Cobrand.pm:309
-msgid "Enter a nearby GB postcode, or street name and area:"
+#: perllib/Cobrands/Emptyhomes/Util.pm:61 bin/send-questionnaires-eha:93
+msgid "Report Empty Homes"
+msgstr ""
+
+#: perllib/Cobrands/Fiksgatami/Util.pm:37
+msgid "Enter a nearby postcode, or street name and area"
msgstr ""
-#: fixmystreet/perllib/Page.pm:81
+#: perllib/Page.pm:86
#, perl-format
msgid ""
"Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
msgstr ""
-#: fixmystreet/perllib/Page.pm:82
+#: perllib/Page.pm:87
msgid "Sorry! Something's gone wrong."
msgstr ""
-#: fixmystreet/perllib/Page.pm:83
+#: perllib/Page.pm:88
msgid "The text of the error was:"
msgstr ""
-#: fixmystreet/perllib/Page.pm:187 fixmystreet/web/contact.cgi:100
+#: perllib/Page.pm:195 web/contact.cgi:107
msgid "FixMyStreet"
msgstr ""
-#: fixmystreet/perllib/Page.pm:191 fixmystreet/perllib/Page.pm:357
+#: perllib/Page.pm:198 perllib/Page.pm:322
msgid "Report a problem"
msgstr ""
-#: fixmystreet/perllib/Page.pm:192 fixmystreet/perllib/Page.pm:358
+#: perllib/Page.pm:199 perllib/Page.pm:323
msgid "All reports"
msgstr ""
-#: fixmystreet/perllib/Page.pm:193 fixmystreet/perllib/Page.pm:359
+#: perllib/Page.pm:200 perllib/Page.pm:324
msgid "Local alerts"
msgstr ""
-#: fixmystreet/perllib/Page.pm:194 fixmystreet/perllib/Page.pm:360
+#: perllib/Page.pm:201 perllib/Page.pm:325
msgid "Help"
msgstr ""
-#: fixmystreet/perllib/Page.pm:195 fixmystreet/web/about.cgi:19 fixmystreet/web/about.cgi:21
+#: perllib/Page.pm:202 web/about.cgi:19 web/about.cgi:21
msgid "About us"
msgstr ""
-#: fixmystreet/perllib/Page.pm:212
+#: perllib/Page.pm:223
msgid "Fix<span id=\"my\">My</span>Street"
msgstr ""
-#: fixmystreet/perllib/Page.pm:356
-msgid "Navigation"
+#: perllib/Page.pm:301
+msgid ""
+"This is a developer site; things might break at any time, and the database "
+"will be periodically deleted."
msgstr ""
-#: fixmystreet/perllib/Page.pm:361
-msgid "Contact"
+#: perllib/Page.pm:315
+msgid ""
+"Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a "
+"href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href="
+"\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa"
+"\">code</a>."
msgstr ""
-#: fixmystreet/perllib/Page.pm:362
+#: perllib/Page.pm:317
msgid ""
-"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
-"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
-"\"logoie\"></span></a>"
+"Built by <a href=\"http://www.mysociety.org/\">mySociety</a> and maintained "
+"by <a href=\"http://www.nuug.no/\">NUUG</a>, using some <a href=\"http://"
+"github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href=\"https://secure."
+"mysociety.org/cvstrac/dir?d=mysociety/services/TilMa\">code</a>."
msgstr ""
-#: fixmystreet/perllib/Page.pm:363
-msgid ""
-"Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a "
-"href=\"http://github.com/mysociety/fixmystreet\">clever</"
-"a>&nbsp;<a href=\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/"
-"services/TilMa\">code</a>."
+#: perllib/Page.pm:321
+msgid "Navigation"
msgstr ""
-#: fixmystreet/perllib/Page.pm:396
-msgid "Error"
+#: perllib/Page.pm:326
+msgid "Contact"
msgstr ""
-#: fixmystreet/perllib/Page.pm:480
-msgid "Crown copyright. All rights reserved. Ministry of Justice"
+#: perllib/Page.pm:328
+msgid ""
+"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
+"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
+"\"logoie\"></span></a>"
msgstr ""
-#: fixmystreet/perllib/Page.pm:504
-msgid "Problem"
+#: perllib/Page.pm:386
+msgid "Error"
msgstr ""
-#: fixmystreet/perllib/Page.pm:675
+#: perllib/Page.pm:448
msgid "your problem will not be posted"
msgstr ""
-#: fixmystreet/perllib/Page.pm:676
+#: perllib/Page.pm:449
msgid "we'll hang on to your problem report while you're checking your email."
msgstr ""
-#: fixmystreet/perllib/Page.pm:678
+#: perllib/Page.pm:451
msgid "your update will not be posted"
msgstr ""
-#: fixmystreet/perllib/Page.pm:679
+#: perllib/Page.pm:452
msgid "we'll hang on to your update while you're checking your email."
msgstr ""
-#: fixmystreet/perllib/Page.pm:681
+#: perllib/Page.pm:454
msgid "your alert will not be activated"
msgstr ""
-#: fixmystreet/perllib/Page.pm:682
+#: perllib/Page.pm:455
msgid "we'll hang on to your alert while you're checking your email."
msgstr ""
-#: fixmystreet/perllib/Page.pm:689
+#: perllib/Page.pm:462
#, perl-format
msgid ""
"<h1>Nearly Done! Now check your email...</h1>\n"
@@ -136,189 +146,281 @@ msgid ""
"<p>(Don't worry &mdash; %s)</p>\n"
msgstr ""
-#: fixmystreet/perllib/Page.pm:716
+#: perllib/Page.pm:489
msgid "today"
msgstr ""
-#: fixmystreet/perllib/Page.pm:738
+#: perllib/Page.pm:513
msgid "less than a minute"
msgstr ""
-#: fixmystreet/perllib/Page.pm:741
-msgid "week"
+#: perllib/Page.pm:516
+#, perl-format
+msgid "%d week"
+msgstr ""
+
+#: perllib/Page.pm:516
+#, perl-format
+msgid "%d weeks"
+msgstr ""
+
+#: perllib/Page.pm:517
+#, perl-format
+msgid "%d day"
+msgstr ""
+
+#: perllib/Page.pm:517
+#, perl-format
+msgid "%d days"
+msgstr ""
+
+#: perllib/Page.pm:518
+#, perl-format
+msgid "%d hour"
msgstr ""
-#: fixmystreet/perllib/Page.pm:742
-msgid "day"
+#: perllib/Page.pm:518
+#, perl-format
+msgid "%d hours"
msgstr ""
-#: fixmystreet/perllib/Page.pm:743
-msgid "hour"
+#: perllib/Page.pm:519
+#, perl-format
+msgid "%d minute"
msgstr ""
-#: fixmystreet/perllib/Page.pm:744
-msgid "minute"
+#: perllib/Page.pm:519
+#, perl-format
+msgid "%d minutes"
msgstr ""
-#: fixmystreet/perllib/Page.pm:764
+#: perllib/Page.pm:539
#, perl-format
msgid "%s, reported anonymously at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:766
+#: perllib/Page.pm:541
#, perl-format
msgid "%s, reported by %s at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:770
+#: perllib/Page.pm:544 perllib/Page.pm:546 perllib/Page.pm:552
+#: perllib/Page.pm:554 web/index.cgi:391 web/index.cgi:562 web/index.cgi:569
+#: bin/send-reports:180
+msgid "Other"
+msgstr ""
+
+#: perllib/Page.pm:545
#, perl-format
msgid "Reported by %s in the %s category anonymously at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:772
+#: perllib/Page.pm:547
#, perl-format
msgid "Reported by %s in the %s category by %s at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:774
+#: perllib/Page.pm:549
#, perl-format
msgid "Reported by %s anonymously at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:776
+#: perllib/Page.pm:551
#, perl-format
msgid "Reported by %s by %s at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:778
+#: perllib/Page.pm:553
#, perl-format
msgid "Reported in the %s category anonymously at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:780
+#: perllib/Page.pm:555
#, perl-format
msgid "Reported in the %s category by %s at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:782
+#: perllib/Page.pm:557 web/contact.cgi:212
#, perl-format
msgid "Reported anonymously at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:784
+#: perllib/Page.pm:559 web/contact.cgi:213
#, perl-format
msgid "Reported by %s at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:789
+#: perllib/Page.pm:564
msgid "the map was not used so pin location may be inaccurate"
msgstr ""
-#: fixmystreet/perllib/Page.pm:796
+#: perllib/Page.pm:572
#, perl-format
msgid "Sent to %s %s later"
msgstr ""
-#: fixmystreet/perllib/Page.pm:799
+#: perllib/Page.pm:576
msgid "Not reported to council"
msgstr ""
-#: fixmystreet/perllib/Page.pm:850
+#: perllib/Page.pm:627 web-admin/index.cgi:522 web-admin/index.cgi:646
msgid "Updates"
msgstr ""
-#: fixmystreet/perllib/Page.pm:854
+#: perllib/Page.pm:631
#, perl-format
msgid "Posted by %s at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:856
+#: perllib/Page.pm:633
#, perl-format
msgid "Posted anonymously at %s"
msgstr ""
-#: fixmystreet/perllib/Page.pm:859
+#: perllib/Page.pm:636
msgid "marked as fixed"
msgstr ""
-#: fixmystreet/perllib/Page.pm:860
+#: perllib/Page.pm:637
msgid "reopened"
msgstr ""
-#: fixmystreet/perllib/Page.pm:877 fixmystreet/web/index.cgi:968
+#: perllib/Page.pm:645 web/index.cgi:1075
msgid "Offensive? Unsuitable? Tell us"
msgstr ""
-#: fixmystreet/perllib/Page.pm:900 fixmystreet/perllib/Page.pm:964
+#: perllib/Page.pm:672
+msgid "That postcode was not recognised, sorry."
+msgstr ""
+
+#: perllib/Page.pm:678
+msgid ""
+"Sorry, that appears to be a Crown dependency postcode, which we don't cover."
+msgstr ""
+
+#: perllib/Page.pm:681 perllib/FixMyStreet/Geocode.pm:145
msgid ""
"We do not cover Northern Ireland, I'm afraid, as our licence doesn't include "
"any maps for the region."
msgstr ""
-#: fixmystreet/perllib/Page.pm:913
-msgid "That postcode was not recognised, sorry."
+#: perllib/Page.pm:712
+msgid "Please upload a JPEG image only"
msgstr ""
-#: fixmystreet/perllib/Page.pm:951
-msgid "Sorry, we could not parse that location. Please try again."
+#: perllib/FixMyStreet/Alert.pm:147
+msgid "This report is currently marked as fixed."
msgstr ""
-#: fixmystreet/perllib/Page.pm:953 fixmystreet/perllib/Page.pm:961
-msgid "Sorry, we could not find that location."
+#: perllib/FixMyStreet/Alert.pm:148
+msgid "This report is currently marked as open."
msgstr ""
-#: fixmystreet/perllib/Page.pm:968
+#: perllib/FixMyStreet/Alert.pm:309
+#, perl-format
+msgid "Report on %s"
+msgstr ""
+
+#: perllib/FixMyStreet/Geocode.pm:73
msgid ""
"Sorry, that location appears to be too general; please be more specific."
msgstr ""
-#: fixmystreet/perllib/Page.pm:982
+#: perllib/FixMyStreet/Geocode.pm:83
msgid "That location does not appear to be in Britain; please try again."
msgstr ""
-#: fixmystreet/perllib/Page.pm:995
+#: perllib/FixMyStreet/Geocode.pm:105 perllib/FixMyStreet/Geocode.pm:140
+msgid "Sorry, we could not find that location."
+msgstr ""
+
+#: perllib/FixMyStreet/Geocode.pm:138
+msgid "Sorry, we could not parse that location. Please try again."
+msgstr ""
+
+#: perllib/FixMyStreet/Geocode.pm:158
msgid ""
"We found more than one match for that location. We show up to ten matches, "
"please try a different search if yours is not here."
msgstr ""
-#: fixmystreet/perllib/Page.pm:1027
-msgid "Please upload a JPEG image only"
+#: perllib/FixMyStreet/Geocode.pm:173
+msgid "More than one match"
+msgstr ""
+
+#: perllib/FixMyStreet/Map/Bing.pm:41
+#: perllib/FixMyStreet/Map/OSM/StreetView.pm:42
+#: perllib/FixMyStreet/Map/Google.pm:41
+#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:23
+msgid ""
+"Map contains Ordnance Survey data &copy; Crown copyright and database right "
+"2010."
+msgstr ""
+
+#: perllib/FixMyStreet/Map/OSM.pm:72
+#: perllib/FixMyStreet/Map/OSM/CycleMap.pm:42
+msgid ""
+"Map &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
+msgstr ""
+
+#: perllib/FixMyStreet/Map/OSM.pm:117
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:158
+msgid "Problem"
+msgstr ""
+
+#: perllib/FixMyStreet/Map/BingOL.pm:43
+msgid ""
+"Map contains Ordnance Survey data &copy; Crown copyright and database right "
+"2010. Microsoft"
+msgstr ""
+
+#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:23
+msgid ""
+"&copy; Crown copyright. All rights reserved. Ministry of Justice "
+"100037819&nbsp;2008."
+msgstr ""
+
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:82
+msgid "Unable to fetch the map tiles from the tile server."
msgstr ""
-#: fixmystreet/perllib/Problems.pm:139
+#: perllib/Problems.pm:148
#, perl-format
msgid "<big>%s</big> report in past week"
msgid_plural "<big>%s</big> reports in past week"
msgstr[0] ""
msgstr[1] ""
-#: fixmystreet/perllib/Problems.pm:144
+#: perllib/Problems.pm:153
#, perl-format
msgid "<big>%s</big> report recently"
msgid_plural "<big>%s</big> reports recently"
msgstr[0] ""
msgstr[1] ""
-#: fixmystreet/perllib/Problems.pm:150
+#: perllib/Problems.pm:159
msgid "FixMyStreet updates"
msgstr ""
-#: fixmystreet/perllib/Problems.pm:153 fixmystreet/perllib/Problems.pm:157
+#: perllib/Problems.pm:162 perllib/Problems.pm:166
#, perl-format
msgid "<big>%s</big> fixed in past month"
msgid_plural "<big>%s</big> fixed in past month"
msgstr[0] ""
msgstr[1] ""
-#: fixmystreet/perllib/Problems.pm:158
+#: perllib/Problems.pm:167
#, perl-format
msgid "<big>%s</big> update on reports"
msgid_plural "<big>%s</big> updates on reports"
msgstr[0] ""
msgstr[1] ""
-#: fixmystreet/web/about.cgi:24
+#: web/about.cgi:24
msgid ""
"<h2>The Empty Homes Agency</h2>\n"
"<p>The Empty Homes agency is an independent campaigning charity. We are not\n"
@@ -332,7 +434,7 @@ msgid ""
"p>\n"
msgstr ""
-#: fixmystreet/web/about.cgi:34
+#: web/about.cgi:34
msgid ""
"<h2>Shelter Cymru</h2>\n"
"Shelter Cymru is Wales&rsquo; people and homes charity and wants everyone in "
@@ -353,16 +455,15 @@ msgid ""
"empty homes</a>.\n"
msgstr ""
-#: fixmystreet/web/ajax.cgi:55 fixmystreet/web/ajax.cgi:74 fixmystreet/web/index.cgi:849
-#: fixmystreet/web/index.cgi:863
+#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:904 web/index.cgi:919
msgid "(fixed)"
msgstr ""
-#: fixmystreet/web/alert.cgi:30 fixmystreet/web/confirm.cgi:46
+#: web/alert.cgi:33 web/confirm.cgi:49
msgid "Confirmation"
msgstr ""
-#: fixmystreet/web/alert.cgi:40
+#: web/alert.cgi:43
#, perl-format
msgid ""
"Thank you for trying to confirm your alert. We seem to have an error "
@@ -371,36 +472,31 @@ msgid ""
"into it.\n"
msgstr ""
-#: fixmystreet/web/alert.cgi:52 fixmystreet/web/alert.cgi:55 fixmystreet/web/alert.cgi:212
-#: fixmystreet/web/alert.cgi:287
+#: web/alert.cgi:59 web/alert.cgi:62 web/alert.cgi:65 web/alert.cgi:274
+#: web/alert.cgi:380
msgid "Local RSS feeds and email alerts"
msgstr ""
-#: fixmystreet/web/alert.cgi:108
+#: web/alert.cgi:121
msgid ""
"That location does not appear to be covered by a council, perhaps it is "
"offshore - please try somewhere more specific."
msgstr ""
-#: fixmystreet/web/alert.cgi:123 fixmystreet/web/alert.cgi:139
+#: web/alert.cgi:140 web/alert.cgi:183 web/alert.cgi:200
#, perl-format
msgid "Problems within %s"
msgstr ""
-#: fixmystreet/web/alert.cgi:125
-#, perl-format
-msgid "Problems within %s ward"
-msgstr ""
-
-#: fixmystreet/web/alert.cgi:168
+#: web/alert.cgi:152 web/alert.cgi:233
msgid "Problems within the boundary of:"
msgstr ""
-#: fixmystreet/web/alert.cgi:180
+#: web/alert.cgi:158 web/alert.cgi:245
msgid "Or problems reported to:"
msgstr ""
-#: fixmystreet/web/alert.cgi:182
+#: web/alert.cgi:160 web/alert.cgi:247
msgid ""
"FixMyStreet sends different categories of problem\n"
"to the appropriate council, so problems within the boundary of a particular "
@@ -414,80 +510,85 @@ msgid ""
"for the county council."
msgstr ""
-#: fixmystreet/web/alert.cgi:207
+#: web/alert.cgi:185
+#, perl-format
+msgid "Problems within %s ward"
+msgstr ""
+
+#: web/alert.cgi:269
msgid "Photos of recent nearby reports"
msgstr ""
-#: fixmystreet/web/alert.cgi:211
+#: web/alert.cgi:272
#, perl-format
msgid "Local RSS feeds and email alerts for &lsquo;%s&rsquo;"
msgstr ""
-#: fixmystreet/web/alert.cgi:223
+#: web/alert.cgi:286
#, perl-format
msgid "Here are the types of local problem alerts for &lsquo;%s&rsquo;."
msgstr ""
-#: fixmystreet/web/alert.cgi:224
+#: web/alert.cgi:287
msgid ""
"Select which type of alert you&rsquo;d like and click the button for an RSS\n"
"feed, or enter your email address to subscribe to an email alert."
msgstr ""
-#: fixmystreet/web/alert.cgi:227
+#: web/alert.cgi:290
msgid "The simplest alert is our geographic one:"
msgstr ""
-#: fixmystreet/web/alert.cgi:228
+#: web/alert.cgi:291
#, perl-format
msgid "Problems within %skm of this location"
msgstr ""
-#: fixmystreet/web/alert.cgi:235
+#: web/alert.cgi:305
msgid "(a default distance which covers roughly 200,000 people)"
msgstr ""
-#: fixmystreet/web/alert.cgi:237
+#: web/alert.cgi:308
msgid "RSS feed of nearby problems"
msgstr ""
-#: fixmystreet/web/alert.cgi:237 fixmystreet/web/alert.cgi:275 fixmystreet/web/index.cgi:878
-#: fixmystreet/web/index.cgi:983 fixmystreet/web/reports.cgi:199
+#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:974 web/index.cgi:1086
+#: web/reports.cgi:254
msgid "RSS feed"
msgstr ""
-#: fixmystreet/web/alert.cgi:238
+#: web/alert.cgi:309
msgid "(alternatively the RSS feed can be customised, within"
msgstr ""
-#: fixmystreet/web/alert.cgi:248
+#: web/alert.cgi:319
msgid ""
"Or you can subscribe to an alert based upon what ward or council you&rsquo;"
"re in:"
msgstr ""
-#: fixmystreet/web/alert.cgi:250
+#: web/alert.cgi:323
msgid "Give me an RSS feed"
msgstr ""
-#: fixmystreet/web/alert.cgi:251
+#: web/alert.cgi:324
msgid "or"
msgstr ""
-#: fixmystreet/web/alert.cgi:252
+#: web/alert.cgi:325
msgid "Your email:"
msgstr ""
-#: fixmystreet/web/alert.cgi:253
+#: web/alert.cgi:326
msgid "Subscribe me to an email alert"
msgstr ""
-#: fixmystreet/web/alert.cgi:275
+#: web/alert.cgi:367
#, perl-format
msgid "RSS feed of %s"
msgstr ""
-#: fixmystreet/web/alert.cgi:288
+#: web/alert.cgi:381
msgid ""
"FixMyStreet has a variety of RSS feeds and email alerts for local problems, "
"including\n"
@@ -496,217 +597,209 @@ msgid ""
"within a certain distance of a particular location."
msgstr ""
-#: fixmystreet/web/alert.cgi:293
+#: web/alert.cgi:384
msgid ""
"To find out what local alerts we have for you, please enter your GB\n"
"postcode or street name and area:"
msgstr ""
-#: fixmystreet/web/alert.cgi:295 fixmystreet/web/confirm.cgi:188 fixmystreet/web/index.cgi:156
+#: web/alert.cgi:389 web/index.cgi:165
msgid "Go"
msgstr ""
-#: fixmystreet/web/alert.cgi:302
+#: web/alert.cgi:415
msgid "Some photos of recent reports"
msgstr ""
-#: fixmystreet/web/alert.cgi:309
+#: web/alert.cgi:423
msgid "Please select the feed you want"
msgstr ""
-#: fixmystreet/web/alert.cgi:332
+#: web/alert.cgi:446
msgid "Illegal feed selection"
msgstr ""
-#: fixmystreet/web/alert.cgi:346
+#: web/alert.cgi:460
msgid "Receive email when updates are left on this problem."
msgstr ""
-#: fixmystreet/web/alert.cgi:347 fixmystreet/web/index.cgi:726 fixmystreet/web/index.cgi:977
+#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:738 web/index.cgi:1080
+#: web-admin/index.cgi:630 web-admin/index.cgi:750
msgid "Email:"
msgstr ""
-#: fixmystreet/web/alert.cgi:348 fixmystreet/web/index.cgi:978
+#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1081
msgid "Subscribe"
msgstr ""
-#: fixmystreet/web/alert.cgi:374
+#: web/alert.cgi:487
+msgid "Receive alerts on new local problems"
+msgstr ""
+
+#: web/alert.cgi:515
msgid "You have successfully subscribed to that alert."
msgstr ""
-#: fixmystreet/web/alert.cgi:381
+#: web/alert.cgi:522
msgid "We could not validate that alert."
msgstr ""
-#: fixmystreet/web/alert.cgi:402
+#: web/alert.cgi:544
msgid "You have successfully confirmed your alert."
msgstr ""
-#: fixmystreet/web/alert.cgi:408
+#: web/alert.cgi:551
msgid "You have successfully deleted your alert."
msgstr ""
-#: fixmystreet/web/alert.cgi:422
+#: web/alert.cgi:571
msgid "Please enter a valid email address"
msgstr ""
-#: fixmystreet/web/alert.cgi:423
+#: web/alert.cgi:572
msgid "Please select the type of alert you want"
msgstr ""
-#: fixmystreet/web/confirm.cgi:40
+#: web/confirm.cgi:39
+#, perl-format
msgid ""
"Thank you for trying to confirm your update or problem. We seem to have an\n"
-"error ourselves though, so <a href=\"%s\">please let us know what went "
-"on</a>\n"
+"error ourselves though, so <a href=\"%s\">please let us know what went on</"
+"a>\n"
"and we'll look into it.\n"
msgstr ""
-#: fixmystreet/web/confirm.cgi:98
+#: web/confirm.cgi:101
#, perl-format
msgid ""
"You have successfully confirmed your update and you can now <a href=\"%s"
"\">view it on the site</a>."
msgstr ""
-#: fixmystreet/web/confirm.cgi:128
+#: web/confirm.cgi:131
msgid "Sorry, there has been an error confirming your problem."
msgstr ""
-#: fixmystreet/web/confirm.cgi:136
+#: web/confirm.cgi:139
msgid ""
"Thank you for reporting an empty property on\n"
-"ReportEmptyHomes.com. We have emailed the empty property officer in the "
-"council\n"
-"responsible with the details and asked them to do whatever they can to get "
-"the\n"
+"ReportEmptyHomes.com. We have emailed the lead officer for empty homes in "
+"the council\n"
+"responsible with details, and asked them to do whatever they can to get the\n"
"empty property back into use as soon as possible."
msgstr ""
-#: fixmystreet/web/confirm.cgi:140
+#: web/confirm.cgi:143
msgid ""
-"Most councils are quite good at bringing empty properties back into use. "
-"Even\n"
-"so the process can sometimes be slow, especially if the property is in very "
-"poor\n"
-"repair or the owner is unwilling to act. In most cases it takes six months\n"
-"before you can expect to see anything change. This doesn&rsquo;t mean the "
-"council\n"
-"isn&rsquo;t doing anything. We encourage councils to update the website so "
-"you can\n"
-"see what is happening."
+"It is worth noting however that the process can sometimes be slow,\n"
+"especially if the property is in very poor repair or the owner is unwilling "
+"to\n"
+"act. In most cases it can take six months or more before you can expect to "
+"see\n"
+"anything change and sometimes there may be considerable barries to a "
+"property\n"
+"being brought back into use. This doesn&rsquo;t mean the council isn&rsquo;"
+"t\n"
+"doing anything. We encourage councils to update the website so you can\n"
+"see what is happening. It may be a long process, but you reporting your\n"
+"concerns about this property to the council is a valuable first step."
msgstr ""
-#: fixmystreet/web/confirm.cgi:146
+#: web/confirm.cgi:151
msgid ""
-"We will contact you again in a month and again after six months to ask what "
-"has\n"
-"happened. Hopefully the property will be well on the way to being brought "
-"back\n"
-"into use by then, but if not we can offer advice on what you can do next."
+"We may contact you periodically to ask if anything has changed\n"
+"with the property you reported."
msgstr ""
-#: fixmystreet/web/confirm.cgi:149
+#: web/confirm.cgi:153
msgid ""
"Thank you for using ReportEmptyHomes.com. Your action is already helping\n"
"to resolve the UK&rsquo;s empty homes crisis."
msgstr ""
-#: fixmystreet/web/confirm.cgi:151 fixmystreet/web/confirm.cgi:154
+#: web/confirm.cgi:155 web/confirm.cgi:158
msgid "View your report"
msgstr ""
-#: fixmystreet/web/confirm.cgi:153
+#: web/confirm.cgi:157
msgid "Thank you for reporting an empty property on ReportEmptyHomes.com."
msgstr ""
-#: fixmystreet/web/confirm.cgi:159
+#: web/confirm.cgi:163
msgid "You have successfully confirmed your problem"
msgstr ""
-#: fixmystreet/web/confirm.cgi:160
+#: web/confirm.cgi:164
msgid " and <strong>we will now send it to the council</strong>"
msgstr ""
-#: fixmystreet/web/confirm.cgi:161
+#: web/confirm.cgi:165
#, perl-format
msgid ". You can <a href=\"%s\">view the problem on this site</a>."
msgstr ""
-#: fixmystreet/web/confirm.cgi:185
+#: web/confirm.cgi:189
msgid ""
"Thanks, glad to hear it's been fixed! Could we just ask if you have ever "
"reported a problem to a council before?"
msgstr ""
-#: fixmystreet/web/confirm.cgi:186 fixmystreet/web/questionnaire.cgi:202
+#: web/confirm.cgi:190 web/questionnaire.cgi:234 web/questionnaire.cgi:323
+#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
+#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "Yes"
msgstr ""
-#: fixmystreet/web/confirm.cgi:187 fixmystreet/web/questionnaire.cgi:203
+#: web/confirm.cgi:191 web/questionnaire.cgi:235 web/questionnaire.cgi:324
+#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
+#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "No"
msgstr ""
-#: fixmystreet/web/confirm.cgi:229
+#: web/confirm.cgi:192 web/index.cgi:790
+msgid "Submit"
+msgstr ""
+
+#: web/confirm.cgi:237
#, perl-format
msgid ""
"Thank you &mdash; you can <a href=\"%s\">view your updated problem</a> on "
"the site."
msgstr ""
-#: fixmystreet/web/contact.cgi:22
+#: web/contact.cgi:22
msgid "Contact Us"
msgstr ""
-#: fixmystreet/web/contact.cgi:41
+#: web/contact.cgi:41
msgid "Please give your name"
msgstr ""
-#: fixmystreet/web/contact.cgi:43
+#: web/contact.cgi:43
msgid "Please give your email"
msgstr ""
-#: fixmystreet/web/contact.cgi:45
+#: web/contact.cgi:45
msgid "Please give a valid email address"
msgstr ""
-#: fixmystreet/web/contact.cgi:47
+#: web/contact.cgi:47
msgid "Please give a subject"
msgstr ""
-#: fixmystreet/web/contact.cgi:48
+#: web/contact.cgi:48
msgid "Please write a message"
msgstr ""
-#: fixmystreet/web/contact.cgi:49
+#: web/contact.cgi:49
msgid "Illegal ID"
msgstr ""
-#: fixmystreet/web/contact.cgi:86
+#: web/contact.cgi:86
msgid "Thanks for your feedback. We'll get back to you as soon as we can!"
msgstr ""
-#: fixmystreet/web/contact.cgi:124 fixmystreet/web/index.cgi:436
-msgid "There were problems with your report. Please see below."
-msgstr ""
-
-#: fixmystreet/web/contact.cgi:129
-msgid "Contact the team"
-msgstr ""
-
-#: fixmystreet/web/contact.cgi:160
-msgid ""
-"You are reporting the following update for being abusive, containing "
-"personal information, or similar:"
-msgstr ""
-
-#: fixmystreet/web/contact.cgi:172
-msgid ""
-"You are reporting the following problem report for being abusive, containing "
-"personal information, or similar:"
-msgstr ""
-
-#: fixmystreet/web/contact.cgi:185
+#: web/contact.cgi:134
msgid ""
"We&rsquo;d love to hear what you think about this\n"
"website. Just fill in the form. Please don&rsquo;t contact us about "
@@ -714,7 +807,7 @@ msgid ""
"homes; use the box accessed from <a href=\"/\">the front page</a>."
msgstr ""
-#: fixmystreet/web/contact.cgi:191
+#: web/contact.cgi:141
msgid ""
"Please do <strong>not</strong> report problems through this form; messages "
"go to\n"
@@ -722,38 +815,58 @@ msgid ""
"please <a href=\"/\">go to the front page</a> and follow the instructions."
msgstr ""
-#: fixmystreet/web/contact.cgi:194
+#: web/contact.cgi:144
#, perl-format
msgid ""
"We'd love to hear what you think about this site. Just fill in the form, or "
"send an email to <a href='mailto:%s'>%s</a>:"
msgstr ""
-#: fixmystreet/web/contact.cgi:204
+#: web/contact.cgi:153 web/index.cgi:446
+msgid "There were problems with your report. Please see below."
+msgstr ""
+
+#: web/contact.cgi:158
+msgid "Contact the team"
+msgstr ""
+
+#: web/contact.cgi:196
+msgid ""
+"You are reporting the following update for being abusive, containing "
+"personal information, or similar:"
+msgstr ""
+
+#: web/contact.cgi:207
+msgid ""
+"You are reporting the following problem report for being abusive, containing "
+"personal information, or similar:"
+msgstr ""
+
+#: web/contact.cgi:234
msgid "Your name:"
msgstr ""
-#: fixmystreet/web/contact.cgi:205
+#: web/contact.cgi:235
msgid "Your&nbsp;email:"
msgstr ""
-#: fixmystreet/web/contact.cgi:206 fixmystreet/web/index.cgi:722
+#: web/contact.cgi:236 web/index.cgi:734 web-admin/index.cgi:622
msgid "Subject:"
msgstr ""
-#: fixmystreet/web/contact.cgi:207
+#: web/contact.cgi:237
msgid "Message:"
msgstr ""
-#: fixmystreet/web/contact.cgi:208 fixmystreet/web/index.cgi:1006
+#: web/contact.cgi:238 web/index.cgi:1096
msgid "Post"
msgstr ""
-#: fixmystreet/web/faq.cgi:18
+#: web/faq.cgi:18
msgid "Frequently Asked Questions"
msgstr ""
-#: fixmystreet/web/flickr.cgi:45
+#: web/flickr.cgi:45
msgid ""
"Thank you for trying to register for your Flickr photos. We seem to have a\n"
"problem ourselves though, so <a href=\"/contact\">please let us know what "
@@ -761,198 +874,206 @@ msgid ""
"and we'll look into it.\n"
msgstr ""
-#: fixmystreet/web/fun.cgi:17 fixmystreet/web/fun.cgi:25
+#: web/fun.cgi:17 web/fun.cgi:25
msgid "Weird and Wonderful reports"
msgstr ""
-#: fixmystreet/web/index.cgi:73
+#: web/index.cgi:82
msgid "Submitting your report"
msgstr ""
-#: fixmystreet/web/index.cgi:76
+#: web/index.cgi:85
msgid "Submitting your update"
msgstr ""
-#: fixmystreet/web/index.cgi:80 fixmystreet/web/index.cgi:632
+#: web/index.cgi:89 web/index.cgi:644
msgid "Reporting a problem"
msgstr ""
-#: fixmystreet/web/index.cgi:83
+#: web/index.cgi:92
msgid "Viewing a problem"
msgstr ""
-#: fixmystreet/web/index.cgi:86
+#: web/index.cgi:95
msgid "Viewing a location"
msgstr ""
-#: fixmystreet/web/index.cgi:125
+#: web/index.cgi:120
+msgid "Enter a nearby GB postcode, or street name and area"
+msgstr ""
+
+#: web/index.cgi:134
msgid "Report, view, or discuss local problems"
msgstr ""
-#: fixmystreet/web/index.cgi:126
+#: web/index.cgi:135
msgid "(like graffiti, fly tipping, broken paving slabs, or street lighting)"
msgstr ""
-#: fixmystreet/web/index.cgi:148
+#: web/index.cgi:157
msgid ""
"Thanks for uploading your photo. We now need to locate your problem, so "
"please enter a nearby street name or postcode in the box below&nbsp;:"
msgstr ""
-#: fixmystreet/web/index.cgi:166
+#: web/index.cgi:175
msgid "How to report a problem"
msgstr ""
-#: fixmystreet/web/index.cgi:169
+#: web/index.cgi:178
msgid "Locate the problem on a map of the area"
msgstr ""
-#: fixmystreet/web/index.cgi:170
+#: web/index.cgi:179
msgid "Enter details of the problem"
msgstr ""
-#: fixmystreet/web/index.cgi:171
+#: web/index.cgi:180
msgid "We send it to the council on your behalf"
msgstr ""
-#: fixmystreet/web/index.cgi:186
+#: web/index.cgi:195
msgid "Photos of recent reports"
msgstr ""
-#: fixmystreet/web/index.cgi:188
+#: web/index.cgi:197
msgid "Recently reported problems"
msgstr ""
-#: fixmystreet/web/index.cgi:212
+#: web/index.cgi:221
msgid "Please enter a message"
msgstr ""
-#: fixmystreet/web/index.cgi:215 fixmystreet/web/index.cgi:296
+#: web/index.cgi:224 web/index.cgi:308
msgid "Please enter your email"
msgstr ""
-#: fixmystreet/web/index.cgi:217 fixmystreet/web/index.cgi:298
+#: web/index.cgi:226 web/index.cgi:310
msgid "Please enter a valid email"
msgstr ""
-#: fixmystreet/web/index.cgi:226 fixmystreet/web/index.cgi:366
+#: web/index.cgi:235 web/index.cgi:377
#, perl-format
msgid ""
"That image doesn't appear to have uploaded correctly (%s), please try again."
msgstr ""
-#: fixmystreet/web/index.cgi:248
+#: web/index.cgi:257 web-admin/index.cgi:477
msgid "Anonymous"
msgstr ""
-#: fixmystreet/web/index.cgi:287
+#: web/index.cgi:299
msgid "No council selected"
msgstr ""
-#: fixmystreet/web/index.cgi:288
+#: web/index.cgi:300
msgid "Please enter a subject"
msgstr ""
-#: fixmystreet/web/index.cgi:289
+#: web/index.cgi:301
msgid "Please enter some details"
msgstr ""
-#: fixmystreet/web/index.cgi:291
+#: web/index.cgi:303
msgid "Please enter your name"
msgstr ""
-#: fixmystreet/web/index.cgi:293
+#: web/index.cgi:305
msgid ""
"Please enter your full name, councils need this information - if you do not "
"wish your name to be shown on the site, untick the box"
msgstr ""
-#: fixmystreet/web/index.cgi:301 fixmystreet/web/index.cgi:342
+#: web/index.cgi:312 web/index.cgi:569
+msgid "-- Pick a category --"
+msgstr ""
+
+#: web/index.cgi:313 web/index.cgi:353
msgid "Please choose a category"
msgstr ""
-#: fixmystreet/web/index.cgi:303 fixmystreet/web/index.cgi:566
+#: web/index.cgi:315 web/index.cgi:576
msgid "-- Pick a property type --"
msgstr ""
-#: fixmystreet/web/index.cgi:304
+#: web/index.cgi:316
msgid "Please choose a property type"
msgstr ""
-#: fixmystreet/web/index.cgi:326
+#: web/index.cgi:337
msgid "That location is not part of that council"
msgstr ""
-#: fixmystreet/web/index.cgi:346
+#: web/index.cgi:357
msgid "We have details for that council"
msgstr ""
-#: fixmystreet/web/index.cgi:355
+#: web/index.cgi:366
msgid "Somehow, you only have one co-ordinate. Please try again."
msgstr ""
-#: fixmystreet/web/index.cgi:357
+#: web/index.cgi:368
msgid "You haven't specified any sort of co-ordinates. Please try again."
msgstr ""
-#: fixmystreet/web/index.cgi:380 fixmystreet/web/index.cgi:552 fixmystreet/web/index.cgi:559
-msgid "Other"
-msgstr ""
-
-#: fixmystreet/web/index.cgi:397
+#: web/index.cgi:407
#, perl-format
msgid ""
"You have successfully confirmed your report and you can now <a href=\"%s"
"\">view it on the site</a>."
msgstr ""
-#: fixmystreet/web/index.cgi:538
+#: web/index.cgi:549
msgid ""
"That spot does not appear to be covered by a council.\n"
"If you have tried to report an issue past the shoreline, for example,\n"
"please specify the closest point on land."
msgstr ""
-#: fixmystreet/web/index.cgi:560
+#: web/index.cgi:570 web-admin/index.cgi:628
msgid "Category:"
msgstr ""
-#: fixmystreet/web/index.cgi:566
+#: web/index.cgi:576
msgid "Empty house or bungalow"
msgstr ""
-#: fixmystreet/web/index.cgi:567
+#: web/index.cgi:577
msgid "Empty flat or maisonette"
msgstr ""
-#: fixmystreet/web/index.cgi:567
+#: web/index.cgi:577
msgid "Whole block of empty flats"
msgstr ""
-#: fixmystreet/web/index.cgi:568
+#: web/index.cgi:578
msgid "Empty office or other commercial"
msgstr ""
-#: fixmystreet/web/index.cgi:568
+#: web/index.cgi:578
msgid "Empty pub or bar"
msgstr ""
-#: fixmystreet/web/index.cgi:569
+#: web/index.cgi:579
msgid "Empty public building - school, hospital, etc."
msgstr ""
-#: fixmystreet/web/index.cgi:570
+#: web/index.cgi:580
msgid "Property type:"
msgstr ""
-#: fixmystreet/web/index.cgi:629
+#: web/index.cgi:641
msgid ""
"You have located the problem at the point marked with a purple pin on the "
"map.\n"
"If this is not the correct location, simply click on the map again. "
msgstr ""
-#: fixmystreet/web/index.cgi:637
+#: web/index.cgi:647 web/index.cgi:666 web/index.cgi:668 web/index.cgi:681
+msgid " or "
+msgstr ""
+
+#: web/index.cgi:649
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -960,7 +1081,7 @@ msgid ""
"name if you give us permission."
msgstr ""
-#: fixmystreet/web/index.cgi:641
+#: web/index.cgi:653
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -968,21 +1089,60 @@ msgid ""
"name if you give us permission."
msgstr ""
-#: fixmystreet/web/index.cgi:677
+#: web/index.cgi:667
+msgid "All the information you provide here will be sent to"
+msgstr ""
+
+#: web/index.cgi:670
+msgid ""
+"The subject and details of the problem will be public, plus your name if you "
+"give us permission."
+msgstr ""
+
+#: web/index.cgi:672
+msgid ""
+"We do <strong>not</strong> yet have details for the other council that "
+"covers this location."
+msgid_plural ""
+"We do <strong>not</strong> yet have details for the other councils that "
+"cover this location."
+msgstr[0] ""
+msgstr[1] ""
+
+#: web/index.cgi:676 web/index.cgi:691
+#, perl-format
+msgid ""
+"You can help us by finding a contact email address for local problems for %s "
+"and emailing it to us at <a href='mailto:%s'>%s</a>."
+msgstr ""
+
+#: web/index.cgi:686 web/index.cgi:694
+msgid "We do not yet have details for the council that covers this location."
+msgid_plural ""
+"We do not yet have details for the councils that cover this location."
+msgstr[0] ""
+msgstr[1] ""
+
+#: web/index.cgi:690
+msgid ""
+"If you submit a problem here the subject and details of the problem will be "
+"public, but the problem will <strong>not</strong> be reported to the council."
+msgstr ""
+
+#: web/index.cgi:696
msgid ""
-"<p>We do not yet have details for the council that covers\n"
-"this location. If you submit a report here it will be left on the site, but\n"
-"not reported to the council &ndash; please still leave your report, so that\n"
-"we can show to the council the activity in their area."
+"If you submit a report here it will be left on the site, but not reported to "
+"the council &ndash; please still leave your report, so that we can show to "
+"the council the activity in their area."
msgstr ""
-#: fixmystreet/web/index.cgi:686
+#: web/index.cgi:702
msgid ""
"Please fill in the form below with details of the problem,\n"
"and describe the location as precisely as possible in the details box."
msgstr ""
-#: fixmystreet/web/index.cgi:695
+#: web/index.cgi:711
msgid ""
"Please fill in details of the empty property below, saying what type of\n"
"property it is e.g. an empty home, block of flats, office etc. Tell us\n"
@@ -995,7 +1155,7 @@ msgid ""
"to read, as does a lack of punctuation.\n"
msgstr ""
-#: fixmystreet/web/index.cgi:703
+#: web/index.cgi:719
msgid ""
"Please fill in details of the problem below. The council won't be able\n"
"to help unless you leave as much detail as you can, so please describe the "
@@ -1005,218 +1165,259 @@ msgid ""
"photo of the problem if you have one), etc."
msgstr ""
-#: fixmystreet/web/index.cgi:708
+#: web/index.cgi:724
msgid "Please fill in details of the problem below."
msgstr ""
-#: fixmystreet/web/index.cgi:721
+#: web/index.cgi:733
msgid "Empty property details form"
msgstr ""
-#: fixmystreet/web/index.cgi:723
+#: web/index.cgi:735 web-admin/index.cgi:623
msgid "Details:"
msgstr ""
-#: fixmystreet/web/index.cgi:724 fixmystreet/web/index.cgi:1010
+#: web/index.cgi:736 web/index.cgi:1112 web/questionnaire.cgi:308
msgid "Photo:"
msgstr ""
-#: fixmystreet/web/index.cgi:725 fixmystreet/web/index.cgi:1003
+#: web/index.cgi:737 web/index.cgi:1093 web-admin/index.cgi:629
+#: web-admin/index.cgi:749
msgid "Name:"
msgstr ""
-#: fixmystreet/web/index.cgi:727 fixmystreet/bin/send-reports:81
+#: web/index.cgi:739 bin/send-reports:89 web-admin/index.cgi:631
msgid "Phone:"
msgstr ""
-#: fixmystreet/web/index.cgi:728
+#: web/index.cgi:740 web/index.cgi:1100
msgid "(optional)"
msgstr ""
-#: fixmystreet/web/index.cgi:730
+#: web/index.cgi:742
msgid "Can we show your name on the site?"
msgstr ""
-#: fixmystreet/web/index.cgi:732
+#: web/index.cgi:744
msgid "Can we show your name publicly?"
msgstr ""
-#: fixmystreet/web/index.cgi:734
+#: web/index.cgi:746
msgid "(we never show your email address or phone number)"
msgstr ""
-#: fixmystreet/web/index.cgi:790
-msgid "Submit"
+#: web/index.cgi:773
+msgid "Please note:"
msgstr ""
-#: fixmystreet/web/index.cgi:825
-msgid "Hide stale reports"
+#: web/index.cgi:775
+msgid ""
+"We will only use your personal information in accordance with our <a href=\"/"
+"faq#privacy\">privacy policy.</a>"
msgstr ""
-#: fixmystreet/web/index.cgi:828
-msgid "Include stale reports"
+#: web/index.cgi:776
+msgid "Please be polite, concise and to the point."
msgstr ""
-#: fixmystreet/web/index.cgi:834
-msgid "Show pins"
+#: web/index.cgi:777
+msgid ""
+"Please do not be abusive &mdash; abusing your council devalues the service "
+"for all users."
msgstr ""
-#: fixmystreet/web/index.cgi:838
-msgid "Hide pins"
+#: web/index.cgi:778
+msgid ""
+"Writing your message entirely in block capitals makes it hard to read, as "
+"does a lack of punctuation."
+msgstr ""
+
+#: web/index.cgi:779
+msgid ""
+"Remember that FixMyStreet is primarily for reporting physical problems that "
+"can be fixed. If your problem is not appropriate for submission via this "
+"site remember that you can contact your council directly using their own "
+"website."
msgstr ""
-#: fixmystreet/web/index.cgi:852
+#: web/index.cgi:781
+msgid ""
+"FixMyStreet and the Guardian are providing this service in partnership in <a "
+"href=\"/faq#privacy\">certain cities</a>. In those cities, both have access "
+"to any information submitted, including names and email addresses, and will "
+"use it only to ensure the smooth running of the service, in accordance with "
+"their privacy policies."
+msgstr ""
+
+#: web/index.cgi:885
+msgid "Hide stale reports"
+msgstr ""
+
+#: web/index.cgi:888
+msgid "Include stale reports"
+msgstr ""
+
+#: web/index.cgi:907
msgid "No problems have been reported yet."
msgstr ""
-#: fixmystreet/web/index.cgi:866
+#: web/index.cgi:923
msgid "No problems found."
msgstr ""
-#: fixmystreet/web/index.cgi:877
+#: web/index.cgi:928
+msgid "Show pins"
+msgstr ""
+
+#: web/index.cgi:932
+msgid "Hide pins"
+msgstr ""
+
+#: web/index.cgi:973
msgid "Email me new local problems"
msgstr ""
-#: fixmystreet/web/index.cgi:879
+#: web/index.cgi:975
msgid "RSS feed of recent local problems"
msgstr ""
-#: fixmystreet/web/index.cgi:882
+#: web/index.cgi:978
msgid "Problems in this area"
msgstr ""
-#: fixmystreet/web/index.cgi:883
+#: web/index.cgi:979
msgid "Reports on and around the map"
msgstr ""
-#: fixmystreet/web/index.cgi:884
+#: web/index.cgi:980
#, perl-format
msgid "Closest nearby problems <small>(within&nbsp;%skm)</small>"
msgstr ""
-#: fixmystreet/web/index.cgi:887
+#: web/index.cgi:984
msgid ""
"To report a problem, simply\n"
" <strong>click on the map</strong> at the correct location."
msgstr ""
-#: fixmystreet/web/index.cgi:889
+#: web/index.cgi:986
#, perl-format
msgid ""
"<small>If you cannot see the map, <a href='%s' rel='nofollow'>skip this\n"
" step</a>.</small>"
msgstr ""
-#: fixmystreet/web/index.cgi:894
+#: web/index.cgi:991
msgid "Recent local problems, FixMyStreet"
msgstr ""
-#: fixmystreet/web/index.cgi:905
+#: web/index.cgi:1004
msgid "There were problems with your update. Please see below."
msgstr ""
-#: fixmystreet/web/index.cgi:928 fixmystreet/web/index.cgi:930
+#: web/index.cgi:1025 web/index.cgi:1027
msgid "Unknown problem ID"
msgstr ""
-#: fixmystreet/web/index.cgi:931
+#: web/index.cgi:1028
msgid "That report has been removed from FixMyStreet."
msgstr ""
-#: fixmystreet/web/index.cgi:956
+#: web/index.cgi:1048
msgid "This problem is old and of unknown status."
msgstr ""
-#: fixmystreet/web/index.cgi:959 fixmystreet/web/index.cgi:1002
+#: web/index.cgi:1051 web/index.cgi:1092
msgid "This problem has been fixed"
msgstr ""
-#: fixmystreet/web/index.cgi:971
+#: web/index.cgi:1076
msgid "More problems nearby"
msgstr ""
-#: fixmystreet/web/index.cgi:976
+#: web/index.cgi:1079
msgid "Email me updates"
msgstr ""
-#: fixmystreet/web/index.cgi:979
+#: web/index.cgi:1082
msgid "Receive email when updates are left on this problem"
msgstr ""
-#: fixmystreet/web/index.cgi:984
+#: web/index.cgi:1087
msgid "RSS feed of updates to this problem"
msgstr ""
-#: fixmystreet/web/index.cgi:987
+#: web/index.cgi:1088
msgid "Provide an update"
msgstr ""
-#: fixmystreet/web/index.cgi:988
-msgid ""
-"Please note that updates are not sent to the council. If you leave your name "
-"it will be public. Your information will only be used in accordance with our "
-"<a href=\"/faq#privacy\">privacy policy</a>"
-msgstr ""
-
-#: fixmystreet/web/index.cgi:1004
+#: web/index.cgi:1094
msgid "Update:"
msgstr ""
-#: fixmystreet/web/index.cgi:1005
+#: web/index.cgi:1095
msgid "Alert me to future updates"
msgstr ""
-#: fixmystreet/web/index.cgi:1025
+#: web/index.cgi:1103
+msgid ""
+"Please note that updates are not sent to the council. If you leave your name "
+"it will be public. Your information will only be used in accordance with our "
+"<a href=\"/faq#privacy\">privacy policy</a>"
+msgstr ""
+
+#: web/index.cgi:1123
msgid "Updates to this problem, FixMyStreet"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:28 fixmystreet/web/questionnaire.cgi:201
+#: web/questionnaire.cgi:29 web/questionnaire.cgi:80 web/questionnaire.cgi:213
+#: web/questionnaire.cgi:233
msgid "Questionnaire"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:38
+#: web/questionnaire.cgi:41
msgid ""
"I'm afraid we couldn't validate that token. If you've copied the URL from an "
"email, please check that you copied it exactly.\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:43
+#: web/questionnaire.cgi:48
#, perl-format
msgid ""
"You have already answered this questionnaire. If you have a question, please "
"<a href='%s'>get in touch</a>, or <a href='%s'>view your problem</a>.\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:48
+#: web/questionnaire.cgi:53
msgid "I'm afraid we couldn't locate your problem in the database.\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:79
+#: web/questionnaire.cgi:92
msgid "Please state whether or not the problem has been fixed"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:80
+#: web/questionnaire.cgi:95
msgid ""
"Please say whether you've ever reported a problem to your council before"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:81
+#: web/questionnaire.cgi:97
msgid "Please indicate whether you'd like to receive another questionnaire"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:83
+#: web/questionnaire.cgi:99
msgid "Please provide some explanation as to why you're reopening this report"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:99
+#: web/questionnaire.cgi:115
msgid "Please provide some text as well as a photo"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:130
+#: web/questionnaire.cgi:146
msgid "Questionnaire filled in by problem reporter"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:148
+#: web/questionnaire.cgi:166
msgid ""
"<p>Thank you very much for filling in our questionnaire; if you\n"
"get some more information about the status of your problem, please come back "
@@ -1224,33 +1425,33 @@ msgid ""
"site and leave an update.</p>\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:154
+#: web/questionnaire.cgi:174
+#, perl-format
msgid ""
"<p style=\"font-size:150%%\">We're sorry to hear that. We have two "
"suggestions: why not try\n"
-"<a href=\"%s\">writing direct to your councillor(s)"
-"</a>\n"
+"<a href=\"%s\">writing direct to your councillor(s)</a>\n"
"or, if it's a problem that could be fixed by local people working together,\n"
"why not <a href=\"http://www.pledgebank.com/new\">make and publicise a "
"pledge</a>?\n"
"</p>\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:162
+#: web/questionnaire.cgi:183
msgid ""
"<p style=\"font-size:150%\">Thank you very much for filling in our "
"questionnaire; glad to hear it's been fixed.</p>\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:204
+#: web/questionnaire.cgi:236
msgid "Don&rsquo;t know"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:205
+#: web/questionnaire.cgi:237
msgid "Submit questionnaire"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:220
+#: web/questionnaire.cgi:254
msgid ""
"<p>Getting empty homes back into use can be difficult. You shouldn't expect\n"
"the property to be back into use yet. But a good council will have started "
@@ -1265,7 +1466,7 @@ msgid ""
"www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:230
+#: web/questionnaire.cgi:264
msgid ""
"<p>Getting empty homes back into use can be difficult, but by now a good "
"council\n"
@@ -1283,241 +1484,784 @@ msgid ""
"emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:243
+#: web/questionnaire.cgi:277
msgid ""
"The details of your problem are available on the right hand side of this "
"page."
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:244
+#: web/questionnaire.cgi:278
msgid "Please take a look at the updates that have been left."
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:250
+#: web/questionnaire.cgi:284
msgid "An update marked this problem as fixed."
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:251
+#: web/questionnaire.cgi:285
msgid "Has this problem been fixed?"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:258
+#: web/questionnaire.cgi:292
msgid "Reported before"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:259
+#: web/questionnaire.cgi:293
msgid "First time"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:260
+#: web/questionnaire.cgi:294
msgid ""
"Have you ever reported a problem to a council before, or is this your first "
"time?"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:270
+#: web/questionnaire.cgi:304
msgid ""
"If you wish to leave a public update on the problem, please enter it here\n"
"(please note it will not be sent to the council). For example, what was\n"
"your experience of getting the problem fixed?"
msgstr ""
-#: fixmystreet/web/reports.cgi:142 fixmystreet/web/reports.cgi:184
+#: web/questionnaire.cgi:322
+msgid ""
+"Would you like to receive another questionnaire in 4 weeks, reminding you to "
+"check the status?"
+msgstr ""
+
+#: web/reports.cgi:192 web/reports.cgi:239
msgid "Summary reports"
msgstr ""
-#: fixmystreet/web/reports.cgi:144
+#: web/reports.cgi:194
msgid ""
"This is a summary of all reports on this site; select a particular council "
"to see the reports sent there."
msgstr ""
-#: fixmystreet/web/reports.cgi:145
+#: web/reports.cgi:195
msgid "Greyed-out lines are councils that no longer exist."
msgstr ""
-#: fixmystreet/web/reports.cgi:149
+#: web/reports.cgi:199 web-admin/index.cgi:477 web-admin/index.cgi:656
msgid "Name"
msgstr ""
-#: fixmystreet/web/reports.cgi:149 fixmystreet/web/reports.cgi:219
+#: web/reports.cgi:199 web/reports.cgi:275
msgid "New problems"
msgstr ""
-#: fixmystreet/web/reports.cgi:149 fixmystreet/web/reports.cgi:227
+#: web/reports.cgi:199 web/reports.cgi:283
msgid "Older problems"
msgstr ""
-#: fixmystreet/web/reports.cgi:151
+#: web/reports.cgi:201
msgid "Old problems,<br>state unknown"
msgstr ""
-#: fixmystreet/web/reports.cgi:153 fixmystreet/web/reports.cgi:234
+#: web/reports.cgi:203 web/reports.cgi:290
msgid "Recently fixed"
msgstr ""
-#: fixmystreet/web/reports.cgi:153
+#: web/reports.cgi:203
msgid "Older fixed"
msgstr ""
-#: fixmystreet/web/reports.cgi:190
+#: web/reports.cgi:245
msgid "council"
msgstr ""
-#: fixmystreet/web/reports.cgi:200
+#: web/reports.cgi:255
#, perl-format
msgid "RSS feed of problems in this %s"
msgstr ""
-#: fixmystreet/web/reports.cgi:204
+#: web/reports.cgi:259
#, perl-format
msgid "This is a summary of all reports for one %s."
msgstr ""
-#: fixmystreet/web/reports.cgi:205
+#: web/reports.cgi:260
#, perl-format
msgid "This is a summary of all reports for this %s."
msgstr ""
-#: fixmystreet/web/reports.cgi:209
+#: web/reports.cgi:264
#, perl-format
msgid "You can <a href=\"%s\">see less detail</a>."
msgstr ""
-#: fixmystreet/web/reports.cgi:211
+#: web/reports.cgi:266
#, perl-format
msgid "You can <a href=\"%s\">see more details</a>."
msgstr ""
-#: fixmystreet/web/reports.cgi:213
+#: web/reports.cgi:268
#, perl-format
msgid ""
"You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports"
"\">show all councils</a>."
msgstr ""
-#: fixmystreet/web/reports.cgi:215
+#: web/reports.cgi:270
#, perl-format
msgid ""
"You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports"
"\">show all councils</a>."
msgstr ""
-#: fixmystreet/web/reports.cgi:229
+#: web/reports.cgi:285
msgid "Old problems, state unknown"
msgstr ""
-#: fixmystreet/web/reports.cgi:235
+#: web/reports.cgi:291
msgid "Old fixed"
msgstr ""
-#: fixmystreet/web/reports.cgi:239
+#: web/reports.cgi:294
#, perl-format
msgid "%s - Summary reports"
msgstr ""
-#: fixmystreet/web/reports.cgi:239
+#: web/reports.cgi:294
#, perl-format
msgid "Problems within %s, FixMyStreet"
msgstr ""
-#: fixmystreet/bin/send-questionnaires-eha:94
-msgid "Report Empty Homes"
+#: web/reports.cgi:333
+msgid "(sent to both)"
+msgstr ""
+
+#: web/reports.cgi:334
+msgid "(not sent to council)"
msgstr ""
-#: fixmystreet/bin/send-reports:83
+#: bin/send-reports:91
msgid ""
"This web page also contains a photo of the problem, provided by the user."
msgstr ""
-#: fixmystreet/bin/send-reports:89
+#: bin/send-reports:97
msgid "To view a map of the precise location of this issue"
msgstr ""
-#: fixmystreet/bin/send-reports:90
+#: bin/send-reports:98
msgid ""
"The user could not locate the problem on a map, but to see the area around "
"the location they entered"
msgstr ""
-#: fixmystreet/bin/send-reports:94
+#: bin/send-reports:181
+msgid "this type of local problem"
+msgstr ""
+
+#: bin/send-reports:185
#, perl-format
-msgid ""
-"The closest address, as the crow flies, to the location of this problem, "
-"%.0fm away, is: %s - please note that this is automatically generated, so "
-"ensure that you check it against the details provided by the user and, if "
-"possible, the map."
+msgid "Category: %s"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:5 fixmystreet/db/alert_types_eha.pl:6
-#, perl-brace-format
-msgid "Updates on {{title}}"
+#: bin/send-reports:188
+msgid " and "
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:7
-#, perl-brace-format
-msgid "Update by {{name}}"
+#: bin/send-reports:189
+msgid ""
+"This email has been sent to both councils covering the location of the "
+"problem, as the user did not categorise it; please ignore it if you're not "
+"the correct council to deal with the issue, or let us know what category of "
+"problem this is so we can add it to our system."
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:10
-msgid "New reports on reportemptyhomes.com"
+#: bin/send-reports:195
+#, perl-format
+msgid ""
+"We realise this problem might be the responsibility of %s; however, we don't "
+"currently have any contact details for them. If you know of an appropriate "
+"contact address, please do get in touch."
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:11
-msgid "The latest empty properties reported by users"
+#: db/alert_types_eha.pl:5
+msgid "New reports on reportemptyhomes.com"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:14
+#: db/alert_types_eha.pl:8
msgid "Properties recently reported as put back to use on reportemptyhomes.com"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:15
+#: db/alert_types_eha.pl:9
msgid "The latest properties reported back to use by users"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:18
+#: db/alert_types_eha.pl:12
msgid "New local reports on reportemptyhomes.com"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:19
+#: db/alert_types_eha.pl:13
msgid "The latest local reports reported by users"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:22
+#: db/alert_types_eha.pl:16
+#, perl-brace-format
+msgid "New reports on reportemptyhomes.com near {{POSTCODE}}"
+msgstr ""
+
+#: db/alert_types_eha.pl:19
#, perl-brace-format
msgid "New reports to {{COUNCIL}} on reportemptyhomes.com"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:23
+#: db/alert_types_eha.pl:20
#, perl-brace-format
msgid "The latest reports for {{COUNCIL}} reported by users"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:26
+#: db/alert_types_eha.pl:23
#, perl-brace-format
msgid ""
"New reports for {{COUNCIL}} within {{WARD}} ward on reportemptyhomes.com"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:27
+#: db/alert_types_eha.pl:24
#, perl-brace-format
msgid ""
"The latest reports for {{COUNCIL}} within {{WARD}} ward reported by users"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:30
+#: db/alert_types_eha.pl:27
#, perl-brace-format
msgid "New reports within {{NAME}}'s boundary on reportemptyhomes.com"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:31
+#: db/alert_types_eha.pl:28
#, perl-brace-format
msgid "The latest reports within {{NAME}}'s boundary reported by users"
msgstr ""
+#: db/alert_types.pl:5 db/alert_types.pl:6
+#, perl-brace-format
+msgid "Updates on {{title}}"
+msgstr ""
+
+#: db/alert_types.pl:7
+#, perl-brace-format
+msgid "Update by {{name}}"
+msgstr ""
+
+#: db/alert_types.pl:10
+msgid "New problems on FixMyStreet"
+msgstr ""
+
+#: db/alert_types.pl:11
+msgid "The latest problems reported by users"
+msgstr ""
+
+#: db/alert_types.pl:14
+msgid "Problems recently reported fixed on FixMyStreet"
+msgstr ""
+
+#: db/alert_types.pl:15
+msgid "The latest problems reported fixed by users"
+msgstr ""
+
+#: db/alert_types.pl:18 db/alert_types.pl:22
+msgid "New local problems on FixMyStreet"
+msgstr ""
+
+#: db/alert_types.pl:19 db/alert_types.pl:23 db/alert_types.pl:27
+#: db/alert_types.pl:31
+msgid "The latest local problems reported by users"
+msgstr ""
+
+#: db/alert_types.pl:26
+#, perl-brace-format
+msgid "New problems near {{POSTCODE}} on FixMyStreet"
+msgstr ""
+
+#: db/alert_types.pl:30
+#, perl-brace-format
+msgid "New problems NEAR {{POSTCODE}} on FixMyStreet"
+msgstr ""
+
+#: db/alert_types.pl:34
+#, perl-brace-format
+msgid "New problems to {{COUNCIL}} on FixMyStreet"
+msgstr ""
+
+#: db/alert_types.pl:35
+#, perl-brace-format
+msgid "The latest problems for {{COUNCIL}} reported by users"
+msgstr ""
+
+#: db/alert_types.pl:38
+#, perl-brace-format
+msgid "New problems for {{COUNCIL}} within {{WARD}} ward on FixMyStreet"
+msgstr ""
+
+#: db/alert_types.pl:39
+#, perl-brace-format
+msgid ""
+"The latest problems for {{COUNCIL}} within {{WARD}} ward reported by users"
+msgstr ""
+
+#: db/alert_types.pl:42
+#, perl-brace-format
+msgid "New problems within {{NAME}}"
+msgstr ""
+
+#: db/alert_types.pl:43
+#, perl-brace-format
+msgid "The latest problems within {{NAME}}"
+msgstr ""
+
+#: web-admin/index.cgi:68 web-admin/index.cgi:123 web-admin/index.cgi:124
+msgid "Summary"
+msgstr ""
+
+#: web-admin/index.cgi:69 web-admin/index.cgi:182 web-admin/index.cgi:183
+msgid "Council contacts"
+msgstr ""
+
+#: web-admin/index.cgi:70 web-admin/index.cgi:464
+msgid "Search Reports"
+msgstr ""
+
+#: web-admin/index.cgi:71 web-admin/index.cgi:783 web-admin/index.cgi:784
+msgid "Timeline"
+msgstr ""
+
+#: web-admin/index.cgi:84
+msgid "FixMyStreet administration"
+msgstr ""
+
+#: web-admin/index.cgi:100
+msgid "FixMyStreet admin:"
+msgstr ""
+
+#: web-admin/index.cgi:153
+#, perl-format
+msgid "<strong>%d</strong> live problems"
+msgstr ""
+
+#: web-admin/index.cgi:154
+#, perl-format
+msgid "%d live updates"
+msgstr ""
+
+#: web-admin/index.cgi:155
+#, perl-format
+msgid "%d confirmed alerts, %d unconfirmed"
+msgstr ""
+
+#: web-admin/index.cgi:156
+#, perl-format
+msgid "%d questionnaires sent &ndash; %d answered (%d%%)"
+msgstr ""
+
+#: web-admin/index.cgi:157
+#, perl-format
+msgid "%d council contacts &ndash; %d confirmed, %d unconfirmed"
+msgstr ""
+
+#: web-admin/index.cgi:162
+msgid "Graph of problem creation by status over time"
+msgstr ""
+
+#: web-admin/index.cgi:165
+msgid "Problem breakdown by state"
+msgstr ""
+
+#: web-admin/index.cgi:170
+msgid "Update breakdown by state"
+msgstr ""
+
+#: web-admin/index.cgi:186
+msgid "Diligency prize league table"
+msgstr ""
+
+#: web-admin/index.cgi:190
+#, perl-format
+msgid "%d edits by %s"
+msgstr ""
+
+#: web-admin/index.cgi:193
+msgid "No edits have yet been made."
+msgstr ""
+
+#: web-admin/index.cgi:197
+msgid "Councils"
+msgstr ""
+
+#: web-admin/index.cgi:211 web-admin/index.cgi:586
+msgid "None"
+msgstr ""
+
+#: web-admin/index.cgi:223
+#, perl-format
+msgid "%d addresses"
+msgstr ""
+
+#: web-admin/index.cgi:229
+msgid "No info at all"
+msgstr ""
+
+#: web-admin/index.cgi:231
+msgid "Currently has 1+ deleted"
+msgstr ""
+
+#: web-admin/index.cgi:233
+msgid "Some unconfirmeds"
+msgstr ""
+
+#: web-admin/index.cgi:235
+msgid "All confirmed"
+msgstr ""
+
+#: web-admin/index.cgi:265 web-admin/index.cgi:275 web-admin/index.cgi:292
+msgid "*unknown*"
+msgstr ""
+
+#: web-admin/index.cgi:268 web-admin/index.cgi:296
+msgid "Values updated"
+msgstr ""
+
+#: web-admin/index.cgi:278
+msgid "New category contact added"
+msgstr ""
+
+#: web-admin/index.cgi:315 web-admin/index.cgi:398
+#, perl-format
+msgid "Council contacts for %s"
+msgstr ""
+
+#: web-admin/index.cgi:328
+msgid " List all reported problems"
+msgstr ""
+
+#: web-admin/index.cgi:330
+msgid "Text only version"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:477
+msgid "Category"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438 web-admin/index.cgi:477
+#: web-admin/index.cgi:656
+msgid "Email"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:368 web-admin/index.cgi:421
+#: web-admin/index.cgi:438 web-admin/index.cgi:737
+msgid "Confirmed"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:370 web-admin/index.cgi:423
+#: web-admin/index.cgi:438
+msgid "Deleted"
+msgstr ""
+
+#: web-admin/index.cgi:336
+msgid "Last editor"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438
+msgid "Note"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438
+msgid "When edited"
+msgstr ""
+
+#: web-admin/index.cgi:336
+msgid "Confirm"
+msgstr ""
+
+#: web-admin/index.cgi:353
+msgid "Update statuses"
+msgstr ""
+
+#: web-admin/index.cgi:358
+msgid "Add new category"
+msgstr ""
+
+#: web-admin/index.cgi:361 web-admin/index.cgi:415
+msgid "Category: "
+msgstr ""
+
+#: web-admin/index.cgi:364 web-admin/index.cgi:418
+msgid "Email: "
+msgstr ""
+
+#: web-admin/index.cgi:373 web-admin/index.cgi:426
+msgid "Note: "
+msgstr ""
+
+#: web-admin/index.cgi:380
+msgid "Create category"
+msgstr ""
+
+#: web-admin/index.cgi:432
+msgid "Save changes"
+msgstr ""
+
+#: web-admin/index.cgi:436
+msgid "History"
+msgstr ""
+
+#: web-admin/index.cgi:438
+msgid "Editor"
+msgstr ""
+
+#: web-admin/index.cgi:442 web-admin/index.cgi:443
+msgid "yes"
+msgstr ""
+
+#: web-admin/index.cgi:442 web-admin/index.cgi:443
+msgid "no"
+msgstr ""
+
+#: web-admin/index.cgi:470
+msgid "Search:"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "ID"
+msgstr ""
+
+#: web-admin/index.cgi:477
+msgid "Title"
+msgstr ""
+
+#: web-admin/index.cgi:477
+msgid "Council"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "Cobrand"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "Created"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "State"
+msgstr ""
+
+#: web-admin/index.cgi:477
+msgid "When sent"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "*"
+msgstr ""
+
+#: web-admin/index.cgi:499 web-admin/index.cgi:633
+msgid "Confirmed:"
+msgstr ""
+
+#: web-admin/index.cgi:500
+msgid "Fixed:"
+msgstr ""
+
+#: web-admin/index.cgi:501
+msgid "Last&nbsp;update:"
+msgstr ""
+
+#: web-admin/index.cgi:517 web-admin/index.cgi:675
+msgid "Edit"
+msgstr ""
+
+#: web-admin/index.cgi:542
+msgid "That problem will now be resent."
+msgstr ""
+
+#: web-admin/index.cgi:548
+msgid "I am afraid you cannot confirm unconfirmed reports."
+msgstr ""
+
+#: web-admin/index.cgi:577 web-admin/index.cgi:697
+msgid "Updated!"
+msgstr ""
+
+#: web-admin/index.cgi:581
+#, perl-format
+msgid "Editing problem %d"
+msgstr ""
+
+#: web-admin/index.cgi:591
+msgid "used map"
+msgstr ""
+
+#: web-admin/index.cgi:591
+msgid "didn't use map"
+msgstr ""
+
+#: web-admin/index.cgi:603 web-admin/index.cgi:733
+msgid "Remove photo (can't be undone!)"
+msgstr ""
+
+#: web-admin/index.cgi:608
+msgid "Anonymous:"
+msgstr ""
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+msgid "State:"
+msgstr ""
+
+#: web-admin/index.cgi:609
+msgid "Open"
+msgstr ""
+
+#: web-admin/index.cgi:609
+msgid "Fixed"
+msgstr ""
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+msgid "Hidden"
+msgstr ""
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+msgid "Unconfirmed"
+msgstr ""
+
+#: web-admin/index.cgi:609
+msgid "Partial"
+msgstr ""
+
+#: web-admin/index.cgi:612
+msgid "You really want to resend?"
+msgstr ""
+
+#: web-admin/index.cgi:612
+msgid "Resend report"
+msgstr ""
+
+#: web-admin/index.cgi:621
+msgid "View report on site"
+msgstr ""
+
+#: web-admin/index.cgi:624
+msgid "Co-ordinates:"
+msgstr ""
+
+#: web-admin/index.cgi:624
+msgid "originally entered"
+msgstr ""
+
+#: web-admin/index.cgi:625
+msgid "For council(s):"
+msgstr ""
+
+#: web-admin/index.cgi:625
+msgid "other areas:"
+msgstr ""
+
+#: web-admin/index.cgi:632 web-admin/index.cgi:753
+msgid "Created:"
+msgstr ""
+
+#: web-admin/index.cgi:634
+msgid "Sent:"
+msgstr ""
+
+#: web-admin/index.cgi:635
+msgid "Last update:"
+msgstr ""
+
+#: web-admin/index.cgi:636
+msgid "Service:"
+msgstr ""
+
+#: web-admin/index.cgi:637 web-admin/index.cgi:751
+msgid "Cobrand:"
+msgstr ""
+
+#: web-admin/index.cgi:638 web-admin/index.cgi:752
+msgid "Cobrand data:"
+msgstr ""
+
+#: web-admin/index.cgi:639
+msgid "Going to send questionnaire?"
+msgstr ""
+
+#: web-admin/index.cgi:643 web-admin/index.cgi:757
+msgid "Submit changes"
+msgstr ""
+
+#: web-admin/index.cgi:656
+msgid "Text"
+msgstr ""
+
+#: web-admin/index.cgi:702
+msgid "Problem marked as open."
+msgstr ""
+
+#: web-admin/index.cgi:718
+#, perl-format
+msgid "Editing update %d"
+msgstr ""
+
+#: web-admin/index.cgi:746
+msgid "View update on site"
+msgstr ""
+
+#: web-admin/index.cgi:747
+msgid "Text:"
+msgstr ""
+
+#: web-admin/index.cgi:749
+msgid "(blank to go anonymous)"
+msgstr ""
+
+#: web-admin/index.cgi:830
+#, perl-format
+msgid "by %s"
+msgstr ""
+
+#: web-admin/index.cgi:832
+#, perl-format
+msgid "Problem %d created"
+msgstr ""
+
+#: web-admin/index.cgi:836
+#, perl-format
+msgid "Problem %s confirmed"
+msgstr ""
+
+#: web-admin/index.cgi:840
+#, perl-format
+msgid "Problem %s sent to council %s"
+msgstr ""
+
+#: web-admin/index.cgi:842
+#, perl-format
+msgid "Questionnaire %d sent for problem %d"
+msgstr ""
+
+#: web-admin/index.cgi:844
+#, perl-format
+msgid "Questionnaire %d answered for problem %d, %s to %s"
+msgstr ""
+
+#: web-admin/index.cgi:849
+#, perl-format
+msgid "Update %s created for problem %d; by %s"
+msgstr ""
+
+#: web-admin/index.cgi:853
+#, perl-format
+msgid "Alert %d created for %s, type %s, parameters %s / %s"
+msgstr ""
+
+#: web-admin/index.cgi:856
+#, perl-format
+msgid "Alert %d disabled (created %s)"
+msgstr ""
+
#. Please leave the first word "Subject:" untranslated
-#: fixmystreet/templates/emails/alert-confirm
+#: templates/emails/alert-confirm
msgid ""
"Subject: Confirm your alert on FixMyStreet\n"
"\n"
@@ -1535,7 +2279,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem
+#: templates/emails/alert-problem
msgid ""
"Subject: New problems on FixMyStreet\n"
"\n"
@@ -1550,7 +2294,7 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-area
+#: templates/emails/alert-problem-area
msgid ""
"Subject: New problems in <?=$values['area_name']?> on FixMyStreet\n"
"\n"
@@ -1567,7 +2311,7 @@ msgid ""
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-council
+#: templates/emails/alert-problem-council
msgid ""
"Subject: New problems reported to <?=$values['area_name']?> on FixMyStreet\n"
"\n"
@@ -1583,7 +2327,7 @@ msgid ""
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-nearby
+#: templates/emails/alert-problem-nearby
msgid ""
"Subject: New nearby problems on FixMyStreet\n"
"\n"
@@ -1598,7 +2342,7 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-ward
+#: templates/emails/alert-problem-ward
msgid ""
"Subject: New problems reported to <?=$values['area_name']?> within <?=$values['ward_name']?> on FixMyStreet\n"
"\n"
@@ -1615,7 +2359,7 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-update
+#: templates/emails/alert-update
msgid ""
"Subject: New updates on problem - '<?=$values['title']?>'\n"
"\n"
@@ -1623,6 +2367,8 @@ msgid ""
"\n"
"<?=$values['data']?>\n"
"\n"
+"<?=$values['state_message']?>\n"
+"\n"
"To view or reply to these updates, please visit the following URL:\n"
" <?=$values['problem_url']?>\n"
"\n"
@@ -1635,7 +2381,7 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/empty property-confirm
+#: templates/emails/empty property-confirm
msgid ""
"Subject: Confirm your empty property report\n"
"\n"
@@ -1659,7 +2405,7 @@ msgid ""
"reportemptyhomes.com\n"
msgstr ""
-#: fixmystreet/templates/emails/flickr-confirm
+#: templates/emails/flickr-confirm
msgid ""
"Subject: Confirm your email address on FixMyStreet\n"
"\n"
@@ -1677,7 +2423,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/flickr-submit
+#: templates/emails/flickr-submit
msgid ""
"Subject: New photo pulled from Flickr to FixMyStreet\n"
"\n"
@@ -1695,7 +2441,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/partial
+#: templates/emails/partial
msgid ""
"Subject: Confirm your report on FixMyStreet\n"
"\n"
@@ -1713,7 +2459,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/problem-confirm
+#: templates/emails/problem-confirm
msgid ""
"Subject: Confirm your problem on FixMyStreet\n"
"\n"
@@ -1737,7 +2483,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/questionnaire
+#: templates/emails/questionnaire
msgid ""
"Subject: Questionnaire about your problem on FixMyStreet\n"
"\n"
@@ -1765,7 +2511,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/questionnaire-eha-26weeks
+#: templates/emails/questionnaire-eha-26weeks
msgid ""
"Subject: Questionnaire about your empty property report\n"
"\n"
@@ -1794,7 +2540,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/questionnaire-eha-4weeks
+#: templates/emails/questionnaire-eha-4weeks
msgid ""
"Subject: Questionnaire about your empty property report\n"
"\n"
@@ -1823,7 +2569,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/reply-autoresponse
+#: templates/emails/reply-autoresponse
msgid ""
"Subject: Automatic reply to your message to FixMyStreet\n"
"\n"
@@ -1850,7 +2596,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/submit-brent
+#: templates/emails/submit-brent
msgid ""
"Subject: FMS Problem Report: <?=$values['title']?>\n"
"\n"
@@ -1875,9 +2621,9 @@ msgid ""
"\n"
"Details: <?=$values['detail']?>\n"
"\n"
-"Easting: <?=$values['easting']?>\n"
+"<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>\n"
"\n"
-"Northing: <?=$values['northing']?>\n"
+"Longitude: <?=$values['longitude']?>\n"
"\n"
"<?=$values['closest_address_machine']?>----------\n"
"\n"
@@ -1894,7 +2640,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/submit-council
+#: templates/emails/submit-council
msgid ""
"Subject: Problem Report: <?=$values['title']?>\n"
"\n"
@@ -1919,6 +2665,10 @@ msgid ""
"\n"
"Details: <?=$values['detail']?>\n"
"\n"
+"<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>\n"
+"\n"
+"Longitude: <?=$values['longitude']?>\n"
+"\n"
"<?=$values['closest_address']?>----------\n"
"\n"
"Replies to this email will go to the user who submitted the problem.\n"
@@ -1934,7 +2684,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/submit-eha
+#: templates/emails/submit-eha
msgid ""
"Subject: Empty property report\n"
"\n"
@@ -1982,7 +2732,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/tms-confirm
+#: templates/emails/tms-confirm
msgid ""
"Subject: Confirm your expression of interest in TextMyStreet\n"
"\n"
@@ -2000,7 +2750,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/update-confirm
+#: templates/emails/update-confirm
msgid ""
"Subject: Confirm your update on FixMyStreet\n"
"\n"
@@ -2021,7 +2771,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/emptyhomes/alert-problem
+#: templates/emails/emptyhomes/alert-problem
msgid ""
"Subject: New empty properties on reportemptyhomes.com\n"
"\n"
@@ -2036,7 +2786,7 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/emptyhomes/alert-problem-area
+#: templates/emails/emptyhomes/alert-problem-area
msgid ""
"Subject: New empty properties in <?=$values['area_name']?> on reportemptyhomes.com\n"
"\n"
@@ -2053,7 +2803,7 @@ msgid ""
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/emptyhomes/alert-problem-council
+#: templates/emails/emptyhomes/alert-problem-council
msgid ""
"Subject: New empty properties reported to <?=$values['area_name']?> on reportemptyhomes.com\n"
"\n"
@@ -2069,7 +2819,7 @@ msgid ""
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/emptyhomes/alert-problem-nearby
+#: templates/emails/emptyhomes/alert-problem-nearby
msgid ""
"Subject: New nearby empty properties on reportemptyhomes.com\n"
"\n"
@@ -2084,7 +2834,7 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/emptyhomes/alert-problem-ward
+#: templates/emails/emptyhomes/alert-problem-ward
msgid ""
"Subject: New empty properties reported to <?=$values['area_name']?> within <?=$values['ward_name']?> on reportemptyhomes.com\n"
"\n"
@@ -2101,7 +2851,7 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/emptyhomes/alert-update
+#: templates/emails/emptyhomes/alert-update
msgid ""
"Subject: New updates on empty property- '<?=$values['title']?>'\n"
"\n"
diff --git a/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po b/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po
index 9c261e149..9bebc9f2e 100644
--- a/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po
+++ b/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: matthew@mysociety.org\n"
-"POT-Creation-Date: 2009-08-12 12:28+0100\n"
+"POT-Creation-Date: 2011-03-21 13:15+0000\n"
"PO-Revision-Date: 2009-07-10 14:20-0000\n"
"Last-Translator: Mark Smith <Mark.Smith@trosol.co.uk>\n"
"Language-Team: mySociety\n"
@@ -19,907 +19,1190 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: fixmystreet/perllib/Page.pm:78
+#: perllib/Cobrands/Emptyhomes/Util.pm:61 bin/send-questionnaires-eha:93
+msgid "Report Empty Homes"
+msgstr "Adrodd am Eiddo Gwag"
+
+#: perllib/Cobrands/Fiksgatami/Util.pm:37
+#, fuzzy
+msgid "Enter a nearby postcode, or street name and area"
+msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw:"
+
+#: perllib/Page.pm:86
#, perl-format
-msgid "Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
-msgstr "Rhowch gynnig eto'n ddiweddarach, neu <a href=\"mailto:%s\">anfonwch neges e-bost atom</a>i roi gwybod inni."
+msgid ""
+"Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
+msgstr ""
+"Rhowch gynnig eto'n ddiweddarach, neu <a href=\"mailto:%s\">anfonwch neges e-"
+"bost atom</a>i roi gwybod inni."
-#: fixmystreet/perllib/Page.pm:79
+#: perllib/Page.pm:87
msgid "Sorry! Something's gone wrong."
msgstr "Ymddiheuriadau! Mae rhywbeth wedi mynd o'i le."
-#: fixmystreet/perllib/Page.pm:80
+#: perllib/Page.pm:88
msgid "The text of the error was:"
msgstr "Testun y gwall oedd:"
-#: fixmystreet/perllib/Page.pm:167 fixmystreet/perllib/Page.pm:260
+#: perllib/Page.pm:195 web/contact.cgi:107
+msgid "reportemptyhomes.com"
+msgstr "reportemptyhomes.com"
+
+#: perllib/Page.pm:198 perllib/Page.pm:322
msgid "Report a property"
msgstr "Rhoi gwybod am eiddo"
-#: fixmystreet/perllib/Page.pm:168 fixmystreet/perllib/Page.pm:261
+#: perllib/Page.pm:199 perllib/Page.pm:323
msgid "Reports"
msgstr "Adroddiadau"
-#: fixmystreet/perllib/Page.pm:169 fixmystreet/perllib/Page.pm:262
+#: perllib/Page.pm:200 perllib/Page.pm:324
msgid "Get local reports"
msgstr "Gweld adroddiadau lleol"
-#: fixmystreet/perllib/Page.pm:170 fixmystreet/perllib/Page.pm:263
+#: perllib/Page.pm:201 perllib/Page.pm:325
msgid "FAQs"
msgstr "Cwestiynau Cyffredin"
-#: fixmystreet/perllib/Page.pm:171 fixmystreet/web/about.cgi:19 fixmystreet/web/about.cgi:21
+#: perllib/Page.pm:202 web/about.cgi:19 web/about.cgi:21
msgid "About us"
msgstr "Amdanom ni"
-#: fixmystreet/perllib/Page.pm:172 fixmystreet/bin/send-questionnaires-eha:93
-msgid "Report Empty Homes"
-msgstr "Adrodd am Eiddo Gwag"
-
-#: fixmystreet/perllib/Page.pm:181 fixmystreet/perllib/Page.pm:551 fixmystreet/web/contact.cgi:64
-msgid "reportemptyhomes.com"
-msgstr "reportemptyhomes.com"
-
-#: fixmystreet/perllib/Page.pm:199
+#: perllib/Page.pm:223
msgid "Fix<span id=\"my\">My</span>Street"
msgstr "Trwsio<span id=\"my\">Fy</span>Stryd"
-#: fixmystreet/perllib/Page.pm:207
-msgid "This is a developer site; things might break at any time."
+#: perllib/Page.pm:301
+#, fuzzy
+msgid ""
+"This is a developer site; things might break at any time, and the database "
+"will be periodically deleted."
msgstr "Safle datblygwr yw hwn; gallai pethau dorri unrhyw bryd."
-#: fixmystreet/perllib/Page.pm:259
+#: perllib/Page.pm:315
+msgid ""
+"Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a "
+"href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href="
+"\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa"
+"\">code</a>."
+msgstr ""
+"Adeiladwyd gan <a href=\"http://www.mysociety.org/\">mySociety</a>, gan "
+"ddefnyddio tipyn o <a href=\"https://secure.mysociety.org/cvstrac/dir?"
+"d=mysociety/services/TilMa\">god</a><a href=\"http://github.com/mysociety/"
+"fixmystreet\">clyfar</a>&nbsp;."
+
+#: perllib/Page.pm:317
+#, fuzzy
+msgid ""
+"Built by <a href=\"http://www.mysociety.org/\">mySociety</a> and maintained "
+"by <a href=\"http://www.nuug.no/\">NUUG</a>, using some <a href=\"http://"
+"github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href=\"https://secure."
+"mysociety.org/cvstrac/dir?d=mysociety/services/TilMa\">code</a>."
+msgstr ""
+"Adeiladwyd gan <a href=\"http://www.mysociety.org/\">mySociety</a>, gan "
+"ddefnyddio tipyn o <a href=\"https://secure.mysociety.org/cvstrac/dir?"
+"d=mysociety/services/TilMa\">god</a><a href=\"http://github.com/mysociety/"
+"fixmystreet\">clyfar</a>&nbsp;."
+
+#: perllib/Page.pm:321
msgid "Navigation"
msgstr "Mordwyo "
-#: fixmystreet/perllib/Page.pm:264
+#: perllib/Page.pm:326
msgid "Contact"
msgstr "Cysylltu"
-#: fixmystreet/perllib/Page.pm:265
-msgid "<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height=\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id=\"logoie\"></span></a>"
-msgstr "<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height=\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id=\"logoie\"></span></a>"
-
-#: fixmystreet/perllib/Page.pm:266
-msgid "Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href=\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa\">code</a>."
-msgstr "Adeiladwyd gan <a href=\"http://www.mysociety.org/\">mySociety</a>, gan ddefnyddio tipyn o <a href=\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa\">god</a><a href=\"http://github.com/mysociety/fixmystreet\">clyfar</a>&nbsp;."
+#: perllib/Page.pm:328
+msgid ""
+"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
+"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
+"\"logoie\"></span></a>"
+msgstr ""
+"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
+"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
+"\"logoie\"></span></a>"
-#: fixmystreet/perllib/Page.pm:299
+#: perllib/Page.pm:386
msgid "Error"
msgstr "Gwall"
-#: fixmystreet/perllib/Page.pm:375
-msgid "Crown copyright. All rights reserved. Ministry of Justice"
-msgstr "Hawlfraint y Goron. Cedwir pob hawl. Y Weinyddiaeth Amddiffyn"
-
-#: fixmystreet/perllib/Page.pm:398
-msgid "Empty property"
-msgstr "Eiddo gwag"
-
-#: fixmystreet/perllib/Page.pm:557
+#: perllib/Page.pm:448
msgid "your empty property will not be posted"
msgstr "ni fydd eich eiddo gwag yn cael ei bostio"
-#: fixmystreet/perllib/Page.pm:558
-msgid "we'll hang on to your empty property report while you're checking your email."
-msgstr "byddwn yn dal gafael ar eich hysbysiad am eiddo gwag wrth i chi wirio eich e-bost."
+#: perllib/Page.pm:449
+msgid ""
+"we'll hang on to your empty property report while you're checking your email."
+msgstr ""
+"byddwn yn dal gafael ar eich hysbysiad am eiddo gwag wrth i chi wirio eich e-"
+"bost."
-#: fixmystreet/perllib/Page.pm:560
+#: perllib/Page.pm:451
msgid "your update will not be posted"
msgstr "ni fydd eich diweddariad yn cael ei bostio"
-#: fixmystreet/perllib/Page.pm:561
+#: perllib/Page.pm:452
msgid "we'll hang on to your update while you're checking your email."
msgstr "byddwn yn dal gafael ar eich diweddariad wrth i chi wirio eich e-bost."
-#: fixmystreet/perllib/Page.pm:563
+#: perllib/Page.pm:454
msgid "your alert will not be activated"
msgstr "ni fydd eich hysbysiad yn cael ei weithredu"
-#: fixmystreet/perllib/Page.pm:564
+#: perllib/Page.pm:455
msgid "we'll hang on to your alert while you're checking your email."
msgstr "byddwn yn dal gafael ar eich hysbysiad wrth i chi wirio eich e-bost."
-#: fixmystreet/perllib/Page.pm:570
+#: perllib/Page.pm:462
#, perl-format
msgid ""
"<h1>Nearly Done! Now check your email...</h1>\n"
-"<p>The confirmation email <strong>may</strong> take a few minutes to arrive &mdash; <em>please</em> be patient.</p>\n"
-"<p>If you use web-based email or have 'junk mail' filters, you may wish to check your bulk/spam mail folders: sometimes, our messages are marked that way.</p>\n"
+"<p>The confirmation email <strong>may</strong> take a few minutes to arrive "
+"&mdash; <em>please</em> be patient.</p>\n"
+"<p>If you use web-based email or have 'junk mail' filters, you may wish to "
+"check your bulk/spam mail folders: sometimes, our messages are marked that "
+"way.</p>\n"
"<p>You must now click the link in the email we've just sent you &mdash;\n"
"if you do not, %s.</p>\n"
"<p>(Don't worry &mdash; %s)</p>\n"
msgstr ""
"<h1>Bron â gorffen! Nawr, gwiriwch eich e-bost...</h1>\n"
-"<p> <strong>Gallai'r</strong> e-bost o gadarnhad gymryd rhai munudau i gyrraedd &mdash; <em>byddwch</em> yn amyneddgar.</p>\n"
-"<p>Os ydych yn defnyddio system e-bost ar y we neu os oes gennych hidlydd 'negeseuon sgrwtsh', efallai y byddwch am wirio eich ffolderi post sbam/swmp: weithiau, caiff ein negeseuon eu marcio fel hynny.</p>\n"
-"<p>Nawr, mae'n rhaid i chi glicio'r ddolen yn yr e-bost yr ydym newydd ei anfon atoch &mdash;\n"
+"<p> <strong>Gallai'r</strong> e-bost o gadarnhad gymryd rhai munudau i "
+"gyrraedd &mdash; <em>byddwch</em> yn amyneddgar.</p>\n"
+"<p>Os ydych yn defnyddio system e-bost ar y we neu os oes gennych hidlydd "
+"'negeseuon sgrwtsh', efallai y byddwch am wirio eich ffolderi post sbam/"
+"swmp: weithiau, caiff ein negeseuon eu marcio fel hynny.</p>\n"
+"<p>Nawr, mae'n rhaid i chi glicio'r ddolen yn yr e-bost yr ydym newydd ei "
+"anfon atoch &mdash;\n"
"os nad ydych, %s.</p>\n"
"<p>(Peidiwch â phoeni &mdash; %s)</p>\n"
-#: fixmystreet/perllib/Page.pm:586
+#: perllib/Page.pm:489
msgid "today"
msgstr "heddiw"
-#: fixmystreet/perllib/Page.pm:608
+#: perllib/Page.pm:513
msgid "less than a minute"
msgstr "llai na munud"
-#: fixmystreet/perllib/Page.pm:611
-msgid "week"
+#: perllib/Page.pm:516
+#, fuzzy, perl-format
+msgid "%d week"
msgstr "wythnos"
-#: fixmystreet/perllib/Page.pm:612
-msgid "day"
+#: perllib/Page.pm:516
+#, fuzzy, perl-format
+msgid "%d weeks"
+msgstr "wythnos"
+
+#: perllib/Page.pm:517
+#, fuzzy, perl-format
+msgid "%d day"
+msgstr "diwrnod"
+
+#: perllib/Page.pm:517
+#, fuzzy, perl-format
+msgid "%d days"
msgstr "diwrnod"
-#: fixmystreet/perllib/Page.pm:613
-msgid "hour"
+#: perllib/Page.pm:518
+#, fuzzy, perl-format
+msgid "%d hour"
+msgstr "awr"
+
+#: perllib/Page.pm:518
+#, fuzzy, perl-format
+msgid "%d hours"
msgstr "awr"
-#: fixmystreet/perllib/Page.pm:614
-msgid "minute"
+#: perllib/Page.pm:519
+#, fuzzy, perl-format
+msgid "%d minute"
msgstr "munud"
-#: fixmystreet/perllib/Page.pm:634
+#: perllib/Page.pm:519
+#, fuzzy, perl-format
+msgid "%d minutes"
+msgstr "munud"
+
+#: perllib/Page.pm:539
#, perl-format
msgid "%s, reported anonymously at %s"
msgstr "Rhoddodd %s wybod yn ddi-enw am %s"
-#: fixmystreet/perllib/Page.pm:636
+#: perllib/Page.pm:541
#, perl-format
msgid "%s, reported by %s at %s"
msgstr "Adroddwyd am %s gan %s am %s"
-#: fixmystreet/perllib/Page.pm:640
+#: perllib/Page.pm:544 perllib/Page.pm:546 perllib/Page.pm:552
+#: perllib/Page.pm:554 web/index.cgi:391 web/index.cgi:562 web/index.cgi:569
+#: bin/send-reports:180
+msgid "Other"
+msgstr "Arall"
+
+#: perllib/Page.pm:545
#, perl-format
msgid "Reported by %s in the %s category anonymously at %s"
msgstr "Adroddwyd am hyn gan %s yn y categori %s yn ddi-enw, am %s"
-#: fixmystreet/perllib/Page.pm:642
+#: perllib/Page.pm:547
#, perl-format
msgid "Reported by %s in the %s category by %s at %s"
msgstr "Adroddwyd gan %s yn y categori %s trwy %s am %s"
-#: fixmystreet/perllib/Page.pm:644
+#: perllib/Page.pm:549
#, perl-format
msgid "Reported by %s anonymously at %s"
msgstr "Adroddwyd gan %s yn ddi-enw am %s"
-#: fixmystreet/perllib/Page.pm:646
+#: perllib/Page.pm:551
#, perl-format
msgid "Reported by %s by %s at %s"
msgstr "Adroddwyd gan %s trwy %s am %s"
-#: fixmystreet/perllib/Page.pm:648
+#: perllib/Page.pm:553
#, perl-format
msgid "Reported in the %s category anonymously at %s"
msgstr "Adroddiwyd yn y categori %s yn ddi-enw am %s"
-#: fixmystreet/perllib/Page.pm:650
+#: perllib/Page.pm:555
#, perl-format
msgid "Reported in the %s category by %s at %s"
msgstr "Adroddwyd yn y categori %s gan %s am %s"
-#: fixmystreet/perllib/Page.pm:652
+#: perllib/Page.pm:557 web/contact.cgi:212
#, perl-format
msgid "Reported anonymously at %s"
msgstr "Adroddwyd yn ddi-enw am %s"
-#: fixmystreet/perllib/Page.pm:654
+#: perllib/Page.pm:559 web/contact.cgi:213
#, perl-format
msgid "Reported by %s at %s"
msgstr "Adroddwyd gan %s am %s"
-#: fixmystreet/perllib/Page.pm:657
+#: perllib/Page.pm:564
msgid "the map was not used so pin location may be inaccurate"
-msgstr "ni ddefnyddiwyd y map felly mae'n bosibl na fydd lleoliad y pin yn gywir"
+msgstr ""
+"ni ddefnyddiwyd y map felly mae'n bosibl na fydd lleoliad y pin yn gywir"
-#: fixmystreet/perllib/Page.pm:664
+#: perllib/Page.pm:572
#, perl-format
msgid "Sent to %s %s later"
msgstr "Anfonwyd at %s %s yn ddiweddarach"
-#: fixmystreet/perllib/Page.pm:667
+#: perllib/Page.pm:576
msgid "Not reported to council"
msgstr "Ni roddwyd gwybod i'r cyngor am hyn"
-#: fixmystreet/perllib/Page.pm:696
+#: perllib/Page.pm:627 web-admin/index.cgi:522 web-admin/index.cgi:646
msgid "Updates"
msgstr "Diweddariadau"
-#: fixmystreet/perllib/Page.pm:700
+#: perllib/Page.pm:631
#, perl-format
msgid "Posted by %s at %s"
msgstr "Cofnodwyd gan %s am %s"
-#: fixmystreet/perllib/Page.pm:702
+#: perllib/Page.pm:633
#, perl-format
msgid "Posted anonymously at %s"
msgstr "Cofnodwyd yn ddi-enw am %s"
-#: fixmystreet/perllib/Page.pm:704
+#: perllib/Page.pm:636
msgid "marked as returned to use"
msgstr "cofnodwyd bod hyn wedi'i adfer i'w ddefnyddio"
-#: fixmystreet/perllib/Page.pm:705
+#: perllib/Page.pm:637
msgid "reopened"
msgstr "wedi'i ailagor"
-#: fixmystreet/perllib/Page.pm:734 fixmystreet/perllib/Page.pm:796
-msgid "We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region."
-msgstr "Nid ydym yn ymdrin â Gogledd Iwerddon, yn anffodus, gan nad yw ein trwydded yn cynnwys unrhyw fapiau ar gyfer y rhanbarth."
+#: perllib/Page.pm:645 web/index.cgi:1075
+msgid "Offensive? Unsuitable? Tell us"
+msgstr "Sarhaus? Anaddas? Rhowch wybod i ni"
-#: fixmystreet/perllib/Page.pm:747
+#: perllib/Page.pm:672
msgid "That postcode was not recognised, sorry."
msgstr "Ni chafodd y cod post hwnnw ei gydnabod, sori."
-#: fixmystreet/perllib/Page.pm:783
-msgid "Sorry, we could not parse that location. Please try again."
-msgstr "Sori, ni fu modd i ni ddosrannu'r lleoliad hwnnw. Rhowch gynnig arall arni."
+#: perllib/Page.pm:678
+msgid ""
+"Sorry, that appears to be a Crown dependency postcode, which we don't cover."
+msgstr ""
+
+#: perllib/Page.pm:681 perllib/FixMyStreet/Geocode.pm:145
+msgid ""
+"We do not cover Northern Ireland, I'm afraid, as our licence doesn't include "
+"any maps for the region."
+msgstr ""
+"Nid ydym yn ymdrin â Gogledd Iwerddon, yn anffodus, gan nad yw ein trwydded "
+"yn cynnwys unrhyw fapiau ar gyfer y rhanbarth."
+
+#: perllib/Page.pm:712
+msgid "Please upload a JPEG image only"
+msgstr "Dim ond llun JPEG y dylech lwytho i fyny."
+
+#: perllib/FixMyStreet/Alert.pm:147
+#, fuzzy
+msgid "This report is currently marked as returned to use."
+msgstr "Mae'r eiddo gwag hwn wedi cael ei adfer i'w ddefnyddio"
+
+#: perllib/FixMyStreet/Alert.pm:148
+msgid "This report is currently marked as open."
+msgstr ""
+
+#: perllib/FixMyStreet/Alert.pm:309
+#, fuzzy, perl-format
+msgid "Report on %s"
+msgstr "Adroddiadau"
+
+#: perllib/FixMyStreet/Geocode.pm:73
+msgid ""
+"Sorry, that location appears to be too general; please be more specific."
+msgstr ""
+"Sori, mae'n ymddangos bod y lleoliad hwnnw'n rhy gyffredinol; rhowch gynnig "
+"arall arni."
+
+#: perllib/FixMyStreet/Geocode.pm:83
+msgid "That location does not appear to be in Britain; please try again."
+msgstr ""
+"Nid yw'n ymddangos bod y lleoliad hwnnw ym Mhrydain; rhowch gynnig arall "
+"arni."
-#: fixmystreet/perllib/Page.pm:785 fixmystreet/perllib/Page.pm:793
+#: perllib/FixMyStreet/Geocode.pm:105 perllib/FixMyStreet/Geocode.pm:140
msgid "Sorry, we could not find that location."
msgstr "Sori, ni fu modd i ni ddod o hyd i'r lleoliad hwnnw."
-#: fixmystreet/perllib/Page.pm:800
-msgid "Sorry, that location appears to be too general; please be more specific."
-msgstr "Sori, mae'n ymddangos bod y lleoliad hwnnw'n rhy gyffredinol; rhowch gynnig arall arni."
+#: perllib/FixMyStreet/Geocode.pm:138
+msgid "Sorry, we could not parse that location. Please try again."
+msgstr ""
+"Sori, ni fu modd i ni ddosrannu'r lleoliad hwnnw. Rhowch gynnig arall arni."
-#: fixmystreet/perllib/Page.pm:814
-msgid "That location does not appear to be in Britain; please try again."
-msgstr "Nid yw'n ymddangos bod y lleoliad hwnnw ym Mhrydain; rhowch gynnig arall arni."
+#: perllib/FixMyStreet/Geocode.pm:158
+msgid ""
+"We found more than one match for that location. We show up to ten matches, "
+"please try a different search if yours is not here."
+msgstr ""
+"Darganfuom fwy nag un man sy'n cyfateb i'r lleoliad hwnnw. Rydym yn dangos "
+"hyd at ddeg cyfatebiaeth, rhowch gynnig ar chwiliad gwahanol os nad yw'ch "
+"lleoliad chi yno."
+
+#: perllib/FixMyStreet/Geocode.pm:173
+msgid "More than one match"
+msgstr ""
-#: fixmystreet/perllib/Page.pm:826
-msgid "We found more than one match for that location. We show up to ten matches, please try a different search if yours is not here."
-msgstr "Darganfuom fwy nag un man sy'n cyfateb i'r lleoliad hwnnw. Rydym yn dangos hyd at ddeg cyfatebiaeth, rhowch gynnig ar chwiliad gwahanol os nad yw'ch lleoliad chi yno."
+#: perllib/FixMyStreet/Map/Bing.pm:41
+#: perllib/FixMyStreet/Map/OSM/StreetView.pm:42
+#: perllib/FixMyStreet/Map/Google.pm:41
+#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:23
+msgid ""
+"Map contains Ordnance Survey data &copy; Crown copyright and database right "
+"2010."
+msgstr ""
-#: fixmystreet/perllib/Page.pm:857
-msgid "Please upload a JPEG image only"
-msgstr "Dim ond llun JPEG y dylech lwytho i fyny."
+#: perllib/FixMyStreet/Map/OSM.pm:72
+#: perllib/FixMyStreet/Map/OSM/CycleMap.pm:42
+msgid ""
+"Map &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
+msgstr ""
+
+#: perllib/FixMyStreet/Map/OSM.pm:117
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:158
+msgid "Empty property"
+msgstr "Eiddo gwag"
+
+#: perllib/FixMyStreet/Map/BingOL.pm:43
+msgid ""
+"Map contains Ordnance Survey data &copy; Crown copyright and database right "
+"2010. Microsoft"
+msgstr ""
+
+#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:23
+#, fuzzy
+msgid ""
+"&copy; Crown copyright. All rights reserved. Ministry of Justice "
+"100037819&nbsp;2008."
+msgstr "Hawlfraint y Goron. Cedwir pob hawl. Y Weinyddiaeth Amddiffyn"
-#: fixmystreet/web/about.cgi:24
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:82
+msgid "Unable to fetch the map tiles from the tile server."
+msgstr ""
+
+#: perllib/Problems.pm:148
+#, perl-format
+msgid "<big>%s</big> report in past week"
+msgid_plural "<big>%s</big> reports in past week"
+msgstr[0] "<big>%s</big> adroddiad o fewn yr wythnos ddiwethaf"
+msgstr[1] "<big>%s</big> o adroddiadau o fewn yr wythnos ddiwethaf"
+
+#: perllib/Problems.pm:153
+#, perl-format
+msgid "<big>%s</big> report recently"
+msgid_plural "<big>%s</big> reports recently"
+msgstr[0] "<big>%s</big> adroddiad yn ddiweddar"
+msgstr[1] "<big>%s</big> o adroddiadau yn ddiweddar"
+
+#: perllib/Problems.pm:159
+msgid "reportemptyhomes.com updates"
+msgstr "Diweddariadau i reportemptyhomes.com"
+
+#: perllib/Problems.pm:162 perllib/Problems.pm:166
+#, perl-format
+msgid "<big>%s</big> returned to use in past month"
+msgid_plural "<big>%s</big> returned to use in past month"
+msgstr[0] "Dychwelwyd <big>%s</big> i'w ddefnyddio yn y mis diwethaf"
+msgstr[1] "Dychwelwyd <big>%s</big> i'w defnyddio yn y mis diwethaf"
+
+#: perllib/Problems.pm:167
+#, perl-format
+msgid "<big>%s</big> update on reports"
+msgid_plural "<big>%s</big> updates on reports"
+msgstr[0] "<big>%s</big> diweddariad ar adroddiadau"
+msgstr[1] "<big>%s</big> diweddariad ar adroddiadau"
+
+#: web/about.cgi:24
msgid ""
"<h2>The Empty Homes Agency</h2>\n"
"<p>The Empty Homes agency is an independent campaigning charity. We are not\n"
-"part of government, and have no formal links with local councils although we\n"
+"part of government, and have no formal links with local councils although "
+"we\n"
"work in cooperation with both. We exist to highlight the waste of empty\n"
-"property and work with others to devise and promote sustainable solutions to\n"
+"property and work with others to devise and promote sustainable solutions "
+"to\n"
"bring empty property back into use. We are based in London but work across\n"
-"England. We also work in partnership with other charities across the UK.</p>\n"
+"England. We also work in partnership with other charities across the UK.</"
+"p>\n"
msgstr ""
"<h2>Yr Asiantaeth Tai Gwag</h2>\n"
-"<p>Mae'r Asiantaeth Tai Gwag yn elusen ymgyrchu annibynnol. Nid ydym yn rhan o'r\n"
-"llywodraeth, ac nid oes gennym unrhyw gysylltiadau ffurfiol â chynghorau lleol er ein bod\n"
-"yn cydweithio â'r naill a'r llall. Rydym yn bodoli er mwyn amlygu gwastraff yr eiddo gwag ac\n"
-"yn gweithio gyda eraill er mwyn dyfeisio a hyrwyddo atebion cynaliadwy er mwyn adfer \n"
-"eiddo gwag yn eiddo y mae pobl yn byw ynddynt eto. Rydym wedi'n lleoli yn Llundain ond\n"
-"rydym yn gweithio ledled Lloegr. Rydym hefyd yn gweithio mewn partneriaeth ag elusennau eraill ledled y DU.</p>\n"
-
-#: fixmystreet/web/about.cgi:34
+"<p>Mae'r Asiantaeth Tai Gwag yn elusen ymgyrchu annibynnol. Nid ydym yn rhan "
+"o'r\n"
+"llywodraeth, ac nid oes gennym unrhyw gysylltiadau ffurfiol â chynghorau "
+"lleol er ein bod\n"
+"yn cydweithio â'r naill a'r llall. Rydym yn bodoli er mwyn amlygu gwastraff "
+"yr eiddo gwag ac\n"
+"yn gweithio gyda eraill er mwyn dyfeisio a hyrwyddo atebion cynaliadwy er "
+"mwyn adfer \n"
+"eiddo gwag yn eiddo y mae pobl yn byw ynddynt eto. Rydym wedi'n lleoli yn "
+"Llundain ond\n"
+"rydym yn gweithio ledled Lloegr. Rydym hefyd yn gweithio mewn partneriaeth "
+"ag elusennau eraill ledled y DU.</p>\n"
+
+#: web/about.cgi:34
msgid ""
"<h2>Shelter Cymru</h2>\n"
-"Shelter Cymru is Wales&rsquo; people and homes charity and wants everyone in Wales to\n"
-"have a decent home. We believe a home is a fundamental right and essential to\n"
+"Shelter Cymru is Wales&rsquo; people and homes charity and wants everyone in "
+"Wales to\n"
+"have a decent home. We believe a home is a fundamental right and essential "
+"to\n"
"the health and well-being of people and communities. We work for people in\n"
"housing need. We have offices all over Wales and prevent people from losing\n"
"their homes by offering free, confidential and independent advice. When\n"
-"necessary we constructively challenge on behalf of people to ensure they are\n"
+"necessary we constructively challenge on behalf of people to ensure they "
+"are\n"
"properly assisted and to improve practice and learning. We believe that\n"
-"bringing empty homes back into use can make a significant contribution to the\n"
+"bringing empty homes back into use can make a significant contribution to "
+"the\n"
"supply of affordable homes in Wales.\n"
-"<a href=\"http://www.sheltercymru.org.uk/shelter/advice/pdetail.asp?cat=20\">Further information about our work on\n"
+"<a href=\"http://www.sheltercymru.org.uk/shelter/advice/pdetail.asp?cat=20"
+"\">Further information about our work on\n"
"empty homes</a>.\n"
msgstr ""
"<h2>Shelter Cymru</h2>\n"
-"Shelter Cymru yw&rsquo;r elusen yng Nghymru ar gyfer pobl a chartrefi ac rydym\n"
+"Shelter Cymru yw&rsquo;r elusen yng Nghymru ar gyfer pobl a chartrefi ac "
+"rydym\n"
"eisiau i bawb yng Nghymru gael cartref addas. Credwn fod cartref yn hawl\n"
-"sylfaenol a&rsquo;i fod yn hanfodol i iechyd a lles pobl a chymunedau. Rydym yn\n"
-"gweithio dros bobl sydd mewn angen am dai. Mae gennym swyddfeydd ar draws Cymru\n"
+"sylfaenol a&rsquo;i fod yn hanfodol i iechyd a lles pobl a chymunedau. Rydym "
+"yn\n"
+"gweithio dros bobl sydd mewn angen am dai. Mae gennym swyddfeydd ar draws "
+"Cymru\n"
"ac rydym yn atal pobl rhag colli eu cartrefi drwy gynnig cyngor annibynnol,\n"
-"cyfrinachol, am ddim. Pan fo&rsquo;r angen, rydym yn herio&rsquo;n adeiladol ar ran pobl er\n"
-"mwyn sicrhau eu bod yn cael eu cynorthwyo&rsquo;n gywir ac i wella ymarfer a dysgu.\n"
+"cyfrinachol, am ddim. Pan fo&rsquo;r angen, rydym yn herio&rsquo;n adeiladol "
+"ar ran pobl er\n"
+"mwyn sicrhau eu bod yn cael eu cynorthwyo&rsquo;n gywir ac i wella ymarfer a "
+"dysgu.\n"
"Mae Shelter Cymru yn credu y gall gwneud gwell defnydd o gartrefi gwag\n"
"gyfrannu&rsquo;n sylweddol at y ddaprariaeth o dai fforddiadwy yng Nghymru.\n"
-"<a href='http://www.sheltercymru.org.uk/shelter/cymraeg/advice/pdetail.asp?cat=20'>Gwybodaeth\n"
+"<a href='http://www.sheltercymru.org.uk/shelter/cymraeg/advice/pdetail.asp?"
+"cat=20'>Gwybodaeth\n"
"bellach am ein gwaith ar gartrefi gwag</a>.\n"
-#: fixmystreet/web/ajax.cgi:45 fixmystreet/web/ajax.cgi:55 fixmystreet/web/index.cgi:829
-#: fixmystreet/web/index.cgi:841
+#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:904 web/index.cgi:919
msgid "(returned to use)"
msgstr "(wedi'i adfer i'w ddefnyddio)"
-#: fixmystreet/web/alert.cgi:29 fixmystreet/web/confirm.cgi:46
+#: web/alert.cgi:33 web/confirm.cgi:49
msgid "Confirmation"
msgstr "Cadarnhau"
-#: fixmystreet/web/alert.cgi:38
+#: web/alert.cgi:43
+#, perl-format
msgid ""
"Thank you for trying to confirm your alert. We seem to have an error "
"ourselves\n"
"though, so <a href=\"%s\">please let us know what went on</a> and we'll look "
"into it.\n"
msgstr ""
-"Diolch am geisio cadarnhau eich rhybudd. Fodd bynnag, mae'n ymddangos bod gennym wall\n"
-"ein hunain, felly <a href=\"%s\">rhowch wybod i ni beth sydd wedi digwydd</a> ac fe wnawn ni edrych yn fanylach ar hyn.\n"
+"Diolch am geisio cadarnhau eich rhybudd. Fodd bynnag, mae'n ymddangos bod "
+"gennym wall\n"
+"ein hunain, felly <a href=\"%s\">rhowch wybod i ni beth sydd wedi digwydd</"
+"a> ac fe wnawn ni edrych yn fanylach ar hyn.\n"
-#: fixmystreet/web/alert.cgi:50 fixmystreet/web/alert.cgi:53 fixmystreet/web/alert.cgi:202
-#: fixmystreet/web/alert.cgi:269
+#: web/alert.cgi:59 web/alert.cgi:62 web/alert.cgi:65 web/alert.cgi:274
+#: web/alert.cgi:380
msgid "Local RSS feeds and email alerts"
msgstr "Porthiannau RSS a hysbysiadau e-bost lleol"
-#: fixmystreet/web/alert.cgi:99
-msgid "That location does not appear to be covered by a council, perhaps it is offshore - please try somewhere more specific."
-msgstr "Nid yw'n ymddangos bod cyngor yn gyfrifol am y lleoliad hwnnw, efallai ei fod ar y môr - chwiliwch am fan mwy penodol."
+#: web/alert.cgi:121
+msgid ""
+"That location does not appear to be covered by a council, perhaps it is "
+"offshore - please try somewhere more specific."
+msgstr ""
+"Nid yw'n ymddangos bod cyngor yn gyfrifol am y lleoliad hwnnw, efallai ei "
+"fod ar y môr - chwiliwch am fan mwy penodol."
-#: fixmystreet/web/alert.cgi:114 fixmystreet/web/alert.cgi:130
+#: web/alert.cgi:140 web/alert.cgi:183 web/alert.cgi:200
#, perl-format
msgid "Empty properties within %s"
msgstr "Eiddo gwag yn %s"
-#: fixmystreet/web/alert.cgi:116
-#, perl-format
-msgid "Empty properties within %s ward"
-msgstr "Eiddo gwag yn ward %s"
-
-#: fixmystreet/web/alert.cgi:159
+#: web/alert.cgi:152 web/alert.cgi:233
msgid "Empty properties within the boundary of:"
msgstr "Eiddo gwag o fewn ffiniau:"
-#: fixmystreet/web/alert.cgi:171
+#: web/alert.cgi:158 web/alert.cgi:245
msgid "Or empty properties reported to:"
msgstr "Neu eiddo gwag y rhoddwyd gwybod amdanynt i:"
-#: fixmystreet/web/alert.cgi:173
+#: web/alert.cgi:160 web/alert.cgi:247
msgid ""
"reportemptyhomes.com sends different categories of empty property\n"
-"to the appropriate council, so empty properties within the boundary of a particular council\n"
-"might not match the empty properties sent to that council. For example, a graffiti report\n"
-"will be sent to the district council, so will appear in both of the district\n"
-"council&rsquo;s alerts, but will only appear in the \"Within the boundary\" alert\n"
+"to the appropriate council, so empty properties within the boundary of a "
+"particular council\n"
+"might not match the empty properties sent to that council. For example, a "
+"graffiti report\n"
+"will be sent to the district council, so will appear in both of the "
+"district\n"
+"council&rsquo;s alerts, but will only appear in the \"Within the boundary\" "
+"alert\n"
"for the county council."
msgstr ""
"Mae'r Asiantaeth Tai Gwag yn anfon categorïau o eiddo gwag at y\n"
-"cyngor priodol, felly mae'n bosibl na fydd eiddo gwag o fewn ffin cyngor penodol yn \n"
-"cyfateb i'r eiddo gwag sy'n cael eu hanfon at y cyngor hwnnw. Er enghraifft, bydd adroddiad am\n"
-"graffiti'n cael ei anfon at y cyngor dosbarth, felly bydd yn ymddangos yn hysbysiadau'r\n"
+"cyngor priodol, felly mae'n bosibl na fydd eiddo gwag o fewn ffin cyngor "
+"penodol yn \n"
+"cyfateb i'r eiddo gwag sy'n cael eu hanfon at y cyngor hwnnw. Er enghraifft, "
+"bydd adroddiad am\n"
+"graffiti'n cael ei anfon at y cyngor dosbarth, felly bydd yn ymddangos yn "
+"hysbysiadau'r\n"
"rhanbarth a'r cyngor, ond dim ond yn yr hysbysiad \"O fewn y ffin\" \n"
"y bydd yn ymddangos yn achos y cyngor sir."
-#: fixmystreet/web/alert.cgi:197
+#: web/alert.cgi:185
+#, perl-format
+msgid "Empty properties within %s ward"
+msgstr "Eiddo gwag yn ward %s"
+
+#: web/alert.cgi:269
msgid "Photos of recent nearby reports"
msgstr "Ffotograffau o adroddiadau cyfagos diweddar"
-#: fixmystreet/web/alert.cgi:201
+#: web/alert.cgi:272
#, perl-format
msgid "Local RSS feeds and email alerts for &lsquo;%s&rsquo;"
msgstr "Porthiannau RSS lleol a hysbysiadau e-bost ar gyfer &lsquo;%s&rsquo;"
-#: fixmystreet/web/alert.cgi:212
+#: web/alert.cgi:286
#, perl-format
msgid "Here are the types of local empty property alerts for &lsquo;%s&rsquo;."
-msgstr "Dyma'r mathau o hysbysiadau am eiddo gwag lleol ar gyfer &lsquo;%s&rsquo;."
+msgstr ""
+"Dyma'r mathau o hysbysiadau am eiddo gwag lleol ar gyfer &lsquo;%s&rsquo;."
-#: fixmystreet/web/alert.cgi:213
+#: web/alert.cgi:287
msgid ""
"Select which type of alert you&rsquo;d like and click the button for an RSS\n"
"feed, or enter your email address to subscribe to an email alert."
msgstr ""
-"Dewiswch y math o hysbysiad yr hoffech ei gael a chliciwch y botwm ar gyfer porthiant RSS,\n"
+"Dewiswch y math o hysbysiad yr hoffech ei gael a chliciwch y botwm ar gyfer "
+"porthiant RSS,\n"
"neu rhowch eich cyfeiriad e-bost i danysgrifio am hysbysiad e-bost."
-#: fixmystreet/web/alert.cgi:216
+#: web/alert.cgi:290
msgid "The simplest alert is our geographic one:"
msgstr "Yr hysbysiad symlaf yw ein hysbysiad daearyddol:"
-#: fixmystreet/web/alert.cgi:217
+#: web/alert.cgi:291
#, perl-format
msgid "Empty properties within %skm of this location"
msgstr "Eiddo gwag o fewn %skm o'r lleoliad hwn"
-#: fixmystreet/web/alert.cgi:223
+#: web/alert.cgi:305
msgid "(a default distance which covers roughly 200,000 people)"
msgstr "(pellter rhagosodedig sy'n cynnwys tua 200,000 o bobl)"
-#: fixmystreet/web/alert.cgi:225
+#: web/alert.cgi:308
msgid "RSS feed of nearby empty properties"
msgstr "Porthiant RSS o eiddo gwag sydd gerllaw"
-#: fixmystreet/web/alert.cgi:225 fixmystreet/web/alert.cgi:257 fixmystreet/web/index.cgi:805
-#: fixmystreet/web/index.cgi:936 fixmystreet/web/reports.cgi:218
+#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:974 web/index.cgi:1086
+#: web/reports.cgi:254
msgid "RSS feed"
msgstr "Porthiant RSS"
-#: fixmystreet/web/alert.cgi:226
+#: web/alert.cgi:309
msgid "(alternatively the RSS feed can be customised, within"
msgstr "(fel arall, gellir addasu'r porthiant RSS yn bersonol, o fewn"
-#: fixmystreet/web/alert.cgi:232
-msgid "Or you can subscribe to an alert based upon what ward or council you&rsquo;re in:"
-msgstr "Neu, gallwch danysgrifio am hysbysiad yn ôl pa ward neu gyngor yr ydych yn byw ynddo:"
+#: web/alert.cgi:319
+msgid ""
+"Or you can subscribe to an alert based upon what ward or council you&rsquo;"
+"re in:"
+msgstr ""
+"Neu, gallwch danysgrifio am hysbysiad yn ôl pa ward neu gyngor yr ydych yn "
+"byw ynddo:"
-#: fixmystreet/web/alert.cgi:234
+#: web/alert.cgi:323
msgid "Give me an RSS feed"
msgstr "Rhowch borthiant RSS i mi"
-#: fixmystreet/web/alert.cgi:235
+#: web/alert.cgi:324
msgid "or"
msgstr "neu"
-#: fixmystreet/web/alert.cgi:236
+#: web/alert.cgi:325
msgid "Your email:"
msgstr "Eich cyfeiriad e-bost:"
-#: fixmystreet/web/alert.cgi:237
+#: web/alert.cgi:326
msgid "Subscribe me to an email alert"
msgstr "Dymunaf danysgrifio i rybuddion drwy e-bost"
-#: fixmystreet/web/alert.cgi:257
+#: web/alert.cgi:367
#, perl-format
msgid "RSS feed of %s"
msgstr "Porthiant RSS %s"
-#: fixmystreet/web/alert.cgi:270
+#: web/alert.cgi:381
msgid ""
-"reportemptyhomes.com has a variety of RSS feeds and email alerts for local empty properties, including\n"
-"alerts for all empty properties within a particular ward or council, or all empty properties\n"
+"reportemptyhomes.com has a variety of RSS feeds and email alerts for local "
+"empty properties, including\n"
+"alerts for all empty properties within a particular ward or council, or all "
+"empty properties\n"
"within a certain distance of a particular location."
msgstr ""
-"Mae gan reportemptyhomes.com amrywiaeth o borthiannau RSS a hysbysiadau e-bost ar gyfer eiddo gwag lleol,\n"
-"gan gynnwys hysbysiadau am bob eiddo gwag mewn ward neu gyngor penodol, neu bob eiddo gwag\n"
+"Mae gan reportemptyhomes.com amrywiaeth o borthiannau RSS a hysbysiadau e-"
+"bost ar gyfer eiddo gwag lleol,\n"
+"gan gynnwys hysbysiadau am bob eiddo gwag mewn ward neu gyngor penodol, neu "
+"bob eiddo gwag\n"
"o fewn pellter penodol o leoliad penodol."
-#: fixmystreet/web/alert.cgi:274
+#: web/alert.cgi:384
msgid ""
-"To find out what local alerts we have in your area, council or ward, please enter your GB\n"
+"To find out what local alerts we have in your area, council or ward, please "
+"enter your GB\n"
"postcode or street name and area:"
msgstr ""
-"I gael gwybod pa hysbysiadau lleol sydd gennym yn eich ardal, cyngor neu ward chi,\n"
+"I gael gwybod pa hysbysiadau lleol sydd gennym yn eich ardal, cyngor neu "
+"ward chi,\n"
"cofnodwch eich cod post Prydeinig neu enw stryd ac ardal:"
-#: fixmystreet/web/alert.cgi:276 fixmystreet/web/confirm.cgi:172 fixmystreet/web/index.cgi:147
+#: web/alert.cgi:389 web/index.cgi:165
msgid "Go"
msgstr "Ewch"
-#: fixmystreet/web/alert.cgi:282
+#: web/alert.cgi:415
msgid "Some photos of recent reports"
msgstr "Rhai ffotograffau o adroddiadau diweddar"
-#: fixmystreet/web/alert.cgi:289
+#: web/alert.cgi:423
msgid "Please select the feed you want"
msgstr "Dewiswch y porthiant rydych chi eisiau ei gael"
-#: fixmystreet/web/alert.cgi:302
+#: web/alert.cgi:446
msgid "Illegal feed selection"
msgstr "Dewis porthiant annilys"
-#: fixmystreet/web/alert.cgi:315
+#: web/alert.cgi:460
msgid "Receive email when updates are left on this empty property."
-msgstr "Derbyn neges e-bost pan fydd diweddariadau'n cael eu rhoi am yr eiddo gwag hwn."
+msgstr ""
+"Derbyn neges e-bost pan fydd diweddariadau'n cael eu rhoi am yr eiddo gwag "
+"hwn."
-#: fixmystreet/web/alert.cgi:316 fixmystreet/web/index.cgi:664 fixmystreet/web/index.cgi:923
+#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:738 web/index.cgi:1080
+#: web-admin/index.cgi:630 web-admin/index.cgi:750
msgid "Email:"
msgstr "E-bost:"
-#: fixmystreet/web/alert.cgi:317 fixmystreet/web/index.cgi:924
+#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1081
msgid "Subscribe"
msgstr "Tanysgrifio"
-#: fixmystreet/web/alert.cgi:340
+#: web/alert.cgi:487
+#, fuzzy
+msgid "Receive alerts on new local empty properties"
+msgstr "Anfonwch fanylion eiddo gwag lleol newydd ataf i drwy'r e-bost"
+
+#: web/alert.cgi:515
msgid "You have successfully subscribed to that alert."
msgstr "Rydych wedi tanysgrifio'n llwyddiannus i'r hysbysiad hwnnw."
-#: fixmystreet/web/alert.cgi:343
+#: web/alert.cgi:522
msgid "We could not validate that alert."
msgstr "Ni allem ddilysu'r hysbysiad hwnnw."
-#: fixmystreet/web/alert.cgi:362
+#: web/alert.cgi:544
msgid "You have successfully confirmed your alert."
msgstr "Rydych wedi cadarnhau'ch hysbysiad yn llwyddiannus."
-#: fixmystreet/web/alert.cgi:366
+#: web/alert.cgi:551
msgid "You have successfully deleted your alert."
msgstr "Rydych wedi dileu'ch hysbysiad yn llwyddiannus."
-#: fixmystreet/web/alert.cgi:378
+#: web/alert.cgi:571
msgid "Please enter a valid email address"
msgstr "Cofnodwch gyfeiriad e-bost dilys"
-#: fixmystreet/web/alert.cgi:379
+#: web/alert.cgi:572
msgid "Please select the type of alert you want"
msgstr "Dewiswch y math o hysbysiad rydych chi eisiau ei gael"
-#: fixmystreet/web/confirm.cgi:40
+#: web/confirm.cgi:39
+#, perl-format
msgid ""
-"Thank you for trying to confirm your update or empty property. We seem to have an\n"
-"error ourselves though, so <a href=\"%s\">please let us know what went on</a>\n"
+"Thank you for trying to confirm your update or empty property. We seem to "
+"have an\n"
+"error ourselves though, so <a href=\"%s\">please let us know what went on</"
+"a>\n"
"and we'll look into it.\n"
msgstr ""
-"Diolch am geisio cadarnhau eich diweddariad neu eich eiddo gwag. Fodd bynnag, \n"
-"mae'n ymddangos bod gwall gennym ein hunain, felly <a href=\"%s\">rhowch wybod i ni beth ddigwyddodd</a>\n"
+"Diolch am geisio cadarnhau eich diweddariad neu eich eiddo gwag. Fodd "
+"bynnag, \n"
+"mae'n ymddangos bod gwall gennym ein hunain, felly <a href=\"%s\">rhowch "
+"wybod i ni beth ddigwyddodd</a>\n"
"ac fe wnawn ni edrych yn fanylach i hyn.\n"
-#: fixmystreet/web/confirm.cgi:97
+#: web/confirm.cgi:101
#, perl-format
-msgid "You have successfully confirmed your update and you can now <a href=\"%s\">view it on the site</a>."
-msgstr "Rydych wedi cadarnhau eich diweddariad yn llwyddiannus ac nawr gallwch <a href=\"%s\">weld hwn ar y safle</a>."
+msgid ""
+"You have successfully confirmed your update and you can now <a href=\"%s"
+"\">view it on the site</a>."
+msgstr ""
+"Rydych wedi cadarnhau eich diweddariad yn llwyddiannus ac nawr gallwch <a "
+"href=\"%s\">weld hwn ar y safle</a>."
-#: fixmystreet/web/confirm.cgi:118
+#: web/confirm.cgi:131
msgid "Sorry, there has been an error confirming your empty property."
msgstr "Sori, bu gwall wrth gadarnhau eich eiddo gwag."
-#: fixmystreet/web/confirm.cgi:131
+#: web/confirm.cgi:139
+#, fuzzy
msgid ""
"Thank you for reporting an empty property on\n"
-"ReportEmptyHomes.com. We have emailed the empty property officer in the council\n"
-"responsible with the details and asked them to do whatever they can to get the\n"
+"ReportEmptyHomes.com. We have emailed the lead officer for empty homes in "
+"the council\n"
+"responsible with details, and asked them to do whatever they can to get the\n"
"empty property back into use as soon as possible."
msgstr ""
"Diolch am roi gwybod am eiddo gwag ar\n"
-"ReportEmptyHomes.com. Rydym wedi anfon neges e-bost gyda'r manylion at y swyddog eiddo gwag yn \n"
-"y cyngor cyfrifol ac wedi gofyn iddynt wneud beth bynnag y gallant i helpu adfer yr eiddo gwag\n"
+"ReportEmptyHomes.com. Rydym wedi anfon neges e-bost gyda'r manylion at y "
+"swyddog eiddo gwag yn \n"
+"y cyngor cyfrifol ac wedi gofyn iddynt wneud beth bynnag y gallant i helpu "
+"adfer yr eiddo gwag\n"
"fel ei fod yn cael ei ddefnyddio eto cyn gynted ag y bo modd."
-#: fixmystreet/web/confirm.cgi:135
+#: web/confirm.cgi:143
+#, fuzzy
msgid ""
-"Most councils are quite good at bringing empty properties back into use. Even\n"
-"so the process can sometimes be slow, especially if the property is in very poor\n"
-"repair or the owner is unwilling to act. In most cases it takes six months\n"
-"before you can expect to see anything change. This doesn&rsquo;t mean the council\n"
-"isn&rsquo;t doing anything. We encourage councils to update the website so you can\n"
-"see what is happening."
+"It is worth noting however that the process can sometimes be slow,\n"
+"especially if the property is in very poor repair or the owner is unwilling "
+"to\n"
+"act. In most cases it can take six months or more before you can expect to "
+"see\n"
+"anything change and sometimes there may be considerable barries to a "
+"property\n"
+"being brought back into use. This doesn&rsquo;t mean the council isn&rsquo;"
+"t\n"
+"doing anything. We encourage councils to update the website so you can\n"
+"see what is happening. It may be a long process, but you reporting your\n"
+"concerns about this property to the council is a valuable first step."
msgstr ""
-"Mae'r rhan fwyaf o gynghorau'n eithaf da wrth adfer eiddo gwag i'w defnydd eto. Er hynny,\n"
-"mae'r broses weithiau'n gallu bod yn araf, yn enwedig os yw cyflwr yr eiddo'n \n"
-"ddrwg iawn neu os nad yw'r perchennog yn barod i weithredu. Gan amlaf, mae'n cymryd tua chwe mis\n"
-"cyn y gallwch ddisgwyl gweld unrhyw beth yn newid. Nid yw hyn yn golygu nad yw'r cyngor\n"
+"Mae'r rhan fwyaf o gynghorau'n eithaf da wrth adfer eiddo gwag i'w defnydd "
+"eto. Er hynny,\n"
+"mae'r broses weithiau'n gallu bod yn araf, yn enwedig os yw cyflwr yr "
+"eiddo'n \n"
+"ddrwg iawn neu os nad yw'r perchennog yn barod i weithredu. Gan amlaf, mae'n "
+"cymryd tua chwe mis\n"
+"cyn y gallwch ddisgwyl gweld unrhyw beth yn newid. Nid yw hyn yn golygu nad "
+"yw'r cyngor\n"
"yn gwneud unrhyw beth. Rydym yn annog cynghorau i ddiweddaru'r wefan \n"
"fel y gallwch weld beth sy'n digwydd."
-#: fixmystreet/web/confirm.cgi:141
+#: web/confirm.cgi:151
msgid ""
-"We will contact you again in a month and again after six months to ask what has\n"
-"happened. Hopefully the property will be well on the way to being brought back\n"
-"into use by then, but if not we can offer advice on what you can do next."
+"We may contact you periodically to ask if anything has changed\n"
+"with the property you reported."
msgstr ""
-"Byddwn yn cysylltu â chi eto ymhen mis ac eto ymhen chwe mis i holi beth sydd wedi digwydd.\n"
-"Ein gobaith yw y bydd yr eiddo wrthi'n cael ei adfer i'w ddefnyddio erbyn hynny,\n"
-"ond os nad ydyw, gallwn gynnig cyngor ar yr beth y gallwch ei wneud nesaf."
-#: fixmystreet/web/confirm.cgi:144
+#: web/confirm.cgi:153
msgid ""
"Thank you for using ReportEmptyHomes.com. Your action is already helping\n"
"to resolve the UK&rsquo;s empty homes crisis."
msgstr ""
-"Diolch am ddefnyddio ReportEmptyHomes.com. Mae eich gweithred eisoes yn helpu i \n"
+"Diolch am ddefnyddio ReportEmptyHomes.com. Mae eich gweithred eisoes yn "
+"helpu i \n"
"ddatrys argyfwng tai gwag y DU."
-#: fixmystreet/web/confirm.cgi:146 fixmystreet/web/confirm.cgi:149
+#: web/confirm.cgi:155 web/confirm.cgi:158
msgid "View your report"
msgstr "Gweld eich adroddiad"
-#: fixmystreet/web/confirm.cgi:148
+#: web/confirm.cgi:157
msgid "Thank you for reporting an empty property on ReportEmptyHomes.com."
msgstr "Diolch am roi gwybod am eiddo gwag ar ReportEmptyHomes.com."
-#: fixmystreet/web/confirm.cgi:153
+#: web/confirm.cgi:163
msgid "You have successfully confirmed your empty property"
msgstr "Rydych wedi cadarnhau eich eiddo gwag yn llwyddiannus"
-#: fixmystreet/web/confirm.cgi:154
+#: web/confirm.cgi:164
msgid " and <strong>we will now send it to the council</strong>"
msgstr " a <strong>byddwn nawr yn ei anfon at y cyngor</strong>"
-#: fixmystreet/web/confirm.cgi:155
+#: web/confirm.cgi:165
#, perl-format
msgid ". You can <a href=\"%s\">view the empty property on this site</a>."
msgstr ". Gallwch <a href=\"%s\">weld yr eiddo gwag ar y safle hwn</a>."
-#: fixmystreet/web/confirm.cgi:169
-msgid "Thanks, glad to hear it's been returned to use! Could we just ask if you have ever reported an empty property to a council before?"
-msgstr "Diolch, falch o glywed ei fod wedi cael ei adfer i'w ddefnyddio! Fyddai modd i ni'ch holi chi, a ydych erioed wedi rhoi gwybod i'r cyngor am eiddo gwag cyn hyn?"
+#: web/confirm.cgi:189
+msgid ""
+"Thanks, glad to hear it's been returned to use! Could we just ask if you "
+"have ever reported an empty property to a council before?"
+msgstr ""
+"Diolch, falch o glywed ei fod wedi cael ei adfer i'w ddefnyddio! Fyddai modd "
+"i ni'ch holi chi, a ydych erioed wedi rhoi gwybod i'r cyngor am eiddo gwag "
+"cyn hyn?"
-#: fixmystreet/web/confirm.cgi:170 fixmystreet/web/questionnaire.cgi:246
+#: web/confirm.cgi:190 web/questionnaire.cgi:234 web/questionnaire.cgi:323
+#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
+#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "Yes"
msgstr "Ydw"
-#: fixmystreet/web/confirm.cgi:171 fixmystreet/web/questionnaire.cgi:247
+#: web/confirm.cgi:191 web/questionnaire.cgi:235 web/questionnaire.cgi:324
+#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
+#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "No"
msgstr "Nac ydw"
-#: fixmystreet/web/confirm.cgi:209
+#: web/confirm.cgi:192 web/index.cgi:790
+msgid "Submit"
+msgstr "Anfon"
+
+#: web/confirm.cgi:237
#, perl-format
-msgid "Thank you &mdash; you can <a href=\"%s\">view your updated empty property</a> on the site."
-msgstr "Diolch &mdash; gallwch <a href=\"%s\">weld diweddariad eich eiddo gwag</a> ar y safle."
+msgid ""
+"Thank you &mdash; you can <a href=\"%s\">view your updated empty property</"
+"a> on the site."
+msgstr ""
+"Diolch &mdash; gallwch <a href=\"%s\">weld diweddariad eich eiddo gwag</a> "
+"ar y safle."
-#: fixmystreet/web/contact.cgi:22
+#: web/contact.cgi:22
msgid "Contact Us"
msgstr "Cysylltwch â Ni"
-#: fixmystreet/web/contact.cgi:39
+#: web/contact.cgi:41
msgid "Please give your name"
msgstr "Rhowch eich enw"
-#: fixmystreet/web/contact.cgi:41
+#: web/contact.cgi:43
msgid "Please give your email"
msgstr "Rhowch eich cyfeiriad e-bost"
-#: fixmystreet/web/contact.cgi:43
+#: web/contact.cgi:45
msgid "Please give a valid email address"
msgstr "Rhowch gyfeiriad e-bost dilys"
-#: fixmystreet/web/contact.cgi:45
+#: web/contact.cgi:47
msgid "Please give a subject"
msgstr "Rhowch destun"
-#: fixmystreet/web/contact.cgi:46
+#: web/contact.cgi:48
msgid "Please write a message"
msgstr "Ysgrifennwch neges"
-#: fixmystreet/web/contact.cgi:47
+#: web/contact.cgi:49
msgid "Illegal ID"
msgstr "ID Anghyfreithlon"
-#: fixmystreet/web/contact.cgi:70
+#: web/contact.cgi:86
msgid "Thanks for your feedback. We'll get back to you as soon as we can!"
msgstr "Diolch am eich adborth. Byddwn yn eich ateb cyn gynted ag y gallwn!"
-#: fixmystreet/web/contact.cgi:84
-msgid "Contact the team"
-msgstr "Cysylltu â'r tîm"
-
-#: fixmystreet/web/contact.cgi:103
-msgid "You are reporting the following empty property report for being abusive, containing personal information, or similar:"
-msgstr "Rydych yn cwyno am yr adroddiad canlynol am eiddo gwag gan ei fod yn sarhaus, neu'n cynnwys gwybodaeth bersonol, neu debyg:"
-
-#: fixmystreet/web/contact.cgi:160
-msgid ""
-"You are reporting the following update for being abusive, containing "
-"personal information, or similar:"
-msgstr ""
-
-#: fixmystreet/web/contact.cgi:115
+#: web/contact.cgi:134
msgid ""
"We&rsquo;d love to hear what you think about this\n"
-"website. Just fill in the form. Please don&rsquo;t contact us about individual empty\n"
+"website. Just fill in the form. Please don&rsquo;t contact us about "
+"individual empty\n"
"homes; use the box accessed from <a href=\"/\">the front page</a>."
msgstr ""
"Byddem wrth ein bodd yn clywed eich barn am y wefan hon.\n"
-"Dim ond llenwi'r ffurflen sydd angen i chi ei wneud. Peidiwch â defnyddio hwn i gysylltu â ni am dai gwag unigol;\n"
+"Dim ond llenwi'r ffurflen sydd angen i chi ei wneud. Peidiwch â defnyddio "
+"hwn i gysylltu â ni am dai gwag unigol;\n"
"defnyddiwch y blwch sydd i'w gael ar y <a href=\"/\">dudalen flaen</a>."
-#: fixmystreet/web/contact.cgi:121
+#: web/contact.cgi:141
msgid ""
-"Please do <strong>not</strong> report empty properties through this form; messages go to\n"
-"the team behind reportemptyhomes.com, not a council. To report an empty property,\n"
+"Please do <strong>not</strong> report empty properties through this form; "
+"messages go to\n"
+"the team behind reportemptyhomes.com, not a council. To report an empty "
+"property,\n"
"please <a href=\"/\">go to the front page</a> and follow the instructions."
msgstr ""
-"<strong>Peidiwch</strong> ag adrodd am eiddo gwag drwy gyfrwng y ffurflen hon;\n"
-"bydd y negeseuon yn mynd at y tîm sydd y tu ôl i reportemptyhomes.com, nid at gyngor.\n"
-"I roi gwybod am eiddo gwag <a href=\"/\">ewch i'r dudalen flaen</a> a dilynwch y cyfarwyddiadau."
-
-#: fixmystreet/web/contact.cgi:124
+"<strong>Peidiwch</strong> ag adrodd am eiddo gwag drwy gyfrwng y ffurflen "
+"hon;\n"
+"bydd y negeseuon yn mynd at y tîm sydd y tu ôl i reportemptyhomes.com, nid "
+"at gyngor.\n"
+"I roi gwybod am eiddo gwag <a href=\"/\">ewch i'r dudalen flaen</a> a "
+"dilynwch y cyfarwyddiadau."
+
+#: web/contact.cgi:144
#, perl-format
-msgid "We'd love to hear what you think about this site. Just fill in the form, or send an email to <a href='mailto:%s'>%s</a>:"
-msgstr "Byddai'n dda gennym glywed eich barn am y wefan hon. Llenwch y ffurflen, neu anfonwch neges e-bost at <a href='mailto:%s'>%s</a>:"
+msgid ""
+"We'd love to hear what you think about this site. Just fill in the form, or "
+"send an email to <a href='mailto:%s'>%s</a>:"
+msgstr ""
+"Byddai'n dda gennym glywed eich barn am y wefan hon. Llenwch y ffurflen, neu "
+"anfonwch neges e-bost at <a href='mailto:%s'>%s</a>:"
-#: fixmystreet/web/contact.cgi:126
+#: web/contact.cgi:153 web/index.cgi:446
+msgid "There were problems with your report. Please see below."
+msgstr "Cafwyd anhawsterau gyda'ch adroddiad. Gweler isod."
+
+#: web/contact.cgi:158
+msgid "Contact the team"
+msgstr "Cysylltu â'r tîm"
+
+#: web/contact.cgi:196
+msgid ""
+"You are reporting the following update for being abusive, containing "
+"personal information, or similar:"
+msgstr ""
+
+#: web/contact.cgi:207
+msgid ""
+"You are reporting the following empty property report for being abusive, "
+"containing personal information, or similar:"
+msgstr ""
+"Rydych yn cwyno am yr adroddiad canlynol am eiddo gwag gan ei fod yn "
+"sarhaus, neu'n cynnwys gwybodaeth bersonol, neu debyg:"
+
+#: web/contact.cgi:234
msgid "Your name:"
msgstr "Eich enw:"
-#: fixmystreet/web/contact.cgi:127
+#: web/contact.cgi:235
msgid "Your&nbsp;email:"
msgstr "Eich&nbsp;cyfeiriad e-bost:"
-#: fixmystreet/web/contact.cgi:128 fixmystreet/web/index.cgi:660
+#: web/contact.cgi:236 web/index.cgi:734 web-admin/index.cgi:622
msgid "Subject:"
msgstr "Pwnc:"
-#: fixmystreet/web/contact.cgi:129
+#: web/contact.cgi:237
msgid "Message:"
msgstr "Neges:"
-#: fixmystreet/web/contact.cgi:130 fixmystreet/web/index.cgi:958
+#: web/contact.cgi:238 web/index.cgi:1096
msgid "Post"
msgstr "Postio"
-#: fixmystreet/web/faq.cgi:18
+#: web/faq.cgi:18
msgid "Frequently Asked Questions"
msgstr "Cwestiynau Cyffredin"
-#: fixmystreet/web/flickr.cgi:45
+#: web/flickr.cgi:45
msgid ""
"Thank you for trying to register for your Flickr photos. We seem to have a\n"
-"empty property ourselves though, so <a href=\"/contact\">please let us know what went on</a>\n"
+"empty property ourselves though, so <a href=\"/contact\">please let us know "
+"what went on</a>\n"
"and we'll look into it.\n"
msgstr ""
-"Diolch am geisio cofrestru ar gyfer eich ffotograffau Flickr . Mae'n ymddangos bod gennym \n"
-"ein heiddo gwag ein hunain fodd bynnag, felly <a href=\"/contact\">rhowch wybod i ni beth ddigwyddodd</a>\n"
+"Diolch am geisio cofrestru ar gyfer eich ffotograffau Flickr . Mae'n "
+"ymddangos bod gennym \n"
+"ein heiddo gwag ein hunain fodd bynnag, felly <a href=\"/contact\">rhowch "
+"wybod i ni beth ddigwyddodd</a>\n"
"ac fe wnawn ni edrych iddo.\n"
-#: fixmystreet/web/fun.cgi:17 fixmystreet/web/fun.cgi:25
+#: web/fun.cgi:17 web/fun.cgi:25
msgid "Weird and Wonderful reports"
msgstr "Adroddiadau rhyfeddol a rhagorol"
-#: fixmystreet/web/index.cgi:74
+#: web/index.cgi:82
msgid "Submitting your report"
msgstr "Cyflwyno'ch adroddiad"
-#: fixmystreet/web/index.cgi:77
+#: web/index.cgi:85
msgid "Submitting your update"
msgstr "Cyflwyno'ch diweddariad"
-#: fixmystreet/web/index.cgi:81 fixmystreet/web/index.cgi:558 fixmystreet/web/index.cgi:572
+#: web/index.cgi:89 web/index.cgi:644
msgid "Reporting an empty property"
msgstr "Adrodd am eiddo gwag"
-#: fixmystreet/web/index.cgi:84
+#: web/index.cgi:92
msgid "Viewing an empty property"
msgstr "Gweld eiddo gwag"
-#: fixmystreet/web/index.cgi:87
+#: web/index.cgi:95
msgid "Viewing a location"
msgstr "Gweld lleoliad"
-#: fixmystreet/web/index.cgi:103
+#: web/index.cgi:120
+msgid "Enter a nearby GB postcode, or street name and area"
+msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw"
+
+#: web/index.cgi:134
msgid "Report and view empty properties"
msgstr "Adrodd am eiddo gwag a gweld y rhain"
-#: fixmystreet/web/index.cgi:104
+#: web/index.cgi:135
msgid " "
msgstr " "
-#: fixmystreet/web/contact.cgi:124 fixmystreet/web/index.cgi:436
-msgid "There were problems with your report. Please see below."
-msgstr "Cafwyd anhawsterau gyda'ch adroddiad. Gweler isod."
-
-#: fixmystreet/web/index.cgi:125
-#, perl-format
-msgid "<big>%s</big> report in past week"
-msgid_plural "<big>%s</big> reports in past week"
-msgstr[0] "<big>%s</big> adroddiad o fewn yr wythnos ddiwethaf"
-msgstr[1] "<big>%s</big> o adroddiadau o fewn yr wythnos ddiwethaf"
-
-#: fixmystreet/web/index.cgi:130
-#, perl-format
-msgid "<big>%s</big> report recently"
-msgid_plural "<big>%s</big> reports recently"
-msgstr[0] "<big>%s</big> adroddiad yn ddiweddar"
-msgstr[1] "<big>%s</big> o adroddiadau yn ddiweddar"
-
-#: fixmystreet/web/index.cgi:138
-msgid "Thanks for uploading your photo. We now need to locate your empty property, so please enter a nearby street name or postcode in the box below&nbsp;:"
-msgstr "Diolch am lwytho'ch ffotograff i fyny. Nawr mae angen i ni ddod o hyd i leoliad eich eiddo gwag, felly rhowch enw stryd gerllaw neu god post yn y blwch isod&nbsp;:"
-
-#: fixmystreet/web/index.cgi:146
-msgid "Enter a nearby GB postcode, or street name and area:"
-msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw:"
+#: web/index.cgi:157
+msgid ""
+"Thanks for uploading your photo. We now need to locate your empty property, "
+"so please enter a nearby street name or postcode in the box below&nbsp;:"
+msgstr ""
+"Diolch am lwytho'ch ffotograff i fyny. Nawr mae angen i ni ddod o hyd i "
+"leoliad eich eiddo gwag, felly rhowch enw stryd gerllaw neu god post yn y "
+"blwch isod&nbsp;:"
-#: fixmystreet/web/index.cgi:156
+#: web/index.cgi:175
msgid "How to report an empty property"
msgstr "Sut i roi gwybod am eiddo gwag"
-#: fixmystreet/web/index.cgi:157
-msgid "The details will be sent directly to the right person in the local council for them to take action"
-msgstr "Caiff y manylion eu hanfon yn uniongyrchol at yr unigolyn cywir yn y cyngor lleol er mwyn iddynt weithredu"
-
-#: fixmystreet/web/index.cgi:161
-msgid "Enter a nearby GB postcode, or street name and area"
-msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw"
-
-#: fixmystreet/web/index.cgi:162
+#: web/index.cgi:178
msgid "Locate the empty property on a map of the area"
msgstr "Chwiliwch am leoliad yr eiddo gwag ar fap o'r ardal"
-#: fixmystreet/web/index.cgi:163
+#: web/index.cgi:179
msgid "Enter details of the empty property"
msgstr "Rhowch fanylion yr eiddo gwag"
-#: fixmystreet/web/index.cgi:169
-msgid "reportemptyhomes.com updates"
-msgstr "Diweddariadau i reportemptyhomes.com"
-
-#: fixmystreet/web/index.cgi:172
-#, perl-format
-msgid "<big>%s</big> returned to use in past month"
-msgid_plural "<big>%s</big> returned to use in past month"
-msgstr[0] "Dychwelwyd <big>%s</big> i'w ddefnyddio yn y mis diwethaf"
-msgstr[1] "Dychwelwyd <big>%s</big> i'w defnyddio yn y mis diwethaf"
-
-#: fixmystreet/web/index.cgi:174
-#, perl-format
-msgid "<big>%s</big> update on reports"
-msgid_plural "<big>%s</big> updates on reports"
-msgstr[0] "<big>%s</big> diweddariad ar adroddiadau"
-msgstr[1] "<big>%s</big> diweddariad ar adroddiadau"
+#: web/index.cgi:180
+msgid ""
+"The details will be sent directly to the right person in the local council "
+"for them to take action"
+msgstr ""
+"Caiff y manylion eu hanfon yn uniongyrchol at yr unigolyn cywir yn y cyngor "
+"lleol er mwyn iddynt weithredu"
-#: fixmystreet/web/index.cgi:185
+#: web/index.cgi:195
msgid "Photos of recent reports"
msgstr "Ffotograffau o adroddiadau diweddar"
-#: fixmystreet/web/index.cgi:188
+#: web/index.cgi:197
msgid "Recently reported empty properties"
msgstr "Eiddo gwag yr adroddwyd amdanynt yn ddiweddar"
-#: fixmystreet/web/index.cgi:211
+#: web/index.cgi:221
msgid "Please enter a message"
msgstr "Ychwanegwch neges"
-#: fixmystreet/web/index.cgi:214 fixmystreet/web/index.cgi:286
+#: web/index.cgi:224 web/index.cgi:308
msgid "Please enter your email"
msgstr "Cofnodwch eich cyfeiriad e-bost"
-#: fixmystreet/web/index.cgi:216 fixmystreet/web/index.cgi:288
+#: web/index.cgi:226 web/index.cgi:310
msgid "Please enter a valid email"
msgstr "Cofnodwch gyfeiriad e-bost dilys"
-#: fixmystreet/web/index.cgi:225 fixmystreet/web/index.cgi:356
+#: web/index.cgi:235 web/index.cgi:377
#, perl-format
-msgid "That image doesn't appear to have uploaded correctly (%s), please try again."
-msgstr "Nid yw'n ymddangos bod y ddelwedd honno wedi llwytho i fyny'n gywir (%s), rhowch gynnig arni eto."
+msgid ""
+"That image doesn't appear to have uploaded correctly (%s), please try again."
+msgstr ""
+"Nid yw'n ymddangos bod y ddelwedd honno wedi llwytho i fyny'n gywir (%s), "
+"rhowch gynnig arni eto."
-#: fixmystreet/web/index.cgi:246
+#: web/index.cgi:257 web-admin/index.cgi:477
msgid "Anonymous"
msgstr "Di-enw"
-#: fixmystreet/web/index.cgi:277
+#: web/index.cgi:299
msgid "No council selected"
msgstr "Ni ddewiswyd cyngor"
-#: fixmystreet/web/index.cgi:278
+#: web/index.cgi:300
msgid "Please enter a subject"
msgstr "Rhowch enw'r pwnc"
-#: fixmystreet/web/index.cgi:279
+#: web/index.cgi:301
msgid "Please enter some details"
msgstr "Cofnodwch fanylion"
-#: fixmystreet/web/index.cgi:281
+#: web/index.cgi:303
msgid "Please enter your name"
msgstr "Cofnodwch eich enw"
-#: fixmystreet/web/index.cgi:283
-msgid "Please enter your full name - if you do not wish your name to be shown on the site, untick the box"
-msgstr "Cofnodwch eich enw llawn - os nad ydych yn dymuno bod eich enw'n cael ei ddangos ar y safle, cliciwch i ddileu'r tic o'r bocs"
+#: web/index.cgi:305
+msgid ""
+"Please enter your full name - if you do not wish your name to be shown on "
+"the site, untick the box"
+msgstr ""
+"Cofnodwch eich enw llawn - os nad ydych yn dymuno bod eich enw'n cael ei "
+"ddangos ar y safle, cliciwch i ddileu'r tic o'r bocs"
+
+#: web/index.cgi:312 web/index.cgi:569
+#, fuzzy
+msgid "-- Pick a category --"
+msgstr "-- Dewiswch fath o eiddo --"
-#: fixmystreet/web/index.cgi:291
+#: web/index.cgi:313 web/index.cgi:353
msgid "Please choose a category"
msgstr "Dewiswch gategori"
-#: fixmystreet/web/index.cgi:293 fixmystreet/web/index.cgi:529
+#: web/index.cgi:315 web/index.cgi:576
msgid "-- Pick a property type --"
msgstr "-- Dewiswch fath o eiddo --"
-#: fixmystreet/web/index.cgi:294
+#: web/index.cgi:316
msgid "Please choose a property type"
msgstr "Dewiswch fath o eiddo"
-#: fixmystreet/web/index.cgi:316
+#: web/index.cgi:337
msgid "That location is not part of that council"
msgstr "Nid yw'r lleoliad hwnnw'n rhan o'r cyngor hwnnw"
-#: fixmystreet/web/index.cgi:336
+#: web/index.cgi:357
msgid "We have details for that council"
msgstr "Mae gennym fanylion ar gyfer y cyngor hwnnw"
-#: fixmystreet/web/index.cgi:345
+#: web/index.cgi:366
msgid "Somehow, you only have one co-ordinate. Please try again."
-msgstr "Rhywffordd neu gilydd, dim ond un cyfesuryn sydd gennych. Rhowch gynnig arni eto."
+msgstr ""
+"Rhywffordd neu gilydd, dim ond un cyfesuryn sydd gennych. Rhowch gynnig arni "
+"eto."
-#: fixmystreet/web/index.cgi:347
+#: web/index.cgi:368
msgid "You haven't specified any sort of co-ordinates. Please try again."
-msgstr "Nid ydych wedi pennu unrhyw fath o gyfesurynnau. Rhowch gynnig arni eto."
-
-#: fixmystreet/web/index.cgi:370 fixmystreet/web/index.cgi:515 fixmystreet/web/index.cgi:522
-msgid "Other"
-msgstr "Arall"
+msgstr ""
+"Nid ydych wedi pennu unrhyw fath o gyfesurynnau. Rhowch gynnig arni eto."
-#: fixmystreet/web/index.cgi:386
+#: web/index.cgi:407
#, perl-format
-msgid "You have successfully confirmed your report and you can now <a href=\"%s\">view it on the site</a>."
-msgstr "Rydych wedi cadarnhau eich adroddiad yn llwyddiannus ac nawr gallwch <a href=\"%s\">weld eich adroddiad ar y safle</a>."
+msgid ""
+"You have successfully confirmed your report and you can now <a href=\"%s"
+"\">view it on the site</a>."
+msgstr ""
+"Rydych wedi cadarnhau eich adroddiad yn llwyddiannus ac nawr gallwch <a href="
+"\"%s\">weld eich adroddiad ar y safle</a>."
-#: fixmystreet/web/index.cgi:501
+#: web/index.cgi:549
msgid ""
"That spot does not appear to be covered by a council.\n"
"If you have tried to report an issue past the shoreline, for example,\n"
@@ -929,58 +1212,67 @@ msgstr ""
"Os ydych wedi ceisio adrodd am broblem oddi ar y lân, er enghraifft,\n"
"dylech nodi'r pwynt agosaf ar y tir."
-#: fixmystreet/web/index.cgi:523
+#: web/index.cgi:570 web-admin/index.cgi:628
msgid "Category:"
msgstr "Categori:"
-#: fixmystreet/web/index.cgi:529
+#: web/index.cgi:576
msgid "Empty house or bungalow"
msgstr "TÅ· neu fyngalo gwag"
-#: fixmystreet/web/index.cgi:530
+#: web/index.cgi:577
msgid "Empty flat or maisonette"
msgstr "Fflat neu fflat deulawr gwag"
-#: fixmystreet/web/index.cgi:530
+#: web/index.cgi:577
msgid "Whole block of empty flats"
msgstr "Bloc cyfan o fflatiau gwag"
-#: fixmystreet/web/index.cgi:531
+#: web/index.cgi:578
msgid "Empty office or other commercial"
msgstr "Swyddfa wag neu fan masnachol gwag arall"
-#: fixmystreet/web/index.cgi:531
+#: web/index.cgi:578
msgid "Empty pub or bar"
msgstr "Tafarn neu far gwag"
-#: fixmystreet/web/index.cgi:532
+#: web/index.cgi:579
msgid "Empty public building - school, hospital, etc."
msgstr "Adeilad cyhoeddus gwag - ysgol, ysbyty, ac ati."
-#: fixmystreet/web/index.cgi:533
+#: web/index.cgi:580
msgid "Property type:"
msgstr "Math o eiddo:"
-#: fixmystreet/web/index.cgi:573
+#: web/index.cgi:641
msgid ""
-"You have located the empty property at the point marked with a purple pin on the map.\n"
+"You have located the empty property at the point marked with a purple pin on "
+"the map.\n"
"If this is not the correct location, simply click on the map again. "
msgstr ""
-"Rydych wedi gosod lleoliad yr eiddo gwag wrth y pwynt sy'n cael ei ddangos gan y pin porffor ar y map.\n"
+"Rydych wedi gosod lleoliad yr eiddo gwag wrth y pwynt sy'n cael ei ddangos "
+"gan y pin porffor ar y map.\n"
"Os nad dyma'r lleoliad cywir, cliciwch ar y map eto. "
-#: fixmystreet/web/index.cgi:578
+#: web/index.cgi:647 web/index.cgi:666 web/index.cgi:668 web/index.cgi:681
+#, fuzzy
+msgid " or "
+msgstr "neu"
+
+#: web/index.cgi:649
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
-"On the site, we will show the subject and details of the empty property, plus your\n"
+"On the site, we will show the subject and details of the empty property, "
+"plus your\n"
"name if you give us permission."
msgstr ""
-"Bydd yr holl wybodaeth a ddarperir gennych yma'n cael ei hanfon at <strong>%s</strong>.\n"
+"Bydd yr holl wybodaeth a ddarperir gennych yma'n cael ei hanfon at <strong>%"
+"s</strong>.\n"
"Ar y safle, byddwn yn dangos pwnc a manylion yr eiddo gwag,\n"
"ynghyd â'ch enw os ydych yn rhoi caniatâd i ni."
-#: fixmystreet/web/index.cgi:641
+#: web/index.cgi:653
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -988,19 +1280,62 @@ msgid ""
"name if you give us permission."
msgstr ""
-#: fixmystreet/web/index.cgi:613
+#: web/index.cgi:667
+msgid "All the information you provide here will be sent to"
+msgstr ""
+
+#: web/index.cgi:670
+msgid ""
+"The subject and details of the empty property will be public, plus your name "
+"if you give us permission."
+msgstr ""
+
+#: web/index.cgi:672
+msgid ""
+"We do <strong>not</strong> yet have details for the other council that "
+"covers this location."
+msgid_plural ""
+"We do <strong>not</strong> yet have details for the other councils that "
+"cover this location."
+msgstr[0] ""
+msgstr[1] ""
+
+#: web/index.cgi:676 web/index.cgi:691
+#, perl-format
+msgid ""
+"You can help us by finding a contact email address for local empty "
+"properties for %s and emailing it to us at <a href='mailto:%s'>%s</a>."
+msgstr ""
+
+#: web/index.cgi:686 web/index.cgi:694
+msgid "We do not yet have details for the council that covers this location."
+msgid_plural ""
+"We do not yet have details for the councils that cover this location."
+msgstr[0] ""
+msgstr[1] ""
+
+#: web/index.cgi:690
+msgid ""
+"If you submit an empty property here the subject and details of the empty "
+"property will be public, but the empty property will <strong>not</strong> be "
+"reported to the council."
+msgstr ""
+
+#: web/index.cgi:696
+#, fuzzy
msgid ""
-"<p>We do not yet have details for the council that covers\n"
-"this location. If you submit a report here it will be left on the site, but\n"
-"not reported to the council &ndash; please still leave your report, so that\n"
-"we can show to the council the activity in their area."
+"If you submit a report here it will be left on the site, but not reported to "
+"the council &ndash; please still leave your report, so that we can show to "
+"the council the activity in their area."
msgstr ""
"<p>Nid oes gennym fanylion eto ar gyfer y cyngor sy'n gyfrifol am \n"
-"y lleoliad hwn. Os ydych yn cyflwyno adroddiad yma, bydd yn cael ei adael ar y safle, ond\n"
-"ni fydd yn cael ei adrodd i'r cyngor &ndash; gadewch eich adroddiad o hyd, fel y gallwn\n"
+"y lleoliad hwn. Os ydych yn cyflwyno adroddiad yma, bydd yn cael ei adael ar "
+"y safle, ond\n"
+"ni fydd yn cael ei adrodd i'r cyngor &ndash; gadewch eich adroddiad o hyd, "
+"fel y gallwn\n"
"ddangos i'r cyngor y gweithgarwch yn ei ardal."
-#: fixmystreet/web/index.cgi:622
+#: web/index.cgi:702
msgid ""
"Please fill in the form below with details of the empty property,\n"
"and describe the location as precisely as possible in the details box."
@@ -1008,13 +1343,16 @@ msgstr ""
"Llenwch y ffurflen isod gyda manylion yr eiddo gwag,\n"
"a disgrifiwch y lleoliad mor fanwl ag y bo modd yn y blwch manylion."
-#: fixmystreet/web/index.cgi:631
+#: web/index.cgi:711
msgid ""
"Please fill in details of the empty property below, saying what type of\n"
"property it is e.g. an empty home, block of flats, office etc. Tell us\n"
-"something about its condition and any other information you feel is relevant.\n"
-"There is no need for you to give the exact address. Please be polite, concise\n"
-"and to the point; writing your message entirely in block capitals makes it hard\n"
+"something about its condition and any other information you feel is "
+"relevant.\n"
+"There is no need for you to give the exact address. Please be polite, "
+"concise\n"
+"and to the point; writing your message entirely in block capitals makes it "
+"hard\n"
"to read, as does a lack of punctuation.\n"
msgstr ""
"Llenwch fanylion yr eiddo gwag isod, gan ddweud pa fath o eiddo ydyw\n"
@@ -1024,89 +1362,147 @@ msgstr ""
"ac i'r pwynt; mae ysgrifennu eich neges yn gyfan gwbl mewn priflythrennau\n"
"yn ei gwneud hi'n anodd ei darllen, fel y mae diffyg atalnodi.\n"
-#: fixmystreet/web/index.cgi:703
+#: web/index.cgi:719
msgid ""
-"Please fill in details of the empty property below. The council won't be able\n"
+"Please fill in details of the empty property below. The council won't be "
+"able\n"
"to help unless you leave as much detail as you can, so please describe the "
"exact location of\n"
-"the empty property (e.g. on a wall), what it is, how long it has been there, a "
-"description (and a\n"
+"the empty property (e.g. on a wall), what it is, how long it has been there, "
+"a description (and a\n"
"photo of the empty property if you have one), etc."
msgstr ""
-#: fixmystreet/web/index.cgi:644
+#: web/index.cgi:724
msgid "Please fill in details of the empty property below."
msgstr "Llenwch fanylion yr eiddo gwag isod."
-#: fixmystreet/web/index.cgi:655
+#: web/index.cgi:733
msgid "Empty property details form"
msgstr "Ffurflen manylion eiddo gwag"
-#: fixmystreet/web/index.cgi:661
+#: web/index.cgi:735 web-admin/index.cgi:623
msgid "Details:"
msgstr "Manylion:"
-#: fixmystreet/web/index.cgi:662 fixmystreet/web/index.cgi:956
+#: web/index.cgi:736 web/index.cgi:1112 web/questionnaire.cgi:308
msgid "Photo:"
msgstr "Ffotograff:"
-#: fixmystreet/web/index.cgi:663 fixmystreet/web/index.cgi:954
+#: web/index.cgi:737 web/index.cgi:1093 web-admin/index.cgi:629
+#: web-admin/index.cgi:749
msgid "Name:"
msgstr "Enw:"
-#: fixmystreet/web/index.cgi:665 fixmystreet/bin/send-reports:75
+#: web/index.cgi:739 bin/send-reports:89 web-admin/index.cgi:631
msgid "Phone:"
msgstr "Rhif ffôn:"
-#: fixmystreet/web/index.cgi:666
+#: web/index.cgi:740 web/index.cgi:1100
msgid "(optional)"
msgstr "(dewisol)"
-#: fixmystreet/web/index.cgi:667
+#: web/index.cgi:742
msgid "Can we show your name on the site?"
msgstr "Allwn ni ddangos eich enw chi ar y safle?"
-#: fixmystreet/web/index.cgi:732
+#: web/index.cgi:744
msgid "Can we show your name publicly?"
msgstr ""
-#: fixmystreet/web/index.cgi:668
+#: web/index.cgi:746
msgid "(we never show your email address or phone number)"
msgstr "(nid ydym byth yn dangos eich cyfeiriad e-bost na'ch rhif ffôn)"
-#: fixmystreet/web/index.cgi:737
-msgid "Submit"
-msgstr "Anfon"
+#: web/index.cgi:773
+msgid "Please note:"
+msgstr ""
+
+#: web/index.cgi:775
+msgid ""
+"We will only use your personal information in accordance with our <a href=\"/"
+"faq#privacy\">privacy policy.</a>"
+msgstr ""
-#: fixmystreet/web/index.cgi:784
+#: web/index.cgi:776
+msgid "Please be polite, concise and to the point."
+msgstr ""
+
+#: web/index.cgi:777
+msgid ""
+"Please do not be abusive &mdash; abusing your council devalues the service "
+"for all users."
+msgstr ""
+
+#: web/index.cgi:778
+msgid ""
+"Writing your message entirely in block capitals makes it hard to read, as "
+"does a lack of punctuation."
+msgstr ""
+
+#: web/index.cgi:779
+msgid ""
+"Remember that reportemptyhomes.com is primarily for reporting physical empty "
+"properties that can be returned to use. If your empty property is not "
+"appropriate for submission via this site remember that you can contact your "
+"council directly using their own website."
+msgstr ""
+
+#: web/index.cgi:781
+msgid ""
+"reportemptyhomes.com and the Guardian are providing this service in "
+"partnership in <a href=\"/faq#privacy\">certain cities</a>. In those cities, "
+"both have access to any information submitted, including names and email "
+"addresses, and will use it only to ensure the smooth running of the service, "
+"in accordance with their privacy policies."
+msgstr ""
+
+#: web/index.cgi:885
msgid "Hide stale reports"
msgstr "Cuddio hen adroddiadau "
-#: fixmystreet/web/index.cgi:787
+#: web/index.cgi:888
msgid "Include stale reports"
msgstr "Cynnwys hen adroddiadau"
-#: fixmystreet/web/index.cgi:793
+#: web/index.cgi:907
+msgid "No empty properties have been reported yet."
+msgstr "Ni roddwyd gwybod eto am unrhyw eiddo gwag."
+
+#: web/index.cgi:923
+msgid "No empty properties found."
+msgstr "Ni ddaethpwyd o hyd i unrhyw eiddo gwag."
+
+#: web/index.cgi:928
msgid "Show pins"
msgstr "Dangos pinnau"
-#: fixmystreet/web/index.cgi:797
+#: web/index.cgi:932
msgid "Hide pins"
msgstr "Cuddio pinnau"
-#: fixmystreet/web/index.cgi:802
-msgid "Empty properties in this area"
-msgstr "Eiddo gwag yn yr ardal hon"
-
-#: fixmystreet/web/index.cgi:803
+#: web/index.cgi:973
msgid "Email me new local empty properties"
msgstr "Anfonwch fanylion eiddo gwag lleol newydd ataf i drwy'r e-bost"
-#: fixmystreet/web/index.cgi:804
+#: web/index.cgi:975
msgid "RSS feed of recent local empty properties"
msgstr "Porthiant RSS o eiddo gwag lleol diweddar"
-#: fixmystreet/web/index.cgi:819
+#: web/index.cgi:978
+msgid "Empty properties in this area"
+msgstr "Eiddo gwag yn yr ardal hon"
+
+#: web/index.cgi:979
+msgid "Reports on and around the map"
+msgstr "Adroddiadau ar ac yng nghyffiniau'r map"
+
+#: web/index.cgi:980
+#, perl-format
+msgid "Closest nearby empty properties <small>(within&nbsp;%skm)</small>"
+msgstr "Yr eiddo gwag cyfagos agosaf <small>(within&nbsp;%skm)</small>"
+
+#: web/index.cgi:984
msgid ""
"To report an empty property, simply\n"
" <strong>click on the map</strong> at the correct location."
@@ -1114,7 +1510,7 @@ msgstr ""
"Er mwyn rhoi gwybod am eiddo gwag\n"
" <strong>cliciwch ar y map</strong> wrth y lleoliad cywir."
-#: fixmystreet/web/index.cgi:821
+#: web/index.cgi:986
#, perl-format
msgid ""
"<small>If you cannot see the map, <a href='%s' rel='nofollow'>skip this\n"
@@ -1123,425 +1519,1107 @@ msgstr ""
"<small>Os na allwch weld y map, <a href='%s' rel='nofollow'>ewch heibio\n"
" i'r cam hwn</a>.</small>"
-#: fixmystreet/web/index.cgi:823
-msgid "Reports on and around the map"
-msgstr "Adroddiadau ar ac yng nghyffiniau'r map"
-
-#: fixmystreet/web/index.cgi:832
-msgid "No empty properties have been reported yet."
-msgstr "Ni roddwyd gwybod eto am unrhyw eiddo gwag."
-
-#: fixmystreet/web/index.cgi:835
-#, perl-format
-msgid "Closest nearby empty properties <small>(within&nbsp;%skm)</small>"
-msgstr "Yr eiddo gwag cyfagos agosaf <small>(within&nbsp;%skm)</small>"
-
-#: fixmystreet/web/index.cgi:844
-msgid "No empty properties found."
-msgstr "Ni ddaethpwyd o hyd i unrhyw eiddo gwag."
-
-#: fixmystreet/web/index.cgi:851
+#: web/index.cgi:991
msgid "Recent local empty properties, reportemptyhomes.com"
msgstr "Eiddo gwag lleol diweddar, reportemptyhomes.com"
-#: fixmystreet/web/index.cgi:881 fixmystreet/web/index.cgi:883
+#: web/index.cgi:1004
+msgid "There were problems with your update. Please see below."
+msgstr "Cafwyd anhawsterau gyda'ch diweddariad. Gweler isod"
+
+#: web/index.cgi:1025 web/index.cgi:1027
msgid "Unknown empty property ID"
msgstr "ID eiddo gwag anhysbys"
-#: fixmystreet/web/index.cgi:884
+#: web/index.cgi:1028
msgid "That report has been removed from reportemptyhomes.com."
msgstr "Mae'r adroddiad hwnnw wedi cael ei dynnu oddi ar reportemptyhomes.com"
-#: fixmystreet/web/index.cgi:907
+#: web/index.cgi:1048
msgid "This empty property is old and of unknown status."
msgstr "Mae'r eiddo gwag hwn yn hen ac nid yw ei statws yn hysbys."
-#: fixmystreet/web/index.cgi:910 fixmystreet/web/index.cgi:952
+#: web/index.cgi:1051 web/index.cgi:1092
msgid "This empty property has been returned to use"
msgstr "Mae'r eiddo gwag hwn wedi cael ei adfer i'w ddefnyddio"
-#: fixmystreet/web/index.cgi:915
-msgid "Offensive? Unsuitable? Tell us"
-msgstr "Sarhaus? Anaddas? Rhowch wybod i ni"
-
-#: fixmystreet/web/index.cgi:920
+#: web/index.cgi:1076
msgid "More empty properties nearby"
msgstr "Mwy o eiddo gwag cyfagos"
-#: fixmystreet/web/index.cgi:922
+#: web/index.cgi:1079
msgid "Email me updates"
msgstr "Anfonwch ddiweddariadau ataf i drwy'r e-bost"
-#: fixmystreet/web/index.cgi:925
+#: web/index.cgi:1082
msgid "Receive email when updates are left on this empty property"
-msgstr "Hoffwn dderbyn neges e-bost pan gaiff diweddariadau eu rhoi am yr eiddo gwag hwn"
+msgstr ""
+"Hoffwn dderbyn neges e-bost pan gaiff diweddariadau eu rhoi am yr eiddo gwag "
+"hwn"
-#: fixmystreet/web/index.cgi:936
+#: web/index.cgi:1087
msgid "RSS feed of updates to this empty property"
msgstr "Porthiant RSS o ddiweddariadau i'r eiddo gwag hwn"
-#: fixmystreet/web/index.cgi:941
+#: web/index.cgi:1088
msgid "Provide an update"
msgstr "Rhowch ddiweddariad"
-#: fixmystreet/web/index.cgi:942
-msgid "Please note that updates are not sent to the council."
-msgstr "Sylwer nad yw diweddariadau'n cael eu hanfon at y cyngor."
+#: web/index.cgi:1094
+msgid "Update:"
+msgstr "Diweddariad:"
+
+#: web/index.cgi:1095
+msgid "Alert me to future updates"
+msgstr "Rhowch wybod i mi am ddiweddariadau yn y dyfodol"
-#: fixmystreet/web/index.cgi:988
+#: web/index.cgi:1103
msgid ""
"Please note that updates are not sent to the council. If you leave your name "
"it will be public. Your information will only be used in accordance with our "
"<a href=\"/faq#privacy\">privacy policy</a>"
msgstr ""
-#: fixmystreet/web/index.cgi:955
-msgid "Update:"
-msgstr "Diweddariad:"
-
-#: fixmystreet/web/index.cgi:905
-msgid "There were problems with your update. Please see below."
-msgstr "Cafwyd anhawsterau gyda'ch diweddariad. Gweler isod"
-
-#: fixmystreet/web/index.cgi:957
-msgid "Alert me to future updates"
-msgstr "Rhowch wybod i mi am ddiweddariadau yn y dyfodol"
-
-#: fixmystreet/web/index.cgi:994
+#: web/index.cgi:1123
msgid "Updates to this empty property, reportemptyhomes.com"
msgstr "Diweddariadau i'r eiddo gwag hwn, reportemptyhomes.com"
-#: fixmystreet/web/questionnaire.cgi:28 fixmystreet/web/questionnaire.cgi:206
+#: web/questionnaire.cgi:29 web/questionnaire.cgi:80 web/questionnaire.cgi:213
+#: web/questionnaire.cgi:233
msgid "Questionnaire"
msgstr "Holiadur"
-#: fixmystreet/web/questionnaire.cgi:38
-msgid "I'm afraid we couldn't validate that token. If you've copied the URL from an email, please check that you copied it exactly.\n"
-msgstr "Yn anffodus, ni fu modd i ni ddilysu'r dynodiad hwnnw. Os ydych wedi copïo'r URL o neges e-bost, gwnewch yn siwr eich bod wedi'i gopïo'n union.\n"
+#: web/questionnaire.cgi:41
+msgid ""
+"I'm afraid we couldn't validate that token. If you've copied the URL from an "
+"email, please check that you copied it exactly.\n"
+msgstr ""
+"Yn anffodus, ni fu modd i ni ddilysu'r dynodiad hwnnw. Os ydych wedi copïo'r "
+"URL o neges e-bost, gwnewch yn siwr eich bod wedi'i gopïo'n union.\n"
-#: fixmystreet/web/questionnaire.cgi:43
+#: web/questionnaire.cgi:48
#, perl-format
-msgid "You have already answered this questionnaire. If you have a question, please <a href='%s'>get in touch</a>, or <a href='%s'>view your empty property</a>.\n"
-msgstr "Rydych eisoes wedi ateb yr holiadur hwn. Os oes gennych gwestiwn, <a href='%s'>cysylltwch â ni</a>, neu ewch i <a href='%s'>weld eich eiddo gwag</a>.\n"
+msgid ""
+"You have already answered this questionnaire. If you have a question, please "
+"<a href='%s'>get in touch</a>, or <a href='%s'>view your empty property</"
+"a>.\n"
+msgstr ""
+"Rydych eisoes wedi ateb yr holiadur hwn. Os oes gennych gwestiwn, <a href='%"
+"s'>cysylltwch â ni</a>, neu ewch i <a href='%s'>weld eich eiddo gwag</a>.\n"
-#: fixmystreet/web/questionnaire.cgi:48
+#: web/questionnaire.cgi:53
msgid "I'm afraid we couldn't locate your empty property in the database.\n"
-msgstr "Yn anffodus ni fu modd i ni ddod o hyd i'ch eiddo gwag yn y gronfa ddata.\n"
+msgstr ""
+"Yn anffodus ni fu modd i ni ddod o hyd i'ch eiddo gwag yn y gronfa ddata.\n"
-#: fixmystreet/web/questionnaire.cgi:79
+#: web/questionnaire.cgi:92
msgid "Please state whether or not the empty property has been returned to use"
-msgstr "Cofnodwch a yw'r eiddo gwag wedi cael ei adfer i'w ddefnyddio, ai peidio"
+msgstr ""
+"Cofnodwch a yw'r eiddo gwag wedi cael ei adfer i'w ddefnyddio, ai peidio"
-#: fixmystreet/web/questionnaire.cgi:80
-msgid "Please say whether you've ever reported an empty property to your council before"
-msgstr "Rhowch wybod a ydych chi wedi rhoi gwybod i'ch cyngor am eiddo gwag erioed o'r blaen"
+#: web/questionnaire.cgi:95
+msgid ""
+"Please say whether you've ever reported an empty property to your council "
+"before"
+msgstr ""
+"Rhowch wybod a ydych chi wedi rhoi gwybod i'ch cyngor am eiddo gwag erioed "
+"o'r blaen"
-#: fixmystreet/web/questionnaire.cgi:81
+#: web/questionnaire.cgi:97
msgid "Please indicate whether you'd like to receive another questionnaire"
msgstr "Nodwch a fyddech chi'n hoffi derbyn holiadur arall"
-#: fixmystreet/web/questionnaire.cgi:83
+#: web/questionnaire.cgi:99
msgid "Please provide some explanation as to why you're reopening this report"
msgstr "Rhowch ychydig o esboniad pam rydych yn ailagor yr adroddiad hwn"
-#: fixmystreet/web/questionnaire.cgi:99
+#: web/questionnaire.cgi:115
msgid "Please provide some text as well as a photo"
msgstr "Rhowch rywfaint o destun yn ogystal â ffotograff"
-#: fixmystreet/web/questionnaire.cgi:130
+#: web/questionnaire.cgi:146
msgid "Questionnaire filled in by empty property reporter"
msgstr "Llenwyd yr holiadur gan yr unigolyn a roddodd wybod am yr eiddo gwag"
-#: fixmystreet/web/questionnaire.cgi:148
+#: web/questionnaire.cgi:166
msgid ""
"<p>Thank you very much for filling in our questionnaire; if you\n"
-"get some more information about the status of your empty property, please come back to the\n"
+"get some more information about the status of your empty property, please "
+"come back to the\n"
"site and leave an update.</p>\n"
msgstr ""
"<p>Diolch yn fawr am lenwi ein holiadur; os ydych yn cael \n"
"mwy o wybodaeth am statws eich eiddo gwag, dewch yn ôl i'r safle\n"
"a rhowch ddiweddariad yno.</p>\n"
-#: fixmystreet/web/questionnaire.cgi:154
+#: web/questionnaire.cgi:174
+#, fuzzy, perl-format
msgid ""
-"<p style=\"font-size:150%%\">We're sorry to hear that. We have two suggestions: why not try\n"
+"<p style=\"font-size:150%%\">We're sorry to hear that. We have two "
+"suggestions: why not try\n"
"<a href=\"%s\">writing direct to your councillor(s)</a>\n"
-"or, if it's an empty property that could be returned to use by local people working together,\n"
-"why not <a href=\"http://www.pledgebank.com/new\">make and publicise a pledge</a>?\n"
+"or, if it's an empty property that could be returned to use by local people "
+"working together,\n"
+"why not <a href=\"http://www.pledgebank.com/new\">make and publicise a "
+"pledge</a>?\n"
"</p>\n"
msgstr ""
-"<p style=\"font-size:150%\">Mae'n flin gennym glywed hynny. Mae gennym ddau awgrym: beth am roi cynnig ar\n"
-"<a href=\"http://www.writetothem.com/\">ysgrifennu'n uniongyrchol at eich cynghorwr(wyr)</a>\n"
-"neu, os yw'n eiddo gwag y gallai pobl leol gydweithio er mwyn ei adfer i'w ddefnyddio,\n"
-"beth am <a href=\"http://www.pledgebank.com/new\">wneud adduned a'i chyhoeddi</a>?\n"
+"<p style=\"font-size:150%\">Mae'n flin gennym glywed hynny. Mae gennym ddau "
+"awgrym: beth am roi cynnig ar\n"
+"<a href=\"http://www.writetothem.com/\">ysgrifennu'n uniongyrchol at eich "
+"cynghorwr(wyr)</a>\n"
+"neu, os yw'n eiddo gwag y gallai pobl leol gydweithio er mwyn ei adfer i'w "
+"ddefnyddio,\n"
+"beth am <a href=\"http://www.pledgebank.com/new\">wneud adduned a'i "
+"chyhoeddi</a>?\n"
"</p>\n"
-#: fixmystreet/web/questionnaire.cgi:162
-msgid "<p style=\"font-size:150%\">Thank you very much for filling in our questionnaire; glad to hear it's been returned to use.</p>\n"
-msgstr "<p style=\"font-size:150%\">Diolch yn fawr am lenwi'n holiadur; rydym yn falch o glywed ei fod wedi'i adfer i'w ddefnyddio.</p>\n"
+#: web/questionnaire.cgi:183
+msgid ""
+"<p style=\"font-size:150%\">Thank you very much for filling in our "
+"questionnaire; glad to hear it's been returned to use.</p>\n"
+msgstr ""
+"<p style=\"font-size:150%\">Diolch yn fawr am lenwi'n holiadur; rydym yn "
+"falch o glywed ei fod wedi'i adfer i'w ddefnyddio.</p>\n"
+
+#: web/questionnaire.cgi:236
+msgid "Don&rsquo;t know"
+msgstr "Ddim yn gwybod"
+
+#: web/questionnaire.cgi:237
+msgid "Submit questionnaire"
+msgstr "Anfon yr holiadur"
-#: fixmystreet/web/questionnaire.cgi:214
+#: web/questionnaire.cgi:254
msgid ""
"<p>Getting empty homes back into use can be difficult. You shouldn't expect\n"
-"the property to be back into use yet. But a good council will have started work\n"
+"the property to be back into use yet. But a good council will have started "
+"work\n"
"and should have reported what they have done on the website. If you are not\n"
-"satisfied with progress or information from the council, now is the right time\n"
-"to say. You may also want to try contacting some other people who may be able\n"
+"satisfied with progress or information from the council, now is the right "
+"time\n"
+"to say. You may also want to try contacting some other people who may be "
+"able\n"
"to help. For advice on how to do this and other useful information please\n"
-"go to <a href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
+"go to <a href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://"
+"www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
msgstr ""
-"<p>Mae cael eiddo gwag yn ôl mewn defnydd yn gallu bod yn anodd. Ni ddylech ddisgwyl\n"
-"bod yr eiddo yn ôl mewn defnydd eto. Fodd bynnag, bydd cyngor da eisoes wedi dechrau gweithio\n"
-"a dylent fod wedi rhoi gwybod beth maent wedi'i wneud ar y wefan. Os nad ydych yn fodlon\n"
-"â'r cynnydd neu'r wybodaeth gan y cyngor, nawr yw'r amser priodol i ddweud hynny.\n"
-"Efallai hefyd y byddwch eisiau rhoi cynnig ar gysylltu â rhai pobl eraill a all helpu.\n"
+"<p>Mae cael eiddo gwag yn ôl mewn defnydd yn gallu bod yn anodd. Ni ddylech "
+"ddisgwyl\n"
+"bod yr eiddo yn ôl mewn defnydd eto. Fodd bynnag, bydd cyngor da eisoes wedi "
+"dechrau gweithio\n"
+"a dylent fod wedi rhoi gwybod beth maent wedi'i wneud ar y wefan. Os nad "
+"ydych yn fodlon\n"
+"â'r cynnydd neu'r wybodaeth gan y cyngor, nawr yw'r amser priodol i ddweud "
+"hynny.\n"
+"Efallai hefyd y byddwch eisiau rhoi cynnig ar gysylltu â rhai pobl eraill a "
+"all helpu.\n"
"I gael cyngor ar sut i wneud hyn ac am wybodaeth ddefnyddiol arall, ewch i \n"
-"<a href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
+"<a href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www."
+"emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
-#: fixmystreet/web/questionnaire.cgi:224
+#: web/questionnaire.cgi:264
msgid ""
-"<p>Getting empty homes back into use can be difficult, but by now a good council\n"
+"<p>Getting empty homes back into use can be difficult, but by now a good "
+"council\n"
"will have made a lot of progress and reported what they have done on the\n"
-"website. Even so properties can remain empty for many months if the owner is\n"
-"unwilling or the property is in very poor repair. If nothing has happened or\n"
-"you are not satisfied with the progress the council is making, now is the right\n"
+"website. Even so properties can remain empty for many months if the owner "
+"is\n"
+"unwilling or the property is in very poor repair. If nothing has happened "
+"or\n"
+"you are not satisfied with the progress the council is making, now is the "
+"right\n"
"time to say so. We think it's a good idea to contact some other people who\n"
"may be able to help or put pressure on the council For advice on how to do\n"
"this and other useful information please go to <a\n"
-"href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
-msgstr ""
-"<p>Mae cael eiddo gwag yn ôl mewn defnydd yn gallu bod yn anodd, ond erbyn hyn,\n"
-"bydd cyngor da wedi gwneud eithaf tipyn o gynnydd ac wedi rhoi gwybod beth maent\n"
-"wedi'i wneud ar y wefan. Er hynny, gall eiddo gwag barhau'n wag am fisoedd os yw'r perchennog\n"
-"yn amharod neu os yw cyflwr yr eiddo'n wael. Os nad oes unrhyw beth wedi digwydd neu\n"
-"os nad ydych yn fodlon â'r cynnydd y mae'r cyngor yn ei wneud, nawr yw'r amser priodol\n"
-"i ddweud hynny. Rydym o'r farn bod cysylltu â phobl eraill a allai helpu neu roi pwysau\n"
+"href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www."
+"emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
+msgstr ""
+"<p>Mae cael eiddo gwag yn ôl mewn defnydd yn gallu bod yn anodd, ond erbyn "
+"hyn,\n"
+"bydd cyngor da wedi gwneud eithaf tipyn o gynnydd ac wedi rhoi gwybod beth "
+"maent\n"
+"wedi'i wneud ar y wefan. Er hynny, gall eiddo gwag barhau'n wag am fisoedd "
+"os yw'r perchennog\n"
+"yn amharod neu os yw cyflwr yr eiddo'n wael. Os nad oes unrhyw beth wedi "
+"digwydd neu\n"
+"os nad ydych yn fodlon â'r cynnydd y mae'r cyngor yn ei wneud, nawr yw'r "
+"amser priodol\n"
+"i ddweud hynny. Rydym o'r farn bod cysylltu â phobl eraill a allai helpu neu "
+"roi pwysau\n"
"ar y cyngor yn syniad da. I gael cyngor ar sut i wneud hyn \n"
"a gwybodaeth ddefnyddiol arall, ewch i <a\n"
-"href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
+"href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www."
+"emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
-#: fixmystreet/web/questionnaire.cgi:237
-msgid "The details of your empty property are available on the right hand side of this page."
+#: web/questionnaire.cgi:277
+msgid ""
+"The details of your empty property are available on the right hand side of "
+"this page."
msgstr "Mae manylion eich eiddo gwag ar gael ar ochr dde'r dudalen hon."
-#: fixmystreet/web/questionnaire.cgi:238
+#: web/questionnaire.cgi:278
msgid "Please take a look at the updates that have been left."
msgstr "Ewch i fwrw golwg ar y diweddariadau sydd wedi cael eu gadael."
-#: fixmystreet/web/questionnaire.cgi:244
+#: web/questionnaire.cgi:284
msgid "An update marked this empty property as returned to use."
-msgstr "Fe wnaeth diweddariad gofnodi bod yr eiddo hwn wedi cael ei adfer i'w ddefnyddio."
+msgstr ""
+"Fe wnaeth diweddariad gofnodi bod yr eiddo hwn wedi cael ei adfer i'w "
+"ddefnyddio."
-#: fixmystreet/web/questionnaire.cgi:245
+#: web/questionnaire.cgi:285
msgid "Has this empty property been returned to use?"
msgstr "A yw'r eiddo gwag hwn wedi cael ei adfer i'w ddefnyddio?"
-#: fixmystreet/web/questionnaire.cgi:248
-msgid "Don&rsquo;t know"
-msgstr "Ddim yn gwybod"
-
-#: fixmystreet/web/questionnaire.cgi:259
-msgid "Have you ever reported an empty property to a council before, or is this your first time?"
-msgstr "Ydych chi wedi rhoi gwybod i gyngor am eiddo gwag erioed o'r blaen, neu ai dyma'ch tro cyntaf?"
-
-#: fixmystreet/web/questionnaire.cgi:261
+#: web/questionnaire.cgi:292
msgid "Reported before"
msgstr "Wedi adrodd o'r blaen"
-#: fixmystreet/web/questionnaire.cgi:262
+#: web/questionnaire.cgi:293
msgid "First time"
msgstr "Y tro cyntaf"
-#: fixmystreet/web/questionnaire.cgi:271
+#: web/questionnaire.cgi:294
+msgid ""
+"Have you ever reported an empty property to a council before, or is this "
+"your first time?"
+msgstr ""
+"Ydych chi wedi rhoi gwybod i gyngor am eiddo gwag erioed o'r blaen, neu ai "
+"dyma'ch tro cyntaf?"
+
+#: web/questionnaire.cgi:304
msgid ""
-"If you wish to leave a public update on the empty property, please enter it here\n"
+"If you wish to leave a public update on the empty property, please enter it "
+"here\n"
"(please note it will not be sent to the council). For example, what was\n"
"your experience of getting the empty property returned to use?"
msgstr ""
-"Os ydych yn dymuno gadael diweddariad cyhoeddus am yr eiddo gwag, cofnodwch hwn yma\n"
-"(sylwer na fydd yn cael ei anfon at y cyngor). Er enghraifft, beth oedd eich profiad\n"
+"Os ydych yn dymuno gadael diweddariad cyhoeddus am yr eiddo gwag, cofnodwch "
+"hwn yma\n"
+"(sylwer na fydd yn cael ei anfon at y cyngor). Er enghraifft, beth oedd eich "
+"profiad\n"
"o gael yr eiddo gwag yn ôl mewn defnydd?"
-#: fixmystreet/web/questionnaire.cgi:299
-msgid "Submit questionnaire"
-msgstr "Anfon yr holiadur"
+#: web/questionnaire.cgi:322
+msgid ""
+"Would you like to receive another questionnaire in 4 weeks, reminding you to "
+"check the status?"
+msgstr ""
-#: fixmystreet/web/reports.cgi:164 fixmystreet/web/reports.cgi:205
+#: web/reports.cgi:192 web/reports.cgi:239
msgid "Summary reports"
msgstr "Adroddiadau cryno"
-#: fixmystreet/web/reports.cgi:166
-msgid "This is a summary of all reports on this site; select a particular council to see the reports sent there."
-msgstr "Dyma grynodeb o'r holl adroddiadau ar y safle hwn; dewiswch gyngor penodol i weld yr adroddiadau a anfonwyd ato."
+#: web/reports.cgi:194
+msgid ""
+"This is a summary of all reports on this site; select a particular council "
+"to see the reports sent there."
+msgstr ""
+"Dyma grynodeb o'r holl adroddiadau ar y safle hwn; dewiswch gyngor penodol i "
+"weld yr adroddiadau a anfonwyd ato."
-#: fixmystreet/web/reports.cgi:167
+#: web/reports.cgi:195
msgid "Greyed-out lines are councils that no longer exist."
msgstr "Mae'r llinellau mewn llwyd yn gynghorau nad ydynt yn bodoli mwyach."
-#: fixmystreet/web/reports.cgi:171
+#: web/reports.cgi:199 web-admin/index.cgi:477 web-admin/index.cgi:656
msgid "Name"
msgstr "Enw"
-#: fixmystreet/web/reports.cgi:171 fixmystreet/web/reports.cgi:236
+#: web/reports.cgi:199 web/reports.cgi:275
msgid "New empty property reports"
msgstr "Adroddiadau newydd am eiddo gwag"
-#: fixmystreet/web/reports.cgi:171 fixmystreet/web/reports.cgi:244
+#: web/reports.cgi:199 web/reports.cgi:283
msgid "Older empty property reports"
msgstr "Adroddiadau hÅ·n o eiddo gwag"
-#: fixmystreet/web/reports.cgi:173
+#: web/reports.cgi:201
msgid "Old empty properties,<br>state unknown"
msgstr "Hen eiddo gwag,<br>cyflwr anhysbys"
-#: fixmystreet/web/reports.cgi:175 fixmystreet/web/reports.cgi:252
+#: web/reports.cgi:203 web/reports.cgi:290
msgid "Recently returned to use"
msgstr "Wedi'u hadfer i'w defnyddio'n ddiweddar"
-#: fixmystreet/web/reports.cgi:175
+#: web/reports.cgi:203
msgid "Older returned to use"
msgstr "Wedi'u hadfer i'w defnyddio ers amser"
-#: fixmystreet/web/reports.cgi:211
+#: web/reports.cgi:245
msgid "council"
msgstr "cyngor"
-#: fixmystreet/web/reports.cgi:217
+#: web/reports.cgi:255
#, perl-format
-msgid "%s - Summary reports"
-msgstr "%s - Adroddiadau cryno"
+msgid "RSS feed of empty properties in this %s"
+msgstr "Porthiant RSS o eiddo gwag yn yr %s hwn"
-#: fixmystreet/web/reports.cgi:217
+#: web/reports.cgi:259
#, perl-format
-msgid "Empty properties within %s, reportemptyhomes.com"
-msgstr "Eiddo gwag o fewn %s, reportemptyhomes.com"
+msgid "This is a summary of all reports for one %s."
+msgstr "Dyma grynodeb o'r holl adroddiadau ar gyfer y %s."
-#: fixmystreet/web/reports.cgi:219
+#: web/reports.cgi:260
#, perl-format
-msgid "RSS feed of empty properties in this %s"
-msgstr "Porthiant RSS o eiddo gwag yn yr %s hwn"
+msgid "This is a summary of all reports for this %s."
+msgstr ""
-#: fixmystreet/web/reports.cgi:222
+#: web/reports.cgi:264
#, perl-format
msgid "You can <a href=\"%s\">see less detail</a>."
msgstr "Gallwch <a href=\"%s\">weld llai o fanylion</a>."
-#: fixmystreet/web/reports.cgi:224
+#: web/reports.cgi:266
#, perl-format
msgid "You can <a href=\"%s\">see more details</a>."
msgstr "Gallwch <a href=\"%s\">weld mwy o fanylion</a>."
-#: fixmystreet/web/reports.cgi:226
-#, perl-format
-msgid "You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports\">show all councils</a>."
-msgstr "Gallwch <a href=\"%s\">weld llai o fanylion</a> neu fynd yn ôl a <a href=\"/reports\">dangos pob cyngor</a>."
-
-#: fixmystreet/web/reports.cgi:228
+#: web/reports.cgi:268
#, perl-format
-msgid "You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports\">show all councils</a>."
-msgstr "Gallwch <a href=\"%s\">weld mwy o fanylion</a> neu fynd yn ôl a <a href=\"/reports\">dangos pob cyngor</a>."
-
-#: fixmystreet/web/reports.cgi:232
-#, perl-format
-msgid "This is a summary of all reports for one %s."
-msgstr "Dyma grynodeb o'r holl adroddiadau ar gyfer y %s."
+msgid ""
+"You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports"
+"\">show all councils</a>."
+msgstr ""
+"Gallwch <a href=\"%s\">weld llai o fanylion</a> neu fynd yn ôl a <a href=\"/"
+"reports\">dangos pob cyngor</a>."
-#: fixmystreet/web/reports.cgi:205
+#: web/reports.cgi:270
#, perl-format
-msgid "This is a summary of all reports for this %s."
+msgid ""
+"You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports"
+"\">show all councils</a>."
msgstr ""
+"Gallwch <a href=\"%s\">weld mwy o fanylion</a> neu fynd yn ôl a <a href=\"/"
+"reports\">dangos pob cyngor</a>."
-#: fixmystreet/web/reports.cgi:246
+#: web/reports.cgi:285
msgid "Old empty properties, state unknown"
msgstr "Eiddo gwag hen, nid yw eu cyflwr yn hysbys"
-#: fixmystreet/web/reports.cgi:253
+#: web/reports.cgi:291
msgid "Old returned to use"
msgstr "Hen wedi'i adfer i'w ddefnyddio"
-#: fixmystreet/bin/send-reports:77
-msgid "This web page also contains a photo of the empty property, provided by the user."
-msgstr "Mae'r dudalen we hon hefyd yn cynnwys ffotograff o'r eiddo gwag, wedi'i ddarparu gan y defnyddiwr."
+#: web/reports.cgi:294
+#, perl-format
+msgid "%s - Summary reports"
+msgstr "%s - Adroddiadau cryno"
+
+#: web/reports.cgi:294
+#, perl-format
+msgid "Empty properties within %s, reportemptyhomes.com"
+msgstr "Eiddo gwag o fewn %s, reportemptyhomes.com"
+
+#: web/reports.cgi:333
+#, fuzzy
+msgid "(sent to both)"
+msgstr "Ni roddwyd gwybod i'r cyngor am hyn"
+
+#: web/reports.cgi:334
+#, fuzzy
+msgid "(not sent to council)"
+msgstr "Ni roddwyd gwybod i'r cyngor am hyn"
+
+#: bin/send-reports:91
+msgid ""
+"This web page also contains a photo of the empty property, provided by the "
+"user."
+msgstr ""
+"Mae'r dudalen we hon hefyd yn cynnwys ffotograff o'r eiddo gwag, wedi'i "
+"ddarparu gan y defnyddiwr."
-#: fixmystreet/bin/send-reports:83
+#: bin/send-reports:97
msgid "To view a map of the precise location of this issue"
msgstr "Gweld map o union leoliad y broblem hon"
-#: fixmystreet/bin/send-reports:84
-msgid "The user could not locate the empty property on a map, but to see the area around the location they entered"
-msgstr "Ni allai'r defnyddiwr leoli'r eiddo gwag ar fap, ond i weld yr ardal o gwmpas y lleoliad a gofnodwyd ganddynt "
+#: bin/send-reports:98
+msgid ""
+"The user could not locate the empty property on a map, but to see the area "
+"around the location they entered"
+msgstr ""
+"Ni allai'r defnyddiwr leoli'r eiddo gwag ar fap, ond i weld yr ardal o "
+"gwmpas y lleoliad a gofnodwyd ganddynt "
-#: fixmystreet/bin/send-reports:88
-#, perl-format
-msgid "The closest address, as the crow flies, to the location of this empty property, %.0fm away, is: %s - please note that this is automatically generated, so ensure that you check it against the details provided by the user and, if possible, the map."
-msgstr "Y cyfeiriad agosaf ar draws gwlad, i leoliad yr eiddo gwag hwn, %.0fm i ffwrdd, yw: %s - sylwer bod hwn yn cael ei greu'n awtomatig, felly gwnewch yn siwr eich bod yn ei gadarnhau yn ôl y manylion sy'n cael eu rhoi gan y defnyddiwr ac, os oes modd, ei gadarnhau yn ôl y map."
+#: bin/send-reports:181
+#, fuzzy
+msgid "this type of local empty property"
+msgstr "Anfonwch fanylion eiddo gwag lleol newydd ataf i drwy'r e-bost"
-#: fixmystreet/db/alert_types_eha.pl:5 fixmystreet/db/alert_types_eha.pl:6
-#, perl-brace-format
-msgid "Updates on {{title}}"
-msgstr "Diweddariadau am {{title}}"
+#: bin/send-reports:185
+#, fuzzy, perl-format
+msgid "Category: %s"
+msgstr "Categori:"
-#: fixmystreet/db/alert_types_eha.pl:7
-#, perl-brace-format
-msgid "Update by {{name}}"
-msgstr "Diweddariadau yn ôl {{name}}"
+#: bin/send-reports:188
+msgid " and "
+msgstr ""
+
+#: bin/send-reports:189
+msgid ""
+"This email has been sent to both councils covering the location of the empty "
+"property, as the user did not categorise it; please ignore it if you're not "
+"the correct council to deal with the issue, or let us know what category of "
+"empty property this is so we can add it to our system."
+msgstr ""
+
+#: bin/send-reports:195
+#, perl-format
+msgid ""
+"We realise this empty property might be the responsibility of %s; however, "
+"we don't currently have any contact details for them. If you know of an "
+"appropriate contact address, please do get in touch."
+msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:10
+#: db/alert_types_eha.pl:5
msgid "New reports on reportemptyhomes.com"
msgstr "Adroddiadau newydd ar reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:11
-msgid "The latest empty properties reported by users"
-msgstr "Yr eiddo gwag diweddaraf y mae defnyddwyr wedi rhoi gwybod amdanynt"
-
-#: fixmystreet/db/alert_types_eha.pl:14
+#: db/alert_types_eha.pl:8
msgid "Properties recently reported as put back to use on reportemptyhomes.com"
-msgstr "Eiddo y cafwyd adroddiadau diweddar ar reportemptyhomes.com eu bod wedi cael eu hadfer i'w defnyddio"
+msgstr ""
+"Eiddo y cafwyd adroddiadau diweddar ar reportemptyhomes.com eu bod wedi cael "
+"eu hadfer i'w defnyddio"
-#: fixmystreet/db/alert_types_eha.pl:15
+#: db/alert_types_eha.pl:9
msgid "The latest properties reported back to use by users"
-msgstr "Yr eiddo diweddaraf y mae defnyddwyr wedi rhoi gwybod eu bod yn ôl mewn defnyd"
+msgstr ""
+"Yr eiddo diweddaraf y mae defnyddwyr wedi rhoi gwybod eu bod yn ôl mewn "
+"defnyd"
-#: fixmystreet/db/alert_types_eha.pl:18
+#: db/alert_types_eha.pl:12
msgid "New local reports on reportemptyhomes.com"
msgstr "Adroddiadau lleol newydd ar reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:19
+#: db/alert_types_eha.pl:13
msgid "The latest local reports reported by users"
-msgstr "Yr adroddiadau lleol diweddaraf y mae defnyddwyr wedi rhoi gwybod amdanynt"
+msgstr ""
+"Yr adroddiadau lleol diweddaraf y mae defnyddwyr wedi rhoi gwybod amdanynt"
-#: fixmystreet/db/alert_types_eha.pl:22
+#: db/alert_types_eha.pl:16
+#, fuzzy, perl-brace-format
+msgid "New reports on reportemptyhomes.com near {{POSTCODE}}"
+msgstr "Adroddiadau newydd ar reportemptyhomes.com"
+
+#: db/alert_types_eha.pl:19
#, perl-brace-format
msgid "New reports to {{COUNCIL}} on reportemptyhomes.com"
msgstr "Adroddiadau newydd i gyngor {{COUNCIL}} ar reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:23
+#: db/alert_types_eha.pl:20
#, perl-brace-format
msgid "The latest reports for {{COUNCIL}} reported by users"
-msgstr "Yr adroddiadau diweddaraf ar gyfer cyngor {{COUNCIL}} y mae defnyddwyr wedi rhoi gwybod amdanynt"
+msgstr ""
+"Yr adroddiadau diweddaraf ar gyfer cyngor {{COUNCIL}} y mae defnyddwyr wedi "
+"rhoi gwybod amdanynt"
-#: fixmystreet/db/alert_types_eha.pl:26
+#: db/alert_types_eha.pl:23
#, perl-brace-format
-msgid "New reports for {{COUNCIL}} within {{WARD}} ward on reportemptyhomes.com"
-msgstr "Adroddiadau newydd ar gyfer cyngor {{COUNCIL}}, yn ward {{WARD}} ar reportemptyhomes.com"
+msgid ""
+"New reports for {{COUNCIL}} within {{WARD}} ward on reportemptyhomes.com"
+msgstr ""
+"Adroddiadau newydd ar gyfer cyngor {{COUNCIL}}, yn ward {{WARD}} ar "
+"reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:27
+#: db/alert_types_eha.pl:24
#, perl-brace-format
-msgid "The latest reports for {{COUNCIL}} within {{WARD}} ward reported by users"
-msgstr "Yr adroddiadau diweddaraf ar gyfer cyngor {{COUNCIL}}, yn ward {{WARD}} y mae defnyddwyr wedi rhoi gwybod amdanynt"
+msgid ""
+"The latest reports for {{COUNCIL}} within {{WARD}} ward reported by users"
+msgstr ""
+"Yr adroddiadau diweddaraf ar gyfer cyngor {{COUNCIL}}, yn ward {{WARD}} y "
+"mae defnyddwyr wedi rhoi gwybod amdanynt"
-#: fixmystreet/db/alert_types_eha.pl:30
+#: db/alert_types_eha.pl:27
#, perl-brace-format
msgid "New reports within {{NAME}}'s boundary on reportemptyhomes.com"
msgstr "Adroddiadau newydd o fewn ffin {{NAME}} ar reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:31
+#: db/alert_types_eha.pl:28
#, perl-brace-format
msgid "The latest reports within {{NAME}}'s boundary reported by users"
-msgstr "Yr adroddiadau diweddaraf o fewn ffin {{NAME}} y mae defnyddwyr wedi rhoi gwybod amdanynt"
+msgstr ""
+"Yr adroddiadau diweddaraf o fewn ffin {{NAME}} y mae defnyddwyr wedi rhoi "
+"gwybod amdanynt"
+
+#: db/alert_types.pl:5 db/alert_types.pl:6
+#, perl-brace-format
+msgid "Updates on {{title}}"
+msgstr "Diweddariadau am {{title}}"
+
+#: db/alert_types.pl:7
+#, perl-brace-format
+msgid "Update by {{name}}"
+msgstr "Diweddariadau yn ôl {{name}}"
+
+#: db/alert_types.pl:10
+#, fuzzy
+msgid "New empty property reports on reportemptyhomes.com"
+msgstr "Adroddiadau newydd ar reportemptyhomes.com"
+
+#: db/alert_types.pl:11
+msgid "The latest empty properties reported by users"
+msgstr "Yr eiddo gwag diweddaraf y mae defnyddwyr wedi rhoi gwybod amdanynt"
+
+#: db/alert_types.pl:14
+#, fuzzy
+msgid ""
+"Empty properties recently reported returned to use on reportemptyhomes.com"
+msgstr ""
+"Eiddo y cafwyd adroddiadau diweddar ar reportemptyhomes.com eu bod wedi cael "
+"eu hadfer i'w defnyddio"
+
+#: db/alert_types.pl:15
+#, fuzzy
+msgid "The latest empty properties reported returned to use by users"
+msgstr "Yr eiddo gwag diweddaraf y mae defnyddwyr wedi rhoi gwybod amdanynt"
+
+#: db/alert_types.pl:18 db/alert_types.pl:22
+#, fuzzy
+msgid "New local empty properties on reportemptyhomes.com"
+msgstr "Eiddo gwag lleol diweddar, reportemptyhomes.com"
+
+#: db/alert_types.pl:19 db/alert_types.pl:23 db/alert_types.pl:27
+#: db/alert_types.pl:31
+#, fuzzy
+msgid "The latest local empty properties reported by users"
+msgstr "Yr eiddo gwag diweddaraf y mae defnyddwyr wedi rhoi gwybod amdanynt"
+
+#: db/alert_types.pl:26
+#, fuzzy, perl-brace-format
+msgid "New empty property reports near {{POSTCODE}} on reportemptyhomes.com"
+msgstr "Adroddiadau newydd i gyngor {{COUNCIL}} ar reportemptyhomes.com"
+
+#: db/alert_types.pl:30
+#, fuzzy, perl-brace-format
+msgid "New empty property reports NEAR {{POSTCODE}} on reportemptyhomes.com"
+msgstr "Adroddiadau newydd i gyngor {{COUNCIL}} ar reportemptyhomes.com"
+
+#: db/alert_types.pl:34
+#, fuzzy, perl-brace-format
+msgid "New empty property reports to {{COUNCIL}} on reportemptyhomes.com"
+msgstr "Adroddiadau newydd i gyngor {{COUNCIL}} ar reportemptyhomes.com"
+
+#: db/alert_types.pl:35
+#, fuzzy, perl-brace-format
+msgid "The latest empty properties for {{COUNCIL}} reported by users"
+msgstr ""
+"Yr adroddiadau diweddaraf ar gyfer cyngor {{COUNCIL}} y mae defnyddwyr wedi "
+"rhoi gwybod amdanynt"
+
+#: db/alert_types.pl:38
+#, fuzzy, perl-brace-format
+msgid ""
+"New empty property reports for {{COUNCIL}} within {{WARD}} ward on "
+"reportemptyhomes.com"
+msgstr ""
+"Adroddiadau newydd ar gyfer cyngor {{COUNCIL}}, yn ward {{WARD}} ar "
+"reportemptyhomes.com"
+
+#: db/alert_types.pl:39
+#, fuzzy, perl-brace-format
+msgid ""
+"The latest empty properties for {{COUNCIL}} within {{WARD}} ward reported by "
+"users"
+msgstr ""
+"Yr adroddiadau diweddaraf ar gyfer cyngor {{COUNCIL}}, yn ward {{WARD}} y "
+"mae defnyddwyr wedi rhoi gwybod amdanynt"
+
+#: db/alert_types.pl:42
+#, fuzzy, perl-brace-format
+msgid "New empty property reports within {{NAME}}"
+msgstr "Adroddiadau newydd am eiddo gwag"
+
+#: db/alert_types.pl:43
+#, fuzzy, perl-brace-format
+msgid "The latest empty properties within {{NAME}}"
+msgstr "Yr eiddo gwag diweddaraf y mae defnyddwyr wedi rhoi gwybod amdanynt"
+
+#: web-admin/index.cgi:68 web-admin/index.cgi:123 web-admin/index.cgi:124
+#, fuzzy
+msgid "Summary"
+msgstr "Adroddiadau cryno"
+
+#: web-admin/index.cgi:69 web-admin/index.cgi:182 web-admin/index.cgi:183
+#, fuzzy
+msgid "Council contacts"
+msgstr "Cysylltwch â Ni"
+
+#: web-admin/index.cgi:70 web-admin/index.cgi:464
+#, fuzzy
+msgid "Search Reports"
+msgstr "Adroddiadau cryno"
+
+#: web-admin/index.cgi:71 web-admin/index.cgi:783 web-admin/index.cgi:784
+msgid "Timeline"
+msgstr ""
+
+#: web-admin/index.cgi:84
+#, fuzzy
+msgid "reportemptyhomes.com administration"
+msgstr "Diweddariadau i reportemptyhomes.com"
+
+#: web-admin/index.cgi:100
+#, fuzzy
+msgid "reportemptyhomes.com admin:"
+msgstr "reportemptyhomes.com"
+
+#: web-admin/index.cgi:153
+#, fuzzy, perl-format
+msgid "<strong>%d</strong> live empty properties"
+msgstr "Adrodd am eiddo gwag a gweld y rhain"
+
+#: web-admin/index.cgi:154
+#, fuzzy, perl-format
+msgid "%d live updates"
+msgstr "Anfonwch ddiweddariadau ataf i drwy'r e-bost"
+
+#: web-admin/index.cgi:155
+#, perl-format
+msgid "%d confirmed alerts, %d unconfirmed"
+msgstr ""
+
+#: web-admin/index.cgi:156
+#, perl-format
+msgid "%d questionnaires sent &ndash; %d answered (%d%%)"
+msgstr ""
+
+#: web-admin/index.cgi:157
+#, perl-format
+msgid "%d council contacts &ndash; %d confirmed, %d unconfirmed"
+msgstr ""
+
+#: web-admin/index.cgi:162
+msgid "Graph of empty property creation by status over time"
+msgstr ""
+
+#: web-admin/index.cgi:165
+#, fuzzy
+msgid "Empty property breakdown by state"
+msgstr "ni fydd eich eiddo gwag yn cael ei bostio"
+
+#: web-admin/index.cgi:170
+msgid "Update breakdown by state"
+msgstr ""
+
+#: web-admin/index.cgi:186
+msgid "Diligency prize league table"
+msgstr ""
+
+#: web-admin/index.cgi:190
+#, perl-format
+msgid "%d edits by %s"
+msgstr ""
+
+#: web-admin/index.cgi:193
+msgid "No edits have yet been made."
+msgstr ""
+
+#: web-admin/index.cgi:197
+#, fuzzy
+msgid "Councils"
+msgstr "cyngor"
+
+#: web-admin/index.cgi:211 web-admin/index.cgi:586
+#, fuzzy
+msgid "None"
+msgstr "Nac ydw"
+
+#: web-admin/index.cgi:223
+#, fuzzy, perl-format
+msgid "%d addresses"
+msgstr "wythnos"
+
+#: web-admin/index.cgi:229
+msgid "No info at all"
+msgstr ""
+
+#: web-admin/index.cgi:231
+msgid "Currently has 1+ deleted"
+msgstr ""
+
+#: web-admin/index.cgi:233
+msgid "Some unconfirmeds"
+msgstr ""
+
+#: web-admin/index.cgi:235
+msgid "All confirmed"
+msgstr ""
+
+#: web-admin/index.cgi:265 web-admin/index.cgi:275 web-admin/index.cgi:292
+msgid "*unknown*"
+msgstr ""
+
+#: web-admin/index.cgi:268 web-admin/index.cgi:296
+#, fuzzy
+msgid "Values updated"
+msgstr "Anfonwch ddiweddariadau ataf i drwy'r e-bost"
+
+#: web-admin/index.cgi:278
+msgid "New category contact added"
+msgstr ""
+
+#: web-admin/index.cgi:315 web-admin/index.cgi:398
+#, perl-format
+msgid "Council contacts for %s"
+msgstr ""
+
+#: web-admin/index.cgi:328
+#, fuzzy
+msgid " List all reported empty properties"
+msgstr "Eiddo gwag yr adroddwyd amdanynt yn ddiweddar"
+
+#: web-admin/index.cgi:330
+msgid "Text only version"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:477
+#, fuzzy
+msgid "Category"
+msgstr "Categori:"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438 web-admin/index.cgi:477
+#: web-admin/index.cgi:656
+#, fuzzy
+msgid "Email"
+msgstr "E-bost:"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:368 web-admin/index.cgi:421
+#: web-admin/index.cgi:438 web-admin/index.cgi:737
+#, fuzzy
+msgid "Confirmed"
+msgstr "Cadarnhau"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:370 web-admin/index.cgi:423
+#: web-admin/index.cgi:438
+msgid "Deleted"
+msgstr ""
+
+#: web-admin/index.cgi:336
+msgid "Last editor"
+msgstr ""
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438
+#, fuzzy
+msgid "Note"
+msgstr "Nac ydw"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438
+msgid "When edited"
+msgstr ""
+
+#: web-admin/index.cgi:336
+#, fuzzy
+msgid "Confirm"
+msgstr "Cadarnhau"
+
+#: web-admin/index.cgi:353
+#, fuzzy
+msgid "Update statuses"
+msgstr "Diweddariadau"
+
+#: web-admin/index.cgi:358
+msgid "Add new category"
+msgstr ""
+
+#: web-admin/index.cgi:361 web-admin/index.cgi:415
+#, fuzzy
+msgid "Category: "
+msgstr "Categori:"
+
+#: web-admin/index.cgi:364 web-admin/index.cgi:418
+#, fuzzy
+msgid "Email: "
+msgstr "E-bost:"
+
+#: web-admin/index.cgi:373 web-admin/index.cgi:426
+msgid "Note: "
+msgstr ""
+
+#: web-admin/index.cgi:380
+#, fuzzy
+msgid "Create category"
+msgstr "Categori:"
+
+#: web-admin/index.cgi:432
+msgid "Save changes"
+msgstr ""
+
+#: web-admin/index.cgi:436
+msgid "History"
+msgstr ""
+
+#: web-admin/index.cgi:438
+msgid "Editor"
+msgstr ""
+
+#: web-admin/index.cgi:442 web-admin/index.cgi:443
+#, fuzzy
+msgid "yes"
+msgstr "Ydw"
+
+#: web-admin/index.cgi:442 web-admin/index.cgi:443
+msgid "no"
+msgstr ""
+
+#: web-admin/index.cgi:470
+msgid "Search:"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "ID"
+msgstr ""
+
+#: web-admin/index.cgi:477
+msgid "Title"
+msgstr ""
+
+#: web-admin/index.cgi:477
+#, fuzzy
+msgid "Council"
+msgstr "cyngor"
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "Cobrand"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "Created"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+#, fuzzy
+msgid "State"
+msgstr "Diweddariad:"
+
+#: web-admin/index.cgi:477
+msgid "When sent"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "*"
+msgstr ""
+
+#: web-admin/index.cgi:499 web-admin/index.cgi:633
+#, fuzzy
+msgid "Confirmed:"
+msgstr "Cadarnhau"
+
+#: web-admin/index.cgi:500
+msgid "Fixed:"
+msgstr ""
+
+#: web-admin/index.cgi:501
+msgid "Last&nbsp;update:"
+msgstr ""
+
+#: web-admin/index.cgi:517 web-admin/index.cgi:675
+msgid "Edit"
+msgstr ""
+
+#: web-admin/index.cgi:542
+#, fuzzy
+msgid "That empty property will now be resent."
+msgstr "ni fydd eich eiddo gwag yn cael ei bostio"
+
+#: web-admin/index.cgi:548
+msgid "I am afraid you cannot confirm unconfirmed reports."
+msgstr ""
+
+#: web-admin/index.cgi:577 web-admin/index.cgi:697
+#, fuzzy
+msgid "Updated!"
+msgstr "Diweddariadau"
+
+#: web-admin/index.cgi:581
+#, fuzzy, perl-format
+msgid "Editing empty property %d"
+msgstr "Gweld eiddo gwag"
+
+#: web-admin/index.cgi:591
+msgid "used map"
+msgstr ""
+
+#: web-admin/index.cgi:591
+msgid "didn't use map"
+msgstr ""
+
+#: web-admin/index.cgi:603 web-admin/index.cgi:733
+msgid "Remove photo (can't be undone!)"
+msgstr ""
+
+#: web-admin/index.cgi:608
+#, fuzzy
+msgid "Anonymous:"
+msgstr "Di-enw"
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+#, fuzzy
+msgid "State:"
+msgstr "Diweddariad:"
+
+#: web-admin/index.cgi:609
+msgid "Open"
+msgstr ""
+
+#: web-admin/index.cgi:609
+msgid "Fixed"
+msgstr ""
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+#, fuzzy
+msgid "Hidden"
+msgstr "Cuddio pinnau"
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+msgid "Unconfirmed"
+msgstr ""
+
+#: web-admin/index.cgi:609
+msgid "Partial"
+msgstr ""
+
+#: web-admin/index.cgi:612
+msgid "You really want to resend?"
+msgstr ""
+
+#: web-admin/index.cgi:612
+#, fuzzy
+msgid "Resend report"
+msgstr "Cuddio hen adroddiadau "
+
+#: web-admin/index.cgi:621
+#, fuzzy
+msgid "View report on site"
+msgstr "Adroddiadau"
+
+#: web-admin/index.cgi:624
+msgid "Co-ordinates:"
+msgstr ""
+
+#: web-admin/index.cgi:624
+msgid "originally entered"
+msgstr ""
+
+#: web-admin/index.cgi:625
+#, fuzzy
+msgid "For council(s):"
+msgstr "cyngor"
+
+#: web-admin/index.cgi:625
+msgid "other areas:"
+msgstr ""
+
+#: web-admin/index.cgi:632 web-admin/index.cgi:753
+msgid "Created:"
+msgstr ""
+
+#: web-admin/index.cgi:634
+#, fuzzy
+msgid "Sent:"
+msgstr "Pwnc:"
+
+#: web-admin/index.cgi:635
+#, fuzzy
+msgid "Last update:"
+msgstr "Anfonwch ddiweddariadau ataf i drwy'r e-bost"
+
+#: web-admin/index.cgi:636
+msgid "Service:"
+msgstr ""
+
+#: web-admin/index.cgi:637 web-admin/index.cgi:751
+msgid "Cobrand:"
+msgstr ""
+
+#: web-admin/index.cgi:638 web-admin/index.cgi:752
+msgid "Cobrand data:"
+msgstr ""
+
+#: web-admin/index.cgi:639
+#, fuzzy
+msgid "Going to send questionnaire?"
+msgstr "Anfon yr holiadur"
+
+#: web-admin/index.cgi:643 web-admin/index.cgi:757
+#, fuzzy
+msgid "Submit changes"
+msgstr "Anfon"
+
+#: web-admin/index.cgi:656
+msgid "Text"
+msgstr ""
+
+#: web-admin/index.cgi:702
+#, fuzzy
+msgid "Empty property marked as open."
+msgstr "Ffurflen manylion eiddo gwag"
+
+#: web-admin/index.cgi:718
+#, fuzzy, perl-format
+msgid "Editing update %d"
+msgstr "Cyflwyno'ch diweddariad"
+
+#: web-admin/index.cgi:746
+#, fuzzy
+msgid "View update on site"
+msgstr "Diweddariadau am {{title}}"
+
+#: web-admin/index.cgi:747
+msgid "Text:"
+msgstr ""
+
+#: web-admin/index.cgi:749
+msgid "(blank to go anonymous)"
+msgstr ""
+
+#: web-admin/index.cgi:830
+#, perl-format
+msgid "by %s"
+msgstr ""
+
+#: web-admin/index.cgi:832
+#, fuzzy, perl-format
+msgid "Empty property %d created"
+msgstr "Eiddo gwag"
+
+#: web-admin/index.cgi:836
+#, fuzzy, perl-format
+msgid "Empty property %s confirmed"
+msgstr "Ffurflen manylion eiddo gwag"
+
+#: web-admin/index.cgi:840
+#, fuzzy, perl-format
+msgid "Empty property %s sent to council %s"
+msgstr "Eiddo gwag yn %s"
+
+#: web-admin/index.cgi:842
+#, fuzzy, perl-format
+msgid "Questionnaire %d sent for empty property %d"
+msgstr "Llenwyd yr holiadur gan yr unigolyn a roddodd wybod am yr eiddo gwag"
+
+#: web-admin/index.cgi:844
+#, fuzzy, perl-format
+msgid "Questionnaire %d answered for empty property %d, %s to %s"
+msgstr "Llenwyd yr holiadur gan yr unigolyn a roddodd wybod am yr eiddo gwag"
+
+#: web-admin/index.cgi:849
+#, perl-format
+msgid "Update %s created for empty property %d; by %s"
+msgstr ""
+
+#: web-admin/index.cgi:853
+#, perl-format
+msgid "Alert %d created for %s, type %s, parameters %s / %s"
+msgstr ""
+
+#: web-admin/index.cgi:856
+#, perl-format
+msgid "Alert %d disabled (created %s)"
+msgstr ""
#. Please leave the first word "Subject:" untranslated
-#: fixmystreet/templates/emails/alert-confirm
+#: templates/emails/alert-confirm
msgid ""
"Subject: Confirm your alert on reportemptyhomes.com\n"
"\n"
@@ -1573,7 +2651,7 @@ msgstr ""
"Yn gywir, \n"
"Tîm yr Asiantaeth Tai Gwag\n"
-#: fixmystreet/templates/emails/alert-problem
+#: templates/emails/alert-problem
msgid ""
"Subject: New empty property reports on reportemptyhomes.com\n"
"\n"
@@ -1588,9 +2666,10 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-area
+#: templates/emails/alert-problem-area
msgid ""
-"Subject: New empty property reports in <?=$values['area_name']?> on reportemptyhomes.com\n"
+"Subject: New empty property reports in <?=$values['area_name']?> on "
+"reportemptyhomes.com\n"
"\n"
"The following new empty properties have been added within\n"
"<?=$values['area_name']?>:\n"
@@ -1605,11 +2684,13 @@ msgid ""
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-council
+#: templates/emails/alert-problem-council
msgid ""
-"Subject: New empty property reports reported to <?=$values['area_name']?> on reportemptyhomes.com\n"
+"Subject: New empty property reports reported to <?=$values['area_name']?> on "
+"reportemptyhomes.com\n"
"\n"
-"The following new empty properties have been reported to <?=$values['area_name']?>:\n"
+"The following new empty properties have been reported to <?=$values"
+"['area_name']?>:\n"
"\n"
"<?=$values['data']?>\n"
"\n"
@@ -1621,7 +2702,7 @@ msgid ""
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-nearby
+#: templates/emails/alert-problem-nearby
msgid ""
"Subject: New nearby empty properties on reportemptyhomes.com\n"
"\n"
@@ -1636,11 +2717,13 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-problem-ward
+#: templates/emails/alert-problem-ward
msgid ""
-"Subject: New empty property reports reported to <?=$values['area_name']?> within <?=$values['ward_name']?> on reportemptyhomes.com\n"
+"Subject: New empty property reports reported to <?=$values['area_name']?> "
+"within <?=$values['ward_name']?> on reportemptyhomes.com\n"
"\n"
-"The following new empty properties have been reported to <?=$values['area_name']?>\n"
+"The following new empty properties have been reported to <?=$values"
+"['area_name']?>\n"
"within <?=$values['ward_name']?>:\n"
"\n"
"<?=$values['data']?>\n"
@@ -1653,7 +2736,8 @@ msgid ""
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-#: fixmystreet/templates/emails/alert-update
+#: templates/emails/alert-update
+#, fuzzy
msgid ""
"Subject: New updates on empty property - '<?=$values['title']?>'\n"
"\n"
@@ -1661,6 +2745,8 @@ msgid ""
"\n"
"<?=$values['data']?>\n"
"\n"
+"<?=$values['state_message']?>\n"
+"\n"
"To view or reply to these updates, please visit the following URL:\n"
" <?=$values['problem_url']?>\n"
"\n"
@@ -1672,8 +2758,22 @@ msgid ""
"To stop receiving emails when there are new updates on this empty property,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
+"Subject: Diweddariadau newydd am eiddo gwag - '<?=$values['title']?>'\n"
+"\n"
+"Mae'r diweddariadau canlynol wedi cael eu gadael am yr eiddo gwag hwn:\n"
+"\n"
+"<?=$values['data']?>\n"
+"\n"
+"Gweld y diweddariadau hyn neu eu hateb: <?=$values['problem_url']?>\n"
+"\n"
+"Yn gywir, \n"
+"reportemptyhomes.com\n"
+"\n"
+"I roi'r gorau i dderbyn negeseuon e-bost pan fydd diweddariadau newydd yn "
+"ymddangos am yr eiddo hwn,\n"
+"dilynwch y ddolen hon: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/empty property-confirm
+#: templates/emails/empty property-confirm
msgid ""
"Subject: Confirm your empty property report\n"
"\n"
@@ -1717,7 +2817,7 @@ msgstr ""
"Yn gywir, \n"
"reportemptyhomes.com\n"
-#: fixmystreet/templates/emails/flickr-confirm
+#: templates/emails/flickr-confirm
msgid ""
"Subject: Confirm your email address on reportemptyhomes.com\n"
"\n"
@@ -1735,7 +2835,7 @@ msgid ""
"The reportemptyhomes.com team\n"
msgstr ""
-#: fixmystreet/templates/emails/flickr-submit
+#: templates/emails/flickr-submit
msgid ""
"Subject: New photo pulled from Flickr to reportemptyhomes.com\n"
"\n"
@@ -1753,7 +2853,7 @@ msgid ""
"The reportemptyhomes.com team\n"
msgstr ""
-#: fixmystreet/templates/emails/partial
+#: templates/emails/partial
#, fuzzy
msgid ""
"Subject: Confirm your report on reportemptyhomes.com\n"
@@ -1775,7 +2875,8 @@ msgstr ""
"\n"
"Helo<?=$values['name']?>,\n"
"\n"
-"Rydym wedi storio'r adroddiad y gwnaethoch ei lwytho i'r Asiantaeth Tai Gwag drwy gyfrwng\n"
+"Rydym wedi storio'r adroddiad y gwnaethoch ei lwytho i'r Asiantaeth Tai Gwag "
+"drwy gyfrwng\n"
"<?=$values['service']?>. I gadarnhau'r manylion sydd gennym,\n"
"ac i ychwanegu atynt, ewch i'r URL canlynol:\n"
"\n"
@@ -1786,7 +2887,7 @@ msgstr ""
"Yn gywir, \n"
"Tîm yr Asiantaeth Tai Gwag\n"
-#: fixmystreet/templates/emails/problem-confirm
+#: templates/emails/problem-confirm
msgid ""
"Subject: Confirm your empty property on reportemptyhomes.com\n"
"\n"
@@ -1810,13 +2911,14 @@ msgid ""
"The reportemptyhomes.com team\n"
msgstr ""
-#: fixmystreet/templates/emails/questionnaire
+#: templates/emails/questionnaire
msgid ""
"Subject: Questionnaire about your empty property on reportemptyhomes.com\n"
"\n"
"Hi <?=$values['name']?>,\n"
"\n"
-"<?=$values['created']?> ago, you left an empty property on reportemptyhomes.com\n"
+"<?=$values['created']?> ago, you left an empty property on reportemptyhomes."
+"com\n"
"with the details provided at the end of this email. To keep our\n"
"site up to date and relevant, we'd appreciate it if you could\n"
"follow the link below and fill in our short questionnaire\n"
@@ -1838,7 +2940,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/questionnaire-eha-26weeks
+#: templates/emails/questionnaire-eha-26weeks
msgid ""
"Subject: Questionnaire about your empty property report\n"
"\n"
@@ -1846,7 +2948,8 @@ msgid ""
"\n"
"Six months ago, you reported an empty home on ReportEmptyHomes.com with the\n"
"details provided at the end of this email. To keep our site up to date and\n"
-"relevant, I'd be grateful if you could fill in this short questionnaire to tell\n"
+"relevant, I'd be grateful if you could fill in this short questionnaire to "
+"tell\n"
"us what has happened: \n"
"\n"
" <?=$values['url']?>\n"
@@ -1870,9 +2973,12 @@ msgstr ""
"\n"
"Helo <?=$values['name']?>,\n"
"\n"
-"Chwe mis yn ôl, fe wnaethoch adrodd am eiddo gwag ar ReportEmptyHomes.com gan roi'r\n"
-"manylion sydd wedi'u cynnwys ar ddiwedd y neges e-bost hon. Er mwyn cadw'n safle'n gyfredol\n"
-"ac yn berthnasol, byddwn yn ddiolchgar petaech yn llenwi'r holiadur byr hwn er mwyn\n"
+"Chwe mis yn ôl, fe wnaethoch adrodd am eiddo gwag ar ReportEmptyHomes.com "
+"gan roi'r\n"
+"manylion sydd wedi'u cynnwys ar ddiwedd y neges e-bost hon. Er mwyn cadw'n "
+"safle'n gyfredol\n"
+"ac yn berthnasol, byddwn yn ddiolchgar petaech yn llenwi'r holiadur byr hwn "
+"er mwyn\n"
"dweud wrthom ni beth sydd wedi digwydd: \n"
"\n"
" <?=$values['url']?>\n"
@@ -1892,7 +2998,7 @@ msgstr ""
"<?=$values['detail']?>\n"
"\n"
-#: fixmystreet/templates/emails/questionnaire-eha-4weeks
+#: templates/emails/questionnaire-eha-4weeks
msgid ""
"Subject: Questionnaire about your empty property report\n"
"\n"
@@ -1900,7 +3006,8 @@ msgid ""
"\n"
"Four weeks ago, you reported an empty home on ReportEmptyHomes.com with the\n"
"details provided at the end of this email. To keep our site up to date and\n"
-"relevant, I'd be grateful if you could fill in this short questionnaire to tell\n"
+"relevant, I'd be grateful if you could fill in this short questionnaire to "
+"tell\n"
"us what has happened:\n"
"\n"
" <?=$values['url']?>\n"
@@ -1924,9 +3031,12 @@ msgstr ""
"\n"
"Helo <?=$values['name']?>,\n"
"\n"
-"Bedair wythnos yn ôl, fe wnaethoch adrodd am eiddo gwag ar ReportEmptyHomes.com gan roi'r\n"
-"manylion sydd wedi'u cynnwys ar ddiwedd y neges e-bost hon. Er mwyn cadw'n safle'n gyfredol\n"
-"ac yn berthnasol, byddwn yn ddiolchgar petaech yn gallu llenwi'r holiadur byr hwn \n"
+"Bedair wythnos yn ôl, fe wnaethoch adrodd am eiddo gwag ar ReportEmptyHomes."
+"com gan roi'r\n"
+"manylion sydd wedi'u cynnwys ar ddiwedd y neges e-bost hon. Er mwyn cadw'n "
+"safle'n gyfredol\n"
+"ac yn berthnasol, byddwn yn ddiolchgar petaech yn gallu llenwi'r holiadur "
+"byr hwn \n"
"i ddweud wrthom beth sydd wedi digwydd:\n"
"\n"
" <?=$values['url']?>\n"
@@ -1946,13 +3056,14 @@ msgstr ""
"<?=$values['detail']?>\n"
"\n"
-#: fixmystreet/templates/emails/reply-autoresponse
+#: templates/emails/reply-autoresponse
msgid ""
"Subject: Automatic reply to your message to reportemptyhomes.com\n"
"\n"
"Hi,\n"
"\n"
-"This is an automatic response to your email; your email has not been delivered.\n"
+"This is an automatic response to your email; your email has not been "
+"delivered.\n"
"\n"
"If you're replying to an email about a report update, please visit\n"
"the URL given in the email in order to leave a reply. You cannot\n"
@@ -1973,7 +3084,7 @@ msgid ""
"The reportemptyhomes.com team\n"
msgstr ""
-#: fixmystreet/templates/emails/submit-brent
+#: templates/emails/submit-brent
msgid ""
"Subject: FMS Empty property Report: <?=$values['title']?>\n"
"\n"
@@ -1994,13 +3105,14 @@ msgid ""
"\n"
"Email: <?=$values['email']?>\n"
"\n"
-"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values['title']?>\n"
+"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values"
+"['title']?>\n"
"\n"
"Details: <?=$values['detail']?>\n"
"\n"
-"Easting: <?=$values['easting']?>\n"
+"<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>\n"
"\n"
-"Northing: <?=$values['northing']?>\n"
+"Longitude: <?=$values['longitude']?>\n"
"\n"
"<?=$values['closest_address_machine']?>----------\n"
"\n"
@@ -2009,15 +3121,18 @@ msgid ""
"Yours, \n"
"The reportemptyhomes.com team\n"
"\n"
-"[ This message was sent via reportemptyhomes.com, a project of UKCOD, registered charity\n"
-"number 1076346. If there is a more appropriate email address for messages about\n"
-"<?=$values['category_footer']?>, please let us know by visiting <http://www.fixmystreet.com/contact>.\n"
+"[ This message was sent via reportemptyhomes.com, a project of UKCOD, "
+"registered charity\n"
+"number 1076346. If there is a more appropriate email address for messages "
+"about\n"
+"<?=$values['category_footer']?>, please let us know by visiting <http://www."
+"fixmystreet.com/contact>.\n"
"This will help improve the service for local people. We\n"
"also welcome any other feedback you may have. ]\n"
"\n"
msgstr ""
-#: fixmystreet/templates/emails/submit-council
+#: templates/emails/submit-council
msgid ""
"Subject: Empty property Report: <?=$values['title']?>\n"
"\n"
@@ -2038,10 +3153,15 @@ msgid ""
"\n"
"Email: <?=$values['email']?>\n"
"\n"
-"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values['title']?>\n"
+"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values"
+"['title']?>\n"
"\n"
"Details: <?=$values['detail']?>\n"
"\n"
+"<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>\n"
+"\n"
+"Longitude: <?=$values['longitude']?>\n"
+"\n"
"<?=$values['closest_address']?>----------\n"
"\n"
"Replies to this email will go to the user who submitted the empty property.\n"
@@ -2049,37 +3169,47 @@ msgid ""
"Yours, \n"
"The reportemptyhomes.com team\n"
"\n"
-"[ This message was sent via reportemptyhomes.com, a project of UKCOD, registered charity\n"
-"number 1076346. If there is a more appropriate email address for messages about\n"
-"<?=$values['category_footer']?>, please let us know by visiting <http://www.fixmystreet.com/contact>.\n"
+"[ This message was sent via reportemptyhomes.com, a project of UKCOD, "
+"registered charity\n"
+"number 1076346. If there is a more appropriate email address for messages "
+"about\n"
+"<?=$values['category_footer']?>, please let us know by visiting <http://www."
+"fixmystreet.com/contact>.\n"
"This will help improve the service for local people. We\n"
"also welcome any other feedback you may have. ]\n"
"\n"
msgstr ""
-#: fixmystreet/templates/emails/submit-eha
+#: templates/emails/submit-eha
msgid ""
"Subject: Empty property report\n"
"\n"
"Dear Empty Property Officer,\n"
"\n"
-"This is a new referral of an empty property in your area made by a user of the\n"
-"website ReportEmptyHomes.com; the website user has been told that the case has\n"
-"been referred to you. We would be grateful if you could do whatever you can to\n"
-"help get this property back into use. We will contact the user in a month and\n"
+"This is a new referral of an empty property in your area made by a user of "
+"the\n"
+"website ReportEmptyHomes.com; the website user has been told that the case "
+"has\n"
+"been referred to you. We would be grateful if you could do whatever you can "
+"to\n"
+"help get this property back into use. We will contact the user in a month "
+"and\n"
"again in six months and ask them what has happened to the property. \n"
"\n"
-"We'd encourage you to tell us what you have done, and when the property comes\n"
+"We'd encourage you to tell us what you have done, and when the property "
+"comes\n"
"back into use, by filling in an update against the property referral on the\n"
"website:\n"
"\n"
" <?=$values['url']?>\n"
"\n"
"This gives useful feedback to website users and helps them understand what\n"
-"action you are taking. We will offer advice to the user on other action they\n"
+"action you are taking. We will offer advice to the user on other action "
+"they\n"
"might take if the property isn't successfully dealt with. \n"
"\n"
-"<?=$values['has_photo']?>If you would like help or advice on getting empty properties back into use\n"
+"<?=$values['has_photo']?>If you would like help or advice on getting empty "
+"properties back into use\n"
"there is lots of useful information on the Empty Homes Agency's website\n"
"www.EmptyHomes.com - if you have further questions please give us a call. \n"
"\n"
@@ -2110,23 +3240,31 @@ msgstr ""
"\n"
"Dyma gyfeiriad newydd am eiddo gwag yn eich ardal, a wnaed gan ddefnyddiwr \n"
"gwefan ReportEmptyHomes.com; dywedwyd wrth ddefnyddiwr y wefan fod yr achos\n"
-"wedi cael ei gyfeirio atoch. Byddem yn ddiolchgar petaech yn gwneud yr hyn y gallwch i \n"
-"helpu adfer yr eiddo hwn i'w ddefnyddio eto. Byddwn yn cysylltu â'r defnyddiwr ymhen mis\n"
-"ac eto ymhen chwe mis ac yn gofyn iddynt beth sydd wedi digwydd i'r eiddo. \n"
-"\n"
-"Hoffwn eich annog chi i ddweud wrthom beth rydych chi wedi'i wneud, a phan y daw'r eiddo\n"
+"wedi cael ei gyfeirio atoch. Byddem yn ddiolchgar petaech yn gwneud yr hyn "
+"y gallwch i \n"
+"helpu adfer yr eiddo hwn i'w ddefnyddio eto. Byddwn yn cysylltu â'r "
+"defnyddiwr ymhen mis\n"
+"ac eto ymhen chwe mis ac yn gofyn iddynt beth sydd wedi digwydd i'r "
+"eiddo. \n"
+"\n"
+"Hoffwn eich annog chi i ddweud wrthom beth rydych chi wedi'i wneud, a phan y "
+"daw'r eiddo\n"
"yn ôl mewn defnydd, trwy lenwi diweddariad wrth y cyfeiriad at yr eiddo\n"
"ar y wefan:\n"
"\n"
" <?=$values['url']?>\n"
"\n"
-"Mae hyn yn rhoi adborth defnyddiol i ddefnyddwyr y wefan ac yn helpu iddynt ddeall\n"
-"pa gamau yr ydych yn eu cymryd. Byddwn yn cynnig cyngor i'r defnyddiwr ar gamau eraill y \n"
+"Mae hyn yn rhoi adborth defnyddiol i ddefnyddwyr y wefan ac yn helpu iddynt "
+"ddeall\n"
+"pa gamau yr ydych yn eu cymryd. Byddwn yn cynnig cyngor i'r defnyddiwr ar "
+"gamau eraill y \n"
"gall eu cymryd os nad eir i'r afael â'r eiddo'n llwyddiannus. \n"
"\n"
-"<?=$values['has_photo']?>Os hoffech gael help neu gyngor ar gael eiddo gwag yn ôl mewn defnydd\n"
+"<?=$values['has_photo']?>Os hoffech gael help neu gyngor ar gael eiddo gwag "
+"yn ôl mewn defnydd\n"
"mae llawer o wybodaeth ddefnyddiol ar wefan yr Asiantaeth Tai Gwag \n"
-"www.EmptyHomes.com - os oes gennych unrhyw gwestiynau eraill, rhowch alwad i ni. \n"
+"www.EmptyHomes.com - os oes gennych unrhyw gwestiynau eraill, rhowch alwad i "
+"ni. \n"
"\n"
"----------\n"
"\n"
@@ -2142,14 +3280,15 @@ msgstr ""
"\n"
"<?=$values['closest_address']?>----------\n"
"\n"
-"Bydd ymatebion i'r neges e-bost hon yn mynd at y defnyddiwr a gyflwynodd yr adroddiad,\n"
+"Bydd ymatebion i'r neges e-bost hon yn mynd at y defnyddiwr a gyflwynodd yr "
+"adroddiad,\n"
"os hoffech ofyn am fwy o wybodaeth.\n"
"\n"
"Yn gywir, \n"
"reportemptyhomes.com\n"
"\n"
-#: fixmystreet/templates/emails/tms-confirm
+#: templates/emails/tms-confirm
msgid ""
"Subject: Confirm your expression of interest in TextMyStreet\n"
"\n"
@@ -2167,7 +3306,7 @@ msgid ""
"The reportemptyhomes.com team\n"
msgstr ""
-#: fixmystreet/templates/emails/update-confirm
+#: templates/emails/update-confirm
msgid ""
"Subject: Confirm your update on reportemptyhomes.com\n"
"\n"
@@ -2191,7 +3330,8 @@ msgstr ""
"\n"
"Helo <?=$values['name']?>,\n"
"\n"
-"Cliciwch ar y ddolen isod i gadarnhau'r diweddariad yr ydych newydd ei ysgrifennu:\n"
+"Cliciwch ar y ddolen isod i gadarnhau'r diweddariad yr ydych newydd ei "
+"ysgrifennu:\n"
"\n"
"<?=$values['url']?>\n"
"\n"
@@ -2205,7 +3345,7 @@ msgstr ""
"Yn gywir, \n"
"Tîm yr Asiantaeth Tai Gwag\n"
-#: fixmystreet/templates/emails/eha/alert-problem
+#: templates/emails/emptyhomes/alert-problem
msgid ""
"Subject: New empty property reports on reportemptyhomes.com\n"
"\n"
@@ -2228,12 +3368,14 @@ msgstr ""
"Yn gywir, \n"
"reportemptyhomes.com\n"
"\n"
-"I roi'r gorau i dderbyn negeseuon e-bost pan fydd eiddo newydd yn ymddangos,\n"
+"I roi'r gorau i dderbyn negeseuon e-bost pan fydd eiddo newydd yn "
+"ymddangos,\n"
"dilynwch y ddolen hon: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-area
+#: templates/emails/emptyhomes/alert-problem-area
msgid ""
-"Subject: New empty property reports in <?=$values['area_name']?> on reportemptyhomes.com\n"
+"Subject: New empty property reports in <?=$values['area_name']?> on "
+"reportemptyhomes.com\n"
"\n"
"The following empty properties have been added within\n"
"<?=$values['area_name']?>:\n"
@@ -2247,7 +3389,8 @@ msgid ""
"<?=$values['area_name']?>, please follow this link: \n"
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Adroddiadau newydd am eiddo gwag yn ardal <?=$values['area_name']?> ar reportemptyhomes.com\n"
+"Subject: Adroddiadau newydd am eiddo gwag yn ardal <?=$values['area_name']?> "
+"ar reportemptyhomes.com\n"
"\n"
"Mae'r eiddo gwag canlynol wedi cael eu hychwanegu yn ardal\n"
"<?=$values['area_name']?>:\n"
@@ -2257,15 +3400,18 @@ msgstr ""
"Yn gywir, \n"
"reportemptyhomes.com\n"
"\n"
-"I roi'r gorau i dderbyn negeseuon e-bost pan fydd eiddo newydd yn ymddangos yn ardal\n"
+"I roi'r gorau i dderbyn negeseuon e-bost pan fydd eiddo newydd yn ymddangos "
+"yn ardal\n"
"<?=$values['area_name']?>, dilynwch y ddolen hon: \n"
"<?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-council
+#: templates/emails/emptyhomes/alert-problem-council
msgid ""
-"Subject: New empty property reports reported to <?=$values['area_name']?> on reportemptyhomes.com\n"
+"Subject: New empty property reports reported to <?=$values['area_name']?> on "
+"reportemptyhomes.com\n"
"\n"
-"The following empty properties have been reported to <?=$values['area_name']?>:\n"
+"The following empty properties have been reported to <?=$values['area_name']?"
+">:\n"
"\n"
"<?=$values['data']?>\n"
"\n"
@@ -2276,20 +3422,23 @@ msgid ""
"<?=$values['area_name']?>, please follow this link: \n"
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Adroddiadau newydd am eiddo gwag a hysbyswyd i ardal <?=$values['area_name']?> ar reportemptyhomes.com\n"
+"Subject: Adroddiadau newydd am eiddo gwag a hysbyswyd i ardal <?=$values"
+"['area_name']?> ar reportemptyhomes.com\n"
"\n"
-"Mae'r eiddo gwag canlynol wedi cael eu hysbysu i ardal<?=$values['area_name']?>:\n"
+"Mae'r eiddo gwag canlynol wedi cael eu hysbysu i ardal<?=$values"
+"['area_name']?>:\n"
"\n"
"<?=$values['data']?>\n"
"\n"
"Yn gywir, \n"
"reportemptyhomes.com\n"
"\n"
-"I roi'r gorau i dderbyn negeseuon e-bost pan gaiff eiddo gwag newydd eu hysbysu i ardal \n"
+"I roi'r gorau i dderbyn negeseuon e-bost pan gaiff eiddo gwag newydd eu "
+"hysbysu i ardal \n"
"<?=$values['area_name']?>, dilynwch y ddolen hon: \n"
"<?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-nearby
+#: templates/emails/emptyhomes/alert-problem-nearby
msgid ""
"Subject: New nearby empty properties on reportemptyhomes.com\n"
"\n"
@@ -2315,11 +3464,13 @@ msgstr ""
"I roi'r gorau i dderbyn negeseuon e-bost pan fydd eiddo gerllaw,\n"
"dilynwch y ddolen hon: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-ward
+#: templates/emails/emptyhomes/alert-problem-ward
msgid ""
-"Subject: New empty property reports reported to <?=$values['area_name']?> within <?=$values['ward_name']?> on reportemptyhomes.com\n"
+"Subject: New empty property reports reported to <?=$values['area_name']?> "
+"within <?=$values['ward_name']?> on reportemptyhomes.com\n"
"\n"
-"The following empty properties have been reported to <?=$values['area_name']?>\n"
+"The following empty properties have been reported to <?=$values['area_name']?"
+">\n"
"within <?=$values['ward_name']?>:\n"
"\n"
"<?=$values['data']?>\n"
@@ -2331,9 +3482,11 @@ msgid ""
"<?=$values['area_name']?> within <?=$values['ward_name']?>,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Adroddiadau newydd am eiddo gwag a hysbyswyd i ardal <?=$values['area_name']?>, yn ward <?=$values['ward_name']?> ar reportemptyhomes.com\n"
+"Subject: Adroddiadau newydd am eiddo gwag a hysbyswyd i ardal <?=$values"
+"['area_name']?>, yn ward <?=$values['ward_name']?> ar reportemptyhomes.com\n"
"\n"
-"Mae'r eiddo gwag canlynol wedi cael eu hysbysu i ardal <?=$values['area_name']?>,\n"
+"Mae'r eiddo gwag canlynol wedi cael eu hysbysu i ardal <?=$values"
+"['area_name']?>,\n"
"o fewn ward <?=$values['ward_name']?>:\n"
"\n"
"<?=$values['data']?>\n"
@@ -2341,11 +3494,12 @@ msgstr ""
"Yn gywir, \n"
"reportemptyhomes.com\n"
"\n"
-"I roi'r gorau i dderbyn negeseuon e-bost pan gaiff eiddo newydd eu hysbysu i ardal \n"
+"I roi'r gorau i dderbyn negeseuon e-bost pan gaiff eiddo newydd eu hysbysu i "
+"ardal \n"
"<?=$values['area_name']?>, o fewn ward <?=$values['ward_name']?>,\n"
"dilynwch y ddolen hon: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-update
+#: templates/emails/emptyhomes/alert-update
msgid ""
"Subject: New updates on empty property- '<?=$values['title']?>'\n"
"\n"
@@ -2372,9 +3526,40 @@ msgstr ""
"Yn gywir, \n"
"reportemptyhomes.com\n"
"\n"
-"I roi'r gorau i dderbyn negeseuon e-bost pan fydd diweddariadau newydd yn ymddangos am yr eiddo hwn,\n"
+"I roi'r gorau i dderbyn negeseuon e-bost pan fydd diweddariadau newydd yn "
+"ymddangos am yr eiddo hwn,\n"
"dilynwch y ddolen hon: <?=$values['unsubscribe_url']?>\n"
+#~ msgid "Enter a nearby GB postcode, or street name and area:"
+#~ msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw:"
+
+#~ msgid ""
+#~ "We will contact you again in a month and again after six months to ask "
+#~ "what has\n"
+#~ "happened. Hopefully the property will be well on the way to being brought "
+#~ "back\n"
+#~ "into use by then, but if not we can offer advice on what you can do next."
+#~ msgstr ""
+#~ "Byddwn yn cysylltu â chi eto ymhen mis ac eto ymhen chwe mis i holi beth "
+#~ "sydd wedi digwydd.\n"
+#~ "Ein gobaith yw y bydd yr eiddo wrthi'n cael ei adfer i'w ddefnyddio erbyn "
+#~ "hynny,\n"
+#~ "ond os nad ydyw, gallwn gynnig cyngor ar yr beth y gallwch ei wneud nesaf."
+
+#~ msgid "Please note that updates are not sent to the council."
+#~ msgstr "Sylwer nad yw diweddariadau'n cael eu hanfon at y cyngor."
+
+#~ msgid ""
+#~ "The closest address, as the crow flies, to the location of this empty "
+#~ "property, %.0fm away, is: %s - please note that this is automatically "
+#~ "generated, so ensure that you check it against the details provided by "
+#~ "the user and, if possible, the map."
+#~ msgstr ""
+#~ "Y cyfeiriad agosaf ar draws gwlad, i leoliad yr eiddo gwag hwn, %.0fm i "
+#~ "ffwrdd, yw: %s - sylwer bod hwn yn cael ei greu'n awtomatig, felly "
+#~ "gwnewch yn siwr eich bod yn ei gadarnhau yn ôl y manylion sy'n cael eu "
+#~ "rhoi gan y defnyddiwr ac, os oes modd, ei gadarnhau yn ôl y map."
+
#~ msgid "empty property"
#~ msgstr "eiddo gwag"
@@ -2393,5 +3578,9 @@ msgstr ""
#~ msgid "New!"
#~ msgstr "Newydd!"
-#~ msgid "That empty property has been hidden from public view as it contained inappropriate public details"
-#~ msgstr "Mae'r eiddo gwag hwnnw wedi cael ei guddio o olwg y cyhoedd gan ei fod yn cynnwys manylion cyhoeddus amhriodol"
+#~ msgid ""
+#~ "That empty property has been hidden from public view as it contained "
+#~ "inappropriate public details"
+#~ msgstr ""
+#~ "Mae'r eiddo gwag hwnnw wedi cael ei guddio o olwg y cyhoedd gan ei fod yn "
+#~ "cynnwys manylion cyhoeddus amhriodol"
diff --git a/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po b/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po
index 4b02ea254..2f5ca16dc 100644
--- a/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po
+++ b/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po
@@ -1,1026 +1,1449 @@
+# translation of FixMyStreet.po to Norwegian Bokmål
# FixMyStreet original .po file, autogenerated by gettext-extract.
# Copyright (C) 2008 UK Citizens Online Democracy
# This file is distributed under the same license as the main FixMyStreet code.
-# Matthew Somerville <matthew@mysociety.org>, 2008-04-15.
#
-#, fuzzy
+# Matthew Somerville <matthew@mysociety.org>, 2008-04-15.
+# Petter Reinholdtsen <pere@hungry.com>, 2011.
msgid ""
msgstr ""
-"Project-Id-Version: 1.0\n"
+"Project-Id-Version: FixMyStreet\n"
"Report-Msgid-Bugs-To: matthew@mysociety.org\n"
-"POT-Creation-Date: 2009-08-12 12:28+0100\n"
-"PO-Revision-Date: 2009-01-12 15:00+ZONE\n"
+"POT-Creation-Date: 2011-03-21 13:15+0000\n"
+"PO-Revision-Date: 2011-02-27 13:36MET\n"
"Last-Translator: Petter Reinholdtsen <pere@hungry.com>\n"
-"Language-Team: Norwegian <i18n-no@lister.ping.uio.no>\n"
+"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: KBabel 1.11.4\n"
-#: fixmystreet/perllib/Page.pm:78
+#: perllib/Cobrands/Emptyhomes/Util.pm:61 bin/send-questionnaires-eha:93
+msgid "Report Empty Homes"
+msgstr "Rapporter tomme hjem"
+
+#: perllib/Cobrands/Fiksgatami/Util.pm:37
+msgid "Enter a nearby postcode, or street name and area"
+msgstr "Skriv inn postnummer i nærheten, eller veinavn og sted"
+
+#: perllib/Page.pm:86
#, perl-format
-msgid "Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
+msgid ""
+"Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
msgstr ""
+"Vær så snill å forsøk igjen senere, eller <a href=\"mailto:%s\">send oss en "
+"epost</a> og gi oss beskjed."
-#: fixmystreet/perllib/Page.pm:79
+#: perllib/Page.pm:87
msgid "Sorry! Something's gone wrong."
-msgstr ""
+msgstr "Beklager! Noe har gått galt."
-#: fixmystreet/perllib/Page.pm:80
+#: perllib/Page.pm:88
msgid "The text of the error was:"
-msgstr ""
+msgstr "Teksten i feilmeldingen var:"
-#: fixmystreet/perllib/Page.pm:167 fixmystreet/perllib/Page.pm:260
-#, fuzzy
+#: perllib/Page.pm:195 web/contact.cgi:107
+msgid "FixMyStreet"
+msgstr "FiksGataMi"
+
+#: perllib/Page.pm:198 perllib/Page.pm:322
msgid "Report a problem"
-msgstr "Legger til en sak"
+msgstr "Rapporter et problem"
-#: fixmystreet/perllib/Page.pm:168 fixmystreet/perllib/Page.pm:261
-#, fuzzy
+#: perllib/Page.pm:199 perllib/Page.pm:323
msgid "All reports"
-msgstr "Oppsummerings rapporter"
+msgstr "Alle rapporter"
-#: fixmystreet/perllib/Page.pm:169 fixmystreet/perllib/Page.pm:262
+#: perllib/Page.pm:200 perllib/Page.pm:324
msgid "Local alerts"
-msgstr ""
+msgstr "Lokale varsler"
-#: fixmystreet/perllib/Page.pm:170 fixmystreet/perllib/Page.pm:263
+#: perllib/Page.pm:201 perllib/Page.pm:325
msgid "Help"
-msgstr ""
+msgstr "Hjelp"
-#: fixmystreet/perllib/Page.pm:171 fixmystreet/web/about.cgi:19 fixmystreet/web/about.cgi:21
+#: perllib/Page.pm:202 web/about.cgi:19 web/about.cgi:21
msgid "About us"
-msgstr ""
-
-#: fixmystreet/perllib/Page.pm:172 fixmystreet/bin/send-questionnaires-eha:93
-msgid "Report Empty Homes"
-msgstr ""
-
-#: fixmystreet/perllib/Page.pm:181 fixmystreet/perllib/Page.pm:551 fixmystreet/web/contact.cgi:64
-msgid "FixMyStreet"
-msgstr "Fiksgatami"
+msgstr "Om oss"
-#: fixmystreet/perllib/Page.pm:199
+#: perllib/Page.pm:223
msgid "Fix<span id=\"my\">My</span>Street"
+msgstr "Fiks<span id=\"my\">Gata</span>Mi"
+
+#: perllib/Page.pm:301
+msgid ""
+"This is a developer site; things might break at any time, and the database "
+"will be periodically deleted."
msgstr ""
+"Dette er et utviklernettsted. Ting kan knekke når som helst og databasen vil "
+"bli periodisk slettet."
-#: fixmystreet/perllib/Page.pm:207
-msgid "This is a developer site; things might break at any time."
+#: perllib/Page.pm:315
+msgid ""
+"Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a "
+"href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href="
+"\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa"
+"\">code</a>."
msgstr ""
+"Bygget av <a href=\"http://www.mysociety.org/\">mySociety</a>, ved hjelp av "
+"<a href=\"http://github.com/mysociety/fixmystreet\">smart</a>&nbsp;<a href="
+"\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa"
+"\">kode</a>."
-#: fixmystreet/perllib/Page.pm:259
+#: perllib/Page.pm:317
+msgid ""
+"Built by <a href=\"http://www.mysociety.org/\">mySociety</a> and maintained "
+"by <a href=\"http://www.nuug.no/\">NUUG</a>, using some <a href=\"http://"
+"github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href=\"https://secure."
+"mysociety.org/cvstrac/dir?d=mysociety/services/TilMa\">code</a>."
+msgstr ""
+"Bygget av <a href=\"http://www.mysociety.org/\">mySociety</a> og "
+"vedlikeholdt av <a href=\"http://www.nuug.no/\">NUUG</a>, ved hjelp av <a "
+"href=\"http://github.com/mysociety/fixmystreet\">snedig</a>&nbsp;<a href="
+"\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa"
+"\">kode</a>."
+
+#: perllib/Page.pm:321
msgid "Navigation"
-msgstr ""
+msgstr "Navigasjon"
-#: fixmystreet/perllib/Page.pm:264
-#, fuzzy
+#: perllib/Page.pm:326
msgid "Contact"
-msgstr "Kontakt oss"
+msgstr "Kontakt"
-#: fixmystreet/perllib/Page.pm:265
-msgid "<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height=\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id=\"logoie\"></span></a>"
-msgstr ""
-
-#: fixmystreet/perllib/Page.pm:266
-msgid "Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href=\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa\">code</a>."
+#: perllib/Page.pm:328
+msgid ""
+"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
+"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
+"\"logoie\"></span></a>"
msgstr ""
+"<div id=\"logo\" align=\"center\"><a href=\"http://www.nuug.no/\">Foreningen "
+"NUUG</a></div>"
-#: fixmystreet/perllib/Page.pm:299
+#: perllib/Page.pm:386
msgid "Error"
-msgstr ""
-
-#: fixmystreet/perllib/Page.pm:375
-msgid "Crown copyright. All rights reserved. Ministry of Justice"
-msgstr ""
-
-#: fixmystreet/perllib/Page.pm:398
-msgid "Problem"
-msgstr "Problem"
+msgstr "Feil"
-#: fixmystreet/perllib/Page.pm:557
+#: perllib/Page.pm:448
msgid "your problem will not be posted"
-msgstr ""
+msgstr "vil ditt problem ikke bli publisert"
-#: fixmystreet/perllib/Page.pm:558
+#: perllib/Page.pm:449
msgid "we'll hang on to your problem report while you're checking your email."
-msgstr ""
+msgstr "vi holder på rapporten din mens du sjekker epost."
-#: fixmystreet/perllib/Page.pm:560
+#: perllib/Page.pm:451
msgid "your update will not be posted"
-msgstr ""
+msgstr "din oppdatering vil ikke bli publisert"
-#: fixmystreet/perllib/Page.pm:561
+#: perllib/Page.pm:452
msgid "we'll hang on to your update while you're checking your email."
-msgstr ""
+msgstr "vi holder på din oppdatering mens du sjekker din epost."
-#: fixmystreet/perllib/Page.pm:563
+#: perllib/Page.pm:454
msgid "your alert will not be activated"
-msgstr ""
+msgstr "vil ditt varsel ikke bli aktivisert"
-#: fixmystreet/perllib/Page.pm:564
+#: perllib/Page.pm:455
msgid "we'll hang on to your alert while you're checking your email."
-msgstr ""
+msgstr "vi holder på ditt varsel mens du sjekker din epost."
-#: fixmystreet/perllib/Page.pm:570
+#: perllib/Page.pm:462
#, perl-format
msgid ""
"<h1>Nearly Done! Now check your email...</h1>\n"
-"<p>The confirmation email <strong>may</strong> take a few minutes to arrive &mdash; <em>please</em> be patient.</p>\n"
-"<p>If you use web-based email or have 'junk mail' filters, you may wish to check your bulk/spam mail folders: sometimes, our messages are marked that way.</p>\n"
+"<p>The confirmation email <strong>may</strong> take a few minutes to arrive "
+"&mdash; <em>please</em> be patient.</p>\n"
+"<p>If you use web-based email or have 'junk mail' filters, you may wish to "
+"check your bulk/spam mail folders: sometimes, our messages are marked that "
+"way.</p>\n"
"<p>You must now click the link in the email we've just sent you &mdash;\n"
"if you do not, %s.</p>\n"
"<p>(Don't worry &mdash; %s)</p>\n"
msgstr ""
-
-#: fixmystreet/perllib/Page.pm:586
+"<h1>Nesten ferdig! Nå må du sjekke eposten din...</h1>\n"
+"<p>Bekreftelseseposten <strong>kan</strong> bruke noen minutter på å nå frem "
+"&mdash; så vær tålmodig.</p>\n"
+"<p>Hvis du bruker webbasert epost eller har søppelepost-filter, så bør du "
+"kanskje a sjekke din bulk/spam-mappe. Noen ganger blir epost fra oss markert "
+"som søppelpost.</p>\n"
+"<p>Du må klikke på lenken i eposten vi nettopp har sendt deg &mdash;\n"
+"hvis du ikke gjør det, %s.</p>\n"
+"<p>(Ingen grunn til bekymring &mdash; %s)</p>\n"
+
+#: perllib/Page.pm:489
msgid "today"
-msgstr ""
+msgstr "idag"
-#: fixmystreet/perllib/Page.pm:608
+#: perllib/Page.pm:513
msgid "less than a minute"
-msgstr ""
+msgstr "mindre enn et minutt"
-#: fixmystreet/perllib/Page.pm:611
-msgid "week"
-msgstr ""
+#: perllib/Page.pm:516
+#, perl-format
+msgid "%d week"
+msgstr "%d uke"
-#: fixmystreet/perllib/Page.pm:612
-msgid "day"
-msgstr ""
+#: perllib/Page.pm:516
+#, perl-format
+msgid "%d weeks"
+msgstr "%d uker"
-#: fixmystreet/perllib/Page.pm:613
-#, fuzzy
-msgid "hour"
-msgstr "eller"
+#: perllib/Page.pm:517
+#, perl-format
+msgid "%d day"
+msgstr "%d dag"
-#: fixmystreet/perllib/Page.pm:614
-msgid "minute"
-msgstr ""
+#: perllib/Page.pm:517
+#, perl-format
+msgid "%d days"
+msgstr "%d dager"
-#: fixmystreet/perllib/Page.pm:634
-#, fuzzy, perl-format
+#: perllib/Page.pm:518
+#, perl-format
+msgid "%d hour"
+msgstr "%d time"
+
+#: perllib/Page.pm:518
+#, perl-format
+msgid "%d hours"
+msgstr "%d timer"
+
+#: perllib/Page.pm:519
+#, perl-format
+msgid "%d minute"
+msgstr "%d minutt"
+
+#: perllib/Page.pm:519
+#, perl-format
+msgid "%d minutes"
+msgstr "%d minutter"
+
+#: perllib/Page.pm:539
+#, perl-format
msgid "%s, reported anonymously at %s"
-msgstr "Publisert av anonym bruker"
+msgstr "%s, rapportert anonymt %s"
-#: fixmystreet/perllib/Page.pm:636
+#: perllib/Page.pm:541
#, perl-format
msgid "%s, reported by %s at %s"
-msgstr ""
+msgstr "%s, rapportert av %s %s"
-#: fixmystreet/perllib/Page.pm:640
+#: perllib/Page.pm:544 perllib/Page.pm:546 perllib/Page.pm:552
+#: perllib/Page.pm:554 web/index.cgi:391 web/index.cgi:562 web/index.cgi:569
+#: bin/send-reports:180
+msgid "Other"
+msgstr "Annet"
+
+#: perllib/Page.pm:545
#, perl-format
msgid "Reported by %s in the %s category anonymously at %s"
-msgstr ""
+msgstr "Rapportert av %s i kategorien %s anonnymt %s"
-#: fixmystreet/perllib/Page.pm:642
+#: perllib/Page.pm:547
#, perl-format
msgid "Reported by %s in the %s category by %s at %s"
-msgstr ""
+msgstr "Rapportert av %s i kategorien %s av %s %s"
-#: fixmystreet/perllib/Page.pm:644
-#, fuzzy, perl-format
+#: perllib/Page.pm:549
+#, perl-format
msgid "Reported by %s anonymously at %s"
-msgstr "Publisert av anonym bruker"
+msgstr "Publisert av %s anonymt %s"
-#: fixmystreet/perllib/Page.pm:646
+#: perllib/Page.pm:551
#, perl-format
msgid "Reported by %s by %s at %s"
-msgstr ""
+msgstr "Rapporter av %s av %s %s"
-#: fixmystreet/perllib/Page.pm:648
+#: perllib/Page.pm:553
#, perl-format
msgid "Reported in the %s category anonymously at %s"
-msgstr ""
+msgstr "Rapportert i kategorien %s anonymt %s"
-#: fixmystreet/perllib/Page.pm:650
+#: perllib/Page.pm:555
#, perl-format
msgid "Reported in the %s category by %s at %s"
-msgstr ""
+msgstr "Rapportert i kategorien %s av %s %s"
-#: fixmystreet/perllib/Page.pm:652
-#, fuzzy, perl-format
+#: perllib/Page.pm:557 web/contact.cgi:212
+#, perl-format
msgid "Reported anonymously at %s"
-msgstr "Publisert av anonym bruker"
+msgstr "Rapportert anonymt %s"
-#: fixmystreet/perllib/Page.pm:654
-#, fuzzy, perl-format
+#: perllib/Page.pm:559 web/contact.cgi:213
+#, perl-format
msgid "Reported by %s at %s"
-msgstr "Publisert av %s"
+msgstr "Publisert av %s %s"
-#: fixmystreet/perllib/Page.pm:657
+#: perllib/Page.pm:564
msgid "the map was not used so pin location may be inaccurate"
-msgstr ""
+msgstr "kartet ble ikke brukt, så nåleposisjon kan være unøyaktig"
-#: fixmystreet/perllib/Page.pm:664
+#: perllib/Page.pm:572
#, perl-format
msgid "Sent to %s %s later"
-msgstr ""
+msgstr "Sendt til %s %s senere"
-#: fixmystreet/perllib/Page.pm:667
+#: perllib/Page.pm:576
msgid "Not reported to council"
-msgstr ""
+msgstr "Ikke rapportert til administrasjonen"
-#: fixmystreet/perllib/Page.pm:696
+#: perllib/Page.pm:627 web-admin/index.cgi:522 web-admin/index.cgi:646
msgid "Updates"
-msgstr ""
+msgstr "Oppdateringer"
-#: fixmystreet/perllib/Page.pm:700
-#, fuzzy, perl-format
+#: perllib/Page.pm:631
+#, perl-format
msgid "Posted by %s at %s"
-msgstr "Publisert av %s"
+msgstr "Sendt inn av %s %s"
-#: fixmystreet/perllib/Page.pm:702
-#, fuzzy, perl-format
+#: perllib/Page.pm:633
+#, perl-format
msgid "Posted anonymously at %s"
-msgstr "Publisert av anonym bruker"
+msgstr "Publisert anonymt %s"
-#: fixmystreet/perllib/Page.pm:704
+#: perllib/Page.pm:636
msgid "marked as fixed"
msgstr "markert som fikset"
-#: fixmystreet/perllib/Page.pm:705
+#: perllib/Page.pm:637
msgid "reopened"
-msgstr "Åpnet på nytt"
+msgstr "åpnet på nytt"
-#: fixmystreet/perllib/Page.pm:734 fixmystreet/perllib/Page.pm:796
-msgid "We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region."
-msgstr ""
+#: perllib/Page.pm:645 web/index.cgi:1075
+msgid "Offensive? Unsuitable? Tell us"
+msgstr "Støtende? Upassende? Gi oss beskjed"
-#: fixmystreet/perllib/Page.pm:747
+#: perllib/Page.pm:672
msgid "That postcode was not recognised, sorry."
+msgstr "Det postnummeret ble ikke gjenkjent, beklager."
+
+#: perllib/Page.pm:678
+msgid ""
+"Sorry, that appears to be a Crown dependency postcode, which we don't cover."
msgstr ""
+"Beklager det ser ut til å være et \"Crown dependency\"-postnummer, som vi "
+"ikke dekker."
-#: fixmystreet/perllib/Page.pm:783
-#, fuzzy
-msgid "Sorry, we could not parse that location. Please try again."
-msgstr "På en eller annen måte har du bare en koordinat, vennligst prøv på nytt."
+#: perllib/Page.pm:681 perllib/FixMyStreet/Geocode.pm:145
+msgid ""
+"We do not cover Northern Ireland, I'm afraid, as our licence doesn't include "
+"any maps for the region."
+msgstr ""
+"Vi dekker ikke nordlige Irland, er jeg redd, da vår lisens ikke inkluderer "
+"noen kart for den regionen."
-#: fixmystreet/perllib/Page.pm:785 fixmystreet/perllib/Page.pm:793
-#, fuzzy
-msgid "Sorry, we could not find that location."
-msgstr "Vi kan ikke bekrefte dette varselet??"
+#: perllib/Page.pm:712
+msgid "Please upload a JPEG image only"
+msgstr "Vennligst last kun opp et JPEG-bilde"
-#: fixmystreet/perllib/Page.pm:800
-msgid "Sorry, that location appears to be too general; please be more specific."
+#: perllib/FixMyStreet/Alert.pm:147
+msgid "This report is currently marked as fixed."
+msgstr "Denne rapporten er for tiden markert som fikset."
+
+#: perllib/FixMyStreet/Alert.pm:148
+msgid "This report is currently marked as open."
+msgstr "Denne rapporten er for tiden markert som åpen."
+
+#: perllib/FixMyStreet/Alert.pm:309
+#, perl-format
+msgid "Report on %s"
+msgstr "Rapport på %s"
+
+#: perllib/FixMyStreet/Geocode.pm:73
+msgid ""
+"Sorry, that location appears to be too general; please be more specific."
msgstr ""
+"Beklager, den plasserigen ser ut til å være for generell. Forsøk å være mer "
+"spesifikk."
-#: fixmystreet/perllib/Page.pm:814
-#, fuzzy
+#: perllib/FixMyStreet/Geocode.pm:83
msgid "That location does not appear to be in Britain; please try again."
-msgstr "Bildet ser ikke ut til å blitt lastet opp riktig (%s), prøv på nytt."
+msgstr "Det stedet virker ikke å være i storbritannia. Vennligst prøv igjen."
+
+#: perllib/FixMyStreet/Geocode.pm:105 perllib/FixMyStreet/Geocode.pm:140
+msgid "Sorry, we could not find that location."
+msgstr "Beklager, vi kunne ikke finne det stedet."
-#: fixmystreet/perllib/Page.pm:826
-msgid "We found more than one match for that location. We show up to ten matches, please try a different search if yours is not here."
+#: perllib/FixMyStreet/Geocode.pm:138
+msgid "Sorry, we could not parse that location. Please try again."
+msgstr "Beklager, vi kunne ikke tolke den posisjonen. Vennligst prøv på nytt."
+
+#: perllib/FixMyStreet/Geocode.pm:158
+msgid ""
+"We found more than one match for that location. We show up to ten matches, "
+"please try a different search if yours is not here."
msgstr ""
+"Vi fant mer en ett treff for den plassen. Vi viser opp til ti treff, så "
+"forsøk et annet søk hvis din plass ikke er her."
-#: fixmystreet/perllib/Page.pm:857
-msgid "Please upload a JPEG image only"
+#: perllib/FixMyStreet/Geocode.pm:173
+msgid "More than one match"
+msgstr "Mer enn ett treff"
+
+#: perllib/FixMyStreet/Map/Bing.pm:41
+#: perllib/FixMyStreet/Map/OSM/StreetView.pm:42
+#: perllib/FixMyStreet/Map/Google.pm:41
+#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:23
+msgid ""
+"Map contains Ordnance Survey data &copy; Crown copyright and database right "
+"2010."
msgstr ""
+"Kartet inneholder data fra Ordnance Survey &copy; Crown copyright og "
+"databaserettigheter 2010."
-#: fixmystreet/web/about.cgi:24
+#: perllib/FixMyStreet/Map/OSM.pm:72
+#: perllib/FixMyStreet/Map/OSM/CycleMap.pm:42
+msgid ""
+"Map &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
+msgstr ""
+"Kart &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> og bidragsytere, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
+
+#: perllib/FixMyStreet/Map/OSM.pm:117
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:158
+msgid "Problem"
+msgstr "Problem"
+
+#: perllib/FixMyStreet/Map/BingOL.pm:43
+msgid ""
+"Map contains Ordnance Survey data &copy; Crown copyright and database right "
+"2010. Microsoft"
+msgstr ""
+"Kartet inneholder data fra Ordnance Survey &copy; Crown copyright og "
+"databaserettigheter 2010. Microsoft"
+
+#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:23
+msgid ""
+"&copy; Crown copyright. All rights reserved. Ministry of Justice "
+"100037819&nbsp;2008."
+msgstr ""
+"&copy; Crown copyright. Alle rettigheter reservert. Justisdepartementet "
+"100037819&nbsp;2008."
+
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:82
+msgid "Unable to fetch the map tiles from the tile server."
+msgstr "Klarte ikke hente kartfliser fra filtjeneren."
+
+#: perllib/Problems.pm:148
+#, perl-format
+msgid "<big>%s</big> report in past week"
+msgid_plural "<big>%s</big> reports in past week"
+msgstr[0] "<big>%s</big> rapport siste uke"
+msgstr[1] "<big>%s</big> rapporter siste uke"
+
+#: perllib/Problems.pm:153
+#, perl-format
+msgid "<big>%s</big> report recently"
+msgid_plural "<big>%s</big> reports recently"
+msgstr[0] "<big>%s</big> rapportert<br>nylig"
+msgstr[1] "<big>%s</big> rapportert<br>nylig"
+
+#: perllib/Problems.pm:159
+msgid "FixMyStreet updates"
+msgstr "Fiksgatami-oppdateringer"
+
+#: perllib/Problems.pm:162 perllib/Problems.pm:166
+#, perl-format
+msgid "<big>%s</big> fixed in past month"
+msgid_plural "<big>%s</big> fixed in past month"
+msgstr[0] "<big>%s</big> fikset siste måned"
+msgstr[1] "<big>%s</big> fikset siste måned"
+
+#: perllib/Problems.pm:167
+#, perl-format
+msgid "<big>%s</big> update on reports"
+msgid_plural "<big>%s</big> updates on reports"
+msgstr[0] "<big>%s</big> rapport-<br>oppdatering"
+msgstr[1] "<big>%s</big> rapport-<br>oppdateringer"
+
+#: web/about.cgi:24
msgid ""
"<h2>The Empty Homes Agency</h2>\n"
"<p>The Empty Homes agency is an independent campaigning charity. We are not\n"
-"part of government, and have no formal links with local councils although we\n"
+"part of government, and have no formal links with local councils although "
+"we\n"
"work in cooperation with both. We exist to highlight the waste of empty\n"
-"property and work with others to devise and promote sustainable solutions to\n"
+"property and work with others to devise and promote sustainable solutions "
+"to\n"
"bring empty property back into use. We are based in London but work across\n"
-"England. We also work in partnership with other charities across the UK.</p>\n"
+"England. We also work in partnership with other charities across the UK.</"
+"p>\n"
msgstr ""
-#: fixmystreet/web/about.cgi:34
+#: web/about.cgi:34
msgid ""
"<h2>Shelter Cymru</h2>\n"
-"Shelter Cymru is Wales&rsquo; people and homes charity and wants everyone in Wales to\n"
-"have a decent home. We believe a home is a fundamental right and essential to\n"
+"Shelter Cymru is Wales&rsquo; people and homes charity and wants everyone in "
+"Wales to\n"
+"have a decent home. We believe a home is a fundamental right and essential "
+"to\n"
"the health and well-being of people and communities. We work for people in\n"
"housing need. We have offices all over Wales and prevent people from losing\n"
"their homes by offering free, confidential and independent advice. When\n"
-"necessary we constructively challenge on behalf of people to ensure they are\n"
+"necessary we constructively challenge on behalf of people to ensure they "
+"are\n"
"properly assisted and to improve practice and learning. We believe that\n"
-"bringing empty homes back into use can make a significant contribution to the\n"
+"bringing empty homes back into use can make a significant contribution to "
+"the\n"
"supply of affordable homes in Wales.\n"
-"<a href=\"http://www.sheltercymru.org.uk/shelter/advice/pdetail.asp?cat=20\">Further information about our work on\n"
+"<a href=\"http://www.sheltercymru.org.uk/shelter/advice/pdetail.asp?cat=20"
+"\">Further information about our work on\n"
"empty homes</a>.\n"
msgstr ""
-#: fixmystreet/web/ajax.cgi:45 fixmystreet/web/ajax.cgi:55 fixmystreet/web/index.cgi:829
-#: fixmystreet/web/index.cgi:841
-#, fuzzy
+#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:904 web/index.cgi:919
msgid "(fixed)"
-msgstr "Eldre saker som er løst"
+msgstr "(løst)"
-#: fixmystreet/web/alert.cgi:29 fixmystreet/web/confirm.cgi:46
+#: web/alert.cgi:33 web/confirm.cgi:49
msgid "Confirmation"
msgstr "Bekreftelse"
-#: fixmystreet/web/alert.cgi:38
-#, fuzzy
+#: web/alert.cgi:43
+#, perl-format
msgid ""
-"Thank you for trying to confirm your alert. We seem to have an error ourselves\n"
-"though, so <a href=\"/contact\">please let us know what went on</a> and we'll look into it.\n"
-msgstr ""
-"Takk for at du prøver å melde en sak. Det kan se ut som det er et problempå selve portalen\n"
-", så <a href=\"/contact\">gi oss gjerne en tilbakemelding</a> så skal vi se på saken så raskt som mulig\n"
-
-#: fixmystreet/web/alert.cgi:50 fixmystreet/web/alert.cgi:53 fixmystreet/web/alert.cgi:202
-#: fixmystreet/web/alert.cgi:269
+"Thank you for trying to confirm your alert. We seem to have an error "
+"ourselves\n"
+"though, so <a href=\"%s\">please let us know what went on</a> and we'll look "
+"into it.\n"
+msgstr ""
+"Takk for at du forsøker å bekrefte ditt varsel. Vi ser ut til a ha en feil "
+"hos oss,\n"
+"så <a href=\"%s\">vær så snill å fortell oss hva som skjedde</a> så skal vi "
+"se på saken.\n"
+
+#: web/alert.cgi:59 web/alert.cgi:62 web/alert.cgi:65 web/alert.cgi:274
+#: web/alert.cgi:380
msgid "Local RSS feeds and email alerts"
-msgstr "Lokal RSS feed og epostliste"
+msgstr "Lokal RSS-strøm og epostvarsel"
-#: fixmystreet/web/alert.cgi:99
-#, fuzzy
-msgid "That location does not appear to be covered by a council, perhaps it is offshore - please try somewhere more specific."
-msgstr "Den lokasjonen dekkes ikke av en kommune, er det offshore? - vennligst marker mer spesifikt."
+#: web/alert.cgi:121
+msgid ""
+"That location does not appear to be covered by a council, perhaps it is "
+"offshore - please try somewhere more specific."
+msgstr ""
+"Det stedet dekkes ikke av noen administrasjon, kanskje det er til havs - "
+"vennligst forsøk et mer spesifikt sted."
-#: fixmystreet/web/alert.cgi:114 fixmystreet/web/alert.cgi:130
+#: web/alert.cgi:140 web/alert.cgi:183 web/alert.cgi:200
#, perl-format
msgid "Problems within %s"
msgstr "Problemer innenfor %s"
-#: fixmystreet/web/alert.cgi:116
-#, perl-format
-msgid "Problems within %s ward"
-msgstr "Problemer innenfor %s avdeling/etat"
-
-#: fixmystreet/web/alert.cgi:159
+#: web/alert.cgi:152 web/alert.cgi:233
msgid "Problems within the boundary of:"
msgstr "Problemer innenfor grensene av:"
-#: fixmystreet/web/alert.cgi:171
+#: web/alert.cgi:158 web/alert.cgi:245
msgid "Or problems reported to:"
msgstr "Eller problemer meldt til:"
-#: fixmystreet/web/alert.cgi:173
+#: web/alert.cgi:160 web/alert.cgi:247
msgid ""
"FixMyStreet sends different categories of problem\n"
-"to the appropriate council, so problems within the boundary of a particular council\n"
-"might not match the problems sent to that council. For example, a graffiti report\n"
-"will be sent to the district council, so will appear in both of the district\n"
-"council&rsquo;s alerts, but will only appear in the \"Within the boundary\" alert\n"
+"to the appropriate council, so problems within the boundary of a particular "
+"council\n"
+"might not match the problems sent to that council. For example, a graffiti "
+"report\n"
+"will be sent to the district council, so will appear in both of the "
+"district\n"
+"council&rsquo;s alerts, but will only appear in the \"Within the boundary\" "
+"alert\n"
"for the county council."
msgstr ""
-"FiksGataMi sender forskjellige kategorier saker\n"
-"til forskjellige kommuner, problemer som gjelder flere kommuner blir sendt til alle de det gjelder "
+"FiksGataMi sender forskjellige kategorier problemer til forskjellige "
+"administrasjoner, problemer som gjelder flere administrasjoner blir sendt "
+"til alle de det gjelder."
-#: fixmystreet/web/alert.cgi:197
+#: web/alert.cgi:185
+#, perl-format
+msgid "Problems within %s ward"
+msgstr "Problemer innenfor %s avdeling/etat"
+
+#: web/alert.cgi:269
msgid "Photos of recent nearby reports"
msgstr "Bilder av nye saker i nærheten"
-#: fixmystreet/web/alert.cgi:201
-#, fuzzy, perl-format
+#: web/alert.cgi:272
+#, perl-format
msgid "Local RSS feeds and email alerts for &lsquo;%s&rsquo;"
-msgstr "Lokal RSS feed og epostliste"
+msgstr "Lokal RSS-strøm og epostvarsel for &lsquo;%s&rsquo;"
-#: fixmystreet/web/alert.cgi:212
+#: web/alert.cgi:286
#, perl-format
msgid "Here are the types of local problem alerts for &lsquo;%s&rsquo;."
-msgstr ""
+msgstr "Her er typene lokale problemvarsler for &lsquo;%s&rsquo;."
-#: fixmystreet/web/alert.cgi:213
+#: web/alert.cgi:287
msgid ""
"Select which type of alert you&rsquo;d like and click the button for an RSS\n"
"feed, or enter your email address to subscribe to an email alert."
msgstr ""
+"Velg hvilken type varsel du ønsker og klikk på knappen for en RSS-strøm, "
+"eller skriv inn din epostadresse for å abonnere på et epostvarsel."
-#: fixmystreet/web/alert.cgi:216
+#: web/alert.cgi:290
msgid "The simplest alert is our geographic one:"
msgstr "Den enkleste meldingen er vår geografiske:"
-#: fixmystreet/web/alert.cgi:217
+#: web/alert.cgi:291
#, perl-format
msgid "Problems within %skm of this location"
msgstr "Saker innen %skm av dette punktet"
-#: fixmystreet/web/alert.cgi:223
+#: web/alert.cgi:305
msgid "(a default distance which covers roughly 200,000 people)"
-msgstr "??"
+msgstr "(en default-avstand som dekker en befolkning på omtrent 200 000)"
-#: fixmystreet/web/alert.cgi:225
+#: web/alert.cgi:308
msgid "RSS feed of nearby problems"
-msgstr "RSS feed med saker i nærheten"
+msgstr "RSS-strøm med problemer i nærheten"
-#: fixmystreet/web/alert.cgi:225 fixmystreet/web/alert.cgi:257 fixmystreet/web/index.cgi:805
-#: fixmystreet/web/index.cgi:936 fixmystreet/web/reports.cgi:218
+#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:974 web/index.cgi:1086
+#: web/reports.cgi:254
msgid "RSS feed"
-msgstr "RSS feed"
+msgstr "RSS-strøm"
-#: fixmystreet/web/alert.cgi:226
+#: web/alert.cgi:309
msgid "(alternatively the RSS feed can be customised, within"
-msgstr "(alternativt kan RSS feeden endres innenfor"
+msgstr "(alternativt kan RSS-strømmen tilpasses, innenfor"
-#: fixmystreet/web/alert.cgi:232
-msgid "Or you can subscribe to an alert based upon what ward or council you&rsquo;re in:"
-msgstr "Du kan abonnere på varsel basert på avdeling eller kommune du&rsquo; bevinner deg i:"
+#: web/alert.cgi:319
+msgid ""
+"Or you can subscribe to an alert based upon what ward or council you&rsquo;"
+"re in:"
+msgstr ""
+"Eller du kan abonnere på varsel basert på bydel eller administrasjon du "
+"hører inn under:"
-#: fixmystreet/web/alert.cgi:234
+#: web/alert.cgi:323
msgid "Give me an RSS feed"
-msgstr "Gi meg en RSS feed"
+msgstr "Gi meg en RSS-strøm"
-#: fixmystreet/web/alert.cgi:235
+#: web/alert.cgi:324
msgid "or"
msgstr "eller"
-#: fixmystreet/web/alert.cgi:236
+#: web/alert.cgi:325
msgid "Your email:"
msgstr "Din epost"
-#: fixmystreet/web/alert.cgi:237
+#: web/alert.cgi:326
msgid "Subscribe me to an email alert"
msgstr "Jeg ønsker å abonnere på epostvarsel"
-#: fixmystreet/web/alert.cgi:257
+#: web/alert.cgi:367
#, perl-format
msgid "RSS feed of %s"
-msgstr "RSS fedd fra %s"
+msgstr "RSS-strøm fra %s"
-#: fixmystreet/web/alert.cgi:270
+#: web/alert.cgi:381
msgid ""
-"FixMyStreet has a variety of RSS feeds and email alerts for local problems, including\n"
-"alerts for all problems within a particular ward or council, or all problems\n"
+"FixMyStreet has a variety of RSS feeds and email alerts for local problems, "
+"including\n"
+"alerts for all problems within a particular ward or council, or all "
+"problems\n"
"within a certain distance of a particular location."
msgstr ""
-"Fiksgatami har forskjellige RSS feeds og epost lister for lokale problemer, dette inkluderer\n"
-"saker meldt innenfor en kommune eller et område med saker\n"
-"innenfor en angitt distanse fra et punkt."
+"Fiksgatami har ulike RSS-strømmer og epostlister om lokale problemer, dette "
+"inkluderer saker meldt innenfor en bestemt bydel eller administrasjon, eller "
+"et område med problemer\n"
+"innen en angitt distanse fra en bestemt posisjon."
-#: fixmystreet/web/alert.cgi:274
+#: web/alert.cgi:384
msgid ""
"To find out what local alerts we have for you, please enter your GB\n"
"postcode or street name and area:"
-msgstr "Du finner lokale saker ved å søke på ditt postnummer, gatenavn eller sted:"
+msgstr ""
+"Du finner lokale saker ved å søke på ditt postnummer, veinavn eller sted:"
-#: fixmystreet/web/alert.cgi:276 fixmystreet/web/confirm.cgi:172 fixmystreet/web/index.cgi:147
+#: web/alert.cgi:389 web/index.cgi:165
msgid "Go"
-msgstr ""
+msgstr "Fortsett"
-#: fixmystreet/web/alert.cgi:282
+#: web/alert.cgi:415
msgid "Some photos of recent reports"
msgstr "Noen bilder av nylig meldte saker"
-#: fixmystreet/web/alert.cgi:289
+#: web/alert.cgi:423
msgid "Please select the feed you want"
msgstr "Velg den feed du ønsker"
-#: fixmystreet/web/alert.cgi:302
+#: web/alert.cgi:446
msgid "Illegal feed selection"
msgstr "Ugyldig valg av feed"
-#: fixmystreet/web/alert.cgi:315
+#: web/alert.cgi:460
msgid "Receive email when updates are left on this problem."
msgstr "Motta epost når det er uppdateringer på denne saken"
-#: fixmystreet/web/alert.cgi:316 fixmystreet/web/index.cgi:664 fixmystreet/web/index.cgi:923
+#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:738 web/index.cgi:1080
+#: web-admin/index.cgi:630 web-admin/index.cgi:750
msgid "Email:"
-msgstr "Epost"
+msgstr "Epost:"
-#: fixmystreet/web/alert.cgi:317 fixmystreet/web/index.cgi:924
+#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1081
msgid "Subscribe"
msgstr "Abonner"
-#: fixmystreet/web/alert.cgi:340
+#: web/alert.cgi:487
+msgid "Receive alerts on new local problems"
+msgstr "Motta varsel om nye lokale problemer"
+
+#: web/alert.cgi:515
msgid "You have successfully subscribed to that alert."
msgstr "Du abonnerer nå på denne saken"
-#: fixmystreet/web/alert.cgi:343
+#: web/alert.cgi:522
msgid "We could not validate that alert."
-msgstr "Vi kan ikke bekrefte dette varselet??"
+msgstr "Vi kunne ikke validere det varselet."
-#: fixmystreet/web/alert.cgi:362
+#: web/alert.cgi:544
msgid "You have successfully confirmed your alert."
-msgstr "Du har nå bekreftet ditt varsel"
+msgstr "Du har nå lykkes med å bekrefte ditt varsel."
-#: fixmystreet/web/alert.cgi:366
+#: web/alert.cgi:551
msgid "You have successfully deleted your alert."
-msgstr "Du har nå slettet dette varselet"
+msgstr "Sletting av ditt varsel var vellykket."
-#: fixmystreet/web/alert.cgi:378
+#: web/alert.cgi:571
msgid "Please enter a valid email address"
msgstr "Legg inn din epost"
-#: fixmystreet/web/alert.cgi:379
+#: web/alert.cgi:572
msgid "Please select the type of alert you want"
msgstr "Velg vilken type varsel du ønsker"
-#: fixmystreet/web/confirm.cgi:40
-#, fuzzy
+#: web/confirm.cgi:39
+#, perl-format
msgid ""
"Thank you for trying to confirm your update or problem. We seem to have an\n"
-"error ourselves though, so <a href=\"/contact\">please let us know what went on</a>\n"
+"error ourselves though, so <a href=\"%s\">please let us know what went on</"
+"a>\n"
"and we'll look into it.\n"
msgstr ""
-"Takk for at du prøver å oppdatere/lage en sak. Det vriker som vi har noen\n"
-"problemer i selve portalen vår, så <a href=\"/contact\">vennligst fortell oss om problemet problemet</a>\n"
-"og vi skal ta tak i problemet.\n"
+"Takk for at du forsøker å bekrefte din oppdatering eller ditt problem. Vi "
+"ser ut til å ha en\n"
+"feil hos oss, så <a href=\"%s\">vær så snill å fortell oss hva som skjedde</"
+"a>\n"
+"så skal vi se på saken.\n"
-#: fixmystreet/web/confirm.cgi:97
+#: web/confirm.cgi:101
#, perl-format
-msgid "You have successfully confirmed your update and you can now <a href=\"%s\">view it on the site</a>."
-msgstr "Du har nå bekreftet din oppdatering <a href=\"%s\">les om saken på portalen</a>."
+msgid ""
+"You have successfully confirmed your update and you can now <a href=\"%s"
+"\">view it on the site</a>."
+msgstr ""
+"Du har nå bekreftet din oppdatering <a href=\"%s\">les om saken på portalen</"
+"a>."
-#: fixmystreet/web/confirm.cgi:118
+#: web/confirm.cgi:131
msgid "Sorry, there has been an error confirming your problem."
msgstr "Beklager, det har oppstått problemer når vi under lagringen av saken"
-#: fixmystreet/web/confirm.cgi:131
+#: web/confirm.cgi:139
msgid ""
"Thank you for reporting an empty property on\n"
-"ReportEmptyHomes.com. We have emailed the empty property officer in the council\n"
-"responsible with the details and asked them to do whatever they can to get the\n"
+"ReportEmptyHomes.com. We have emailed the lead officer for empty homes in "
+"the council\n"
+"responsible with details, and asked them to do whatever they can to get the\n"
"empty property back into use as soon as possible."
msgstr ""
-#: fixmystreet/web/confirm.cgi:135
+#: web/confirm.cgi:143
msgid ""
-"Most councils are quite good at bringing empty properties back into use. Even\n"
-"so the process can sometimes be slow, especially if the property is in very poor\n"
-"repair or the owner is unwilling to act. In most cases it takes six months\n"
-"before you can expect to see anything change. This doesn&rsquo;t mean the council\n"
-"isn&rsquo;t doing anything. We encourage councils to update the website so you can\n"
-"see what is happening."
-msgstr ""
-
-#: fixmystreet/web/confirm.cgi:141
+"It is worth noting however that the process can sometimes be slow,\n"
+"especially if the property is in very poor repair or the owner is unwilling "
+"to\n"
+"act. In most cases it can take six months or more before you can expect to "
+"see\n"
+"anything change and sometimes there may be considerable barries to a "
+"property\n"
+"being brought back into use. This doesn&rsquo;t mean the council isn&rsquo;"
+"t\n"
+"doing anything. We encourage councils to update the website so you can\n"
+"see what is happening. It may be a long process, but you reporting your\n"
+"concerns about this property to the council is a valuable first step."
+msgstr ""
+
+#: web/confirm.cgi:151
msgid ""
-"We will contact you again in a month and again after six months to ask what has\n"
-"happened. Hopefully the property will be well on the way to being brought back\n"
-"into use by then, but if not we can offer advice on what you can do next."
+"We may contact you periodically to ask if anything has changed\n"
+"with the property you reported."
msgstr ""
+"Det kan hende vi periodisk tar kontakt med deg for å spørre om noe har "
+"endret seg med eiedommen du rapporterte."
-#: fixmystreet/web/confirm.cgi:144
+#: web/confirm.cgi:153
msgid ""
"Thank you for using ReportEmptyHomes.com. Your action is already helping\n"
"to resolve the UK&rsquo;s empty homes crisis."
msgstr ""
-#: fixmystreet/web/confirm.cgi:146 fixmystreet/web/confirm.cgi:149
-#, fuzzy
+#: web/confirm.cgi:155 web/confirm.cgi:158
msgid "View your report"
-msgstr "Legg til din sak/problem"
+msgstr "Vis din rapport"
-#: fixmystreet/web/confirm.cgi:148
+#: web/confirm.cgi:157
msgid "Thank you for reporting an empty property on ReportEmptyHomes.com."
-msgstr ""
+msgstr "Takk for at du rapporterer en tom eiendom på ReportEmptyHomes.com."
-#: fixmystreet/web/confirm.cgi:153
+#: web/confirm.cgi:163
msgid "You have successfully confirmed your problem"
msgstr "Du har nå oppdatert din sak"
-#: fixmystreet/web/confirm.cgi:154
+#: web/confirm.cgi:164
msgid " and <strong>we will now send it to the council</strong>"
-msgstr " og <strong>vi sender det nå til kommunen/etaten</strong>"
+msgstr " og <strong>vi sender det nå til administrasjonen</strong>"
-#: fixmystreet/web/confirm.cgi:155
+#: web/confirm.cgi:165
#, perl-format
msgid ". You can <a href=\"%s\">view the problem on this site</a>."
msgstr ". Du kan <a href=\"%s\">lese saken på portalen </a>."
-#: fixmystreet/web/confirm.cgi:169
-#, fuzzy
-msgid "Thanks, glad to hear it's been fixed! Could we just ask if you have ever reported a problem to a council before?"
-msgstr "Gi oss informasjon om du har rapportert en sak til kommunen tidligere"
+#: web/confirm.cgi:189
+msgid ""
+"Thanks, glad to hear it's been fixed! Could we just ask if you have ever "
+"reported a problem to a council before?"
+msgstr ""
+"Takk, glad for å høre at problemet er fikset! Vi vil gjerne spørre deg om "
+"du har rapportert et problem til en administrasjon tidligere?"
-#: fixmystreet/web/confirm.cgi:170 fixmystreet/web/questionnaire.cgi:246
+#: web/confirm.cgi:190 web/questionnaire.cgi:234 web/questionnaire.cgi:323
+#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
+#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "Yes"
-msgstr ""
+msgstr "Ja"
-#: fixmystreet/web/confirm.cgi:171 fixmystreet/web/questionnaire.cgi:247
+#: web/confirm.cgi:191 web/questionnaire.cgi:235 web/questionnaire.cgi:324
+#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
+#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "No"
-msgstr ""
+msgstr "Nei"
-#: fixmystreet/web/confirm.cgi:209
-#, fuzzy, perl-format
-msgid "Thank you &mdash; you can <a href=\"%s\">view your updated problem</a> on the site."
-msgstr ". Du kan <a href=\"%s\">lese saken på portalen </a>."
+#: web/confirm.cgi:192 web/index.cgi:790
+msgid "Submit"
+msgstr "Send inn"
+
+#: web/confirm.cgi:237
+#, perl-format
+msgid ""
+"Thank you &mdash; you can <a href=\"%s\">view your updated problem</a> on "
+"the site."
+msgstr ""
+"Tusen takk &mdash; du kan <a href=\"%s\">se på ditt oppdaterte problem</a> "
+"her hos oss."
-#: fixmystreet/web/contact.cgi:22
+#: web/contact.cgi:22
msgid "Contact Us"
msgstr "Kontakt oss"
-#: fixmystreet/web/contact.cgi:39
+#: web/contact.cgi:41
msgid "Please give your name"
msgstr "Skriv inn ditt navn"
-#: fixmystreet/web/contact.cgi:41
+#: web/contact.cgi:43
msgid "Please give your email"
msgstr "Skriv din epost"
-#: fixmystreet/web/contact.cgi:43
+#: web/contact.cgi:45
msgid "Please give a valid email address"
msgstr "Skriv en gyldig epostadresse"
-#: fixmystreet/web/contact.cgi:45
+#: web/contact.cgi:47
msgid "Please give a subject"
msgstr "Skriv inn emne"
-#: fixmystreet/web/contact.cgi:46
+#: web/contact.cgi:48
msgid "Please write a message"
msgstr "Skriv inn en melding"
-#: fixmystreet/web/contact.cgi:47
+#: web/contact.cgi:49
msgid "Illegal ID"
msgstr "Ugyldig ID"
-#: fixmystreet/web/contact.cgi:70
+#: web/contact.cgi:86
msgid "Thanks for your feedback. We'll get back to you as soon as we can!"
-msgstr "Takk for ditt innspill. Vi gir deg en tilbakemelding så raskt som mulig"
-
-#: fixmystreet/web/contact.cgi:84
-msgid "Contact the team"
-msgstr "Kontakt prosjektgruppen"
-
-#: fixmystreet/web/contact.cgi:103
-msgid "You are reporting the following problem report for being abusive, containing personal information, or similar:"
-msgstr "Du rapporterer at den aktuelle saken inneholder tekst med personlig informasjon, upassende tekst???:"
+msgstr ""
+"Takk for ditt innspill. Vi gir deg en tilbakemelding så raskt som mulig"
-#: fixmystreet/web/contact.cgi:115
+#: web/contact.cgi:134
msgid ""
"We&rsquo;d love to hear what you think about this\n"
-"website. Just fill in the form. Please don&rsquo;t contact us about individual empty\n"
+"website. Just fill in the form. Please don&rsquo;t contact us about "
+"individual empty\n"
"homes; use the box accessed from <a href=\"/\">the front page</a>."
msgstr ""
+"Vi vil gjerne høre hva du tenker om dette nettstedet. Det er bare å fylle "
+"inn skjemaet. Vær så snill å ikke kontakte oss om individuelle tomme hjem. "
+"For det bør du i stedet bruke boksen tilgjengelig fra <a href=\"/"
+"\">forsiden</a>."
-#: fixmystreet/web/contact.cgi:121
+#: web/contact.cgi:141
msgid ""
-"Please do <strong>not</strong> report problems through this form; messages go to\n"
+"Please do <strong>not</strong> report problems through this form; messages "
+"go to\n"
"the team behind FixMyStreet, not a council. To report a problem,\n"
"please <a href=\"/\">go to the front page</a> and follow the instructions."
msgstr ""
-"Vennligst <strong>ikke</strong> ikke rapporter feil gjennom denne siden; messages gå til\n"
-"prosjektet bak fiksgatami for å rapportere sken,\n"
+"Vennligst <strong>ikke</strong> rapporter feil gjennom denne siden; "
+"meldinger går til\n"
+"gruppen som står bak fiksgatami, og ikke til en administrasjon. For å "
+"rapportere et problem,\n"
"vennligst <a href=\"/\">gå til forsiden</a> og følg instruksjonene."
-#: fixmystreet/web/contact.cgi:124
-#, fuzzy, perl-format
-msgid "We'd love to hear what you think about this site. Just fill in the form, or send an email to <a href='mailto:%s'>%s</a>:"
+#: web/contact.cgi:144
+#, perl-format
+msgid ""
+"We'd love to hear what you think about this site. Just fill in the form, or "
+"send an email to <a href='mailto:%s'>%s</a>:"
+msgstr ""
+"Vi ønsker å få din tilbakemelding om hva du mener om denne tjenesten. Bare "
+"fyll ut skjemaet, eller send en epost <a href='mailto:%s'>%s</a>:"
+
+#: web/contact.cgi:153 web/index.cgi:446
+msgid "There were problems with your report. Please see below."
+msgstr "Det var problemer med din rapport. Vennligst se under."
+
+#: web/contact.cgi:158
+msgid "Contact the team"
+msgstr "Kontakt prosjektgruppen"
+
+#: web/contact.cgi:196
+msgid ""
+"You are reporting the following update for being abusive, containing "
+"personal information, or similar:"
+msgstr ""
+"Du rapporterer at følgende oppdatering er støtende, inneholder personlig "
+"informasjon, eller lignende:"
+
+#: web/contact.cgi:207
+msgid ""
+"You are reporting the following problem report for being abusive, containing "
+"personal information, or similar:"
msgstr ""
-"Vi ønsker å få din tilbakemelding om hva du mener om vår nettside. Fyll ut skjema, or\n"
-"send epost <a href='mailto:???team&#64;fixmystreet.com'>team&#64;fiksgatami.no</a>:"
+"Du rapporterer at følgende problem er støtende, inneholder personlig "
+"informasjon eller lignende:"
-#: fixmystreet/web/contact.cgi:126
+#: web/contact.cgi:234
msgid "Your name:"
msgstr "Ditt navn:"
-#: fixmystreet/web/contact.cgi:127
+#: web/contact.cgi:235
msgid "Your&nbsp;email:"
msgstr "Din&nbsp;epost:"
-#: fixmystreet/web/contact.cgi:128 fixmystreet/web/index.cgi:660
+#: web/contact.cgi:236 web/index.cgi:734 web-admin/index.cgi:622
msgid "Subject:"
-msgstr "Tema"
+msgstr "Tema:"
-#: fixmystreet/web/contact.cgi:129
+#: web/contact.cgi:237
msgid "Message:"
-msgstr "Melding"
+msgstr "Melding:"
-#: fixmystreet/web/contact.cgi:130 fixmystreet/web/index.cgi:958
+#: web/contact.cgi:238 web/index.cgi:1096
msgid "Post"
-msgstr "Melding"
+msgstr "Send inn"
-#: fixmystreet/web/faq.cgi:18
+#: web/faq.cgi:18
msgid "Frequently Asked Questions"
msgstr "Ofte spurte spørsmål"
-#: fixmystreet/web/flickr.cgi:45
+#: web/flickr.cgi:45
msgid ""
"Thank you for trying to register for your Flickr photos. We seem to have a\n"
-"problem ourselves though, so <a href=\"/contact\">please let us know what went on</a>\n"
+"problem ourselves though, so <a href=\"/contact\">please let us know what "
+"went on</a>\n"
"and we'll look into it.\n"
msgstr ""
"Takk for at du prøver å legge til dine Flickr bilder. Vi har et\n"
-"problem med siden, så <a href=\"/contact\"> vennligst meldt fra til Oss, </a>\n"
+"problem med siden, så <a href=\"/contact\"> vennligst meldt fra til Oss, </"
+"a>\n"
"så skal vi se saken.\n"
-#: fixmystreet/web/fun.cgi:17 fixmystreet/web/fun.cgi:25
+#: web/fun.cgi:17 web/fun.cgi:25
msgid "Weird and Wonderful reports"
msgstr "Merkelige saker"
-#: fixmystreet/web/index.cgi:74
+#: web/index.cgi:82
msgid "Submitting your report"
msgstr "Legg til din sak/problem"
-#: fixmystreet/web/index.cgi:77
+#: web/index.cgi:85
msgid "Submitting your update"
msgstr "Legg til din oppdatering"
-#: fixmystreet/web/index.cgi:81 fixmystreet/web/index.cgi:558 fixmystreet/web/index.cgi:572
+#: web/index.cgi:89 web/index.cgi:644
msgid "Reporting a problem"
msgstr "Legger til en sak"
-#: fixmystreet/web/index.cgi:84
+#: web/index.cgi:92
msgid "Viewing a problem"
msgstr "Ser på en sak"
-#: fixmystreet/web/index.cgi:87
+#: web/index.cgi:95
msgid "Viewing a location"
-msgstr "Ser på en lokasjon"
+msgstr "Ser på et sted"
-#: fixmystreet/web/index.cgi:103
+#: web/index.cgi:120
+msgid "Enter a nearby GB postcode, or street name and area"
+msgstr "Skriv inn GB-postnummer i nærheten, eller veinavn og sted"
+
+#: web/index.cgi:134
msgid "Report, view, or discuss local problems"
-msgstr "Rapporter, finn eller diskuter lokale utfordringer/saker"
+msgstr "Rapporter, finn eller diskuter lokale problemer"
-#: fixmystreet/web/index.cgi:104
+#: web/index.cgi:135
msgid "(like graffiti, fly tipping, broken paving slabs, or street lighting)"
-msgstr "(som tagging, hull i veien, søppel eller manglende gatelys"
+msgstr "(som tagging, søppel, hull i veien, eller manglende gatelys)"
-#: fixmystreet/web/index.cgi:125
-#, perl-format
-msgid "<big>%s</big> report in past week"
-msgid_plural "<big>%s</big> reports in past week"
-msgstr[0] ""
-msgstr[1] ""
-
-#: fixmystreet/web/index.cgi:130
-#, perl-format
-msgid "<big>%s</big> report recently"
-msgid_plural "<big>%s</big> reports recently"
-msgstr[0] ""
-msgstr[1] ""
-
-#: fixmystreet/web/index.cgi:138
-msgid "Thanks for uploading your photo. We now need to locate your problem, so please enter a nearby street name or postcode in the box below&nbsp;:"
+#: web/index.cgi:157
+msgid ""
+"Thanks for uploading your photo. We now need to locate your problem, so "
+"please enter a nearby street name or postcode in the box below&nbsp;:"
msgstr ""
+"Takk for at du lastet opp ditt bilde. Nå trenger vi å plassere ditt problem,"
+"så vær så snill å skriv inn navn på vei i nærheten, eller postnummer i "
+"boksen under&nbsp;:"
-#: fixmystreet/web/index.cgi:146
-#, fuzzy
-msgid "Enter a nearby GB postcode, or street name and area:"
-msgstr "Legg inn et postnummer eller et gatenavn og område"
-
-#: fixmystreet/web/index.cgi:156
+#: web/index.cgi:175
msgid "How to report a problem"
-msgstr "Hvordan rapportere en sak"
-
-#: fixmystreet/web/index.cgi:157
-msgid "We send it to the council on your behalf"
-msgstr "Vi sender til den riktige kommunen på vegne av deg"
-
-#: fixmystreet/web/index.cgi:161
-msgid "Enter a nearby GB postcode, or street name and area"
-msgstr "Legg inn et postnummer eller et gatenavn og område"
+msgstr "Hvordan rapportere et problem"
-#: fixmystreet/web/index.cgi:162
+#: web/index.cgi:178
msgid "Locate the problem on a map of the area"
-msgstr "Lokaliser saken/problemet på kartet over området"
+msgstr "Lokaliser problemet på kartet over området"
-#: fixmystreet/web/index.cgi:163
+#: web/index.cgi:179
msgid "Enter details of the problem"
-msgstr "Legg inn tekst og evt. bilde om saken"
+msgstr "Legg inn detaljer om problemet"
-#: fixmystreet/web/index.cgi:169
-msgid "FixMyStreet updates"
-msgstr "FiksGataMi oppdateringer"
-
-#: fixmystreet/web/index.cgi:172
-#, perl-format
-msgid "<big>%s</big> fixed in past month"
-msgid_plural "<big>%s</big> fixed in past month"
-msgstr[0] ""
-msgstr[1] ""
-
-#: fixmystreet/web/index.cgi:174
-#, perl-format
-msgid "<big>%s</big> update on reports"
-msgid_plural "<big>%s</big> updates on reports"
-msgstr[0] ""
-msgstr[1] ""
+#: web/index.cgi:180
+msgid "We send it to the council on your behalf"
+msgstr "Vi sender til administrasjon på dine vegne"
-#: fixmystreet/web/index.cgi:185
+#: web/index.cgi:195
msgid "Photos of recent reports"
msgstr "Bilder av nylig meldte saker"
-#: fixmystreet/web/index.cgi:188
+#: web/index.cgi:197
msgid "Recently reported problems"
msgstr "Nylig meldte problemer"
-#: fixmystreet/web/index.cgi:211
+#: web/index.cgi:221
msgid "Please enter a message"
msgstr "Legg til en melding"
-#: fixmystreet/web/index.cgi:214 fixmystreet/web/index.cgi:286
+#: web/index.cgi:224 web/index.cgi:308
msgid "Please enter your email"
msgstr "Legg inn din epost"
-#: fixmystreet/web/index.cgi:216 fixmystreet/web/index.cgi:288
+#: web/index.cgi:226 web/index.cgi:310
msgid "Please enter a valid email"
msgstr "Legg til en gyldig epost"
-#: fixmystreet/web/index.cgi:225 fixmystreet/web/index.cgi:356
+#: web/index.cgi:235 web/index.cgi:377
#, perl-format
-msgid "That image doesn't appear to have uploaded correctly (%s), please try again."
+msgid ""
+"That image doesn't appear to have uploaded correctly (%s), please try again."
msgstr "Bildet ser ikke ut til å blitt lastet opp riktig (%s), prøv på nytt."
-#: fixmystreet/web/index.cgi:246
+#: web/index.cgi:257 web-admin/index.cgi:477
msgid "Anonymous"
-msgstr "Anonymt"
+msgstr "Anonym"
-#: fixmystreet/web/index.cgi:277
+#: web/index.cgi:299
msgid "No council selected"
-msgstr "Ingen kommune er valgt"
+msgstr "Ingen administrasjon er valgt"
-#: fixmystreet/web/index.cgi:278
+#: web/index.cgi:300
msgid "Please enter a subject"
msgstr "Legg inn et tema"
-#: fixmystreet/web/index.cgi:279
+#: web/index.cgi:301
msgid "Please enter some details"
msgstr "Legg inn opplysninger om saken"
-#: fixmystreet/web/index.cgi:281
+#: web/index.cgi:303
msgid "Please enter your name"
msgstr "Legg inn ditt navn"
-#: fixmystreet/web/index.cgi:283
-msgid "Please enter your full name, councils need this information - if you do not wish your name to be shown on the site, untick the box"
-msgstr "Legg inn ditt fulle navn, kommunen som mottar saken trenger dette - hvis du ikke ønsker at ditt navn skal vises, kryss av her"
+#: web/index.cgi:305
+msgid ""
+"Please enter your full name, councils need this information - if you do not "
+"wish your name to be shown on the site, untick the box"
+msgstr ""
+"Legg inn ditt fulle navn, administrasjoner som mottar saken trenger dette - "
+"hvis du ikke ønsker at ditt navn skal vises, kryss av her"
+
+#: web/index.cgi:312 web/index.cgi:569
+msgid "-- Pick a category --"
+msgstr "-- velg en kategori --"
-#: fixmystreet/web/index.cgi:291
+#: web/index.cgi:313 web/index.cgi:353
msgid "Please choose a category"
msgstr "Velg en kategori"
-#: fixmystreet/web/index.cgi:293 fixmystreet/web/index.cgi:529
-#, fuzzy
+#: web/index.cgi:315 web/index.cgi:576
msgid "-- Pick a property type --"
-msgstr "Velg en type egenskap"
+msgstr "-- velg en eiendomsstype --"
-#: fixmystreet/web/index.cgi:294
+#: web/index.cgi:316
msgid "Please choose a property type"
msgstr "Velg en type egenskap"
-#: fixmystreet/web/index.cgi:316
+#: web/index.cgi:337
msgid "That location is not part of that council"
-msgstr "Denne lokasjonen er ikke en del av den kommunen"
+msgstr "Det stedet er ikke en del av den administrasjonen"
-#: fixmystreet/web/index.cgi:336
+#: web/index.cgi:357
msgid "We have details for that council"
-msgstr "Vi har opplysninger om den kommunen"
+msgstr "Vi har opplysninger om den administrasjonen"
-#: fixmystreet/web/index.cgi:345
+#: web/index.cgi:366
msgid "Somehow, you only have one co-ordinate. Please try again."
-msgstr "På en eller annen måte har du bare en koordinat, vennligst prøv på nytt."
+msgstr ""
+"På en eller annen måte har du bare en koordinat, vennligst prøv på nytt."
-#: fixmystreet/web/index.cgi:347
+#: web/index.cgi:368
msgid "You haven't specified any sort of co-ordinates. Please try again."
msgstr "Du har ikke spesifisert koordinater, vennligst prøv på nytt"
-#: fixmystreet/web/index.cgi:370 fixmystreet/web/index.cgi:515 fixmystreet/web/index.cgi:522
-msgid "Other"
-msgstr "Andre"
-
-#: fixmystreet/web/index.cgi:386
+#: web/index.cgi:407
#, perl-format
-msgid "You have successfully confirmed your report and you can now <a href=\"%s\">view it on the site</a>."
-msgstr "Du har nå lagt til en sak og kan <a href=\"%s\">se saken på nettsiden</a>."
+msgid ""
+"You have successfully confirmed your report and you can now <a href=\"%s"
+"\">view it on the site</a>."
+msgstr ""
+"Du har nå lagt til en sak og kan <a href=\"%s\">se saken på nettsiden</a>."
-#: fixmystreet/web/index.cgi:501
-#, fuzzy
+#: web/index.cgi:549
msgid ""
"That spot does not appear to be covered by a council.\n"
"If you have tried to report an issue past the shoreline, for example,\n"
"please specify the closest point on land."
-msgstr "Punktet ser ikke ut til å være dekket av en kommune - det kan være at du har markert et havområde , marker nærmeste punkt på land."
+msgstr ""
+"Punktet ser ikke ut til å være dekket av en administrasjon.\n"
+"Hvis du har forsøkt å rapportere en sak utenfor kysten, for eksempel,\n"
+"så marker nærmeste punkt på land."
-#: fixmystreet/web/index.cgi:523
+#: web/index.cgi:570 web-admin/index.cgi:628
msgid "Category:"
-msgstr "Kategori"
+msgstr "Kategori:"
-#: fixmystreet/web/index.cgi:529
+#: web/index.cgi:576
msgid "Empty house or bungalow"
-msgstr ""
+msgstr "Tomt hus eller bungalow"
-#: fixmystreet/web/index.cgi:530
+#: web/index.cgi:577
msgid "Empty flat or maisonette"
msgstr ""
-#: fixmystreet/web/index.cgi:530
+#: web/index.cgi:577
msgid "Whole block of empty flats"
-msgstr ""
+msgstr "Hel blokk med tomme leiligheter"
-#: fixmystreet/web/index.cgi:531
+#: web/index.cgi:578
msgid "Empty office or other commercial"
-msgstr ""
+msgstr "Tomt kontor eller forretningsbygg"
-#: fixmystreet/web/index.cgi:531
+#: web/index.cgi:578
msgid "Empty pub or bar"
-msgstr ""
+msgstr "Tom pub eller bar"
-#: fixmystreet/web/index.cgi:532
+#: web/index.cgi:579
msgid "Empty public building - school, hospital, etc."
-msgstr ""
+msgstr "Tom offentlig bygning - skole, sykehos, etc."
-#: fixmystreet/web/index.cgi:533
+#: web/index.cgi:580
msgid "Property type:"
msgstr "Type egenskap:"
-#: fixmystreet/web/index.cgi:573
+#: web/index.cgi:641
msgid ""
-"You have located the problem at the point marked with a purple pin on the map.\n"
+"You have located the problem at the point marked with a purple pin on the "
+"map.\n"
"If this is not the correct location, simply click on the map again. "
msgstr ""
-"Du har ikke funnet et korrekt punkt på kartet.\n"
-"Klikk på kartet på nytt. "
+"Du har plassert problemet ved punktet i kartet som er markert med en lilla "
+"nål. Hvis dette ikke er korrekt plassering kan du ganske enkelt klikke på "
+"kartet på nytt."
+
+#: web/index.cgi:647 web/index.cgi:666 web/index.cgi:668 web/index.cgi:681
+msgid " or "
+msgstr " eller "
-#: fixmystreet/web/index.cgi:578
+#: web/index.cgi:649
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
"On the site, we will show the subject and details of the problem, plus your\n"
"name if you give us permission."
msgstr ""
+"All informasjonen du legger inn her vil bli sendt til <strong>%s</strong>.\n"
+"PÃ¥ dette nettestedet vil vi vise tema og detaljer om problemet, pluss ditt "
+"navn\n"
+"hvis du gir oss lov."
-#: fixmystreet/web/index.cgi:613
+#: web/index.cgi:653
+#, perl-format
msgid ""
-"<p>We do not yet have details for the council that covers\n"
-"this location. If you submit a report here it will be left on the site, but\n"
-"not reported to the council &ndash; please still leave your report, so that\n"
-"we can show to the council the activity in their area."
+"All the information you provide here will be sent to <strong>%s</strong>.\n"
+"The subject and details of the problem will be public, plus your\n"
+"name if you give us permission."
msgstr ""
+"All informasjonen du gir oss her vil bli sendt til <strong>%s</strong>.\n"
+"Tittelen og detaljene for problemet vil bli offentlig, pluss ditt navn\n"
+"hvis du gir oss tillatelse."
+
+#: web/index.cgi:667
+msgid "All the information you provide here will be sent to"
+msgstr "All informasjonen du har lagt inn her vil bli sendt til"
-#: fixmystreet/web/index.cgi:622
+#: web/index.cgi:670
+msgid ""
+"The subject and details of the problem will be public, plus your name if you "
+"give us permission."
+msgstr ""
+"Tittelen og detaljene for problemet vil bli offentlig, pluss navnet ditt\n"
+"hvis du gir oss tillatelse til det."
+
+#: web/index.cgi:672
+msgid ""
+"We do <strong>not</strong> yet have details for the other council that "
+"covers this location."
+msgid_plural ""
+"We do <strong>not</strong> yet have details for the other councils that "
+"cover this location."
+msgstr[0] ""
+"Vi har ennå <strong>ikke</strong> detaljene for den andre administrasjonen "
+"som dekker dette stedet."
+msgstr[1] ""
+"Vi har ennå <strong>ikke</strong> detaljene for de andre administrasjonene "
+"som dekker dette stedet."
+
+#: web/index.cgi:676 web/index.cgi:691
+#, perl-format
+msgid ""
+"You can help us by finding a contact email address for local problems for %s "
+"and emailing it to us at <a href='mailto:%s'>%s</a>."
+msgstr ""
+"Du kan hjelpe oss ved å finne en kontakt-epostadresse for lokale problemer i "
+"%s, og sende den via epost til oss på <a href='mailto:%s'>%s</a>."
+
+#: web/index.cgi:686 web/index.cgi:694
+msgid "We do not yet have details for the council that covers this location."
+msgid_plural ""
+"We do not yet have details for the councils that cover this location."
+msgstr[0] ""
+"Vi har ennå ikke detaljer for administrasjonen som dekker dette stedet."
+msgstr[1] ""
+"Vi har ennå ikke detaljer for administrasjonene som dekker dette stedet."
+
+#: web/index.cgi:690
+msgid ""
+"If you submit a problem here the subject and details of the problem will be "
+"public, but the problem will <strong>not</strong> be reported to the council."
+msgstr ""
+"Hvis du sender inn et problem hit, så vil tema og detaljer for problemet "
+"være offentlig, men problemet vil <strong>ikke</strong> bli rapportert til "
+"administrasjonen."
+
+#: web/index.cgi:696
+msgid ""
+"If you submit a report here it will be left on the site, but not reported to "
+"the council &ndash; please still leave your report, so that we can show to "
+"the council the activity in their area."
+msgstr ""
+"Hvis du sender inn en rapport her så vil den bli tilgjengelig her men ikke "
+"rapportert til administrasjonen. &ndash; det er fint om du likevel sender "
+"inn din rapport, slik at vi kan vise administrasjonen aktiviteten i deres "
+"område."
+
+#: web/index.cgi:702
msgid ""
"Please fill in the form below with details of the problem,\n"
"and describe the location as precisely as possible in the details box."
msgstr ""
+"Vennligst fyll inn skjemaet under med detaljene om problemet,\n"
+"og beskriv stedet så nøyaktig som mulig i boksen for detaljer."
-#: fixmystreet/web/index.cgi:631
+#: web/index.cgi:711
msgid ""
"Please fill in details of the empty property below, saying what type of\n"
"property it is e.g. an empty home, block of flats, office etc. Tell us\n"
-"something about its condition and any other information you feel is relevant.\n"
-"There is no need for you to give the exact address. Please be polite, concise\n"
-"and to the point; writing your message entirely in block capitals makes it hard\n"
+"something about its condition and any other information you feel is "
+"relevant.\n"
+"There is no need for you to give the exact address. Please be polite, "
+"concise\n"
+"and to the point; writing your message entirely in block capitals makes it "
+"hard\n"
"to read, as does a lack of punctuation.\n"
msgstr ""
-#: fixmystreet/web/index.cgi:644
+#: web/index.cgi:719
+msgid ""
+"Please fill in details of the problem below. The council won't be able\n"
+"to help unless you leave as much detail as you can, so please describe the "
+"exact location of\n"
+"the problem (e.g. on a wall), what it is, how long it has been there, a "
+"description (and a\n"
+"photo of the problem if you have one), etc."
+msgstr ""
+"Vennligst fyll inn detaljene om problemet under. Administrasjonen vil ikke "
+"være i stand\n"
+"til å hjelpe med mindre du legger inn så mange detaljer som du kan. Beskriv\n"
+"eksakt plassering for problemet (f.eks. på en vegg), hva det er, hvor lenge "
+"det har\n"
+"vært der, en beskrivelse (og et bilde av problemet hvis du har et), etc."
+
+#: web/index.cgi:724
msgid "Please fill in details of the problem below."
msgstr "Vennligst fyll ut detaljer om saken under"
-#: fixmystreet/web/index.cgi:655
+#: web/index.cgi:733
msgid "Empty property details form"
-msgstr ""
+msgstr "Tom eiendom detaljskjema"
-#: fixmystreet/web/index.cgi:661
+#: web/index.cgi:735 web-admin/index.cgi:623
msgid "Details:"
-msgstr ""
+msgstr "Detaljer:"
-#: fixmystreet/web/index.cgi:662 fixmystreet/web/index.cgi:956
-#, fuzzy
+#: web/index.cgi:736 web/index.cgi:1112 web/questionnaire.cgi:308
msgid "Photo:"
-msgstr "Melding"
+msgstr "Bilde:"
-#: fixmystreet/web/index.cgi:663 fixmystreet/web/index.cgi:954
+#: web/index.cgi:737 web/index.cgi:1093 web-admin/index.cgi:629
+#: web-admin/index.cgi:749
msgid "Name:"
-msgstr ""
+msgstr "Navn:"
-#: fixmystreet/web/index.cgi:665 fixmystreet/bin/send-reports:75
+#: web/index.cgi:739 bin/send-reports:89 web-admin/index.cgi:631
msgid "Phone:"
-msgstr ""
+msgstr "Telefon:"
-#: fixmystreet/web/index.cgi:666
+#: web/index.cgi:740 web/index.cgi:1100
msgid "(optional)"
-msgstr ""
+msgstr "(valgfritt)"
-#: fixmystreet/web/index.cgi:667
+#: web/index.cgi:742
msgid "Can we show your name on the site?"
-msgstr ""
+msgstr "Kan vi vise ditt navn her på nettstedet?"
+
+#: web/index.cgi:744
+msgid "Can we show your name publicly?"
+msgstr "Kan vi vise ditt navn offentlig?"
-#: fixmystreet/web/index.cgi:668
+#: web/index.cgi:746
msgid "(we never show your email address or phone number)"
+msgstr "(vi viser aldri din epostadresse eller telefonnummer)"
+
+#: web/index.cgi:773
+msgid "Please note:"
+msgstr "Vennligst merk deg:"
+
+#: web/index.cgi:775
+msgid ""
+"We will only use your personal information in accordance with our <a href=\"/"
+"faq#privacy\">privacy policy.</a>"
msgstr ""
+"Vi vil kun bruke personlig informasjon om deg i henhold til vår <a href=\"/"
+"faq#privacy\">personvernpolicy.</a>"
-#: fixmystreet/web/index.cgi:737
-msgid "Submit"
+#: web/index.cgi:776
+msgid "Please be polite, concise and to the point."
+msgstr "Vær høflig, poengtert og kortfattet."
+
+#: web/index.cgi:777
+msgid ""
+"Please do not be abusive &mdash; abusing your council devalues the service "
+"for all users."
msgstr ""
+"Ikke vær ufin &mdash; å kjefte på din administrasjon skader verdien av "
+"tjenesten for alle brukerne."
-#: fixmystreet/web/index.cgi:784
-msgid "Hide stale reports"
+#: web/index.cgi:778
+msgid ""
+"Writing your message entirely in block capitals makes it hard to read, as "
+"does a lack of punctuation."
msgstr ""
+"Når du skriver meldingen din med kun store bokstaver blir den vanskelig å "
+"lese. Det samme gjelder manglende tegnsetting."
-#: fixmystreet/web/index.cgi:787
-msgid "Include stale reports"
+#: web/index.cgi:779
+msgid ""
+"Remember that FixMyStreet is primarily for reporting physical problems that "
+"can be fixed. If your problem is not appropriate for submission via this "
+"site remember that you can contact your council directly using their own "
+"website."
msgstr ""
+"Husk at FiksGataMi primert er laget for å rapportere fysiske problemer som "
+"kan bli fikset. Hvis ditt problem ikke er egnet for å sende inn via denne "
+"tjenesten, husk at du kan kontakte administrasjonen direkte via deres egen "
+"nettside."
-#: fixmystreet/web/index.cgi:793
-msgid "Show pins"
+#: web/index.cgi:781
+msgid ""
+"FixMyStreet and the Guardian are providing this service in partnership in <a "
+"href=\"/faq#privacy\">certain cities</a>. In those cities, both have access "
+"to any information submitted, including names and email addresses, and will "
+"use it only to ensure the smooth running of the service, in accordance with "
+"their privacy policies."
msgstr ""
-#: fixmystreet/web/index.cgi:797
+#: web/index.cgi:885
+msgid "Hide stale reports"
+msgstr "Gjem utdaterte rapporter"
+
+#: web/index.cgi:888
+msgid "Include stale reports"
+msgstr "Inkludert utdaterte rapporter"
+
+#: web/index.cgi:907
+msgid "No problems have been reported yet."
+msgstr "Ingen saker er rapporter"
+
+#: web/index.cgi:923
+msgid "No problems found."
+msgstr "Ingen saker er funnet."
+
+#: web/index.cgi:928
+msgid "Show pins"
+msgstr "Vis nåler"
+
+#: web/index.cgi:932
msgid "Hide pins"
-msgstr ""
+msgstr "Gjem nåler"
+
+#: web/index.cgi:973
+msgid "Email me new local problems"
+msgstr "Send meg epost om lokale problemer"
+
+#: web/index.cgi:975
+msgid "RSS feed of recent local problems"
+msgstr "RSS-strøm med nylige lokale problemer"
-#: fixmystreet/web/index.cgi:802
+#: web/index.cgi:978
msgid "Problems in this area"
msgstr "Saker i dette område"
-#: fixmystreet/web/index.cgi:803
-msgid "Email me new local problems"
-msgstr "Send epost til meg om lokaler saker"
+#: web/index.cgi:979
+msgid "Reports on and around the map"
+msgstr "Saker i og rundt kartet"
-#: fixmystreet/web/index.cgi:804
-msgid "RSS feed of recent local problems"
-msgstr "RSS feed med lokale saker som nylig er lagt til"
+#: web/index.cgi:980
+#, perl-format
+msgid "Closest nearby problems <small>(within&nbsp;%skm)</small>"
+msgstr "De nærmeste sakene <small>(innenfor&nbsp;%skm)</small>"
-#: fixmystreet/web/index.cgi:819
+#: web/index.cgi:984
msgid ""
"To report a problem, simply\n"
" <strong>click on the map</strong> at the correct location."
@@ -1028,401 +1451,1030 @@ msgstr ""
"For å lage en sak, \n"
" <strong>klikk på kartet</strong> på riktig sted."
-#: fixmystreet/web/index.cgi:821
-#, fuzzy, perl-format
+#: web/index.cgi:986
+#, perl-format
msgid ""
"<small>If you cannot see the map, <a href='%s' rel='nofollow'>skip this\n"
" step</a>.</small>"
msgstr ""
-"<small>Hvis du ikke kan se kartet, <a href='%s'>hopp over dette\n"
+"<small>Hvis du ikke kan se kartet, <a href='%s' rel='nofollow'>hopp over "
+"dette\n"
" steget</a>.</small>"
-#: fixmystreet/web/index.cgi:823
-msgid "Reports on and around the map"
-msgstr "Saker i og rundt kartet"
-
-#: fixmystreet/web/index.cgi:832
-msgid "No problems have been reported yet."
-msgstr "Ingen saker er rapporter"
-
-#: fixmystreet/web/index.cgi:835
-#, perl-format
-msgid "Closest nearby problems <small>(within&nbsp;%skm)</small>"
-msgstr "De nærmeste sakene <small>(innenfor&nbsp;%skm)</small>"
-
-#: fixmystreet/web/index.cgi:844
-msgid "No problems found."
-msgstr "Ingen saker er funnet."
-
-#: fixmystreet/web/index.cgi:851
+#: web/index.cgi:991
msgid "Recent local problems, FixMyStreet"
-msgstr "Lokale saker som nylig er lagt til, FiksGataMi."
+msgstr "Nylig lokalt problem, FiksGataMi."
-#: fixmystreet/web/index.cgi:881 fixmystreet/web/index.cgi:883
-#, fuzzy
+#: web/index.cgi:1004
+msgid "There were problems with your update. Please see below."
+msgstr "Det var problemer med din oppdatering. Vennligst se under."
+
+#: web/index.cgi:1025 web/index.cgi:1027
msgid "Unknown problem ID"
-msgstr "Nye saker"
+msgstr "Ukjent problem-Id"
-#: fixmystreet/web/index.cgi:884
+#: web/index.cgi:1028
msgid "That report has been removed from FixMyStreet."
-msgstr ""
+msgstr "Den rapporten har blitt fjernet fra FiksGataMi."
-#: fixmystreet/web/index.cgi:907
+#: web/index.cgi:1048
msgid "This problem is old and of unknown status."
msgstr "Denne saken er gammel og med ukjent status."
-#: fixmystreet/web/index.cgi:910 fixmystreet/web/index.cgi:952
+#: web/index.cgi:1051 web/index.cgi:1092
msgid "This problem has been fixed"
msgstr "Denne saken er løst."
-#: fixmystreet/web/index.cgi:915
-msgid "Offensive? Unsuitable? Tell us"
-msgstr ""
-
-#: fixmystreet/web/index.cgi:920
+#: web/index.cgi:1076
msgid "More problems nearby"
msgstr "Flere saker i nærheten"
-#: fixmystreet/web/index.cgi:922
+#: web/index.cgi:1079
msgid "Email me updates"
msgstr "Send meg oppdateringer"
-#: fixmystreet/web/index.cgi:925
-#, fuzzy
+#: web/index.cgi:1082
msgid "Receive email when updates are left on this problem"
-msgstr "Motta epost når det er uppdateringer på denne saken"
+msgstr "Motta epost når oppdateringer legges inn om dette problemet"
-#: fixmystreet/web/index.cgi:936
+#: web/index.cgi:1087
msgid "RSS feed of updates to this problem"
-msgstr "RSS feed med oppdateringer på denne saken"
+msgstr "RSS-strøm med oppdateringer for dette problemet"
-#: fixmystreet/web/index.cgi:941
+#: web/index.cgi:1088
msgid "Provide an update"
-msgstr "Send en oppdatering"
-
-#: fixmystreet/web/index.cgi:942
-msgid "Please note that updates are not sent to the council."
-msgstr "Oppdateringene er ikke sendt til kommunen."
+msgstr "Bidra med oppdatering"
-#: fixmystreet/web/index.cgi:955
+#: web/index.cgi:1094
msgid "Update:"
-msgstr ""
+msgstr "Oppdatering:"
-#: fixmystreet/web/index.cgi:957
+#: web/index.cgi:1095
msgid "Alert me to future updates"
+msgstr "Send meg varsel ved fremtidige oppdateringer"
+
+#: web/index.cgi:1103
+msgid ""
+"Please note that updates are not sent to the council. If you leave your name "
+"it will be public. Your information will only be used in accordance with our "
+"<a href=\"/faq#privacy\">privacy policy</a>"
msgstr ""
+"Vennligst merk at oppdateringer ikke blir sendt til administrasjonen. Hvis "
+"du legger igjen navnet ditt så vil det være offentlig tilgjengelig. Din "
+"informasjon vil kun bli brukt i henhold til våre <a href=\"/faq#privacy"
+"\">personvernpolicy</a>"
-#: fixmystreet/web/index.cgi:994
+#: web/index.cgi:1123
msgid "Updates to this problem, FixMyStreet"
-msgstr "Uppdateringer til denn saken, FiksGataMi"
+msgstr "Oppdateringer til dette problemet, FiksGataMi"
-#: fixmystreet/web/questionnaire.cgi:28 fixmystreet/web/questionnaire.cgi:206
+#: web/questionnaire.cgi:29 web/questionnaire.cgi:80 web/questionnaire.cgi:213
+#: web/questionnaire.cgi:233
msgid "Questionnaire"
msgstr "Spørreskjema"
-#: fixmystreet/web/questionnaire.cgi:38
-msgid "I'm afraid we couldn't validate that token. If you've copied the URL from an email, please check that you copied it exactly.\n"
+#: web/questionnaire.cgi:41
+msgid ""
+"I'm afraid we couldn't validate that token. If you've copied the URL from an "
+"email, please check that you copied it exactly.\n"
msgstr ""
+"Jeg er redd vi ikke kunne verifisere den referansen. Hvis du kopierte den "
+"URLen fra en annen epost, sjekk at du har kopiert den korrekt.\n"
-#: fixmystreet/web/questionnaire.cgi:43
+#: web/questionnaire.cgi:48
#, perl-format
-msgid "You have already answered this questionnaire. If you have a question, please <a href='/contact'>get in touch</a>, or <a href='%s'>view your problem</a>.\n"
+msgid ""
+"You have already answered this questionnaire. If you have a question, please "
+"<a href='%s'>get in touch</a>, or <a href='%s'>view your problem</a>.\n"
msgstr ""
+"Du har allerede besvart dette spørreskjemaet. Hvis du har spørsmål, "
+"vennligst <a href='%s'>ta kontakt</a>, eller <a href='%s'>se på ditt "
+"problem</a>.\n"
-#: fixmystreet/web/questionnaire.cgi:48
+#: web/questionnaire.cgi:53
msgid "I'm afraid we couldn't locate your problem in the database.\n"
-msgstr ""
+msgstr "Jeg er redd vi ikke klarte å finne ditt problem i databasen.\n"
-#: fixmystreet/web/questionnaire.cgi:79
-#, fuzzy
+#: web/questionnaire.cgi:92
msgid "Please state whether or not the problem has been fixed"
-msgstr "Gi oss informasjon om du har rapportert en sak til kommunen tidligere"
+msgstr "Vennligs oppgi om dette problemet er blitt fikset eller ikke"
-#: fixmystreet/web/questionnaire.cgi:80
-msgid "Please say whether you've ever reported a problem to your council before"
-msgstr "Gi oss informasjon om du har rapportert en sak til kommunen tidligere"
+#: web/questionnaire.cgi:95
+msgid ""
+"Please say whether you've ever reported a problem to your council before"
+msgstr ""
+"Gi oss informasjon om du har rapportert en sak til din administrasjon "
+"tidligere"
-#: fixmystreet/web/questionnaire.cgi:81
+#: web/questionnaire.cgi:97
msgid "Please indicate whether you'd like to receive another questionnaire"
-msgstr ""
+msgstr "Vennligst indiker om du ønsker å motta et annet spørreskjema"
-#: fixmystreet/web/questionnaire.cgi:83
+#: web/questionnaire.cgi:99
msgid "Please provide some explanation as to why you're reopening this report"
msgstr ""
+"Vennligst bidra med en forklaring for hvorfor du åpner denne rapporten på "
+"nytt"
-#: fixmystreet/web/questionnaire.cgi:99
+#: web/questionnaire.cgi:115
msgid "Please provide some text as well as a photo"
-msgstr ""
+msgstr "Vennligst bidra med litt tekst i tilegg til et bilde"
-#: fixmystreet/web/questionnaire.cgi:130
+#: web/questionnaire.cgi:146
msgid "Questionnaire filled in by problem reporter"
-msgstr ""
+msgstr "Spørreskjema fylt inn av feilrapportøren"
-#: fixmystreet/web/questionnaire.cgi:148
+#: web/questionnaire.cgi:166
msgid ""
"<p>Thank you very much for filling in our questionnaire; if you\n"
-"get some more information about the status of your problem, please come back to the\n"
+"get some more information about the status of your problem, please come back "
+"to the\n"
"site and leave an update.</p>\n"
msgstr ""
+"<p>Tusen takk for at du fylte ut vårt spørreskjema. Hvis du\n"
+"får mer informasjon om status for ditt problem, vær så snill å kom tilbake "
+"hit til\n"
+"nettstedet og legg igjen en oppdatering.</p>\n"
-#: fixmystreet/web/questionnaire.cgi:154
+#: web/questionnaire.cgi:174
+#, perl-format
msgid ""
-"<p style=\"font-size:150%\">We're sorry to hear that. We have two suggestions: why not try\n"
-"<a href=\"http://www.writetothem.com/\">writing direct to your councillor(s)</a>\n"
+"<p style=\"font-size:150%%\">We're sorry to hear that. We have two "
+"suggestions: why not try\n"
+"<a href=\"%s\">writing direct to your councillor(s)</a>\n"
"or, if it's a problem that could be fixed by local people working together,\n"
-"why not <a href=\"http://www.pledgebank.com/new\">make and publicise a pledge</a>?\n"
+"why not <a href=\"http://www.pledgebank.com/new\">make and publicise a "
+"pledge</a>?\n"
"</p>\n"
msgstr ""
+"<p style=\"font-size:150%%\">Det gjør oss triste å høre dette. Vi har to "
+"forslag: hva med å forsøke\n"
+"<a href=\"%s\">Ã¥ skrive direkte til din kommune</a>, eller hvis det er et "
+"problem som kan fikses\n"
+"av befolkningen som jobber sammen, hva med å <a href=\"http://www.pledgebank."
+"com/new\">lage\n"
+"en \"pledge\" og publiser den</a>?</p>\n"
-#: fixmystreet/web/questionnaire.cgi:162
-msgid "<p style=\"font-size:150%\">Thank you very much for filling in our questionnaire; glad to hear it's been fixed.</p>\n"
+#: web/questionnaire.cgi:183
+msgid ""
+"<p style=\"font-size:150%\">Thank you very much for filling in our "
+"questionnaire; glad to hear it's been fixed.</p>\n"
msgstr ""
+"<p style=\"font-size:150%\">Tusen takk for at du fylte ut vårt "
+"spørreskjema.\n"
+"Veldig glad for å høre at det er blitt fikset.</p>\n"
+
+#: web/questionnaire.cgi:236
+msgid "Don&rsquo;t know"
+msgstr "Vet ikke"
+
+#: web/questionnaire.cgi:237
+msgid "Submit questionnaire"
+msgstr "Lever spørreskjema"
-#: fixmystreet/web/questionnaire.cgi:214
+#: web/questionnaire.cgi:254
msgid ""
"<p>Getting empty homes back into use can be difficult. You shouldn't expect\n"
-"the property to be back into use yet. But a good council will have started work\n"
+"the property to be back into use yet. But a good council will have started "
+"work\n"
"and should have reported what they have done on the website. If you are not\n"
-"satisfied with progress or information from the council, now is the right time\n"
-"to say. You may also want to try contacting some other people who may be able\n"
+"satisfied with progress or information from the council, now is the right "
+"time\n"
+"to say. You may also want to try contacting some other people who may be "
+"able\n"
"to help. For advice on how to do this and other useful information please\n"
-"go to <a href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
+"go to <a href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://"
+"www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:224
+#: web/questionnaire.cgi:264
msgid ""
-"<p>Getting empty homes back into use can be difficult, but by now a good council\n"
+"<p>Getting empty homes back into use can be difficult, but by now a good "
+"council\n"
"will have made a lot of progress and reported what they have done on the\n"
-"website. Even so properties can remain empty for many months if the owner is\n"
-"unwilling or the property is in very poor repair. If nothing has happened or\n"
-"you are not satisfied with the progress the council is making, now is the right\n"
+"website. Even so properties can remain empty for many months if the owner "
+"is\n"
+"unwilling or the property is in very poor repair. If nothing has happened "
+"or\n"
+"you are not satisfied with the progress the council is making, now is the "
+"right\n"
"time to say so. We think it's a good idea to contact some other people who\n"
"may be able to help or put pressure on the council For advice on how to do\n"
"this and other useful information please go to <a\n"
-"href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www.emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
+"href=\"http://www.emptyhomes.com/getinvolved/campaign.html\">http://www."
+"emptyhomes.com/getinvolved/campaign.html</a>.</p>\n"
msgstr ""
-#: fixmystreet/web/questionnaire.cgi:237
-msgid "The details of your problem are available on the right hand side of this page."
+#: web/questionnaire.cgi:277
+msgid ""
+"The details of your problem are available on the right hand side of this "
+"page."
msgstr ""
+"Detaljene om ditt problem er tilgjengelig på høyre side av denne siden."
-#: fixmystreet/web/questionnaire.cgi:238
+#: web/questionnaire.cgi:278
msgid "Please take a look at the updates that have been left."
-msgstr ""
+msgstr "Vær sa snill å ta en titt på oppdateringene som har blitt igjen."
-#: fixmystreet/web/questionnaire.cgi:244
-#, fuzzy
+#: web/questionnaire.cgi:284
msgid "An update marked this problem as fixed."
-msgstr "Har denne saken blitt løst?"
+msgstr "En oppdatering markerte dette problemet som fikset."
-#: fixmystreet/web/questionnaire.cgi:245
+#: web/questionnaire.cgi:285
msgid "Has this problem been fixed?"
msgstr "Har denne saken blitt løst?"
-#: fixmystreet/web/questionnaire.cgi:248
-msgid "Don&rsquo;t know"
-msgstr ""
-
-#: fixmystreet/web/questionnaire.cgi:259
-msgid "Have you ever reported a problem to a council before, or is this your first time?"
-msgstr "Har du sendt en sak til kommunen før, eller er dette første gangen?"
-
-#: fixmystreet/web/questionnaire.cgi:261
+#: web/questionnaire.cgi:292
msgid "Reported before"
-msgstr ""
+msgstr "Rapportert tidligere"
-#: fixmystreet/web/questionnaire.cgi:262
+#: web/questionnaire.cgi:293
msgid "First time"
+msgstr "Første gang"
+
+#: web/questionnaire.cgi:294
+msgid ""
+"Have you ever reported a problem to a council before, or is this your first "
+"time?"
msgstr ""
+"Har du sendt en sak til en administrasjon før, eller er dette første gangen?"
-#: fixmystreet/web/questionnaire.cgi:271
+#: web/questionnaire.cgi:304
msgid ""
"If you wish to leave a public update on the problem, please enter it here\n"
"(please note it will not be sent to the council). For example, what was\n"
"your experience of getting the problem fixed?"
msgstr ""
-"Hvis du ønsker å legge til en offentlig kommentar til saken, legg den til her\n"
-"(denne blir sendt til kommunen). Du kan for eksempel\n"
+"Hvis du ønsker å legge til en offentlig kommentar til saken, legg den til "
+"her\n"
+"(denne blir sendt til administrasjonen). Du kan for eksempel\n"
"dele din erfaring med hvordan din sak ble løst."
-#: fixmystreet/web/questionnaire.cgi:299
-#, fuzzy
-msgid "Submit questionnaire"
-msgstr "Spørreskjema"
+#: web/questionnaire.cgi:322
+msgid ""
+"Would you like to receive another questionnaire in 4 weeks, reminding you to "
+"check the status?"
+msgstr ""
+"Kunne du tenke deg å motta en ny forespørsel om 4 uker, som minner deg om å "
+"sjekke status?"
-#: fixmystreet/web/reports.cgi:164 fixmystreet/web/reports.cgi:205
+#: web/reports.cgi:192 web/reports.cgi:239
msgid "Summary reports"
-msgstr "Oppsummerings rapporter"
+msgstr "Oppsummeringsrapporter"
-#: fixmystreet/web/reports.cgi:166
-msgid "This is a summary of all reports on this site; select a particular council to see the reports sent there."
-msgstr "Dette er en listing av alle sakene på nettsiden; velg en enkelt kommunefor å se saker som er sendt dit."
+#: web/reports.cgi:194
+msgid ""
+"This is a summary of all reports on this site; select a particular council "
+"to see the reports sent there."
+msgstr ""
+"Dette er en opplisting av alle sakene i denne tjenesten; velg en bestemt "
+"administrasjon for å se saker som er sendt dit."
-#: fixmystreet/web/reports.cgi:167
+#: web/reports.cgi:195
msgid "Greyed-out lines are councils that no longer exist."
msgstr ""
+"Linjer med grå bakgrunn er administrasjoner som ikke lenger eksisterer."
-#: fixmystreet/web/reports.cgi:171
+#: web/reports.cgi:199 web-admin/index.cgi:477 web-admin/index.cgi:656
msgid "Name"
-msgstr ""
+msgstr "Navn"
-#: fixmystreet/web/reports.cgi:171 fixmystreet/web/reports.cgi:236
+#: web/reports.cgi:199 web/reports.cgi:275
msgid "New problems"
msgstr "Nye saker"
-#: fixmystreet/web/reports.cgi:171 fixmystreet/web/reports.cgi:244
+#: web/reports.cgi:199 web/reports.cgi:283
msgid "Older problems"
msgstr "Eldre saker"
-#: fixmystreet/web/reports.cgi:173
-#, fuzzy
+#: web/reports.cgi:201
msgid "Old problems,<br>state unknown"
-msgstr "Eldre saker med ukjent status"
+msgstr "Eldre saker, <br>ukjent status"
-#: fixmystreet/web/reports.cgi:175 fixmystreet/web/reports.cgi:252
+#: web/reports.cgi:203 web/reports.cgi:290
msgid "Recently fixed"
msgstr "Nylig løste saker"
-#: fixmystreet/web/reports.cgi:175
-#, fuzzy
+#: web/reports.cgi:203
msgid "Older fixed"
-msgstr "Eldre saker som er løst"
+msgstr "Eldre løste"
-#: fixmystreet/web/reports.cgi:211
+#: web/reports.cgi:245
msgid "council"
-msgstr ""
+msgstr "administrasjon"
-#: fixmystreet/web/reports.cgi:217
-#, fuzzy, perl-format
-msgid "%s - Summary reports"
-msgstr "Oppsummerings rapporter"
+#: web/reports.cgi:255
+#, perl-format
+msgid "RSS feed of problems in this %s"
+msgstr "RSS-strøm for problemer i denne %s"
-#: fixmystreet/web/reports.cgi:217
-#, fuzzy, perl-format
-msgid "Problems within %s, FixMyStreet"
-msgstr "Problemer innenfor %s avdeling/etat"
+#: web/reports.cgi:259
+#, perl-format
+msgid "This is a summary of all reports for one %s."
+msgstr "Dette er en oppsummering av alle rapporter for en %s."
-#: fixmystreet/web/reports.cgi:219
+#: web/reports.cgi:260
#, perl-format
-msgid "RSS feed of problems in this %s"
-msgstr "RSS feed for saker innenfor denne %s"
+msgid "This is a summary of all reports for this %s."
+msgstr "Dette er en oppsummering for alle rapporter for denne %s."
-#: fixmystreet/web/reports.cgi:222
-#, fuzzy, perl-format
+#: web/reports.cgi:264
+#, perl-format
msgid "You can <a href=\"%s\">see less detail</a>."
-msgstr ". Du kan <a href=\"%s\">lese saken på portalen </a>."
+msgstr "Du kan <a href=\"%s\">se mindre detaljer</a>."
-#: fixmystreet/web/reports.cgi:224
-#, fuzzy, perl-format
-msgid "You can <a href=\"%s\">see more details</a>."
-msgstr ". Du kan <a href=\"%s\">lese saken på portalen </a>."
-
-#: fixmystreet/web/reports.cgi:226
+#: web/reports.cgi:266
#, perl-format
-msgid "You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports\">show all councils</a>."
-msgstr ""
+msgid "You can <a href=\"%s\">see more details</a>."
+msgstr "Du kan <a href=\"%s\">se flere detaljer</a>."
-#: fixmystreet/web/reports.cgi:228
+#: web/reports.cgi:268
#, perl-format
-msgid "You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports\">show all councils</a>."
+msgid ""
+"You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports"
+"\">show all councils</a>."
msgstr ""
+"Du kan <a href=\"%s\">se mindre detaljer</a> eller gå tilbake og <a href=\"/"
+"reports\">se alle administrasjonene</a>."
-#: fixmystreet/web/reports.cgi:232
+#: web/reports.cgi:270
#, perl-format
-msgid "This is a summary of all reports for one %s."
+msgid ""
+"You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports"
+"\">show all councils</a>."
msgstr ""
+"Du kan <a href=\"%s\">se flere detaljer</a> eller gå tilbake og <a href=\"/"
+"reports\">se alle administrasjonene</a>."
-#: fixmystreet/web/reports.cgi:246
+#: web/reports.cgi:285
msgid "Old problems, state unknown"
msgstr "Eldre saker med ukjent status"
-#: fixmystreet/web/reports.cgi:253
+#: web/reports.cgi:291
msgid "Old fixed"
msgstr "Eldre saker som er løst"
-#: fixmystreet/bin/send-reports:77
-msgid "This web page also contains a photo of the problem, provided by the user."
+#: web/reports.cgi:294
+#, perl-format
+msgid "%s - Summary reports"
+msgstr "%s - oppsummeringsrapporter"
+
+#: web/reports.cgi:294
+#, perl-format
+msgid "Problems within %s, FixMyStreet"
+msgstr "Problemer innenfor %s, Fiksgatami"
+
+#: web/reports.cgi:333
+#, fuzzy
+msgid "(sent to both)"
+msgstr "(ikke rapportert til administrasjonen)"
+
+#: web/reports.cgi:334
+msgid "(not sent to council)"
+msgstr "(ikke rapportert til administrasjonen)"
+
+#: bin/send-reports:91
+msgid ""
+"This web page also contains a photo of the problem, provided by the user."
msgstr ""
+"Denne nettsiden inneholder også et bilde av problemet, sendt inn av brukeren."
-#: fixmystreet/bin/send-reports:83
+#: bin/send-reports:97
msgid "To view a map of the precise location of this issue"
-msgstr ""
+msgstr "For å se en kart med den presise plasseringen for denne saken."
-#: fixmystreet/bin/send-reports:84
-msgid "The user could not locate the problem on a map, but to see the area around the location they entered"
+#: bin/send-reports:98
+msgid ""
+"The user could not locate the problem on a map, but to see the area around "
+"the location they entered"
msgstr ""
+"Brukeren kunne ikke plassere problemet på et kart, men sjekk området rundt "
+"stedet de skrev inn"
-#: fixmystreet/bin/send-reports:88
+#: bin/send-reports:181
+msgid "this type of local problem"
+msgstr "denne type lokalt problem"
+
+#: bin/send-reports:185
#, perl-format
-msgid "The closest address, as the crow flies, to the location of this problem, %.0fm away, is: %s - please note that this is automatically generated, so ensure that you check it against the details provided by the user and, if possible, the map."
-msgstr ""
+msgid "Category: %s"
+msgstr "Kategori: %s"
-#: fixmystreet/db/alert_types_eha.pl:5 fixmystreet/db/alert_types_eha.pl:6
-#, perl-brace-format
-msgid "Updates on {{title}}"
-msgstr ""
+#: bin/send-reports:188
+msgid " and "
+msgstr " og "
-#: fixmystreet/db/alert_types_eha.pl:7
-#, perl-brace-format
-msgid "Update by {{name}}"
+#: bin/send-reports:189
+msgid ""
+"This email has been sent to both councils covering the location of the "
+"problem, as the user did not categorise it; please ignore it if you're not "
+"the correct council to deal with the issue, or let us know what category of "
+"problem this is so we can add it to our system."
+msgstr ""
+"Denne eposten har blitt sendt til begge administrasjonene som dekker stedet "
+"for problemet, da brukeren ikke kategoriserte det. Vær så snill å ignorere "
+"den hvis dere ikke er korrekt administrasjon for å håndtere denne skaen, "
+"eller gi oss beskjed om hvilken kategori av problemer dette er så vi kan "
+"legge det til i vårt system."
+
+#: bin/send-reports:195
+#, perl-format
+msgid ""
+"We realise this problem might be the responsibility of %s; however, we don't "
+"currently have any contact details for them. If you know of an appropriate "
+"contact address, please do get in touch."
msgstr ""
+"Vi innser at %s kan være ansvarlig for dette problemet, men vi mangler for "
+"tiden kontaktinformasjon for dem. Hvis du vet om en egnet kontaktadresse, ta "
+"kontakt med oss."
-#: fixmystreet/db/alert_types_eha.pl:10
+#: db/alert_types_eha.pl:5
msgid "New reports on reportemptyhomes.com"
-msgstr ""
+msgstr "Nye rapporter på reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:11
-msgid "The latest empty properties reported by users"
-msgstr ""
-
-#: fixmystreet/db/alert_types_eha.pl:14
+#: db/alert_types_eha.pl:8
msgid "Properties recently reported as put back to use on reportemptyhomes.com"
msgstr ""
-#: fixmystreet/db/alert_types_eha.pl:15
+#: db/alert_types_eha.pl:9
msgid "The latest properties reported back to use by users"
-msgstr ""
+msgstr "De siste eiendommer rapportert tilbake i bruk av brukere"
-#: fixmystreet/db/alert_types_eha.pl:18
+#: db/alert_types_eha.pl:12
msgid "New local reports on reportemptyhomes.com"
-msgstr ""
+msgstr "Nye lokale rapporter på reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:19
+#: db/alert_types_eha.pl:13
msgid "The latest local reports reported by users"
-msgstr ""
+msgstr "De siste lokale rapporter rapporter av brukere"
+
+#: db/alert_types_eha.pl:16
+#, perl-brace-format
+msgid "New reports on reportemptyhomes.com near {{POSTCODE}}"
+msgstr "Nye rapporter på reportemptyhomes.com nær {{POSTCODE}}"
-#: fixmystreet/db/alert_types_eha.pl:22
+#: db/alert_types_eha.pl:19
#, perl-brace-format
msgid "New reports to {{COUNCIL}} on reportemptyhomes.com"
-msgstr ""
+msgstr "Nye rapporter til {{COUNCIL}} på reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:23
+#: db/alert_types_eha.pl:20
#, perl-brace-format
msgid "The latest reports for {{COUNCIL}} reported by users"
-msgstr ""
+msgstr "De siste rapporter for {{COUNCIL}} rapportert av brukere"
-#: fixmystreet/db/alert_types_eha.pl:26
+#: db/alert_types_eha.pl:23
#, perl-brace-format
-msgid "New reports for {{COUNCIL}} within {{WARD}} ward on reportemptyhomes.com"
+msgid ""
+"New reports for {{COUNCIL}} within {{WARD}} ward on reportemptyhomes.com"
msgstr ""
+"Nye rapporter for {{COUNCIL}} innenfor {{WARD}} bydel på reportemptyhomes."
+"com"
-#: fixmystreet/db/alert_types_eha.pl:27
+#: db/alert_types_eha.pl:24
#, perl-brace-format
-msgid "The latest reports for {{COUNCIL}} within {{WARD}} ward reported by users"
+msgid ""
+"The latest reports for {{COUNCIL}} within {{WARD}} ward reported by users"
msgstr ""
+"De siste rapporter for {{COUNCIL}} innenfor {{WARD}} bydel rapporter av "
+"brukere"
-#: fixmystreet/db/alert_types_eha.pl:30
+#: db/alert_types_eha.pl:27
#, perl-brace-format
msgid "New reports within {{NAME}}'s boundary on reportemptyhomes.com"
-msgstr ""
+msgstr "Nye rapporter innenfor grensen til {{NAME}} på reportemptyhomes.com"
-#: fixmystreet/db/alert_types_eha.pl:31
+#: db/alert_types_eha.pl:28
#, perl-brace-format
msgid "The latest reports within {{NAME}}'s boundary reported by users"
+msgstr "De siste rapporter innenfor grensen til {{NAME}} rapportert av brukere"
+
+#: db/alert_types.pl:5 db/alert_types.pl:6
+#, perl-brace-format
+msgid "Updates on {{title}}"
+msgstr "Oppdateringer av {{title}}"
+
+#: db/alert_types.pl:7
+#, perl-brace-format
+msgid "Update by {{name}}"
+msgstr "Oppdatert av {{name}}"
+
+#: db/alert_types.pl:10
+msgid "New problems on FixMyStreet"
+msgstr "Nye problemer på Fiksgatami"
+
+#: db/alert_types.pl:11
+msgid "The latest problems reported by users"
+msgstr "De siste problemene rapportert av brukere"
+
+#: db/alert_types.pl:14
+msgid "Problems recently reported fixed on FixMyStreet"
+msgstr "Problemer nylig rapportert fikset på FiksGataMi"
+
+#: db/alert_types.pl:15
+msgid "The latest problems reported fixed by users"
+msgstr "De siste problemer rapporter fikset av brukere"
+
+#: db/alert_types.pl:18 db/alert_types.pl:22
+msgid "New local problems on FixMyStreet"
+msgstr "Nye lokale problemer på FiksGataMi"
+
+#: db/alert_types.pl:19 db/alert_types.pl:23 db/alert_types.pl:27
+#: db/alert_types.pl:31
+msgid "The latest local problems reported by users"
+msgstr "De siste lokale problemer rapporter av brukere"
+
+#: db/alert_types.pl:26
+#, perl-brace-format
+msgid "New problems near {{POSTCODE}} on FixMyStreet"
+msgstr "Nye problemer nær {{POSTCODE}} på FiksGataMi"
+
+#: db/alert_types.pl:30
+#, perl-brace-format
+msgid "New problems NEAR {{POSTCODE}} on FixMyStreet"
+msgstr "Nye problemer nær {{POSTCODE}} på FiksGataMi"
+
+#: db/alert_types.pl:34
+#, perl-brace-format
+msgid "New problems to {{COUNCIL}} on FixMyStreet"
+msgstr "Nye problemer i {{COUNCIL}} på FiksGataMi"
+
+#: db/alert_types.pl:35
+#, perl-brace-format
+msgid "The latest problems for {{COUNCIL}} reported by users"
+msgstr "De siste problemer for {{COUNCIL}} rapportert av brukere"
+
+#: db/alert_types.pl:38
+#, perl-brace-format
+msgid "New problems for {{COUNCIL}} within {{WARD}} ward on FixMyStreet"
+msgstr "Nye problemer for {{COUNCIL}} innenfor {{WARD}} bydel på FiksGataMi"
+
+#: db/alert_types.pl:39
+#, perl-brace-format
+msgid ""
+"The latest problems for {{COUNCIL}} within {{WARD}} ward reported by users"
msgstr ""
+"De siste problemene for {{COUNCIL}} innenfor {{WARD}} bydel rapportert av "
+"brukere"
+
+#: db/alert_types.pl:42
+#, perl-brace-format
+msgid "New problems within {{NAME}}"
+msgstr "Nye problemer innenfor {{NAME}}"
+
+#: db/alert_types.pl:43
+#, perl-brace-format
+msgid "The latest problems within {{NAME}}"
+msgstr "De siste problemer innenfor {{NAME}}"
+
+#: web-admin/index.cgi:68 web-admin/index.cgi:123 web-admin/index.cgi:124
+msgid "Summary"
+msgstr "Oppsummering"
+
+#: web-admin/index.cgi:69 web-admin/index.cgi:182 web-admin/index.cgi:183
+msgid "Council contacts"
+msgstr "Administrasjonskontakter"
+
+#: web-admin/index.cgi:70 web-admin/index.cgi:464
+msgid "Search Reports"
+msgstr "Søk i rapporter"
+
+#: web-admin/index.cgi:71 web-admin/index.cgi:783 web-admin/index.cgi:784
+msgid "Timeline"
+msgstr "Tidslinje"
+
+#: web-admin/index.cgi:84
+msgid "FixMyStreet administration"
+msgstr "Fiksgatami-administrasjon"
+
+#: web-admin/index.cgi:100
+msgid "FixMyStreet admin:"
+msgstr "FiksGataMi-admin:"
+
+#: web-admin/index.cgi:153
+#, perl-format
+msgid "<strong>%d</strong> live problems"
+msgstr "<strong>%d</strong> aktive problemer"
+
+#: web-admin/index.cgi:154
+#, perl-format
+msgid "%d live updates"
+msgstr "%d aktive oppdateringer"
+
+#: web-admin/index.cgi:155
+#, perl-format
+msgid "%d confirmed alerts, %d unconfirmed"
+msgstr "%d bekreftede varsler, %d ubekreftede"
+
+#: web-admin/index.cgi:156
+#, perl-format
+msgid "%d questionnaires sent &ndash; %d answered (%d%%)"
+msgstr "%d spørreskjema sendt &ndash; %d besvart (%d%%)"
+
+#: web-admin/index.cgi:157
+#, perl-format
+msgid "%d council contacts &ndash; %d confirmed, %d unconfirmed"
+msgstr "%d administrasjonskontakter &ndash; %d bekreftet, %d ubekreftet"
+
+#: web-admin/index.cgi:162
+msgid "Graph of problem creation by status over time"
+msgstr "Graf over problemoppretting fordelt på status over tid"
+
+#: web-admin/index.cgi:165
+msgid "Problem breakdown by state"
+msgstr "Tilstandsfordeling for problemer"
+
+#: web-admin/index.cgi:170
+msgid "Update breakdown by state"
+msgstr "Tilstandsfordeling for oppdateringer"
+
+#: web-admin/index.cgi:186
+msgid "Diligency prize league table"
+msgstr "Hvem har endret kontaktlista"
+
+#: web-admin/index.cgi:190
+#, perl-format
+msgid "%d edits by %s"
+msgstr "%d redigeringer av %s"
+
+#: web-admin/index.cgi:193
+msgid "No edits have yet been made."
+msgstr "Ingenting er redigert."
+
+#: web-admin/index.cgi:197
+msgid "Councils"
+msgstr "Administrasjoner"
+
+#: web-admin/index.cgi:211 web-admin/index.cgi:586
+msgid "None"
+msgstr "Ingen"
+
+#: web-admin/index.cgi:223
+#, perl-format
+msgid "%d addresses"
+msgstr "%d adresser"
+
+#: web-admin/index.cgi:229
+msgid "No info at all"
+msgstr "Helt uten informasjon"
+
+#: web-admin/index.cgi:231
+msgid "Currently has 1+ deleted"
+msgstr "For tiden har 1+ slettet"
+
+#: web-admin/index.cgi:233
+msgid "Some unconfirmeds"
+msgstr "Noen ubekreftede"
+
+#: web-admin/index.cgi:235
+msgid "All confirmed"
+msgstr "Alle bekreftet"
+
+#: web-admin/index.cgi:265 web-admin/index.cgi:275 web-admin/index.cgi:292
+msgid "*unknown*"
+msgstr "*ukjent*"
+
+#: web-admin/index.cgi:268 web-admin/index.cgi:296
+msgid "Values updated"
+msgstr "Verdier oppdatert"
+
+#: web-admin/index.cgi:278
+msgid "New category contact added"
+msgstr "Ny kategorikontakt lagt til"
+
+#: web-admin/index.cgi:315 web-admin/index.cgi:398
+#, perl-format
+msgid "Council contacts for %s"
+msgstr "Administrasjonskontakter for %s"
+
+#: web-admin/index.cgi:328
+msgid " List all reported problems"
+msgstr " List alle rapporterte problemer"
+
+#: web-admin/index.cgi:330
+msgid "Text only version"
+msgstr "Tekst-versjon"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:477
+msgid "Category"
+msgstr "Kategori"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438 web-admin/index.cgi:477
+#: web-admin/index.cgi:656
+msgid "Email"
+msgstr "Epost"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:368 web-admin/index.cgi:421
+#: web-admin/index.cgi:438 web-admin/index.cgi:737
+msgid "Confirmed"
+msgstr "Bekreftet"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:370 web-admin/index.cgi:423
+#: web-admin/index.cgi:438
+msgid "Deleted"
+msgstr "Slettet"
+
+#: web-admin/index.cgi:336
+msgid "Last editor"
+msgstr "Sist redigert av"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438
+msgid "Note"
+msgstr "Merk"
+
+#: web-admin/index.cgi:336 web-admin/index.cgi:438
+msgid "When edited"
+msgstr "NÃ¥r redigert"
+
+#: web-admin/index.cgi:336
+msgid "Confirm"
+msgstr "Bekreftet"
+
+#: web-admin/index.cgi:353
+msgid "Update statuses"
+msgstr "Oppdater tilstanden"
+
+#: web-admin/index.cgi:358
+msgid "Add new category"
+msgstr "Legg til ny kategori"
+
+#: web-admin/index.cgi:361 web-admin/index.cgi:415
+msgid "Category: "
+msgstr "Kategori: "
+
+#: web-admin/index.cgi:364 web-admin/index.cgi:418
+msgid "Email: "
+msgstr "Epost: "
+
+#: web-admin/index.cgi:373 web-admin/index.cgi:426
+msgid "Note: "
+msgstr "Merk: "
+
+#: web-admin/index.cgi:380
+msgid "Create category"
+msgstr "Lag kategori"
+
+#: web-admin/index.cgi:432
+msgid "Save changes"
+msgstr "Lagre endringer"
+
+#: web-admin/index.cgi:436
+msgid "History"
+msgstr "Historie"
+
+#: web-admin/index.cgi:438
+msgid "Editor"
+msgstr "Oppdatert av"
+
+#: web-admin/index.cgi:442 web-admin/index.cgi:443
+msgid "yes"
+msgstr "ja"
+
+#: web-admin/index.cgi:442 web-admin/index.cgi:443
+msgid "no"
+msgstr "nei"
+
+#: web-admin/index.cgi:470
+msgid "Search:"
+msgstr "Søk:"
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "ID"
+msgstr "ID"
+
+#: web-admin/index.cgi:477
+msgid "Title"
+msgstr "Tittel"
+
+#: web-admin/index.cgi:477
+msgid "Council"
+msgstr "Administrasjon"
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "Cobrand"
+msgstr ""
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "Created"
+msgstr "Opprettet"
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "State"
+msgstr "Tilstand"
+
+#: web-admin/index.cgi:477
+msgid "When sent"
+msgstr "NÃ¥r sendt"
+
+#: web-admin/index.cgi:477 web-admin/index.cgi:656
+msgid "*"
+msgstr "*"
+
+#: web-admin/index.cgi:499 web-admin/index.cgi:633
+msgid "Confirmed:"
+msgstr "Bekreftet:"
+
+#: web-admin/index.cgi:500
+msgid "Fixed:"
+msgstr "Løst:"
+
+#: web-admin/index.cgi:501
+msgid "Last&nbsp;update:"
+msgstr "Last&nbsp;oppdatering:"
+
+#: web-admin/index.cgi:517 web-admin/index.cgi:675
+msgid "Edit"
+msgstr "Rediger"
+
+#: web-admin/index.cgi:542
+msgid "That problem will now be resent."
+msgstr "Det problemet vil nå bli sendt på nytt."
+
+#: web-admin/index.cgi:548
+msgid "I am afraid you cannot confirm unconfirmed reports."
+msgstr "Jeg er redd du ikke kan bekrefte ubekreftede rapporter."
+
+#: web-admin/index.cgi:577 web-admin/index.cgi:697
+msgid "Updated!"
+msgstr "Oppdatert!"
+
+#: web-admin/index.cgi:581
+#, perl-format
+msgid "Editing problem %d"
+msgstr "Rediger problem %d"
+
+#: web-admin/index.cgi:591
+msgid "used map"
+msgstr "brukte kart"
+
+#: web-admin/index.cgi:591
+msgid "didn't use map"
+msgstr "brukte ikke kart"
+
+#: web-admin/index.cgi:603 web-admin/index.cgi:733
+msgid "Remove photo (can't be undone!)"
+msgstr "Fjern bilde (kan ikke gjøres om!)"
+
+#: web-admin/index.cgi:608
+msgid "Anonymous:"
+msgstr "Anonym:"
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+msgid "State:"
+msgstr "Tilstand:"
+
+#: web-admin/index.cgi:609
+msgid "Open"
+msgstr "Ã…pen"
+
+#: web-admin/index.cgi:609
+msgid "Fixed"
+msgstr "Løst"
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+msgid "Hidden"
+msgstr "Gjemt"
+
+#: web-admin/index.cgi:609 web-admin/index.cgi:737
+msgid "Unconfirmed"
+msgstr "Ubekreftet"
+
+#: web-admin/index.cgi:609
+msgid "Partial"
+msgstr "Delvis"
+
+#: web-admin/index.cgi:612
+msgid "You really want to resend?"
+msgstr "Ønsker du virkelig å sende på nytt?"
+
+#: web-admin/index.cgi:612
+msgid "Resend report"
+msgstr "Send rapport på nytt"
+
+#: web-admin/index.cgi:621
+msgid "View report on site"
+msgstr "Se rapport på nettstedet"
+
+#: web-admin/index.cgi:624
+msgid "Co-ordinates:"
+msgstr "Koordinater:"
+
+#: web-admin/index.cgi:624
+msgid "originally entered"
+msgstr "søkte etter"
+
+#: web-admin/index.cgi:625
+msgid "For council(s):"
+msgstr "For administrasjon(er):"
+
+#: web-admin/index.cgi:625
+msgid "other areas:"
+msgstr "andre områder:"
+
+#: web-admin/index.cgi:632 web-admin/index.cgi:753
+msgid "Created:"
+msgstr "Opprettet:"
+
+#: web-admin/index.cgi:634
+msgid "Sent:"
+msgstr "Sendt:"
+
+#: web-admin/index.cgi:635
+msgid "Last update:"
+msgstr "Siste oppdatering:"
+
+#: web-admin/index.cgi:636
+msgid "Service:"
+msgstr "Tjeneste:"
+
+#: web-admin/index.cgi:637 web-admin/index.cgi:751
+msgid "Cobrand:"
+msgstr ""
+
+#: web-admin/index.cgi:638 web-admin/index.cgi:752
+msgid "Cobrand data:"
+msgstr ""
+
+#: web-admin/index.cgi:639
+msgid "Going to send questionnaire?"
+msgstr "Skal det sendes spørreskjema?"
+
+#: web-admin/index.cgi:643 web-admin/index.cgi:757
+msgid "Submit changes"
+msgstr "Send inn endringer"
+
+#: web-admin/index.cgi:656
+msgid "Text"
+msgstr "Tekst"
+
+#: web-admin/index.cgi:702
+msgid "Problem marked as open."
+msgstr "Problem markert som åpent."
+
+#: web-admin/index.cgi:718
+#, perl-format
+msgid "Editing update %d"
+msgstr "Redigerer oppdatering %d"
+
+#: web-admin/index.cgi:746
+msgid "View update on site"
+msgstr "Vis oppdateringer på nettstedet"
+
+#: web-admin/index.cgi:747
+msgid "Text:"
+msgstr "Tekst:"
+
+#: web-admin/index.cgi:749
+msgid "(blank to go anonymous)"
+msgstr "(blank for å være anonym)"
+
+#: web-admin/index.cgi:830
+#, perl-format
+msgid "by %s"
+msgstr "av %s"
+
+#: web-admin/index.cgi:832
+#, perl-format
+msgid "Problem %d created"
+msgstr "Problem %d opprettet"
+
+#: web-admin/index.cgi:836
+#, perl-format
+msgid "Problem %s confirmed"
+msgstr "Problem %s bekreftet"
+
+#: web-admin/index.cgi:840
+#, perl-format
+msgid "Problem %s sent to council %s"
+msgstr "Problem %s sendt til administrasjon %s"
+
+#: web-admin/index.cgi:842
+#, perl-format
+msgid "Questionnaire %d sent for problem %d"
+msgstr "Spørreskjema %d sendt for problem %d"
+
+#: web-admin/index.cgi:844
+#, perl-format
+msgid "Questionnaire %d answered for problem %d, %s to %s"
+msgstr "Spørreskjema %d fylt inn for problem %d, %s til %s"
+
+#: web-admin/index.cgi:849
+#, perl-format
+msgid "Update %s created for problem %d; by %s"
+msgstr "Oppdatering %s opprettet for problem %d, av %s"
+
+#: web-admin/index.cgi:853
+#, perl-format
+msgid "Alert %d created for %s, type %s, parameters %s / %s"
+msgstr "Varsel %d opprettet for %s, type %s, parameter %s / %s"
+
+#: web-admin/index.cgi:856
+#, perl-format
+msgid "Alert %d disabled (created %s)"
+msgstr "Varsel %d koblet ut (opprettet %s)"
#. Please leave the first word "Subject:" untranslated
-#: fixmystreet/templates/emails/alert-confirm
+#: templates/emails/alert-confirm
msgid ""
"Subject: Confirm your alert on FixMyStreet\n"
"\n"
@@ -1443,18 +2495,18 @@ msgstr ""
"\n"
"Hei,\n"
"\n"
-"Vennligst klikk på linken under for å bekrefte saken du\n"
-"har bedt om å abonnere på FiksGataMi.no:\n"
+"Vennligst klikk på lenken under for å bekrefte varslet du\n"
+"har bedt om å abonnere på FiksGataMi:\n"
"\n"
" <?=$values['url']?>\n"
"\n"
-"Hvis du ikke kan klikke på linken, kan du kopiere den i\n"
-"addresse feltet på dine nettleser.\n"
+"Hvis du ikke kan klikke på lenken, kan du kopiere den i\n"
+"addressefeltet på dine nettleser.\n"
"\n"
"Vennlig Hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
-#: fixmystreet/templates/emails/alert-problem
+#: templates/emails/alert-problem
msgid ""
"Subject: New problems on FixMyStreet\n"
"\n"
@@ -1475,12 +2527,12 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å stå på denne epostlisten,\n"
"klikk på linken: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/alert-problem-area
+#: templates/emails/alert-problem-area
msgid ""
"Subject: New problems in <?=$values['area_name']?> on FixMyStreet\n"
"\n"
@@ -1504,13 +2556,13 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å motta epost om saker som er sendt til\n"
"<?=$values['area_name']?> i fremtiden, klikk på følgende link: \n"
"<?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/alert-problem-council
+#: templates/emails/alert-problem-council
msgid ""
"Subject: New problems reported to <?=$values['area_name']?> on FixMyStreet\n"
"\n"
@@ -1532,13 +2584,13 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å motta epost om saker som er sendt til\n"
"<?=$values['area_name']?> i fremtiden, klikk på følgende link: \n"
"<?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/alert-problem-nearby
+#: templates/emails/alert-problem-nearby
msgid ""
"Subject: New nearby problems on FixMyStreet\n"
"\n"
@@ -1559,14 +2611,15 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å abonnere på epost om problemer i nærheten,\n"
"klikk på følgende link: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/alert-problem-ward
+#: templates/emails/alert-problem-ward
msgid ""
-"Subject: New problems reported to <?=$values['area_name']?> within <?=$values['ward_name']?> on FixMyStreet\n"
+"Subject: New problems reported to <?=$values['area_name']?> within <?=$values"
+"['ward_name']?> on FixMyStreet\n"
"\n"
"The following new problems have been reported to <?=$values['area_name']?>\n"
"within <?=$values['ward_name']?>:\n"
@@ -1580,7 +2633,8 @@ msgid ""
"<?=$values['area_name']?> within <?=$values['ward_name']?>,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Nye saker sendt til <?=$values['area_name']?> innenfor <?=$values['ward_name']?> via FiksGataMi.no\n"
+"Subject: Nye saker sendt til <?=$values['area_name']?> innenfor <?=$values "
+"['ward_name']?> via FiksGataMi.no\n"
"\n"
"Følgende saker er sendt til <?=$values['area_name']?>\n"
"innenfor <?=$values['ward_name']?>:\n"
@@ -1588,14 +2642,13 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å abonnere via epost på saker som er sendt til\n"
"<?=$values['area_name']?> innenfor <?=$values['ward_name']?>,\n"
"klikk på denne linken: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/alert-update
-#, fuzzy
+#: templates/emails/alert-update
msgid ""
"Subject: New updates on problem - '<?=$values['title']?>'\n"
"\n"
@@ -1603,6 +2656,8 @@ msgid ""
"\n"
"<?=$values['data']?>\n"
"\n"
+"<?=$values['state_message']?>\n"
+"\n"
"To view or reply to these updates, please visit the following URL:\n"
" <?=$values['problem_url']?>\n"
"\n"
@@ -1614,26 +2669,27 @@ msgid ""
"To stop receiving emails when there are new updates on this problem,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Oppdateringer på saken - '<?=$values['title']?>'\n"
+"Subject: Nye oppdateringer for problem - '<?=$values['title']?>'\n"
"\n"
-"Følgende oppdateringer er lagt til på saken:\n"
+"Følgende oppdateringer har blitt lagt inn for dette problemet:\n"
"\n"
"<?=$values['data']?>\n"
"\n"
-"For å lese eller svare på disse oppdateringene, klikk på følgende link:\n"
+"<?=$values['state_message']?>\n"
+"\n"
+"For å se på eller svare på disse oppdateringene, besøk denne URLen:\n"
" <?=$values['problem_url']?>\n"
"\n"
-"Svar på denne eposten vil gå til prosjektteamet på FiksGataMi.no, *ikke*\n"
-"til saken og de som leser den.\n"
+"Du kan ikke kontakte noen ved å svare på denne eposten.\n"
"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"Vennlig hilsen,, \n"
+"Fiksgata-laget\n"
"\n"
-"Hvis du ikke ønsker å abonnere på oppdateringer rundt denne saken,\n"
-"klikk på linken: <?=$values['unsubscribe_url']?>\n"
+"For å slutte å motta epost når det er nye oppdateringer om dettte "
+"problemet,\n"
+"følg denne lenken: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/empty property-confirm
-#, fuzzy
+#: templates/emails/empty property-confirm
msgid ""
"Subject: Confirm your empty property report\n"
"\n"
@@ -1656,28 +2712,8 @@ msgid ""
"Yours, \n"
"reportemptyhomes.com\n"
msgstr ""
-"Subject: Bekreftelse på ny sak lagt til på FiksGataMi.no\n"
-"\n"
-"Hi <?=$values['name']?>,\n"
-"\n"
-"Vennligst klikk på linken under for å bekrefte saken du har lagt til\n"
-"på FiksGataMi:\n"
-"\n"
-"<?=$values['url']?>\n"
-"\n"
-"Hvis ditt epost program ikke gir deg mulighet til å klikke på linken,\n"
-"kopier linken inn i nettleseren.\n"
-"\n"
-"Din sak hadde følgende tittel:\n"
-"<?=$values['title']?>\n"
-"\n"
-"Med følgende verdier:\n"
-"<?=$values['detail']?>\n"
-"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
-#: fixmystreet/templates/emails/flickr-confirm
+#: templates/emails/flickr-confirm
msgid ""
"Subject: Confirm your email address on FixMyStreet\n"
"\n"
@@ -1705,9 +2741,9 @@ msgstr ""
"\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
-#: fixmystreet/templates/emails/flickr-submit
+#: templates/emails/flickr-submit
msgid ""
"Subject: New photo pulled from Flickr to FixMyStreet\n"
"\n"
@@ -1734,20 +2770,19 @@ msgstr ""
"\n"
"<?=$values['url']?>\n"
"\n"
-"På denne måten kan vi send bildene til kommunen. Takk!\n"
+"På denne måten kan vi send bildene til administrasjonen. Takk!\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
-#: fixmystreet/templates/emails/partial
-#, fuzzy
+#: templates/emails/partial
msgid ""
"Subject: Confirm your report on FixMyStreet\n"
"\n"
"Hi<?=$values['name']?>,\n"
"\n"
"To confirm the report you have uploaded to FixMyStreet via\n"
-"<?=$values['service'], and to check or add any details,\n"
+"<?=$values['service']?>, and to check or add any details,\n"
"please visit the following URL:\n"
"\n"
"<?=$values['url']?>\n"
@@ -1757,22 +2792,22 @@ msgid ""
"Yours, \n"
"The FixMyStreet team\n"
msgstr ""
-"Subject: Din nye sak på FiksGataMi.no\n"
+"Subject: Bekreft din rapport på FiksGataMi\n"
"\n"
-"Hi<?=$values['name']?>,\n"
+"Hei<?=$values['name']?>,\n"
"\n"
-"Vi har lagret saken som nå lastet opp via\n"
-"<?=$values['service']?>. For å se saken,\n"
-"og redigere eller lese detaljene, gå til følgende link:\n"
+"For å bekrefte rapporten du har lastet opp til FiksGatami via\n"
+"<?=$values['service']?>, og for å sjekke eller legge til litt detaljer,\n"
+"besøk følgende URL:\n"
"\n"
"<?=$values['url']?>\n"
"\n"
-"Vi sender så saken til kommunen. Takk!\n"
+"Takk!\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
-#: fixmystreet/templates/emails/problem-confirm
+#: templates/emails/problem-confirm
msgid ""
"Subject: Confirm your problem on FixMyStreet\n"
"\n"
@@ -1814,9 +2849,9 @@ msgstr ""
"<?=$values['detail']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
-#: fixmystreet/templates/emails/questionnaire
+#: templates/emails/questionnaire
msgid ""
"Subject: Questionnaire about your problem on FixMyStreet\n"
"\n"
@@ -1855,10 +2890,11 @@ msgstr ""
"\n"
" <?=$values['url']?>\n"
"\n"
-"Vennligst ikke svar på denne eposten; det er muligheter for å kommentere i skjema.\n"
+"Vennligst ikke svar på denne eposten; det er muligheter for å kommentere i "
+"skjema.\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Saken du la til var som følger:\n"
"\n"
@@ -1867,8 +2903,7 @@ msgstr ""
"<?=$values['detail']?>\n"
"\n"
-#: fixmystreet/templates/emails/questionnaire-eha-26weeks
-#, fuzzy
+#: templates/emails/questionnaire-eha-26weeks
msgid ""
"Subject: Questionnaire about your empty property report\n"
"\n"
@@ -1876,7 +2911,8 @@ msgid ""
"\n"
"Six months ago, you reported an empty home on ReportEmptyHomes.com with the\n"
"details provided at the end of this email. To keep our site up to date and\n"
-"relevant, I'd be grateful if you could fill in this short questionnaire to tell\n"
+"relevant, I'd be grateful if you could fill in this short questionnaire to "
+"tell\n"
"us what has happened: \n"
"\n"
" <?=$values['url']?>\n"
@@ -1896,34 +2932,8 @@ msgid ""
"<?=$values['detail']?>\n"
"\n"
msgstr ""
-"Subject: Skjema om din sak knyttet til tom eiendom\n"
-"\n"
-"Hi <?=$values['name']?>,\n"
-"\n"
-"Six months ago, you reported an empty home on ReportEmptyHomes.com with the\n"
-"details provided at the end of this email. To keep our site up to date and\n"
-"relevant, I'd be grateful if you could fill in this short questionnaire to tell\n"
-"us what has happened: \n"
-"\n"
-" <?=$values['url']?>\n"
-"\n"
-"Please do not reply to this email; there is a public comment\n"
-"box on the questionnaire.\n"
-"\n"
-"Yours, \n"
-"The Empty Homes Agency\n"
-"\n"
-"Your report was as follows:\n"
-"\n"
-"<?=$values['title']?>\n"
-"\n"
-"Property type: <?=$values['category']?>\n"
-"\n"
-"<?=$values['detail']?>\n"
-"\n"
-#: fixmystreet/templates/emails/questionnaire-eha-4weeks
-#, fuzzy
+#: templates/emails/questionnaire-eha-4weeks
msgid ""
"Subject: Questionnaire about your empty property report\n"
"\n"
@@ -1931,7 +2941,8 @@ msgid ""
"\n"
"Four weeks ago, you reported an empty home on ReportEmptyHomes.com with the\n"
"details provided at the end of this email. To keep our site up to date and\n"
-"relevant, I'd be grateful if you could fill in this short questionnaire to tell\n"
+"relevant, I'd be grateful if you could fill in this short questionnaire to "
+"tell\n"
"us what has happened:\n"
"\n"
" <?=$values['url']?>\n"
@@ -1951,39 +2962,15 @@ msgid ""
"<?=$values['detail']?>\n"
"\n"
msgstr ""
-"Subject: Skjema om din sak knyttet til tom eiendom\n"
-"\n"
-"Hi <?=$values['name']?>,\n"
-"\n"
-"Six months ago, you reported an empty home on ReportEmptyHomes.com with the\n"
-"details provided at the end of this email. To keep our site up to date and\n"
-"relevant, I'd be grateful if you could fill in this short questionnaire to tell\n"
-"us what has happened: \n"
-"\n"
-" <?=$values['url']?>\n"
-"\n"
-"Please do not reply to this email; there is a public comment\n"
-"box on the questionnaire.\n"
-"\n"
-"Yours, \n"
-"The Empty Homes Agency\n"
-"\n"
-"Your report was as follows:\n"
-"\n"
-"<?=$values['title']?>\n"
-"\n"
-"Property type: <?=$values['category']?>\n"
-"\n"
-"<?=$values['detail']?>\n"
-"\n"
-#: fixmystreet/templates/emails/reply-autoresponse
+#: templates/emails/reply-autoresponse
msgid ""
"Subject: Automatic reply to your message to FixMyStreet\n"
"\n"
"Hi,\n"
"\n"
-"This is an automatic response to your email; your email has not been delivered.\n"
+"This is an automatic response to your email; your email has not been "
+"delivered.\n"
"\n"
"If you're replying to an email about a report update, please visit\n"
"the URL given in the email in order to leave a reply. You cannot\n"
@@ -2003,9 +2990,31 @@ msgid ""
"Yours,\n"
"The FixMyStreet team\n"
msgstr ""
+"Subject: Automatisk svar på din melding til FiksGataMi\n"
+"\n"
+"Hei,\n"
+"\n"
+"Dette er et automatisk svar på din epost. Din epost er ikke levert.\n"
+"\n"
+"Hvis du svarer på en epost om en rapportoppdatering, vennligst\n"
+"besøk URLen oppgitt i eposten for å legge igjen et svar. Du kan\n"
+"ikke svare på en oppdatering via epost.\n"
+"\n"
+"Hvis du forsøker å bekrefte noe, som en rapport eller et epostvarsel,\n"
+"så må du klikke på lenken i eposten vi sendte deg, eller, hvis du ikke\n"
+"kan klikke på lenken, kopier og lim den inn i adressefeltet på din "
+"nettleser.\n"
+"\n"
+"Hvis du forsøker å melde deg av et epostvarsel, så er det en\n"
+"avmeldings-lenke i slutten av eposten.\n"
+"\n"
+"Hvis du har et spørsmål eller en kommentar om nettstedet, vennligst send din "
+"epost til fiksgatami@nuug.no\n"
+"\n"
+"Vennlig hilsen,\n"
+"FiksGataMi-gruppen\n"
-#: fixmystreet/templates/emails/submit-brent
-#, fuzzy
+#: templates/emails/submit-brent
msgid ""
"Subject: FMS Problem Report: <?=$values['title']?>\n"
"\n"
@@ -2026,13 +3035,14 @@ msgid ""
"\n"
"Email: <?=$values['email']?>\n"
"\n"
-"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values['title']?>\n"
+"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values"
+"['title']?>\n"
"\n"
"Details: <?=$values['detail']?>\n"
"\n"
-"Easting: <?=$values['easting']?>\n"
+"<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>\n"
"\n"
-"Northing: <?=$values['northing']?>\n"
+"Longitude: <?=$values['longitude']?>\n"
"\n"
"<?=$values['closest_address_machine']?>----------\n"
"\n"
@@ -2041,23 +3051,26 @@ msgid ""
"Yours, \n"
"The FixMyStreet team\n"
"\n"
-"[ This message was sent via FixMyStreet, a project of UKCOD, registered charity\n"
-"number 1076346. If there is a more appropriate email address for messages about\n"
-"<?=$values['category_footer']?>, please let us know by visiting <http://www.fixmystreet.com/contact>.\n"
+"[ This message was sent via FixMyStreet, a project of UKCOD, registered "
+"charity\n"
+"number 1076346. If there is a more appropriate email address for messages "
+"about\n"
+"<?=$values['category_footer']?>, please let us know by visiting <http://www."
+"fixmystreet.com/contact>.\n"
"This will help improve the service for local people. We\n"
"also welcome any other feedback you may have. ]\n"
"\n"
msgstr ""
-"Subject: Sak til kommunen: <?=$values['title']?>\n"
+"Subject: FMS problemrapport: <?=$values['title']?>\n"
"\n"
-"Dear <?=$values['councils_name']?>,\n"
+"Til <?=$values['councils_name']?>,\n"
"\n"
-"<?=$values['missing']?><?=$values['multiple']?>en bruker har gjennom\n"
-"FiksGataMi sendt følgende sak til deres kommune.\n"
-"Saken er av lokal karakter, og derfor sendt til deres kommune.\n"
+"<?=$values['missing']?><?=$values['multiple']?>En bruker av\n"
+"FiksGataMi har sendt inn følgende rappport\n"
+"om et lokalt problem som vi tror trenger deres oppmerksomhet.\n"
"\n"
-"<?=$values['fuzzy']?>, vi setter pris på om dere kan oppdatere saken etter behandling,\n"
-"ved å klikke på følgende link:\n"
+"<?=$values['fuzzy']?>, eller for å bidra med en oppdatering om problemet,\n"
+"vennligst besøk følgende lenke:\n"
"\n"
" <?=$values['url']?>\n"
"\n"
@@ -2067,20 +3080,32 @@ msgstr ""
"\n"
"Epost: <?=$values['email']?>\n"
"\n"
-"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values['title']?>\n"
+"<?=$values['phone_line']?><?=$values['category_line']?>Tema: <?=$values"
+"['title']?>\n"
"\n"
"Detaljer: <?=$values['detail']?>\n"
"\n"
-"<?=$values['closest_address']?>----------\n"
+"<?=$values['easting_northing']?>Breddegrad: <?=$values['latitude']?>\n"
"\n"
-"Svar på denne eposten vil gå til brukeren som har meldt saken.\n"
+"Lengdegrad: <?=$values['longitude']?>\n"
"\n"
-"Med Vennlig Hilsen, \n"
-"The FixMyStreet team\n"
+"<?=$values['closest_address_machine']?>----------\n"
+"\n"
+"Svar på denne eposten vil gå til brukeren som sendte inn problemet.\n"
+"\n"
+"Vennlig hilsen,, \n"
+"Fiksgatami-gruppen\n"
+"\n"
+"[ Denne meldingen ble sendt inn via FiksGataMi, et prosjekt hos foreningen "
+"NUUG.\n"
+"Hvis det er en mer passende epostadresse for meldinger om\n"
+"<?=$values['category_footer']?>, vær så snill å gi oss beskjed ved å besøke\n"
+"<http://www.fiksgatami.no/contact>.\n"
+"Dette vil bidra til å forbedre tjenesten for befolkningen. Vi\n"
+"tar også gjerne imot andre tilbakemeldinger som du har noen. ]\n"
"\n"
-#: fixmystreet/templates/emails/submit-council
-#, fuzzy
+#: templates/emails/submit-council
msgid ""
"Subject: Problem Report: <?=$values['title']?>\n"
"\n"
@@ -2101,10 +3126,15 @@ msgid ""
"\n"
"Email: <?=$values['email']?>\n"
"\n"
-"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values['title']?>\n"
+"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values"
+"['title']?>\n"
"\n"
"Details: <?=$values['detail']?>\n"
"\n"
+"<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>\n"
+"\n"
+"Longitude: <?=$values['longitude']?>\n"
+"\n"
"<?=$values['closest_address']?>----------\n"
"\n"
"Replies to this email will go to the user who submitted the problem.\n"
@@ -2112,23 +3142,26 @@ msgid ""
"Yours, \n"
"The FixMyStreet team\n"
"\n"
-"[ This message was sent via FixMyStreet, a project of UKCOD, registered charity\n"
-"number 1076346. If there is a more appropriate email address for messages about\n"
-"<?=$values['category_footer']?>, please let us know by visiting <http://www.fixmystreet.com/contact>.\n"
+"[ This message was sent via FixMyStreet, a project of UKCOD, registered "
+"charity\n"
+"number 1076346. If there is a more appropriate email address for messages "
+"about\n"
+"<?=$values['category_footer']?>, please let us know by visiting <http://www."
+"fixmystreet.com/contact>.\n"
"This will help improve the service for local people. We\n"
"also welcome any other feedback you may have. ]\n"
"\n"
msgstr ""
-"Subject: Saksrapport: <?=$values['title']?>\n"
+"Subject: Problemrapport: <?=$values['title']?>\n"
"\n"
-"Dear <?=$values['councils_name']?>,\n"
+"Til <?=$values['councils_name']?>,\n"
"\n"
"<?=$values['missing']?><?=$values['multiple']?>En bruker av\n"
-"FiksGataMi har sendt in følgende sak,\n"
-" dette er en lokal sak som kan løses av kommunen.\n"
+"FiksGataMi har sendt inn følgende rapport om et lokalt\n"
+"problem som vi tror trenger deres oppmerksomhet.\n"
"\n"
-"<?=$values['fuzzy']?>, eller komme med innspill i saken,\n"
-"ved å klikke på følgende link:\n"
+"<?=$values['fuzzy']?>, eller for å bidra med en oppdatering om problemet,\n"
+"vennligst besøk følgende lenke:\n"
"\n"
" <?=$values['url']?>\n"
"\n"
@@ -2138,41 +3171,61 @@ msgstr ""
"\n"
"Epost: <?=$values['email']?>\n"
"\n"
-"<?=$values['phone_line']?><?=$values['category_line']?>Subject: <?=$values['title']?>\n"
+"<?=$values['phone_line']?><?=$values['category_line']?>Tema: <?=$values"
+"['title']?>\n"
"\n"
-"Detaljer: <?=$values['detail']?>\n"
+"Detajer: <?=$values['detail']?>\n"
+"\n"
+"<?=$values['easting_northing']?>Breddegrad: <?=$values['latitude']?>\n"
+"\n"
+"Lengegrad: <?=$values['longitude']?>\n"
"\n"
"<?=$values['closest_address']?>----------\n"
"\n"
-"Svar på denne eposten vil gå til den som har meldt inn saken via nettsiden.\n"
+"Svar på denne eposten går til brukeren som sendte inn problemet.\n"
"\n"
-"Med Vennlig Hilsen, \n"
-"FiksGataMi teamet\n"
+"Vennlig hilsen, \n"
+"FiksGataMi-gruppen\n"
+"\n"
+"[ Denne meldingen ble sendt inn via FiksGataMi, et prosjekt hos foreningen "
+"NUUG.\n"
+"Hvis det er en mer passende epostadresse for meldinger om\n"
+"<?=$values['category_footer']?>, vær så snill å gi oss beskjed ved å besøke "
+"<http://www.fiksgatami.no/contact>.\n"
+"Dette vil bidra til å forbedre tjenesten for lokalbefolkningen. Vi\n"
+"tar også gjerne imot andre tilbakemeldinger om du har noen. ]\n"
"\n"
-#: fixmystreet/templates/emails/submit-eha
+#: templates/emails/submit-eha
msgid ""
"Subject: Empty property report\n"
"\n"
"Dear Empty Property Officer,\n"
"\n"
-"This is a new referral of an empty property in your area made by a user of the\n"
-"website ReportEmptyHomes.com; the website user has been told that the case has\n"
-"been referred to you. We would be grateful if you could do whatever you can to\n"
-"help get this property back into use. We will contact the user in a month and\n"
+"This is a new referral of an empty property in your area made by a user of "
+"the\n"
+"website ReportEmptyHomes.com; the website user has been told that the case "
+"has\n"
+"been referred to you. We would be grateful if you could do whatever you can "
+"to\n"
+"help get this property back into use. We will contact the user in a month "
+"and\n"
"again in six months and ask them what has happened to the property. \n"
"\n"
-"We'd encourage you to tell us what you have done, and when the property comes\n"
+"We'd encourage you to tell us what you have done, and when the property "
+"comes\n"
"back into use, by filling in an update against the property referral on the\n"
"website:\n"
"\n"
" <?=$values['url']?>\n"
"\n"
"This gives useful feedback to website users and helps them understand what\n"
-"action you are taking. We will offer advice to the user on other action they\n"
+"action you are taking. We will offer advice to the user on other action "
+"they\n"
"might take if the property isn't successfully dealt with. \n"
"\n"
-"<?=$values['has_photo']?>If you would like help or advice on getting empty properties back into use\n"
+"<?=$values['has_photo']?>If you would like help or advice on getting empty "
+"properties back into use\n"
"there is lots of useful information on the Empty Homes Agency's website\n"
"www.EmptyHomes.com - if you have further questions please give us a call. \n"
"\n"
@@ -2198,7 +3251,7 @@ msgid ""
"\n"
msgstr ""
-#: fixmystreet/templates/emails/tms-confirm
+#: templates/emails/tms-confirm
msgid ""
"Subject: Confirm your expression of interest in TextMyStreet\n"
"\n"
@@ -2216,7 +3269,7 @@ msgid ""
"The FixMyStreet team\n"
msgstr ""
-#: fixmystreet/templates/emails/update-confirm
+#: templates/emails/update-confirm
msgid ""
"Subject: Confirm your update on FixMyStreet\n"
"\n"
@@ -2236,9 +3289,26 @@ msgid ""
"Yours, \n"
"The FixMyStreet team\n"
msgstr ""
+"Subject: Bekreft din oppdatering på FiksGataMi\n"
+"\n"
+"Hei <?=$values['name']?>,\n"
+"\n"
+"Vennligst klikk på lenken under for å bekrefte oppdateringen du skrev "
+"nettopp:\n"
+"\n"
+"<?=$values['url']?>\n"
+"\n"
+"Hvis du ikke kan klikke på lenken, kopier og lim den inn\n"
+"i adressefeltet på din nettleser..\n"
+"\n"
+"Din oppdatering inneholder:\n"
+"\n"
+"<?=$values['update']?>\n"
+"\n"
+"Vennlig hilsen, \n"
+"FiksGataMi-gruppen\n"
-#: fixmystreet/templates/emails/eha/alert-problem
-#, fuzzy
+#: templates/emails/emptyhomes/alert-problem
msgid ""
"Subject: New empty properties on reportemptyhomes.com\n"
"\n"
@@ -2252,22 +3322,11 @@ msgid ""
"To stop receiving emails when there are new properties,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Ny saker på FiksGataMi.no\n"
-"\n"
-"Følgende ny saker er lagt til:\n"
-"\n"
-"<?=$values['data']?>\n"
-"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
-"\n"
-"Hvis du ikke ønsker å stå på denne epostlisten,\n"
-"klikk på linken: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-area
-#, fuzzy
+#: templates/emails/emptyhomes/alert-problem-area
msgid ""
-"Subject: New empty properties in <?=$values['area_name']?> on reportemptyhomes.com\n"
+"Subject: New empty properties in <?=$values['area_name']?> on "
+"reportemptyhomes.com\n"
"\n"
"The following empty properties have been added within\n"
"<?=$values['area_name']?>:\n"
@@ -2281,26 +3340,14 @@ msgid ""
"<?=$values['area_name']?>, please follow this link: \n"
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Nye saker i <?=$values['area_name']?> sendt via FiksGataMi.no\n"
-"\n"
-"Følgende saker er sendt til\n"
-"<?=$values['area_name']?>:\n"
-"\n"
-"<?=$values['data']?>\n"
-"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
-"\n"
-"Hvis du ikke ønsker å motta epost om saker som er sendt til\n"
-"<?=$values['area_name']?> i fremtiden, klikk på følgende link: \n"
-"<?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-council
-#, fuzzy
+#: templates/emails/emptyhomes/alert-problem-council
msgid ""
-"Subject: New empty properties reported to <?=$values['area_name']?> on reportemptyhomes.com\n"
+"Subject: New empty properties reported to <?=$values['area_name']?> on "
+"reportemptyhomes.com\n"
"\n"
-"The following empty properties have been reported to <?=$values['area_name']?>:\n"
+"The following empty properties have been reported to <?=$values['area_name']?"
+">:\n"
"\n"
"<?=$values['data']?>\n"
"\n"
@@ -2311,21 +3358,8 @@ msgid ""
"<?=$values['area_name']?>, please follow this link: \n"
"<?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Nye saker sendt til <?=$values['area_name']?> via FiksGataMi.no\n"
-"\n"
-"Følgende saker er sendt til <?=$values['area_name']?>:\n"
-"\n"
-"<?=$values['data']?>\n"
-"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
-"\n"
-"Hvis du ikke ønsker å motta epost om saker som er sendt til\n"
-"<?=$values['area_name']?> i fremtiden, klikk på følgende link: \n"
-"<?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-nearby
-#, fuzzy
+#: templates/emails/emptyhomes/alert-problem-nearby
msgid ""
"Subject: New nearby empty properties on reportemptyhomes.com\n"
"\n"
@@ -2339,24 +3373,14 @@ msgid ""
"To stop receiving emails when there are nearby properties,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Nye saker i nærheten på FiksGataMi.no\n"
-"\n"
-"Følgende saker i nærheten er sendt via FiksGataMi.no:\n"
-"\n"
-"<?=$values['data']?>\n"
-"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
-"\n"
-"Hvis du ikke ønsker å abonnere på epost om problemer i nærheten,\n"
-"klikk på følgende link: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-problem-ward
-#, fuzzy
+#: templates/emails/emptyhomes/alert-problem-ward
msgid ""
-"Subject: New empty properties reported to <?=$values['area_name']?> within <?=$values['ward_name']?> on reportemptyhomes.com\n"
+"Subject: New empty properties reported to <?=$values['area_name']?> within <?"
+"=$values['ward_name']?> on reportemptyhomes.com\n"
"\n"
-"The following empty properties have been reported to <?=$values['area_name']?>\n"
+"The following empty properties have been reported to <?=$values['area_name']?"
+">\n"
"within <?=$values['ward_name']?>:\n"
"\n"
"<?=$values['data']?>\n"
@@ -2368,22 +3392,8 @@ msgid ""
"<?=$values['area_name']?> within <?=$values['ward_name']?>,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Nye saker sendt til <?=$values['area_name']?> innenfor <?=$values['ward_name']?> via FiksGataMi.no\n"
-"\n"
-"Følgende saker er sendt til <?=$values['area_name']?>\n"
-"innenfor <?=$values['ward_name']?>:\n"
-"\n"
-"<?=$values['data']?>\n"
-"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
-"\n"
-"Hvis du ikke ønsker å abonnere via epost på saker som er sendt til\n"
-"<?=$values['area_name']?> innenfor <?=$values['ward_name']?>,\n"
-"klikk på denne linken: <?=$values['unsubscribe_url']?>\n"
-#: fixmystreet/templates/emails/eha/alert-update
-#, fuzzy
+#: templates/emails/emptyhomes/alert-update
msgid ""
"Subject: New updates on empty property- '<?=$values['title']?>'\n"
"\n"
@@ -2399,177 +3409,3 @@ msgid ""
"To stop receiving emails when there are new updates on this property,\n"
"please follow this link: <?=$values['unsubscribe_url']?>\n"
msgstr ""
-"Subject: Oppdateringer på saken - '<?=$values['title']?>'\n"
-"\n"
-"Følgende oppdateringer er lagt til på saken:\n"
-"\n"
-"<?=$values['data']?>\n"
-"\n"
-"For å lese eller svare på disse oppdateringene, klikk på følgende link:\n"
-" <?=$values['problem_url']?>\n"
-"\n"
-"Svar på denne eposten vil gå til prosjektteamet på FiksGataMi.no, *ikke*\n"
-"til saken og de som leser den.\n"
-"\n"
-"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
-"\n"
-"Hvis du ikke ønsker å abonnere på oppdateringer rundt denne saken,\n"
-"klikk på linken: <?=$values['unsubscribe_url']?>\n"
-
-#~ msgid "problem"
-#~ msgstr "problem"
-
-#~ msgid "What is FixMyStreet for?"
-#~ msgstr "Hva løser fiksgatami.no"
-
-#~ msgid ""
-#~ "FixMyStreet is a site to help people report, view,\n"
-#~ "or discuss local problems they&rsquo;ve found to their local council by\n"
-#~ "simply locating them on a map. It launched in early February\n"
-#~ "2007."
-#~ msgstr ""
-#~ "FiksGataMi er en nettside for å hjelpe mennesker som ønsker å rapportere, undersøke,\n"
-#~ "eller diskutere lokale problemer/saker de&rsquo; som vi sender til din lokale kommune\n"
-#~ "dette gjennom at brukerne markerer problemet/saken på et kart. Tjenesten etableres april\n"
-#~ "2009."
-
-#~ msgid "Can you give me some examples?"
-#~ msgstr "Kan du gi noen eksempler?"
-
-#~ msgid ""
-#~ "Sure. Graffiti, unlit lampposts, abandoned beds, broken\n"
-#~ "glass on a cycle path; anything like that that could be usefully reported to\n"
-#~ "your council to be fixed."
-#~ msgstr ""
-#~ "Graffiti, tagging, forlatte biler, knust glass\n"
-#~ "hull i veien; alle disse typen saker kan du meldetil\n"
-#~ "din kommune."
-
-#~ msgid "How do I use the site?"
-#~ msgstr "Hvordan bruker jeg nettsiden?"
-
-#~ msgid ""
-#~ "After entering a postcode or location, you are presented\n"
-#~ "with a map of that area. You can view problems already reported in that area,\n"
-#~ "or report ones of your own simply by clicking on the map at the location of\n"
-#~ "the problem."
-#~ msgstr "Ved å ha lagt inn en lokasjon vil du få et kart over området. Du kan se andre saker i området, eller rapportere din egen sak ganske enkelte ved å klikke på kartet der du saken hører hjemme. "
-
-#~ msgid "How are the problems solved?"
-#~ msgstr "Hvordan er problemet løst?"
-
-#~ msgid ""
-#~ "They are reported to the relevant council by email. The\n"
-#~ "council can then resolve the problem the way they normally would.\n"
-#~ "Alternatively, you can discuss the problem on the website with others, and\n"
-#~ "then together lobby the council to fix it, or fix it directly yourselves."
-#~ msgstr ""
-#~ "De er rapportert til den riktige kommunen via epost. Kommunen\n"
-#~ "saken i henhold til deres prosedyrer og reglere.\n"
-#~ "Det er også et alternativ å løse saken selv, eller henvende deg til kommunen via en anne kanal."
-
-#~ msgid "Is it free?"
-#~ msgstr "Er dette gratis?"
-
-#~ msgid ""
-#~ "The site is free to use, yes. FixMyStreet is run\n"
-#~ "by a registered charity, though, so if you want to make a contribution, <a\n"
-#~ "href=\"https://secure.mysociety.org/donate/\">please do</a>."
-#~ msgstr ""
-#~ "Nettsiden er gratis å bruke. FiksGataMi.no er drevet\n"
-#~ "av frivillige, du kan donere hvis du ønsker det, <a\n"
-#~ "href=\"https://secure.mysociety.org/donate/\">klikke her</a>."
-
-#~ msgid "Practical Questions"
-#~ msgstr "Praktiske spørsmål"
-
-#~ msgid "I'm from a council, where do you send the reports?"
-#~ msgstr "Jeg representerer kommunen, hvor sender dere sakene?"
-
-#~ msgid "Do you remove silly or illegal content?"
-#~ msgstr "Fjerner du usaklig eller ulovlig innhold?"
-
-#~ msgid ""
-#~ "We reserve the right to remove any problems or updates\n"
-#~ "which we consider to be inappropriate."
-#~ msgstr ""
-#~ "Vi forbeholder oss retten til å fjerne alle elementer\n"
-#~ "vi finner upassende."
-
-#~ msgid "Why doesn't dragging the map work on reporting-a-problem pages in Safari or Konqueror?"
-#~ msgstr "Hvorfor fungerer ikke drag-dropp i Safari eller Konqueror?"
-
-#~ msgid "Do you have any publicity material?"
-#~ msgstr "Har du noe offentlig materiale="
-
-#~ msgid "Privacy Questions"
-#~ msgstr "Spørsmål som er personsensitivt"
-
-#~ msgid "Who gets to see my email address?"
-#~ msgstr "Hvem kan se min epostadresse?"
-
-#, fuzzy
-#~ msgid ""
-#~ "If you submit a problem, we pass on your details, and details\n"
-#~ "of the problem, to the council contact or contacts responsible for the\n"
-#~ "area where you located the problem. Your name is displayed upon the\n"
-#~ "site if you let us, but not your email address; similarly with updates. We will\n"
-#~ "never give or sell your email address to anyone else, unless we are\n"
-#~ "obliged to by law."
-#~ msgstr ""
-#~ "NÃ…r du melder problemet sender vi saken videre, med ditt navn og epost adresse\n"
-#~ ", beskrivelsen av saken til kommunen. \n"
-#~ "Ditt navn blir kun synlig hvis du gir oss bekreftlse på dette når du lager saken\n"
-#~ "Din eostadresse blir ikke lagt ut på nettsiden. "
-
-#~ msgid "Will you send nasty, brutish spam to my email address?"
-#~ msgstr "Kommer dere til å sende spam via epost?"
-
-#~ msgid ""
-#~ "Never. We will email you if someone leaves an update on a\n"
-#~ "problem you&rsquo;ve reported, and send you a questionnaire email four weeks\n"
-#~ "after you submit a problem, asking for a status update; we&rsquo;ll only ever\n"
-#~ "send you emails in relation to your problem."
-#~ msgstr ""
-#~ "Det vil aldri skje! Vi sender deg en epost hvis noen oppdaterer saken a\n"
-#~ " du&rsquo; har meldt, og sende det et skjema fire weeks\n"
-#~ "etter at du har meldt saken, dette gjør vi for å få en status på saken; vi&rsquo; vil utelukkende \n"
-#~ "sende sende deg epost i forbindelse med din sak."
-
-#~ msgid "Organisation Questions"
-#~ msgstr "Spørsmål om organisasjonen"
-
-#~ msgid "Who built FixMyStreet?"
-#~ msgstr "Hvorfor lanserte vi FiksGataMi"
-
-#~ msgid ""
-#~ "FixMyStreet was paid for via the Department for\n"
-#~ "Constitutional Affairs Innovations Fund."
-#~ msgstr ""
-#~ "FixMyStreet, som FiksGataMi er basert på, ble finansiert av the Department for\n"
-#~ "Constitutional Affairs Innovations Fund. Det norske prosjektet er drevet av frivillige."
-
-#~ msgid "Do you need any help with the project?"
-#~ msgstr "Trenger dere hjelp med ditt prosjekt?"
-
-#~ msgid ""
-#~ "Yes, we can use help in all sorts of ways, technical or\n"
-#~ "non-technical. Please see our <a\n"
-#~ "href=\"http://www.mysociety.org/volunteertasks\">volunteers page</a>."
-#~ msgstr ""
-#~ "Ja, vi trenger hjelp på flere måter, teknisk eller\n"
-#~ "ikketeknisk. Se vår <a\n"
-#~ "href=\"http://www.mysociety.org/volunteertasks\">side for frivillige.</a>."
-
-#~ msgid "Where&rsquo;s the \"source code\" to this site?"
-#~ msgstr "Hvor finner man kildekoden til prosjektet?"
-
-#~ msgid ""
-#~ "The software behind this site is open source, and available\n"
-#~ "to you mainly under the GNU Affero GPL software license. You can <a\n"
-#~ "href=\"http://github.com/mysociety/fixmystreet\">download the\n"
-#~ "source code</a> and help us develop it.\n"
-#~ "You&rsquo;re welcome to use it in your own projects, although you must also\n"
-#~ "make available the source code to any such projects."
-#~ msgstr "Programvaren er lagt ut under en fri lisens, du finner koden ved å gå på: "
diff --git a/notes/INSTALL b/notes/INSTALL
new file mode 100644
index 000000000..fcb1f5579
--- /dev/null
+++ b/notes/INSTALL
@@ -0,0 +1,110 @@
+# INSTALLING FROM SCRATCH
+
+# mySociety applications are intended to be run on a Debian system. Other Linux
+# distributions may well work but may also require some tweaking.
+
+# This document assumes that you are starting with a bare Debian Lenny box and
+# that you want to install the latest code from GitHub. For some step you will
+# need root access (via sudo)
+
+
+
+# GETTING THE CODE
+
+
+# bring your system up-to-date
+# FIXME - ???should we specify any extras apt sources???
+sudo apt-get update
+sudo apt-get upgrade
+
+# ensure that you have 'git' installed
+sudo apt-get install git-core
+
+# fetch the FixMyStreet code from GitHub:
+git clone https://github.com/mysociety/fixmystreet.git
+
+# fetch the submodules too
+cd fixmystreet
+git submodule update --init
+
+
+# SETTING UP SYSTEM
+
+# change into project directory
+cd ~/fixmystreet
+
+# check that you have all the packages needed. mySociety projects always have a
+# file in 'conf/packages' where any debian ones needed are listed
+sudo apt-get install `cat conf/packages`
+
+# also install these that are available by default on mySoc boxes:
+sudo apt-get install \
+ libregexp-common-perl php5-cli perl-doc libtest-exception-perl
+
+
+# SETTING UP APACHE
+
+cd /etc/apache2
+
+# there is an apache config file in 'conf/httpd.conf' - insert it as per sample
+# config at top of file into your /etc/apache2/ config setup
+sudo nano sites-available/fixmystreet
+sudo ln -s ../sites-available/fixmystreet sites-enabled/
+
+# you may need to enable some modules too
+sudo ln -s ../mods-available/rewrite.load mods-enabled/
+sudo ln -s ../mods-available/proxy.load mods-enabled/
+sudo ln -s ../mods-available/proxy_http.load mods-enabled/
+
+# check the config and restart apache
+sudo apache2ctl configtest
+sudo apache2ctl restart
+
+cd -
+
+# You may need to change the permissions on your files so that apache can read them
+
+
+# SETTING UP EMAIL SENDING
+
+# FixMyStreet sends lots of email - your dev server should be able to deliver
+# them. If you're running a virtual machine consider sending all email via
+# Gmail by replacing exim with ssmtp.
+apt-get install ssmtp # will probably uninstall existing MTA
+apt-get install mailx # for testing email is working
+
+nano /etc/ssmtp/ssmtp.conf # see http://wiki.debian.org/sSMTP for details
+mail youremail@example.com # send a test message
+
+# SETTING UP CONFIG FILES
+
+# the setup is configured using the file 'conf/general' - copy the example one and then edit it
+cp conf/general-example conf/general
+nano conf/general
+
+# You may need to alter:
+# * the database connection details
+# * the OPTION_BASE_URL to be where your test site will run - eg 'http://localhost'
+# * the OPTION_EVEL_URL to '' - this will cause some emails not to be sent but warned to STDERR instead - proper email handling is being worked on
+# * the OPTION_SMTP_SMARTHOST to '' if routing mail via ssmtp as described above - otherwise your SMTP server
+# * set OPTION_EMAIL_VHOST to the same as OPTION_BASE_URL minus the 'http://' - eg 'localhost'
+# * set OPTION_UPLOAD_CACHE and OPTION_GEO_CACHE to your preferred values
+# * set OPTION_COUNTRY to your ISO3166 alpha2 code ('GB' for the United Kingdom: http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
+
+# SETTING UP THE DATABASES
+
+# create your own db user (as a superuser to make things easier)
+sudo su - postgres
+createuser -s your_username
+exit
+
+# You'll need to create a database, enable plpgsql and load in the schema
+createdb -E SQL_ASCII bci
+createlang plpgsql bci
+psql bci < db/schema.sql
+psql bci < db/alert_types.sql
+
+
+# LOOK AT THE SITE IN YOUR BROWSER
+
+# everything should now be set up - please try to load the site in your browser
diff --git a/notes/code_structure.txt b/notes/code_structure.txt
new file mode 100644
index 000000000..8c01fba8b
--- /dev/null
+++ b/notes/code_structure.txt
@@ -0,0 +1,11 @@
+The code is broken down into the following sections:
+
+website: code to display the website and handle user submissions
+
+backend: send alerts to the councils, work out who should get the alert, various
+confirmtaion emails
+
+mobile apps: currently for iPhone and Android - two separate apps
+
+utility scripts: odds and ends - eg importing photos from Flickr tagged
+'fixmystreet'
diff --git a/notes/glossary.txt b/notes/glossary.txt
new file mode 100644
index 000000000..0c533a944
--- /dev/null
+++ b/notes/glossary.txt
@@ -0,0 +1,12 @@
+Unfamiliar terms that you may come across in the code:
+
+
+BCI: Broken Civic Infrastructure - project name before it became FixMyStreet -
+still to be found used in some config variable names
+
+MaPit: The mySociety database and web service that maps postcodes and points to
+current or past administrative area information and polygons for all the United
+Kingdom. http://mapit.mysociety.org/
+
+EvEl: A generic email sending and mailing list functionality, with bounce
+detection: https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/EvEl
diff --git a/notes/osgb36_to_wgs84_notes.txt b/notes/osgb36_to_wgs84_notes.txt
new file mode 100644
index 000000000..3deca19de
--- /dev/null
+++ b/notes/osgb36_to_wgs84_notes.txt
@@ -0,0 +1,77 @@
+These notes are for the FMS migration from OSGB36 to WGS84 coordinates.
+
+Reference:
+
+ easting === longitude
+ northing === latitude
+
+ http://en.wikipedia.org/wiki/Ordnance_Survey_National_Grid
+ http://en.wikipedia.org/wiki/World_Geodetic_System
+
+DB:
+
+ * dump schema from live db and confirm it matches schema.sql (you never know...)
+ DONE: use PledgeBank's 'nearby' logic in problem_find_nearby() SQL function
+ DONE: in 'alerts' table convert parameter and parameter2 if alert is 'local_problems' or 'local_problems_state'
+
+CODE:
+
+ DONE: update all calls to problem_find_nearby swapping parameter order.
+ * find all occurences of 'easting', 'northing', $e, $n etc and migrate
+
+ * email me link broken on http://herring/?lat=51.4545595517093;lon=-0.23100115932431
+
+ * Cobrand.pm
+ * Cobrands/Barnet/Util.pm
+ * Cobrands/Emptyhomes/Util.pm
+ * CronFns.pm
+ * CrossSell.pm
+ * EastHantsWSDL.pm
+ * FixMyStreet/Alert.pm
+ * FixMyStreet/Geocode.pm
+ * FixMyStreet/Map.pm
+ * FixMyStreet/Map/Bing.pm
+ * FixMyStreet/Map/BingOL.pm
+ * FixMyStreet/Map/Google.pm
+ * FixMyStreet/Map/OSM.pm
+ * FixMyStreet/Map/OSM/CycleMap.pm
+ * FixMyStreet/Map/OSM/StreetView.pm
+ * FixMyStreet/Map/Tilma/OL/1_10k.pm
+ * FixMyStreet/Map/Tilma/OL/StreetView.pm
+ * FixMyStreet/Map/Tilma/Original.pm
+ * FixMyStreet/Map/Tilma/Original/1_10k.pm
+ * FixMyStreet/Map/Tilma/Original/StreetView.pm
+ * Memcached.pm
+ * Page.pm
+ * PoChange.pm
+ * Problems.pm
+ * Standard.pm
+ * Utils.pm
+
+ * web/about.cgi
+ * web/ajax.cgi
+ * web/alert.cgi
+ * web/confirm.cgi
+ * web/contact.cgi
+ * web/faq.cgi
+ * web/flickr.cgi
+ * web/fun.cgi
+ * web/import.cgi
+ * web/index.cgi
+ * web/json.cgi
+ * web/photo.cgi
+ * web/questionnaire.cgi
+ * web/reports.cgi
+ * web/rss.cgi
+ * web/test.cgi
+ * web/tms-signup.cgi
+ * web/upload.cgi
+
+ DONE: all scripts checked
+
+UI maps:
+
+ * Tilma js code will still need eastings and northings
+ * All other maps should be able to switch to latlon
+
+
diff --git a/perllib/Carp/Always.pm b/perllib/Carp/Always.pm
new file mode 100644
index 000000000..68bcaee52
--- /dev/null
+++ b/perllib/Carp/Always.pm
@@ -0,0 +1,162 @@
+
+package Carp::Always;
+
+use 5.006;
+use strict;
+use warnings;
+
+our $VERSION = '0.09';
+
+use Carp qw(verbose); # makes carp() cluck and croak() confess
+
+sub _warn {
+ if ($_[-1] =~ /\n$/s) {
+ my $arg = pop @_;
+ $arg =~ s/ at .*? line .*?\n$//s;
+ push @_, $arg;
+ }
+ warn &Carp::longmess;
+}
+
+sub _die {
+ if ($_[-1] =~ /\n$/s) {
+ my $arg = pop @_;
+ $arg =~ s/ at .*? line .*?\n$//s;
+ push @_, $arg;
+ }
+ die &Carp::longmess;
+}
+
+my %OLD_SIG;
+
+BEGIN {
+ @OLD_SIG{qw(__DIE__ __WARN__)} = @SIG{qw(__DIE__ __WARN__)};
+ $SIG{__DIE__} = \&_die;
+ $SIG{__WARN__} = \&_warn;
+}
+
+END {
+ @SIG{qw(__DIE__ __WARN__)} = @OLD_SIG{qw(__DIE__ __WARN__)};
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Carp::Always - Warns and dies noisily with stack backtraces
+
+=head1 SYNOPSIS
+
+ use Carp::Always;
+
+makes every C<warn()> and C<die()> complains loudly in the calling package
+and elsewhere. More often used on the command line:
+
+ perl -MCarp::Always script.pl
+
+=head1 DESCRIPTION
+
+This module is meant as a debugging aid. It can be
+used to make a script complain loudly with stack backtraces
+when warn()ing or die()ing.
+
+Here are how stack backtraces produced by this module
+looks:
+
+ # it works for explicit die's and warn's
+ $ perl -MCarp::Always -e 'sub f { die "arghh" }; sub g { f }; g'
+ arghh at -e line 1
+ main::f() called at -e line 1
+ main::g() called at -e line 1
+
+ # it works for interpreter-thrown failures
+ $ perl -MCarp::Always -w -e 'sub f { $a = shift; @a = @$a };' \
+ -e 'sub g { f(undef) }; g'
+ Use of uninitialized value in array dereference at -e line 1
+ main::f('undef') called at -e line 2
+ main::g() called at -e line 2
+
+In the implementation, the C<Carp> module does
+the heavy work, through C<longmess()>. The
+actual implementation sets the signal hooks
+C<$SIG{__WARN__}> and C<$SIG{__DIE__}> to
+emit the stack backtraces.
+
+Oh, by the way, C<carp> and C<croak> when requiring/using
+the C<Carp> module are also made verbose, behaving
+like C<cloak> and C<confess>, respectively.
+
+=head2 EXPORT
+
+Nothing at all is exported.
+
+=head1 ACKNOWLEDGMENTS
+
+This module was born as a reaction to a release
+of L<Acme::JavaTrace> by Sébastien Aperghis-Tramoni.
+Sébastien also has a newer module called
+L<Devel::SimpleTrace> with the same code and fewer flame
+comments on docs. The pruning of the uselessly long
+docs of this module were prodded by Michael Schwern.
+
+Schwern and others told me "the module name stinked" -
+it was called C<Carp::Indeed>. After thinking long
+and not getting nowhere, I went with nuffin's suggestion
+and now it is called C<Carp::Always>.
+C<Carp::Indeed> which is now deprecate
+lives in its own distribution (which won't go anywhere
+but will stay there as a redirection to this module).
+
+=head1 SEE ALSO
+
+=over 4
+
+=item *
+
+L<Carp>
+
+=item *
+
+L<Acme::JavaTrace> and L<Devel::SimpleTrace>
+
+=back
+
+Please report bugs via CPAN RT
+http://rt.cpan.org/NoAuth/Bugs.html?Dist=Carp-Always.
+
+=head1 BUGS
+
+Every (un)deserving module has its own pet bugs.
+
+=over 4
+
+=item *
+
+This module does not play well with other modules which fusses
+around with C<warn>, C<die>, C<$SIG{'__WARN__'}>,
+C<$SIG{'__DIE__'}>.
+
+=item *
+
+Test scripts are good. I should write more of these.
+
+=item *
+
+I don't know if this module name is still a bug as it was
+at the time of C<Carp::Indeed>.
+
+=back
+
+=head1 AUTHOR
+
+Adriano Ferreira, E<lt>ferreira@cpan.orgE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2005-2007 by Adriano R. Ferreira
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
diff --git a/perllib/Cobrand.pm b/perllib/Cobrand.pm
index 328445fcc..fa2dd9e88 100644
--- a/perllib/Cobrand.pm
+++ b/perllib/Cobrand.pm
@@ -41,7 +41,7 @@ my %fns = (
# Return the base url for the cobranded version of the site
'base_url' => { default => "mySociety::Config::get('BASE_URL')" },
# Return the text that prompts the user to enter their postcode/place name. Parameter is QUERY
- 'enter_postcode_text' => { default => '_("Enter a nearby GB postcode, or street name and area:")' },
+ 'enter_postcode_text' => { default => '""' },
# Set the language and domain of the site based on the cobrand and host
'set_lang_and_domain' => { default => '\&default_set_lang_and_domain' },
# Return HTML for a list of alert options for the cobrand, given QUERY and OPTIONS.
@@ -55,7 +55,7 @@ my %fns = (
'front_stats' => { default => '\&Problems::front_stats' },
# Given a STRING ($_[1]) representing a location and a QUERY, return a string that
# includes any disambiguating information available
- 'disambiguate_location' => { default => '$_[1]' },
+ 'disambiguate_location' => { default => '"$_[1]&gl=uk"' },
# Parameter is EPOCHTIME
'prettify_epoch' => { default => '0' },
# Parameters are FORM_NAME, QUERY. Return HTML for any extra needed elements for FORM_NAME
@@ -116,6 +116,9 @@ my %fns = (
'admin_pages' => { default => '0' },
# Show the problem creation graph in the admin interface
'admin_show_creation_graph' => { default => '1' },
+ # The MaPit types this site handles
+ 'area_types' => { default => '[qw(DIS LBO MTD UTA CTY COI)]' },
+ 'area_min_generation' => { default => '10' },
);
foreach (keys %fns) {
diff --git a/perllib/Cobrands/Barnet/Util.pm b/perllib/Cobrands/Barnet/Util.pm
index 32973c10c..0e5ddcf68 100644
--- a/perllib/Cobrands/Barnet/Util.pm
+++ b/perllib/Cobrands/Barnet/Util.pm
@@ -54,7 +54,7 @@ sub site_title {
sub enter_postcode_text {
my ($self,$q) = @_;
- return 'Enter a Barnet postcode, or street name and area:';
+ return 'Enter a Barnet postcode, or street name and area';
}
=item council_check COUNCILS QUERY CONTEXT
@@ -69,9 +69,9 @@ sub council_check {
my $councils;
if ($params->{all_councils}) {
$councils = $params->{all_councils};
- } elsif ($params->{e}) {
+ } elsif (defined $params->{lat}) {
my $parent_types = $mySociety::VotingArea::council_parent_types;
- $councils = mySociety::MaPit::call('point', "27700/$params->{e},$params->{n}", type => $parent_types);
+ $councils = mySociety::MaPit::call('point', "4326/$params->{lon},$params->{lat}", type => $parent_types);
}
my $council_match = defined $councils->{2489};
if ($council_match) {
@@ -104,9 +104,9 @@ sub disambiguate_location {
}
sub recent_photos {
- my ($self, $num, $e, $n, $dist) = @_;
+ my ($self, $num, $lat, $lon, $dist) = @_;
$num = 2 if $num == 3;
- return Problems::recent_photos($num, $e, $n, $dist);
+ return Problems::recent_photos($num, $lat, $lon, $dist);
}
1;
diff --git a/perllib/Cobrands/Emptyhomes/Util.pm b/perllib/Cobrands/Emptyhomes/Util.pm
index acb870695..d23857f50 100644
--- a/perllib/Cobrands/Emptyhomes/Util.pm
+++ b/perllib/Cobrands/Emptyhomes/Util.pm
@@ -33,6 +33,10 @@ sub admin_base_url {
return 'https://secure.mysociety.org/admin/emptyhomes/';
}
+sub area_types {
+ return qw(DIS LBO MTD UTA LGD COI); # No CTY
+}
+
=item set_lang_and_domain LANG UNICODE
Set the language and text domain for the site based on the query and host.
diff --git a/perllib/Cobrands/Fiksgatami/Util.pm b/perllib/Cobrands/Fiksgatami/Util.pm
new file mode 100644
index 000000000..2abc03d00
--- /dev/null
+++ b/perllib/Cobrands/Fiksgatami/Util.pm
@@ -0,0 +1,62 @@
+#!/usr/bin/perl -w
+#
+# Util.pm:
+# Fiksgatami cobranding for FixMyStreet.
+#
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org. WWW: http://www.mysociety.org
+
+package Cobrands::Fiksgatami::Util;
+use strict;
+use Carp;
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+
+sub set_lang_and_domain {
+ my ($self, $lang, $unicode) = @_;
+ mySociety::Locale::negotiate_language('en-gb,English,en_GB|nb,Norwegian,nb_NO', 'nb');
+ mySociety::Locale::gettext_domain('FixMyStreet', $unicode);
+ mySociety::Locale::change();
+}
+
+# If lat/lon are present in the URL, OpenLayers will use that to centre the map.
+# Need to specify a zoom to stop it defaulting to null/0.
+sub url {
+ my ($self, $url) = @_;
+ if ($url =~ /lat=/ && $url !~ /zoom=/) {
+ $url .= ';zoom=2';
+ }
+ return $url;
+}
+
+sub enter_postcode_text {
+ my ($self, $q) = @_;
+ return _('Enter a nearby postcode, or street name and area');
+}
+
+# Is also adding language parameter
+sub disambiguate_location {
+ my ($self, $s, $q) = @_;
+ $s = "hl=no&gl=no&$s";
+ return $s;
+}
+
+sub geocoded_string_check {
+ my ($self, $s) = @_;
+ return 1 if $s =~ /, Norge/;
+ return 0;
+}
+
+sub area_types {
+ return ( 'NKO', 'NFY' );
+}
+
+sub area_min_generation {
+ return '';
+}
+
+1;
+
diff --git a/perllib/Cobrands/Southampton/Util.pm b/perllib/Cobrands/Southampton/Util.pm
new file mode 100644
index 000000000..ee7d8e728
--- /dev/null
+++ b/perllib/Cobrands/Southampton/Util.pm
@@ -0,0 +1,113 @@
+#!/usr/bin/perl -w
+#
+# Util.pm:
+# Southampton cobranding for FixMyStreet.
+#
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org. WWW: http://www.mysociety.org
+
+package Cobrands::Southampton::Util;
+use strict;
+use Carp;
+use URI::Escape;
+use mySociety::VotingArea;
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+
+=item site_restriction Q
+
+Return a site restriction clause and a site key.
+
+=cut
+sub site_restriction {
+ return ("and council='2567'", 'southampton');
+}
+
+=item
+
+Return the base url for this cobranded site
+
+=cut
+
+sub base_url {
+ my $base_url = mySociety::Config::get('BASE_URL');
+ if ($base_url !~ /southampton/) {
+ $base_url =~ s/http:\/\/(?!www\.)/http:\/\/southampton\./g;
+ $base_url =~ s/http:\/\/www\./http:\/\/southampton\./g;
+ }
+ return $base_url;
+}
+
+=item site_title
+
+Return the title to be used in page heads
+
+=cut
+
+sub site_title {
+ my ($self) = @_;
+ return 'Southampton City Council FixMyStreet';
+}
+
+sub enter_postcode_text {
+ my ($self,$q) = @_;
+ return 'Enter a Southampton postcode, or street name and area';
+}
+
+=item council_check COUNCILS QUERY CONTEXT
+
+Return a boolean indicating whether COUNCILS are okay for the location
+in the QUERY, and an error message appropriate to the CONTEXT.
+
+=cut
+
+sub council_check {
+ my ($self, $params, $q, $context) = @_;
+ my $councils;
+ if ($params->{all_councils}) {
+ $councils = $params->{all_councils};
+ } elsif (defined $params->{lat}) {
+ my $parent_types = $mySociety::VotingArea::council_parent_types;
+ $councils = mySociety::MaPit::call('point', "4326/$params->{lon},$params->{lat}", type => $parent_types);
+ }
+ my $council_match = defined $councils->{2567};
+ if ($council_match) {
+ return 1;
+ }
+ my $url = 'http://www.fixmystreet.com/';
+ $url .= 'alert' if $context eq 'alert';
+ $url .= '?pc=' . URI::Escape::uri_escape_utf8($q->param('pc')) if $q->param('pc');
+ my $error_msg = "That location is not covered by Southampton.
+Please visit <a href=\"$url\">the main FixMyStreet site</a>.";
+ return (0, $error_msg);
+}
+
+# All reports page only has the one council.
+sub all_councils_report {
+ return 0;
+}
+
+=item disambiguate_location S Q
+
+Given a string representing a location (street and area expected),
+bias the viewport to around Southampton.
+
+=cut
+
+sub disambiguate_location {
+ my ($self, $s, $q) = @_;
+ $s = "ll=50.913822,-1.400493&spn=0.084628,0.15701&$s";
+ return $s;
+}
+
+sub recent_photos {
+ my ($self, $num, $lat, $lon, $dist) = @_;
+ $num = 2 if $num == 3;
+ return Problems::recent_photos($num, $lat, $lon, $dist);
+}
+
+1;
+
diff --git a/perllib/FixMyStreet/Alert.pm b/perllib/FixMyStreet/Alert.pm
index 9996f03c8..cfe9c1781 100644
--- a/perllib/FixMyStreet/Alert.pm
+++ b/perllib/FixMyStreet/Alert.pm
@@ -30,7 +30,6 @@ use mySociety::DBHandle qw(dbh);
use mySociety::Email;
use mySociety::EmailUtil;
use mySociety::Gaze;
-use mySociety::GeoUtil;
use mySociety::Locale;
use mySociety::MaPit;
use mySociety::Random qw(random_bytes);
@@ -91,7 +90,7 @@ sub delete ($) {
sub email_alerts ($) {
my ($testing_email) = @_;
my $url;
- my $q = dbh()->prepare("select * from alert_type where ref not like 'local_problems%'");
+ my $q = dbh()->prepare("select * from alert_type where ref not like '%local_problems%'");
$q->execute();
my $testing_email_clause = '';
while (my $alert_type = $q->fetchrow_hashref) {
@@ -135,12 +134,19 @@ sub email_alerts ($) {
# more than once if there are multiple vhosts running off the same database. The email_host
# call checks if this is the host that sends mail for this cobrand.
next unless (Cobrand::email_host($row->{alert_cobrand}));
+
dbh()->do('insert into alert_sent (alert_id, parameter) values (?,?)', {}, $row->{alert_id}, $row->{item_id});
if ($last_alert_id && $last_alert_id != $row->{alert_id}) {
_send_aggregated_alert_email(%data);
%data = ( template => $alert_type->{template}, data => '' );
}
+ # create problem status message for the templates
+ $data{state_message} =
+ $row->{state} eq 'fixed'
+ ? _("This report is currently marked as fixed.")
+ : _("This report is currently marked as open.");
+
$url = Cobrand::base_url_for_emails($row->{alert_cobrand}, $row->{alert_cobrand_data});
if ($row->{item_text}) {
$data{problem_url} = $url . "/report/" . $row->{id};
@@ -177,12 +183,11 @@ sub email_alerts ($) {
$query->execute();
while (my $alert = $query->fetchrow_hashref) {
next unless (Cobrand::email_host($alert->{cobrand}));
- my $e = $alert->{parameter};
- my $n = $alert->{parameter2};
+ my $longitude = $alert->{parameter};
+ my $latitude = $alert->{parameter2};
$url = Cobrand::base_url_for_emails($alert->{cobrand}, $alert->{cobrand_data});
my ($site_restriction, $site_id) = Cobrand::site_restriction($alert->{cobrand}, $alert->{cobrand_data});
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($e, $n, 'G');
- my $d = mySociety::Gaze::get_radius_containing_population($lat, $lon, 200000);
+ my $d = mySociety::Gaze::get_radius_containing_population($latitude, $longitude, 200000);
$d = int($d*10+0.5)/10;
my $testing_email_clause = "and problem.email <> '$testing_email'" if $testing_email;
my %data = ( template => $template, data => '', alert_id => $alert->{id}, alert_email => $alert->{email}, lang => $alert->{lang}, cobrand => $alert->{cobrand}, cobrand_data => $alert->{cobrand_data} );
@@ -195,7 +200,7 @@ sub email_alerts ($) {
$site_restriction
order by confirmed desc";
$q = dbh()->prepare($q);
- $q->execute($e, $n, $d, $alert->{whensubscribed}, $alert->{id}, $alert->{email});
+ $q->execute($latitude, $longitude, $d, $alert->{whensubscribed}, $alert->{id}, $alert->{email});
while (my $row = $q->fetchrow_hashref) {
dbh()->do('insert into alert_sent (alert_id, parameter) values (?,?)', {}, $alert->{id}, $row->{id});
$data{data} .= $url . "/report/" . $row->{id} . " - $row->{title}\n\n";
@@ -248,12 +253,10 @@ sub generate_rss ($$$;$$$$) {
throw FixMyStreet::Alert::Error('Unknown alert type') unless $alert_type;
# Do our own encoding
-
my $rss = new XML::RSS( version => '2.0', encoding => 'UTF-8',
stylesheet=> $xsl, encode_output => undef );
$rss->add_module(prefix=>'georss', uri=>'http://www.georss.org/georss');
- # XXX: Not generic
# Only apply a site restriction if the alert uses the problem table
$site_restriction = '' unless $alert_type->{item_table} eq 'problem';
my $query = 'select * from ' . $alert_type->{item_table} . ' where '
@@ -269,19 +272,19 @@ sub generate_rss ($$$;$$$$) {
$q->execute();
}
- my @months = ('', 'January','February','March','April','May','June',
- 'July','August','September','October','November','December');
while (my $row = $q->fetchrow_hashref) {
- # XXX: How to do this properly? name might be null in comment table, hence needing this
- my $pubDate;
+
$row->{name} ||= 'anonymous';
- # And we want pretty dates... :-/
+
+ my $pubDate;
if ($row->{confirmed}) {
$row->{confirmed} =~ /^(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/;
$pubDate = mySociety::Locale::in_gb_locale {
strftime("%a, %d %b %Y %H:%M:%S %z", $6, $5, $4, $3, $2-1, $1-1900, -1, -1, 0)
};
- $row->{confirmed} = ordinal($3+0) . ' ' . $months[$2];
+ $row->{confirmed} = strftime("%e %B", $6, $5, $4, $3, $2-1, $1-1900, -1, -1, 0);
+ $row->{confirmed} =~ s/^\s+//;
+ $row->{confirmed} =~ s/^(\d+)/ordinal($1)/e if $mySociety::Locale::lang eq 'en-gb';
}
(my $title = _($alert_type->{item_title})) =~ s/{{(.*?)}}/$row->{$1}/g;
@@ -295,17 +298,18 @@ sub generate_rss ($$$;$$$$) {
description => ent(ent($desc)) # Yes, double-encoded, really.
);
$item{pubDate} = $pubDate if $pubDate;
+ $item{category} = $row->{category} if $row->{category};
- # XXX: Not-very-generic extensions, at all
my $display_photos = Cobrand::allow_photo_display($cobrand);
if ($display_photos && $row->{photo}) {
$item{description} .= ent("\n<br><img src=\"". Cobrand::url($cobrand, $url, $http_q) . "/photo?id=$row->{id}\">");
}
- $item{description} .= ent("\n<br><a href='$cobrand_url'>Report on FixMyStreet</a>");
+ my $recipient_name = Cobrand::contact_name($cobrand);
+ $item{description} .= ent("\n<br><a href='$cobrand_url'>" .
+ sprintf(_("Report on %s"), $recipient_name) . "</a>");
- if ($row->{easting} && $row->{northing}) {
- my ($lat,$lon) = mySociety::GeoUtil::national_grid_to_wgs84($row->{easting}, $row->{northing}, 'G');
- $item{georss} = { point => "$lat $lon" };
+ if ($row->{latitude} || $row->{longitude}) {
+ $item{georss} = { point => "$row->{latitude} $row->{longitude}" };
}
$rss->add_item( %item );
}
diff --git a/perllib/FixMyStreet/Geocode.pm b/perllib/FixMyStreet/Geocode.pm
index 9e89b4f7b..c06c3bb55 100644
--- a/perllib/FixMyStreet/Geocode.pm
+++ b/perllib/FixMyStreet/Geocode.pm
@@ -9,16 +9,19 @@
package FixMyStreet::Geocode;
use strict;
+use Encode;
use Error qw(:try);
use File::Slurp;
+use File::Path ();
use LWP::Simple;
use Digest::MD5 qw(md5_hex);
use URI::Escape;
use Cobrand;
use Page;
+use Utils;
use mySociety::Config;
-use mySociety::GeoUtil;
+use mySociety::Locale;
use mySociety::MaPit;
use mySociety::PostcodeUtil;
use mySociety::Web qw(NewURL);
@@ -36,52 +39,82 @@ BEGIN {
# of the site to diambiguate locations.
sub lookup {
my ($s, $q) = @_;
- my ($easting, $northing, $error);
- if ($s =~ /^\d+$/) {
- $error = 'FixMyStreet is a UK-based website that currently works in England, Scotland, and Wales. Please enter either a postcode, or a Great British street name and area.';
- } elsif (mySociety::PostcodeUtil::is_valid_postcode($s)) {
- my $location = mySociety::MaPit::call('postcode', $s);
- unless ($error = Page::mapit_check_error($location)) {
- $easting = $location->{easting};
- $northing = $location->{northing};
+ my ($latitude, $longitude, $error);
+ if (mySociety::Config::get('COUNTRY') eq 'GB') {
+ if ($s =~ /^\d+$/) {
+ $error = 'FixMyStreet is a UK-based website that currently works in England, Scotland, and Wales. Please enter either a postcode, or a Great British street name and area.';
+ } elsif (mySociety::PostcodeUtil::is_valid_postcode($s)) {
+ my $location = mySociety::MaPit::call('postcode', $s);
+ unless ($error = Page::mapit_check_error($location)) {
+ $latitude = $location->{wgs84_lat};
+ $longitude = $location->{wgs84_lon};
+ }
}
- } else {
- ($easting, $northing, $error) = FixMyStreet::Geocode::string($s, $q);
+ } elsif (mySociety::Config::get('COUNTRY') eq 'NO') {
+ if ($s =~ /^\d{4}$/) {
+ my $location = mySociety::MaPit::call('postcode', $s);
+ unless ($error = Page::mapit_check_error($location)) {
+ $latitude = $location->{wgs84_lat};
+ $longitude = $location->{wgs84_lon};
+ }
+ }
+ }
+ unless ($error || defined $latitude) {
+ ($latitude, $longitude, $error) = FixMyStreet::Geocode::string($s, $q);
}
- return ($easting, $northing, $error);
+ return ($latitude, $longitude, $error);
}
sub geocoded_string_coordinates {
my ($js, $q) = @_;
- my ($easting, $northing, $error);
+ my ($latitude, $longitude, $error);
my ($accuracy) = $js =~ /"Accuracy" *: *(\d)/;
if ($accuracy < 4) {
$error = _('Sorry, that location appears to be too general; please be more specific.');
- } else {
+ } elsif ( $js =~ /"coordinates" *: *\[ *(.*?), *(.*?),/ ) {
+ $longitude = $1;
+ $latitude = $2;
+ if (mySociety::Config::get('COUNTRY') eq 'GB') {
+ try {
+ my ($easting, $northing) = Utils::convert_latlon_to_en( $latitude, $longitude );
+ } catch Error::Simple with {
+ mySociety::Locale::pop(); # We threw exception, so it won't have happened.
+ $error = shift;
+ $error = _('That location does not appear to be in Britain; please try again.')
+ if $error =~ /out of the area covered/;
+ }
+ }
+ }
+ return ($latitude, $longitude, $error);
+}
- $js =~ /"coordinates" *: *\[ *(.*?), *(.*?),/;
- my $lon = $1; my $lat = $2;
- try {
- ($easting, $northing) = mySociety::GeoUtil::wgs84_to_national_grid($lat, $lon, 'G');
- } catch Error::Simple with {
- $error = shift;
- $error = _('That location does not appear to be in Britain; please try again.')
- if $error =~ /out of the area covered/;
- }
- }
- return ($easting, $northing, $error);
+sub results_check {
+ my $q = shift;
+ my ($error, @valid_locations);
+ foreach (@_) {
+ next unless /"address" *: *"(.*?)"/s;
+ my $address = $1;
+ next unless Cobrand::geocoded_string_check(Page::get_cobrand($q), $address, $q);
+ next if $address =~ /BT\d/;
+ push (@$error, $address);
+ push (@valid_locations, $_);
+ }
+ if (scalar @valid_locations == 1) {
+ return geocoded_string_coordinates($valid_locations[0], $q);
+ }
+ $error = _('Sorry, we could not find that location.') unless $error;
+ return (undef, undef, $error);
}
# string STRING QUERY
# Canonicalises, looks up on Google Maps API, and caches, a user-inputted location.
-# Returns array of (TILE_X, TILE_Y, EASTING, NORTHING, ERROR), where ERROR is
-# either undef, a string, or an array of matches if there are more than one. The
-# information in the query may be used to disambiguate the location in cobranded versions
-# of the site.
+# Returns array of (LAT, LON, ERROR), where ERROR is either undef, a string, or
+# an array of matches if there are more than one. The information in the query
+# may be used to disambiguate the location in cobranded versions of the site.
sub string {
my ($s, $q) = @_;
$s = lc($s);
- $s =~ s/[^-&0-9a-z ']/ /g;
+ $s =~ s/[^-&\w ']/ /g;
$s =~ s/\s+/ /g;
$s = URI::Escape::uri_escape_utf8($s);
$s = Cobrand::disambiguate_location(Page::get_cobrand($q), "q=$s", $q);
@@ -89,13 +122,16 @@ sub string {
my $url = 'http://maps.google.com/maps/geo?' . $s;
my $cache_dir = mySociety::Config::get('GEO_CACHE');
my $cache_file = $cache_dir . md5_hex($url);
- my ($js, $error, $easting, $northing);
+ my ($js, $error);
if (-s $cache_file) {
$js = File::Slurp::read_file($cache_file);
} else {
- $url .= ',+UK' unless $url =~ /united\++kingdom$/ || $url =~ /uk$/i;
- $url .= '&sensor=false&gl=uk&key=' . mySociety::Config::get('GOOGLE_MAPS_API_KEY');
+ $url .= ',+UK' unless $url =~ /united\++kingdom$/ || $url =~ /uk$/i
+ || mySociety::Config::get('COUNTRY') ne 'GB';
+ $url .= '&sensor=false&key=' . mySociety::Config::get('GOOGLE_MAPS_API_KEY');
$js = LWP::Simple::get($url);
+ $js = encode_utf8($js) if utf8::is_utf8($js);
+ File::Path::mkpath($cache_dir);
File::Slurp::write_file($cache_file, $js) if $js && $js !~ /"code":6[12]0/;
}
if (!$js) {
@@ -103,27 +139,14 @@ sub string {
} elsif ($js !~ /"code" *: *200/) {
$error = _('Sorry, we could not find that location.');
} elsif ($js =~ /}, *{/) { # Multiple
- my @js = split /}, *{/, $js;
- my @valid_locations;
- foreach (@js) {
- next unless /"address" *: *"(.*?)"/s;
- my $address = $1;
- next unless Cobrand::geocoded_string_check(Page::get_cobrand($q), $address, $q);
- next if $address =~ /BT\d/;
- push (@valid_locations, $_);
- push (@$error, $address);
- }
- if (scalar @valid_locations == 1) {
- return geocoded_string_coordinates($valid_locations[0], $q);
- }
- $error = _('Sorry, we could not find that location.') unless $error;
+ return results_check($q, (split /}, *{/, $js));
} elsif ($js =~ /BT\d/) {
# Northern Ireland, hopefully
$error = _("We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region.");
} else {
- ($easting, $northing, $error) = geocoded_string_coordinates($js, $q);
+ return results_check($q, $js);
}
- return ($easting, $northing, $error);
+ return (undef, undef, $error);
}
# list_choices
@@ -136,6 +159,7 @@ sub list_choices {
my $out = '<p>' . $message . '</p>';
my $choice_list = '<ul>';
foreach my $choice (@$choices) {
+ $choice = decode_utf8($choice);
$choice =~ s/, United Kingdom//;
$choice =~ s/, UK//;
$url = Cobrand::url($cobrand, NewURL($q, -retain => 1, -url => $page, 'pc' => $choice), $q);
diff --git a/perllib/FixMyStreet/Map.pm b/perllib/FixMyStreet/Map.pm
index 12ecf78fe..5305b360a 100644
--- a/perllib/FixMyStreet/Map.pm
+++ b/perllib/FixMyStreet/Map.pm
@@ -10,105 +10,135 @@ package FixMyStreet::Map;
use strict;
+use Module::Pluggable
+ sub_name => 'maps',
+ search_path => __PACKAGE__,
+ except => 'FixMyStreet::Map::Tilma::Original',
+ require => 1;
+
+# Get the list of maps we want and load map classes at compile time
+my @ALL_MAP_CLASSES = allowed_maps();
+
use Problems;
use Cobrand;
use mySociety::Config;
use mySociety::Gaze;
-use mySociety::GeoUtil;
use mySociety::Locale;
-use mySociety::Web qw(ent NewURL);
+use mySociety::Web qw(ent);
+
+=head2 allowed_maps
+
+Returns an array of all the map classes that were found and that
+are permitted by the config.
+
+=cut
+
+sub allowed_maps {
+ my @allowed = split /,/, mySociety::Config::get('MAP_TYPE');
+ @allowed = map { __PACKAGE__.'::'.$_ } @allowed;
+ my %avail = map { $_ => 1 } __PACKAGE__->maps;
+ return grep { $avail{$_} } @allowed;
+}
+
+=head2 map_class
+
+Set and return the appropriate class given a query parameter string.
+
+=cut
+
+our $map_class;
+sub set_map_class {
+ my $str = shift;
+ $str = __PACKAGE__.'::'.$str if $str;
+ my %avail = map { $_ => 1 } @ALL_MAP_CLASSES;
+ $str = $ALL_MAP_CLASSES[0] unless $str && $avail{$str};
+ $map_class = $str;
+}
+
+sub header_js {
+ return $map_class->header_js(@_);
+}
-# Run on module boot up
-load();
+sub display_map {
+ return $map_class->display_map(@_);
+}
-# This is yucky, but no-one's taught me a better way
-sub load {
- my $type = mySociety::Config::get('MAP_TYPE');
- my $class = "FixMyStreet::Map::$type";
- eval "use $class";
+sub display_map_end {
+ my ($type) = @_;
+ my $out = '</div>';
+ $out .= '</form>' if ($type);
+ return $out;
}
sub header {
- my ($q, $type) = @_;
+ my ( $q, $type ) = @_;
return '' unless $type;
my $cobrand = Page::get_cobrand($q);
- my $cobrand_form_elements = Cobrand::form_elements($cobrand, 'mapForm', $q);
- my $form_action = Cobrand::url($cobrand, '', $q);
+ my $cobrand_form_elements =
+ Cobrand::form_elements( $cobrand, 'mapForm', $q );
+ my $form_action = Cobrand::url( $cobrand, '/', $q );
my $encoding = '';
- $encoding = ' enctype="multipart/form-data"' if $type==2;
- my $pc = $q->param('pc') || '';
- my $pc_enc = ent($pc);
+ $encoding = ' enctype="multipart/form-data"' if $type == 2;
+ my $pc = ent($q->param('pc') || '');
+ my $map = ent($q->param('map') || '');
return <<EOF;
<form action="$form_action" method="post" name="mapForm" id="mapForm"$encoding>
<input type="hidden" name="submit_map" value="1">
-<input type="hidden" name="pc" value="$pc_enc">
+<input type="hidden" name="map" value="$map">
+<input type="hidden" name="pc" value="$pc">
$cobrand_form_elements
EOF
}
sub map_features {
- my ($q, $easting, $northing, $interval) = @_;
-
- my $min_e = $easting - 500;
- my $min_n = $northing - 500;
- my $mid_e = $easting;
- my $mid_n = $northing;
- my $max_e = $easting + 500;
- my $max_n = $northing + 500;
-
- # list of problems aoround map can be limited, but should show all pins
- my ($around_map, $around_map_list);
- if (my $around_limit = Cobrand::on_map_list_limit(Page::get_cobrand($q))) {
- $around_map_list = Problems::around_map($min_e, $max_e, $min_n, $max_n, $interval, $around_limit);
- $around_map = Problems::around_map($min_e, $max_e, $min_n, $max_n, $interval, undef);
- } else {
- $around_map = $around_map_list = Problems::around_map($min_e, $max_e, $min_n, $max_n, $interval, undef);
- }
+ my ( $q, $lat, $lon, $interval ) = @_;
+
+ # TODO - be smarter about calculating the surrounding square
+ # use deltas that are roughly 500m in the UK - so we get a 1 sq km search box
+ my $lat_delta = 0.00438;
+ my $lon_delta = 0.00736;
+
+ my $min_lat = $lat - $lat_delta;
+ my $max_lat = $lat + $lat_delta;
+
+ my $min_lon = $lon - $lon_delta;
+ my $max_lon = $lon + $lon_delta;
+
+ # list of problems around map can be limited, but should show all pins
+ my $around_limit #
+ = Cobrand::on_map_list_limit( Page::get_cobrand($q) ) || undef;
+
+ my @around_args = ( $min_lat, $max_lat, $min_lon, $max_lon, $interval );
+ my $around_map_list = Problems::around_map( @around_args, $around_limit );
+ my $around_map = Problems::around_map( @around_args, undef );
my $dist;
mySociety::Locale::in_gb_locale {
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($mid_e, $mid_n, 'G');
- $dist = mySociety::Gaze::get_radius_containing_population($lat, $lon, 200000);
+ $dist =
+ mySociety::Gaze::get_radius_containing_population( $lat, $lon,
+ 200000 );
};
- $dist = int($dist*10+0.5)/10;
+ $dist = int( $dist * 10 + 0.5 ) / 10;
- my $limit = 20;
- my @ids = map { $_->{id} } @$around_map_list;
- my $nearby = Problems::nearby($dist, join(',', @ids), $limit, $mid_e, $mid_n, $interval);
+ my $limit = 20;
+ my @ids = map { $_->{id} } @$around_map_list;
+ my $nearby = Problems::nearby( $dist, join( ',', @ids ),
+ $limit, $lat, $lon, $interval );
- return ($around_map, $around_map_list, $nearby, $dist);
+ return ( $around_map, $around_map_list, $nearby, $dist );
}
-sub compass ($$$) {
- my ($q, $x, $y) = @_;
- my @compass;
- for (my $i=$x-1; $i<=$x+1; $i++) {
- for (my $j=$y-1; $j<=$y+1; $j++) {
- $compass[$i][$j] = NewURL($q, x=>$i, y=>$j);
- }
- }
- my $recentre = NewURL($q);
- my $host = Page::base_url_with_lang($q, undef);
- return <<EOF;
-<table cellpadding="0" cellspacing="0" border="0" id="compass">
-<tr valign="bottom">
-<td align="right"><a rel="nofollow" href="${compass[$x-1][$y+1]}"><img src="$host/i/arrow-northwest.gif" alt="NW" width=11 height=11></a></td>
-<td align="center"><a rel="nofollow" href="${compass[$x][$y+1]}"><img src="$host/i/arrow-north.gif" vspace="3" alt="N" width=13 height=11></a></td>
-<td><a rel="nofollow" href="${compass[$x+1][$y+1]}"><img src="$host/i/arrow-northeast.gif" alt="NE" width=11 height=11></a></td>
-</tr>
-<tr>
-<td><a rel="nofollow" href="${compass[$x-1][$y]}"><img src="$host/i/arrow-west.gif" hspace="3" alt="W" width=11 height=13></a></td>
-<td align="center"><a rel="nofollow" href="$recentre"><img src="$host/i/rose.gif" alt="Recentre" width=35 height=34></a></td>
-<td><a rel="nofollow" href="${compass[$x+1][$y]}"><img src="$host/i/arrow-east.gif" hspace="3" alt="E" width=11 height=13></a></td>
-</tr>
-<tr valign="top">
-<td align="right"><a rel="nofollow" href="${compass[$x-1][$y-1]}"><img src="$host/i/arrow-southwest.gif" alt="SW" width=11 height=11></a></td>
-<td align="center"><a rel="nofollow" href="${compass[$x][$y-1]}"><img src="$host/i/arrow-south.gif" vspace="3" alt="S" width=13 height=11></a></td>
-<td><a rel="nofollow" href="${compass[$x+1][$y-1]}"><img src="$host/i/arrow-southeast.gif" alt="SE" width=11 height=11></a></td>
-</tr>
-</table>
-EOF
+sub map_pins {
+ return $map_class->map_pins(@_);
+}
+
+sub click_to_wgs84 {
+ return $map_class->click_to_wgs84(@_);
+}
+
+sub tile_xy_to_wgs84 {
+ return $map_class->tile_xy_to_wgs84(@_);
}
1;
diff --git a/perllib/FixMyStreet/Map/Bing.pm b/perllib/FixMyStreet/Map/Bing.pm
index 8446a10fd..335759b08 100644
--- a/perllib/FixMyStreet/Map/Bing.pm
+++ b/perllib/FixMyStreet/Map/Bing.pm
@@ -6,10 +6,9 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Bing;
use strict;
-use mySociety::GeoUtil;
use mySociety::Web qw(ent);
sub header_js {
@@ -27,21 +26,29 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($params{easting}, $params{northing}, 'G');
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
+ my $key = mySociety::Config::get('BING_MAPS_API_KEY');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'lat': $lat,
- 'lon': $lon
+ 'key': '$key',
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -55,17 +62,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/BingOL.pm b/perllib/FixMyStreet/Map/BingOL.pm
index 3939a710f..4e93243a9 100644
--- a/perllib/FixMyStreet/Map/BingOL.pm
+++ b/perllib/FixMyStreet/Map/BingOL.pm
@@ -1,12 +1,12 @@
#!/usr/bin/perl
#
-# FixMyStreet:Map::Bing
-# Bing maps on FixMyStreet.
+# FixMyStreet:Map::BingOL
+# Bing maps on FixMyStreet, using OpenLayers.
#
-# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::BingOL;
use strict;
use mySociety::Web qw(ent);
@@ -14,9 +14,9 @@ use mySociety::Web qw(ent);
sub header_js {
return '
<!-- <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&mkt=en-GB"></script> -->
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-bing-ol.js"></script>
-<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -28,20 +28,27 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010. Microsoft');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'easting': $params{easting},
- 'northing': $params{northing}
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -55,17 +62,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Google.pm b/perllib/FixMyStreet/Map/Google.pm
index 7a314efad..35896108b 100644
--- a/perllib/FixMyStreet/Map/Google.pm
+++ b/perllib/FixMyStreet/Map/Google.pm
@@ -6,10 +6,9 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Google;
use strict;
-use mySociety::GeoUtil;
use mySociety::Web qw(ent);
sub header_js {
@@ -27,21 +26,27 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($params{easting}, $params{northing}, 'G');
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'lat': $lat,
- 'lon': $lon
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -55,17 +60,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm
index ccbb3ca53..b930a4e4d 100644
--- a/perllib/FixMyStreet/Map/OSM.pm
+++ b/perllib/FixMyStreet/Map/OSM.pm
@@ -6,47 +6,95 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::OSM;
use strict;
-use mySociety::Web qw(ent);
+use Math::Trig;
+use mySociety::Web qw(ent NewURL);
+use Utils;
sub header_js {
return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-OpenStreetMap.js"></script>
-<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
+sub map_type {
+ return 'OpenLayers.Layer.OSM.Mapnik';
+}
+
# display_map Q PARAMS
# PARAMS include:
-# EASTING, NORTHING for the centre point of the map
+# latitude, longitude for the centre point of the map
# TYPE is 1 if the map is clickable, 2 if clickable and has a form upload,
# 0 if not clickable
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ # Map centre may be overridden in the query string
+ $params{latitude} = Utils::truncate_coordinate($q->param('lat')+0)
+ if defined $q->param('lat');
+ $params{longitude} = Utils::truncate_coordinate($q->param('lon')+0)
+ if defined $q->param('lon');
+
+ my $zoom = defined $q->param('zoom') ? $q->param('zoom') : 2;
+ my $zoom_act = 14 + $zoom;
+ my ($x_tile, $y_tile) = latlon_to_tile_with_adjust($params{latitude}, $params{longitude}, $zoom_act);
+
+ my $tl = ($x_tile-1) . "/" . ($y_tile-1);
+ my $tr = "$x_tile/" . ($y_tile-1);
+ my $bl = ($x_tile-1) . "/$y_tile";
+ my $br = "$x_tile/$y_tile";
+ my $tl_src = "http://a.tile.openstreetmap.org/$zoom_act/$tl.png";
+ my $tr_src = "http://b.tile.openstreetmap.org/$zoom_act/$tr.png";
+ my $bl_src = "http://c.tile.openstreetmap.org/$zoom_act/$bl.png";
+ my $br_src = "http://tile.openstreetmap.org/$zoom_act/$br.png";
+ map { s{/}{.} } ($tl, $tr, $bl, $br);
+
+ my @pins;
+ my $pins = '';
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
+ $pins .= display_pin($q, $pin, $x_tile, $y_tile, $zoom_act);
}
+ my $pins_js = join(",\n", @pins);
+ my $img_type;
+ if ($params{type}) {
+ $img_type = '<input type="image"';
+ } else {
+ $img_type = '<img';
+ }
my $out = FixMyStreet::Map::header($q, $params{type});
- my $copyright = _('Map &copy; <a href="http://www.openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>');
+ my $copyright = _('Map &copy; <a id="osm_link" href="http://www.openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>');
+ my $compass = compass($q, $x_tile, $y_tile, $zoom);
+ my $map_type = $self->map_type();
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
+<input type="hidden" name="zoom" value="$zoom">
<script type="text/javascript">
var fixmystreet = {
- 'easting': $params{easting},
- 'northing': $params{northing},
- 'map_type': OpenLayers.Layer.OSM.Mapnik
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ],
+ 'map_type': $map_type
}
</script>
<div id="map_box">
$params{pre}
- <div id="map"></div>
+ <div id="map"><noscript>
+ <div id="drag">$img_type alt="NW map tile" id="t2.2" name="tile_$tl" src="$tl_src" style="top:0; left:0;">$img_type alt="NE map tile" id="t2.3" name="tile_$tr" src="$tr_src" style="top:0px; left:256px;"><br>$img_type alt="SW map tile" id="t3.2" name="tile_$bl" src="$bl_src" style="top:256px; left:0;">$img_type alt="SE map tile" id="t3.3" name="tile_$br" src="$br_src" style="top:256px; left:256px;"></div>
+ <div id="pins">$pins</div>
+ $compass
+ </noscript></div>
<p id="copyright">$copyright</p>
$params{post}
</div>
@@ -55,17 +103,123 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
+sub display_pin {
+ my ($q, $pin, $x_tile, $y_tile, $zoom) = @_;
+
+ my ($px, $py) = latlon_to_px($pin->[0], $pin->[1], $x_tile, $y_tile, $zoom);
+
+ my $num = '';
+ my $host = Page::base_url_with_lang($q, undef);
+ my %cols = (red=>'R', green=>'G', blue=>'B', purple=>'P');
+ my $out = '<img border="0" class="pin" src="' . $host . '/i/pin' . $cols{$pin->[2]}
+ . $num . '.gif" alt="' . _('Problem') . '" style="top:' . ($py-59)
+ . 'px; left:' . ($px) . 'px; position: absolute;">';
+ return $out unless $pin->[3];
+ my $cobrand = Page::get_cobrand($q);
+ my $url = Cobrand::url($cobrand, NewURL($q, -url => '/report/' . $pin->[3]), $q);
+ # XXX Would like to include title here in title=""
+ $out = '<a href="' . $url . '">' . $out . '</a>';
return $out;
}
-sub display_pin {
+# Given a lat/lon, convert it to OSM tile co-ordinates (precise).
+sub latlon_to_tile($$$) {
+ my ($lat, $lon, $zoom) = @_;
+ my $x_tile = ($lon + 180) / 360 * 2**$zoom;
+ my $y_tile = (1 - log(tan(deg2rad($lat)) + sec(deg2rad($lat))) / pi) / 2 * 2**$zoom;
+ return ( $x_tile, $y_tile );
+}
+
+# Given a lat/lon, convert it to OSM tile co-ordinates (nearest actual tile,
+# adjusted so the point will be near the centre of a 2x2 tiled map).
+sub latlon_to_tile_with_adjust($$$) {
+ my ($lat, $lon, $zoom) = @_;
+ my ($x_tile, $y_tile) = latlon_to_tile($lat, $lon, $zoom);
+
+ # Try and have point near centre of map
+ if ($x_tile - int($x_tile) > 0.5) {
+ $x_tile += 1;
+ }
+ if ($y_tile - int($y_tile) > 0.5) {
+ $y_tile += 1;
+ }
+
+ return ( int($x_tile), int($y_tile) );
+}
+
+sub tile_to_latlon {
+ my ($x, $y, $zoom) = @_;
+ my $n = 2 ** $zoom;
+ my $lon = $x / $n * 360 - 180;
+ my $lat = rad2deg(atan(sinh(pi * (1 - 2 * $y / $n))));
+ return ( $lat, $lon );
+}
+
+# Given a lat/lon, convert it to pixel co-ordinates from the top left of the map
+sub latlon_to_px($$$$$) {
+ my ($lat, $lon, $x_tile, $y_tile, $zoom) = @_;
+ my ($pin_x_tile, $pin_y_tile) = latlon_to_tile($lat, $lon, $zoom);
+ my $pin_x = tile_to_px($pin_x_tile, $x_tile);
+ my $pin_y = tile_to_px($pin_y_tile, $y_tile);
+ return ($pin_x, $pin_y);
+}
+
+# Convert tile co-ordinates to pixel co-ordinates from top left of map
+# C is centre tile reference of displayed map
+sub tile_to_px {
+ my ($p, $c) = @_;
+ $p = 256 * ($p - $c + 1);
+ $p = int($p + .5 * ($p <=> 0));
+ return $p;
}
-sub map_pins {
+sub click_to_tile {
+ my ($pin_tile, $pin) = @_;
+ $pin -= 256 while $pin > 256;
+ $pin += 256 while $pin < 0;
+ return $pin_tile + $pin / 256;
+}
+
+# Given some click co-ords (the tile they were on, and where in the
+# tile they were), convert to WGS84 and return.
+sub click_to_wgs84 {
+ my ($self, $q, $pin_tile_x, $pin_x, $pin_tile_y, $pin_y) = @_;
+ my $tile_x = click_to_tile($pin_tile_x, $pin_x);
+ my $tile_y = click_to_tile($pin_tile_y, $pin_y);
+ my $zoom = 14 + (defined $q->param('zoom') ? $q->param('zoom') : 2);
+ my ($lat, $lon) = tile_to_latlon($tile_x, $tile_y, $zoom);
+ return ( $lat, $lon );
+}
+
+sub compass ($$$$) {
+ my ( $q, $x, $y, $zoom ) = @_;
+
+ my ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x, $y-1, $zoom+14);
+ my $north = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x, $y+1, $zoom+14);
+ my $south = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x-1, $y, $zoom+14);
+ my $west = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x+1, $y, $zoom+14);
+ my $east = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x, $y, $zoom+14);
+ my $zoom_in = $zoom < 3 ? NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom+1 ) : '#';
+ my $zoom_out = $zoom > 0 ? NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom-1 ) : '#';
+ my $world = NewURL( $q, lat => $lat, lon => $lon, zoom => 0 );
+
+ #my $host = Page::base_url_with_lang( $q, undef );
+ my $dir = "/jslib/OpenLayers-2.10/img";
+ return <<EOF;
+<div style="position: absolute; left: 4px; top: 4px; z-index: 1007;" class="olControlPanZoom olControlNoSelect" unselectable="on">
+ <div style="position: absolute; left: 13px; top: 4px; width: 18px; height: 18px;"><a href="$north"><img style="position: relative; width: 18px; height: 18px;" src="$dir/north-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 4px; top: 22px; width: 18px; height: 18px;"><a href="$west"><img style="position: relative; width: 18px; height: 18px;" src="$dir/west-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 22px; top: 22px; width: 18px; height: 18px;"><a href="$east"><img style="position: relative; width: 18px; height: 18px;" src="$dir/east-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 40px; width: 18px; height: 18px;"><a href="$south"><img style="position: relative; width: 18px; height: 18px;" src="$dir/south-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 63px; width: 18px; height: 18px;"><a href="$zoom_in"><img style="position: relative; width: 18px; height: 18px;" src="$dir/zoom-plus-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 81px; width: 18px; height: 18px;"><a href="$world"><img style="position: relative; width: 18px; height: 18px;" src="$dir/zoom-world-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 99px; width: 18px; height: 18px;"><a href="$zoom_out"><img style="position: relative; width: 18px; height: 18px;" src="$dir/zoom-minus-mini.png" border="0"></a></div>
+</div>
+EOF
}
1;
diff --git a/perllib/FixMyStreet/Map/OSM/CycleMap.pm b/perllib/FixMyStreet/Map/OSM/CycleMap.pm
index 01c51acf4..06b07ae20 100644
--- a/perllib/FixMyStreet/Map/OSM/CycleMap.pm
+++ b/perllib/FixMyStreet/Map/OSM/CycleMap.pm
@@ -6,66 +6,13 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::OSM::CycleMap;
+use base 'FixMyStreet::Map::OSM';
use strict;
-use mySociety::Web qw(ent);
-sub header_js {
- return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
-<script type="text/javascript" src="/js/map-OpenStreetMap.js"></script>
-<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
-';
-}
-
-# display_map Q PARAMS
-# PARAMS include:
-# EASTING, NORTHING for the centre point of the map
-# TYPE is 1 if the map is clickable, 2 if clickable and has a form upload,
-# 0 if not clickable
-# PINS is array of pins to show, location and colour
-# PRE/POST are HTML to show above/below map
-sub display_map {
- my ($q, %params) = @_;
- $params{pre} ||= '';
- $params{post} ||= '';
-
- foreach my $pin (@{$params{pins}}) {
- }
-
- my $out = FixMyStreet::Map::header($q, $params{type});
- my $copyright = _('Map &copy; <a href="http://www.openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>');
- $out .= <<EOF;
-<script type="text/javascript">
-var fixmystreet = {
- 'easting': $params{easting},
- 'northing': $params{northing},
- 'map_type': OpenLayers.Layer.OSM.CycleMap
-}
-</script>
-<div id="map_box">
- $params{pre}
- <div id="map"></div>
- <p id="copyright">$copyright</p>
- $params{post}
-</div>
-<div id="side">
-EOF
- return $out;
-}
-
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
+sub map_type {
+ return 'OpenLayers.Layer.OSM.CycleMap';
}
1;
diff --git a/perllib/FixMyStreet/Map/OSM/StreetView.pm b/perllib/FixMyStreet/Map/OSM/StreetView.pm
index 08f677d25..9c9a1ac8e 100644
--- a/perllib/FixMyStreet/Map/OSM/StreetView.pm
+++ b/perllib/FixMyStreet/Map/OSM/StreetView.pm
@@ -6,16 +6,16 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::OSM::StreetView;
use strict;
use mySociety::Web qw(ent);
sub header_js {
return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-streetview.js"></script>
-<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -27,20 +27,27 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'easting': $params{easting},
- 'northing': $params{northing}
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -54,17 +61,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm b/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm
index b1fe0126d..9ae5829c4 100644
--- a/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm
+++ b/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm
@@ -6,7 +6,7 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::OL::1_10k;
use strict;
@@ -18,8 +18,10 @@ use constant TILE_TYPE => '10k-full';
sub header_js {
return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-tilma-ol.js"></script>
+<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -31,12 +33,16 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $tile_width = TILE_WIDTH;
@@ -44,12 +50,15 @@ sub display_map {
my $sf = SCALE_FACTOR / TILE_WIDTH;
my $copyright = _('&copy; Crown copyright. All rights reserved. Ministry of Justice 100037819&nbsp;2008.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
'tilewidth': $tile_width,
'tileheight': $tile_width,
- 'easting': $params{easting},
- 'northing': $params{northing},
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ],
'tile_type': '$tile_type',
'maxResolution': $sf
};
@@ -67,17 +76,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm b/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm
index 7ef372351..7a898b55b 100644
--- a/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm
+++ b/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm
@@ -6,7 +6,7 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::OL::StreetView;
use strict;
@@ -18,8 +18,10 @@ use constant TILE_TYPE => 'streetview';
sub header_js {
return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-tilma-ol.js"></script>
+<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -31,12 +33,16 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $tile_width = TILE_WIDTH;
@@ -44,12 +50,15 @@ sub display_map {
my $sf = SCALE_FACTOR / TILE_WIDTH;
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
'tilewidth': $tile_width,
'tileheight': $tile_width,
- 'easting': $params{easting},
- 'northing': $params{northing},
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ],
'tile_type': '$tile_type',
'maxResolution': $sf
};
@@ -65,17 +74,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/Original.pm b/perllib/FixMyStreet/Map/Tilma/Original.pm
index 5772f6ccd..2a64b5bbb 100644
--- a/perllib/FixMyStreet/Map/Tilma/Original.pm
+++ b/perllib/FixMyStreet/Map/Tilma/Original.pm
@@ -6,13 +6,26 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::Original;
use strict;
use LWP::Simple;
use Cobrand;
+use mySociety::GeoUtil;
+use mySociety::Locale;
use mySociety::Web qw(ent NewURL);
+use Utils;
+use RABX;
+
+sub TILE_WIDTH() { return $FixMyStreet::Map::map_class->tile_width; }
+sub SCALE_FACTOR() { return $FixMyStreet::Map::map_class->scale_factor; }
+sub TILE_TYPE() { return $FixMyStreet::Map::map_class->tile_type; }
+
+sub _ll_to_en {
+ my ($lat, $lon) = @_;
+ return Utils::convert_latlon_to_en( $lat, $lon );
+}
sub header_js {
return '
@@ -22,13 +35,13 @@ sub header_js {
# display_map Q PARAMS
# PARAMS include:
-# EASTING, NORTHING for the centre point of the map
+# latitude, longitude for the centre point of the map
# TYPE is 1 if the map is clickable, 2 if clickable and has a form upload,
# 0 if not clickable
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
-sub _display_map {
- my ($q, %params) = @_;
+sub display_map {
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
my $mid_point = TILE_WIDTH; # Map is 2 TILE_WIDTHs in size, square.
@@ -36,19 +49,31 @@ sub _display_map {
$mid_point = 189;
}
+ # convert map center point to easting, northing
+ ( $params{easting}, $params{northing} ) =
+ _ll_to_en( $params{latitude}, $params{longitude} );
+
+ # FIXME - convert all pins to lat, lng
+ # all the pins are currently [lat, lng, colour] - convert them
+ foreach my $pin ( @{ $params{pins} ||= [] } ) {
+ my ( $lat, $lon ) = ( $pin->[0], $pin->[1] );
+ my ( $e, $n ) = _ll_to_en( $lat, $lon );
+ ( $pin->[0], $pin->[1] ) = ( $e, $n );
+ }
+
# X/Y tile co-ords may be overridden in the query string
my @vars = qw(x y);
my %input = map { $_ => $q->param($_) || '' } @vars;
($input{x}) = $input{x} =~ /^(\d+)/; $input{x} ||= 0;
($input{y}) = $input{y} =~ /^(\d+)/; $input{y} ||= 0;
- my ($x, $y, $px, $py) = FixMyStreet::Map::os_to_px_with_adjust($q, $params{easting}, $params{northing}, $input{x}, $input{y});
+ my ($x, $y, $px, $py) = os_to_px_with_adjust($q, $params{easting}, $params{northing}, $input{x}, $input{y});
my $pins = '';
foreach my $pin (@{$params{pins}}) {
- my $pin_x = FixMyStreet::Map::os_to_px($pin->[0], $x);
- my $pin_y = FixMyStreet::Map::os_to_px($pin->[1], $y, 1);
- $pins .= FixMyStreet::Map::display_pin($q, $pin_x, $pin_y, $pin->[2]);
+ my $pin_x = os_to_px($pin->[0], $x);
+ my $pin_y = os_to_px($pin->[1], $y, 1);
+ $pins .= display_pin($q, $pin_x, $pin_y, $pin->[2]);
}
$px = defined($px) ? $mid_point - $px : 0;
@@ -78,6 +103,8 @@ sub _display_map {
$out .= <<EOF;
<input type="hidden" name="x" id="formX" value="$x">
<input type="hidden" name="y" id="formY" value="$y">
+<input type="hidden" name="latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" value="$params{longitude}">
EOF
$img_type = '<input type="image"';
} else {
@@ -106,9 +133,9 @@ $params{pre}
<div id="pins">$pins</div>
</div>
EOF
- $out .= '<div id="watermark"></div>' if $params{watermark};
+ $out .= '<div id="watermark"></div>' if $self->watermark();
$out .= compass($q, $x, $y);
- my $copyright = $params{copyright};
+ my $copyright = $self->copyright();
$out .= <<EOF;
</div>
<p id="copyright">$copyright</p>
@@ -119,13 +146,6 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
sub display_pin {
my ($q, $px, $py, $col, $num) = @_;
$num = '' if !$num || $num > 9;
@@ -136,39 +156,38 @@ sub display_pin {
. 'px; left:' . ($px) . 'px; position: absolute;">';
return $out unless $_ && $_->{id} && $col ne 'blue';
my $cobrand = Page::get_cobrand($q);
- my $url = Cobrand::url($cobrand, NewURL($q, -retain => 1,
- -url => '/report/' . $_->{id},
- pc => undef,
- x => undef,
- y => undef,
- sx => undef,
- sy => undef,
- all_pins => undef,
- no_pins => undef), $q);
+ my $url = Cobrand::url($cobrand, NewURL($q, -url => '/report/' . $_->{id}), $q);
$out = '<a title="' . ent($_->{title}) . '" href="' . $url . '">' . $out . '</a>';
return $out;
}
sub map_pins {
- my ($q, $x, $y, $sx, $sy, $interval) = @_;
+ my ($self, $q, $x, $y, $sx, $sy, $interval) = @_;
- my $e = FixMyStreet::Map::tile_to_os($x);
- my $n = FixMyStreet::Map::tile_to_os($y);
- my ($around_map, $around_map_list, $nearby, $dist) = FixMyStreet::Map::map_features($q, $e, $n, $interval);
+ my $e = tile_to_os($x);
+ my $n = tile_to_os($y);
+
+ my ( $lat, $lon ) = Utils::convert_en_to_latlon( $e, $n );
+ my ( $around_map, $around_map_list, $nearby, $dist ) =
+ FixMyStreet::Map::map_features( $q, $lat, $lon, $interval );
my $pins = '';
foreach (@$around_map) {
- my $px = FixMyStreet::Map::os_to_px($_->{easting}, $sx);
- my $py = FixMyStreet::Map::os_to_px($_->{northing}, $sy, 1);
+ ( $_->{easting}, $_->{northing} ) =
+ _ll_to_en( $_->{latitude}, $_->{longitude} );
+ my $px = os_to_px($_->{easting}, $sx);
+ my $py = os_to_px($_->{northing}, $sy, 1);
my $col = $_->{state} eq 'fixed' ? 'green' : 'red';
- $pins .= FixMyStreet::Map::display_pin($q, $px, $py, $col);
+ $pins .= display_pin($q, $px, $py, $col);
}
foreach (@$nearby) {
- my $px = FixMyStreet::Map::os_to_px($_->{easting}, $sx);
- my $py = FixMyStreet::Map::os_to_px($_->{northing}, $sy, 1);
+ ( $_->{easting}, $_->{northing} ) =
+ _ll_to_en( $_->{latitude}, $_->{longitude} );
+ my $px = os_to_px($_->{easting}, $sx);
+ my $py = os_to_px($_->{northing}, $sy, 1);
my $col = $_->{state} eq 'fixed' ? 'green' : 'red';
- $pins .= FixMyStreet::Map::display_pin($q, $px, $py, $col);
+ $pins .= display_pin($q, $px, $py, $col);
}
return ($pins, $around_map_list, $nearby, $dist);
@@ -196,10 +215,30 @@ sub tile_to_px {
sub os_to_tile {
return $_[0] / SCALE_FACTOR;
}
+
sub tile_to_os {
return int($_[0] * SCALE_FACTOR + 0.5);
}
+=head2 tile_xy_to_wgs84
+
+ ($lat, $lon) = tile_xy_to_wgs84( $x, $y );
+
+Takes the tile x,y and converts to lat, lon.
+
+=cut
+
+sub tile_xy_to_wgs84 {
+ my ( $self, $x, $y ) = @_;
+
+ my $easting = tile_to_os($x);
+ my $northing = tile_to_os($y);
+
+ my ( $lat, $lon ) = Utils::convert_en_to_latlon( $easting, $northing );
+ return ( $lat, $lon );
+}
+
+
sub click_to_tile {
my ($pin_tile, $pin, $invert) = @_;
$pin -= TILE_WIDTH while $pin > TILE_WIDTH;
@@ -212,21 +251,31 @@ sub click_to_tile {
# tile they were), convert to OSGB36 and return.
sub click_to_os {
my ($pin_tile_x, $pin_x, $pin_tile_y, $pin_y) = @_;
- my $tile_x = FixMyStreet::Map::click_to_tile($pin_tile_x, $pin_x);
- my $tile_y = FixMyStreet::Map::click_to_tile($pin_tile_y, $pin_y, 1);
- my $easting = FixMyStreet::Map::tile_to_os($tile_x);
- my $northing = FixMyStreet::Map::tile_to_os($tile_y);
+ my $tile_x = click_to_tile($pin_tile_x, $pin_x);
+ my $tile_y = click_to_tile($pin_tile_y, $pin_y, 1);
+ my $easting = tile_to_os($tile_x);
+ my $northing = tile_to_os($tile_y);
return ($easting, $northing);
}
+# Given some click co-ords (the tile they were on, and where in the
+# tile they were), convert to WGS84 and return.
+sub click_to_wgs84 {
+ my $self = shift;
+ my $q = shift;
+ my ( $easting, $northing ) = click_to_os(@_);
+ my ( $lat, $lon ) = mySociety::GeoUtil::national_grid_to_wgs84( $easting, $northing, 'G' );
+ return ( $lat, $lon );
+}
+
# Given (E,N) and potential override (X,Y), return the X/Y tile for the centre
# of the map (either to get the point near the middle, or the override X,Y),
# and the pixel co-ords of the point, relative to that map.
sub os_to_px_with_adjust {
my ($q, $easting, $northing, $in_x, $in_y) = @_;
- my $x = FixMyStreet::Map::os_to_tile($easting);
- my $y = FixMyStreet::Map::os_to_tile($northing);
+ my $x = os_to_tile($easting);
+ my $y = os_to_tile($northing);
my $x_tile = $in_x || int($x);
my $y_tile = $in_y || int($y);
@@ -238,20 +287,51 @@ sub os_to_px_with_adjust {
$y_tile += 1;
}
- my $px = FixMyStreet::Map::os_to_px($easting, $x_tile);
- my $py = FixMyStreet::Map::os_to_px($northing, $y_tile, 1);
+ my $px = os_to_px($easting, $x_tile);
+ my $py = os_to_px($northing, $y_tile, 1);
if ($q->{site} eq 'barnet') { # Map is 380px, so might need to adjust
if (!$in_x && $px > 380) {
$x_tile++;
- $px = FixMyStreet::Map::os_to_px($easting, $x_tile);
+ $px = os_to_px($easting, $x_tile);
}
if (!$in_y && $py > 380) {
$y_tile--;
- $py = FixMyStreet::Map::os_to_px($northing, $y_tile, 1);
+ $py = os_to_px($northing, $y_tile, 1);
}
}
return ($x_tile, $y_tile, $px, $py);
}
+sub compass ($$$) {
+ my ( $q, $x, $y ) = @_;
+ my @compass;
+ for ( my $i = $x - 1 ; $i <= $x + 1 ; $i++ ) {
+ for ( my $j = $y - 1 ; $j <= $y + 1 ; $j++ ) {
+ $compass[$i][$j] = NewURL( $q, x => $i, y => $j );
+ }
+ }
+ my $recentre = NewURL($q);
+ my $host = Page::base_url_with_lang( $q, undef );
+ return <<EOF;
+<table cellpadding="0" cellspacing="0" border="0" id="compass">
+<tr valign="bottom">
+<td align="right"><a rel="nofollow" href="${compass[$x-1][$y+1]}"><img src="$host/i/arrow-northwest.gif" alt="NW" width=11 height=11></a></td>
+<td align="center"><a rel="nofollow" href="${compass[$x][$y+1]}"><img src="$host/i/arrow-north.gif" vspace="3" alt="N" width=13 height=11></a></td>
+<td><a rel="nofollow" href="${compass[$x+1][$y+1]}"><img src="$host/i/arrow-northeast.gif" alt="NE" width=11 height=11></a></td>
+</tr>
+<tr>
+<td><a rel="nofollow" href="${compass[$x-1][$y]}"><img src="$host/i/arrow-west.gif" hspace="3" alt="W" width=11 height=13></a></td>
+<td align="center"><a rel="nofollow" href="$recentre"><img src="$host/i/rose.gif" alt="Recentre" width=35 height=34></a></td>
+<td><a rel="nofollow" href="${compass[$x+1][$y]}"><img src="$host/i/arrow-east.gif" hspace="3" alt="E" width=11 height=13></a></td>
+</tr>
+<tr valign="top">
+<td align="right"><a rel="nofollow" href="${compass[$x-1][$y-1]}"><img src="$host/i/arrow-southwest.gif" alt="SW" width=11 height=11></a></td>
+<td align="center"><a rel="nofollow" href="${compass[$x][$y-1]}"><img src="$host/i/arrow-south.gif" vspace="3" alt="S" width=13 height=11></a></td>
+<td><a rel="nofollow" href="${compass[$x+1][$y-1]}"><img src="$host/i/arrow-southeast.gif" alt="SE" width=11 height=11></a></td>
+</tr>
+</table>
+EOF
+}
+
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm b/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm
index f97163c68..722df2a46 100644
--- a/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm
+++ b/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm
@@ -6,23 +6,23 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::Original::1_10k;
+use base 'FixMyStreet::Map::Tilma::Original';
use strict;
-use constant TILE_WIDTH => 254;
-use constant TIF_SIZE_M => 5000;
-use constant TIF_SIZE_PX => 7874;
-use constant SCALE_FACTOR => TIF_SIZE_M / (TIF_SIZE_PX / TILE_WIDTH);
-use constant TILE_TYPE => '10k-full';
+sub tile_width { return 254; }
+sub tif_size_m { return 5000; }
+sub tif_size_px { return 7874; }
+sub scale_factor { return tif_size_m() / (tif_size_px() / tile_width()); }
+sub tile_type { return '10k-full'; }
-use FixMyStreet::Map::Tilma::Original;
+sub copyright {
+ return _('&copy; Crown copyright. All rights reserved. Ministry of Justice 100037819&nbsp;2008.');
+}
-sub display_map {
- my ($q, %params) = @_;
- $params{copyright} = _('&copy; Crown copyright. All rights reserved. Ministry of Justice 100037819&nbsp;2008.');
- $params{watermark} = 1;
- return _display_map($q, %params);
+sub watermark {
+ return 1;
}
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm b/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm
index 103f4c15c..fe03fdb00 100644
--- a/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm
+++ b/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm
@@ -6,22 +6,23 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::Original::StreetView;
+use base 'FixMyStreet::Map::Tilma::Original';
use strict;
-use constant TILE_WIDTH => 250;
-use constant TIF_SIZE_M => 5000;
-use constant TIF_SIZE_PX => 5000;
-use constant SCALE_FACTOR => TIF_SIZE_M / (TIF_SIZE_PX / TILE_WIDTH);
-use constant TILE_TYPE => 'streetview';
+sub tile_width { return 250; }
+sub tif_size_m { return 5000; }
+sub tif_size_px { return 5000; }
+sub scale_factor { return tif_size_m() / (tif_size_px() / tile_width()); }
+sub tile_type { return 'streetview'; }
-use FixMyStreet::Map::Tilma::Original;
+sub copyright {
+ return _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
+}
-sub display_map {
- my ($q, %params) = @_;
- $params{copyright} = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
- return _display_map($q, %params);
+sub watermark {
+ return 0;
}
1;
diff --git a/perllib/Page.pm b/perllib/Page.pm
index 817a56761..24c52885a 100644
--- a/perllib/Page.pm
+++ b/perllib/Page.pm
@@ -14,11 +14,14 @@ package Page;
use strict;
use Carp;
use mySociety::CGIFast qw(-no_xhtml);
+use Data::Dumper;
+use Encode;
use Error qw(:try);
use File::Slurp;
use HTTP::Date; # time2str
use Image::Magick;
use Image::Size;
+use IO::String;
use POSIX qw(strftime);
use URI::Escape;
use Text::Template;
@@ -29,6 +32,7 @@ use Cobrand;
use mySociety::Config;
use mySociety::DBHandle qw/dbh select_all/;
+use mySociety::Email;
use mySociety::EvEl;
use mySociety::Locale;
use mySociety::MaPit;
@@ -47,15 +51,19 @@ use FixMyStreet::Map;
my $lastmodified;
sub do_fastcgi {
- my ($func, $lm) = @_;
+ my ($func, $lm, $binary) = @_;
try {
my $W = new mySociety::WatchUpdate();
- while (my $q = new mySociety::Web()) {
+ while (my $q = new mySociety::Web(unicode => 1)) {
next if $lm && $q->Maybe304($lm);
$lastmodified = $lm;
microsite($q);
+ my $str_fh = IO::String->new;
+ my $old_fh = select($str_fh);
&$func($q);
+ select($old_fh) if defined $old_fh;
+ print $binary ? ${$str_fh->string_ref} : encode_utf8(${$str_fh->string_ref});
dbh()->rollback() if $mySociety::DBHandle::conf_ok;
$W->exit_if_changed();
}
@@ -78,14 +86,17 @@ sub report_error {
my $trylater = sprintf(_('Please try again later, or <a href="mailto:%s">email us</a> to let us know.'), $contact_email);
my $somethingwrong = _("Sorry! Something's gone wrong.");
my $errortext = _("The text of the error was:");
- print "Status: 500\nContent-Type: text/html; charset=iso-8859-1\n\n",
+
+ my $msg_br = join '<br><br>', split m{\n}, $msg;
+
+ print "Status: 500\nContent-Type: text/html; charset=utf-8\n\n",
qq(<html><head><title>$somethingwrong</title></head></html>),
q(<body>),
qq(<h1>$somethingwrong</h1>),
qq(<p>$trylater</p>),
q(<hr>),
qq(<p>$errortext</p>),
- qq(<blockquote class="errortext">$msg</blockquote>),
+ qq(<blockquote class="errortext">$msg_br</blockquote>),
q(</body></html>);
}
@@ -106,7 +117,9 @@ sub microsite {
my $lang;
$lang = 'cy' if $host =~ /cy/;
$lang = 'en-gb' if $host =~ /^en\./;
- Cobrand::set_lang_and_domain(get_cobrand($q), $lang);
+ Cobrand::set_lang_and_domain(get_cobrand($q), $lang, 1);
+
+ FixMyStreet::Map::set_map_class($q->param('map'));
Problems::set_site_restriction($q);
Memcached::set_namespace(mySociety::Config::get('BCI_DB_NAME') . ":");
@@ -180,9 +193,8 @@ sub template_vars ($%) {
my $lang_url = base_url_with_lang($q, 1);
$lang_url .= $ENV{REQUEST_URI} if $ENV{REQUEST_URI};
- my $site_title = $q->{site} eq 'fixmystreet'
- ? _('FixMyStreet')
- : Cobrand::site_title(get_cobrand($q));
+ my $site_title = Cobrand::site_title(get_cobrand($q));
+ $site_title = _('FixMyStreet') unless $site_title;
%vars = (
'report' => _('Report a problem'),
@@ -197,7 +209,7 @@ sub template_vars ($%) {
'lang_url' => $lang_url,
'title' => $params{title},
'rss' => '',
- map_js => FixMyStreet::Map::header_js(),
+ map_js => $params{js} || '',
);
if ($params{rss}) {
@@ -208,12 +220,10 @@ sub template_vars ($%) {
$vars{robots} = '<meta name="robots" content="' . $params{robots} . '">';
}
- if ($q->{site} eq 'fixmystreet') {
- my $home = !$params{title} && $ENV{SCRIPT_NAME} eq '/index.cgi' && !$ENV{QUERY_STRING};
- $vars{heading_element_start} = $home ? '<h1 id="header">' : '<div id="header"><a href="/">';
- $vars{heading} = _('Fix<span id="my">My</span>Street');
- $vars{heading_element_end} = $home ? '</h1>' : '</a></div>';
- }
+ my $home = !$params{title} && $ENV{SCRIPT_NAME} eq '/index.cgi' && !$ENV{QUERY_STRING};
+ $vars{heading_element_start} = $home ? '<h1 id="header">' : '<div id="header"><a href="/">';
+ $vars{heading} = _('Fix<span id="my">My</span>Street');
+ $vars{heading_element_end} = $home ? '</h1>' : '</a></div>';
return \%vars;
}
@@ -249,28 +259,14 @@ sub template_include {
return undef unless -e $template_file;
$template = Text::Template->new(
- SOURCE => $template_file,
+ TYPE => 'STRING',
+ # Don't use FILE, because we need to make sure it's Unicode characters
+ SOURCE => decode_utf8(File::Slurp::read_file($template_file)),
DELIMITERS => ['{{', '}}'],
);
return $template->fill_in(HASH => \%params);
}
-=item template_header TEMPLATE Q ROOT PARAMS
-
-Return HTML for the templated top of a page, given a
-template name, request, template root, and parameters.
-
-=cut
-
-sub template_header($$$%) {
- my ($template, $q, $template_root, %params) = @_;
- $template = $q->{site} eq 'fixmystreet'
- ? 'header'
- : $template . '-header';
- my $vars = template_vars($q, %params);
- return template_include($template, $q, $template_root, %$vars);
-}
-
=item header Q [PARAM VALUE ...]
Return HTML for the top of the page, given PARAMs (TITLE is required).
@@ -282,7 +278,7 @@ sub header ($%) {
my $default_params = Cobrand::header_params(get_cobrand($q), $q, %params);
my %default_params = %{$default_params};
%params = (%default_params, %params);
- my %permitted_params = map { $_ => 1 } qw(title rss expires lastmodified template cachecontrol context status_code robots);
+ my %permitted_params = map { $_ => 1 } qw(title rss expires lastmodified template cachecontrol context status_code robots js);
foreach (keys %params) {
croak "bad parameter '$_'" if (!exists($permitted_params{$_}));
}
@@ -300,8 +296,8 @@ sub header ($%) {
$params{title} = ent($params{title});
$params{lang} = $mySociety::Locale::lang;
- my $template = template($q, %params);
- my $html = template_header($template, $q, template_root($q), %params);
+ my $vars = template_vars($q, %params);
+ my $html = template_include('header', $q, template_root($q), %$vars);
my $cache_val = $default_params{cachecontrol};
if (mySociety::Config::get('STAGING_SITE')) {
$html .= '<p class="error">' . _("This is a developer site; things might break at any time, and the database will be periodically deleted.") . '</p>';
@@ -315,10 +311,28 @@ sub header ($%) {
sub footer {
my ($q, %params) = @_;
- if ($q->{site} ne 'fixmystreet') {
- my $template = template($q, %params) . '-footer';
- my $template_root = template_root($q);
- my $html = template_include($template, $q, $template_root, %params);
+ my $pc = $q->param('pc') || '';
+ $pc = '?pc=' . URI::Escape::uri_escape_utf8($pc) if $pc;
+
+ my $creditline = _('Built by <a href="http://www.mysociety.org/">mySociety</a>, using some <a href="http://github.com/mysociety/fixmystreet">clever</a>&nbsp;<a href="https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa">code</a>.');
+ if (mySociety::Config::get('COUNTRY') eq 'NO') {
+ $creditline = _('Built by <a href="http://www.mysociety.org/">mySociety</a> and maintained by <a href="http://www.nuug.no/">NUUG</a>, using some <a href="http://github.com/mysociety/fixmystreet">clever</a>&nbsp;<a href="https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa">code</a>.');
+ }
+
+ %params = (%params,
+ navigation => _('Navigation'),
+ report => _("Report a problem"),
+ reports => _("All reports"),
+ alerts => _("Local alerts"),
+ help => _("Help"),
+ contact => _("Contact"),
+ pc => $pc,
+ orglogo => _('<a href="http://www.mysociety.org/"><img id="logo" width="133" height="26" src="/i/mysociety-dark.png" alt="View mySociety.org"><span id="logoie"></span></a>'),
+ creditline => $creditline,
+ );
+
+ my $html = template_include('footer', $q, template_root($q), %params);
+ if ($html) {
my $lang = $mySociety::Locale::lang;
if ($q->{site} eq 'emptyhomes' && $lang eq 'cy') {
$html =~ s/25 Walter Road<br>Swansea/25 Heol Walter<br>Abertawe/;
@@ -326,9 +340,6 @@ sub footer {
return $html;
}
- my $pc = $q->param('pc') || '';
- $pc = "?pc=" . ent($pc) if $pc;
-
my $piwik = "";
if (mySociety::Config::get('BASE_URL') eq "http://www.fixmystreet.com") {
$piwik = <<EOF;
@@ -347,29 +358,20 @@ piwikTracker.enableLinkTracking();
EOF
}
- my $navigation = _('Navigation');
- my $report = _("Report a problem");
- my $reports = _("All reports");
- my $alerts = _("Local alerts");
- my $help = _("Help");
- my $contact = _("Contact");
- my $orglogo = _('<a href="http://www.mysociety.org/"><img id="logo" width="133" height="26" src="/i/mysociety-dark.png" alt="View mySociety.org"><span id="logoie"></span></a>');
- my $creditline = _('Built by <a href="http://www.mysociety.org/">mySociety</a>, using some <a href="http://github.com/mysociety/fixmystreet">clever</a>&nbsp;<a href="https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa">code</a>.');
-
return <<EOF;
</div></div>
-<h2 class="v">$navigation</h2>
+<h2 class="v">$params{navigation}</h2>
<ul id="navigation">
-<li><a href="/">$report</a></li>
-<li><a href="/reports">$reports</a></li>
-<li><a href="/alert$pc">$alerts</a></li>
-<li><a href="/faq">$help</a></li>
-<li><a href="/contact">$contact</a></li>
+<li><a href="/">$params{report}</a></li>
+<li><a href="/reports">$params{reports}</a></li>
+<li><a href="/alert$params{pc}">$params{alerts}</a></li>
+<li><a href="/faq">$params{help}</a></li>
+<li><a href="/contact">$params{contact}</a></li>
</ul>
-$orglogo
+$params{orglogo}
-<p id="footer">$creditline</p>
+<p id="footer">$params{creditline}</p>
$piwik
@@ -390,24 +392,69 @@ sub error_page ($$) {
}
# send_email TO (NAME) TEMPLATE-NAME PARAMETERS
-# TEMPLATE-NAME is currently one of problem, update, alert, tms
+# TEMPLATE-NAME is a full filename here.
sub send_email {
- my ($q, $email, $name, $thing, %h) = @_;
- my $file_thing = $thing;
- $file_thing = 'empty property' if $q->{site} eq 'emptyhomes' && $thing eq 'problem'; # Needs to be in English
- my $template = "$file_thing-confirm";
+ my ($q, $recipient_email_address, $name, $template, %h) = @_;
+
$template = File::Slurp::read_file("$FindBin::Bin/../templates/emails/$template");
- my $to = $name ? [[$email, $name]] : $email;
+ my $to = $name ? [[$recipient_email_address, $name]] : $recipient_email_address;
my $cobrand = get_cobrand($q);
my $sender = Cobrand::contact_email($cobrand);
my $sender_name = Cobrand::contact_name($cobrand);
$sender =~ s/team/fms-DO-NOT-REPLY/;
- mySociety::EvEl::send({
- _template_ => _($template),
+
+ # Can send email either via EvEl (if configured) or via local MTA on
+ # machine. If EvEl fails (server down etc) fall back to local sending
+
+ my $email_building_args = {
+ _template_ => _($template),
_parameters_ => \%h,
- From => [ $sender, _($sender_name)],
- To => $to,
- }, $email);
+ From => [ $sender, _($sender_name) ],
+ To => $to,
+ };
+
+ my $email_sent_successfully = 0;
+
+ if ( my $EvEl_url = mySociety::Config::get('EVEL_URL') ) {
+ eval {
+ mySociety::EvEl::send( $email_building_args, $recipient_email_address );
+ $email_sent_successfully = 1;
+ };
+
+ warn "ERROR: sending email via '$EvEl_url' failed: $@" if $@;
+ }
+
+ # If not sent through EvEL, or EvEl failed
+ if ( !$email_sent_successfully ) {
+ my $email = mySociety::Locale::in_gb_locale {
+ mySociety::Email::construct_email( $email_building_args );
+ };
+
+ my $send_email_result =
+ mySociety::EmailUtil::send_email( $email, $sender, $recipient_email_address );
+ $email_sent_successfully = !$send_email_result; # invert result
+ }
+
+ # Could not send email - die
+ if ( !$email_sent_successfully ) {
+ throw Error::Simple(
+ "Could not send email to '$recipient_email_address' "
+ . "using either EvEl or local MTA."
+ );
+ }
+
+}
+
+# send_confirmation_email TO (NAME) TEMPLATE-NAME PARAMETERS
+# TEMPLATE-NAME is currently one of problem, update, alert, tms
+sub send_confirmation_email {
+ my ($q, $recipient_email_address, $name, $thing, %h) = @_;
+
+ my $file_thing = $thing;
+ $file_thing = 'empty property' if $q->{site} eq 'emptyhomes' && $thing eq 'problem'; # Needs to be in English
+ my $template = "$file_thing-confirm";
+
+ send_email($q, $recipient_email_address, $name, $template, %h);
my ($action, $worry);
if ($thing eq 'problem') {
@@ -433,6 +480,7 @@ if you do not, %s.</p>
<p>(Don't worry &mdash; %s)</p>
EOF
+ my $cobrand = get_cobrand($q);
my %vars = (
action => $action,
worry => $worry,
@@ -454,13 +502,13 @@ sub prettify_epoch {
if (strftime('%Y%m%d', @s) eq strftime('%Y%m%d', @t)) {
$tt = "$tt " . _('today');
} elsif (strftime('%Y %U', @s) eq strftime('%Y %U', @t)) {
- $tt = "$tt, " . strftime('%A', @s);
+ $tt = "$tt, " . decode_utf8(strftime('%A', @s));
} elsif ($short) {
- $tt = "$tt, " . strftime('%e %b %Y', @s);
+ $tt = "$tt, " . decode_utf8(strftime('%e %b %Y', @s));
} elsif (strftime('%Y', @s) eq strftime('%Y', @t)) {
- $tt = "$tt, " . strftime('%A %e %B %Y', @s);
+ $tt = "$tt, " . decode_utf8(strftime('%A %e %B %Y', @s));
} else {
- $tt = "$tt, " . strftime('%a %e %B %Y', @s);
+ $tt = "$tt, " . decode_utf8(strftime('%a %e %B %Y', @s));
}
return $tt;
}
@@ -479,17 +527,17 @@ sub prettify_duration {
return _('less than a minute') if $s == 0;
}
my @out = ();
- _part(\$s, 60*60*24*7, _('week'), \@out);
- _part(\$s, 60*60*24, _('day'), \@out);
- _part(\$s, 60*60, _('hour'), \@out);
- _part(\$s, 60, _('minute'), \@out);
+ _part(\$s, 60*60*24*7, _('%d week'), _('%d weeks'), \@out);
+ _part(\$s, 60*60*24, _('%d day'), _('%d days'), \@out);
+ _part(\$s, 60*60, _('%d hour'), _('%d hours'), \@out);
+ _part(\$s, 60, _('%d minute'), _('%d minutes'), \@out);
return join(', ', @out);
}
sub _part {
- my ($s, $m, $w, $o) = @_;
+ my ($s, $m, $w1, $w2, $o) = @_;
if ($$s >= $m) {
my $i = int($$s / $m);
- push @$o, "$i $w" . ($i != 1 ? 's' : '');
+ push @$o, sprintf(mySociety::Locale::nget($w1, $w2, $i), $i);
$$s -= $i * $m;
}
}
@@ -507,17 +555,17 @@ sub display_problem_meta_line($$) {
$out .= sprintf(_('%s, reported by %s at %s'), ent($category), ent($problem->{name}), $date_time);
}
} else {
- if ($problem->{service} && $problem->{category} && $problem->{category} ne 'Other' && $problem->{anonymous}) {
+ if ($problem->{service} && $problem->{category} && $problem->{category} ne _('Other') && $problem->{anonymous}) {
$out .= sprintf(_('Reported by %s in the %s category anonymously at %s'), ent($problem->{service}), ent($problem->{category}), $date_time);
- } elsif ($problem->{service} && $problem->{category} && $problem->{category} ne 'Other') {
+ } elsif ($problem->{service} && $problem->{category} && $problem->{category} ne _('Other')) {
$out .= sprintf(_('Reported by %s in the %s category by %s at %s'), ent($problem->{service}), ent($problem->{category}), ent($problem->{name}), $date_time);
} elsif ($problem->{service} && $problem->{anonymous}) {
$out .= sprintf(_('Reported by %s anonymously at %s'), ent($problem->{service}), $date_time);
} elsif ($problem->{service}) {
$out .= sprintf(_('Reported by %s by %s at %s'), ent($problem->{service}), ent($problem->{name}), $date_time);
- } elsif ($problem->{category} && $problem->{category} ne 'Other' && $problem->{anonymous}) {
+ } elsif ($problem->{category} && $problem->{category} ne _('Other') && $problem->{anonymous}) {
$out .= sprintf(_('Reported in the %s category anonymously at %s'), ent($problem->{category}), $date_time);
- } elsif ($problem->{category} && $problem->{category} ne 'Other') {
+ } elsif ($problem->{category} && $problem->{category} ne _('Other')) {
$out .= sprintf(_('Reported in the %s category by %s at %s'), ent($problem->{category}), ent($problem->{name}), $date_time);
} elsif ($problem->{anonymous}) {
$out .= sprintf(_('Reported anonymously at %s'), $date_time);
@@ -638,21 +686,29 @@ sub mapit_check_error {
return _('That postcode was not recognised, sorry.') if $location->{code} =~ /^4/;
return $location->{error};
}
- my $island = $location->{coordsyst};
- if (!$island) {
- return _("Sorry, that appears to be a Crown dependency postcode, which we don't cover.");
- }
- if ($island eq 'I') {
- return _("We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region.");
+ if (mySociety::Config::get('COUNTRY') eq 'GB') {
+ my $island = $location->{coordsyst};
+ if (!$island) {
+ return _("Sorry, that appears to be a Crown dependency postcode, which we don't cover.");
+ }
+ if ($island eq 'I') {
+ return _("We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region.");
+ }
}
return 0;
}
sub short_name {
- my $name = shift;
+ my ($area, $info) = @_;
# Special case Durham as it's the only place with two councils of the same name
- return 'Durham+County' if ($name eq 'Durham County Council');
- return 'Durham+City' if ($name eq 'Durham City Council');
+ # And some places in Norway
+ return 'Durham+County' if $area->{name} eq 'Durham County Council';
+ return 'Durham+City' if $area->{name} eq 'Durham City Council';
+ if ($area->{name} =~ /^(Os|Nes|V\xe5ler|Sande|B\xf8|Her\xf8y)$/) {
+ my $parent = $info->{$area->{parent_area}}->{name};
+ return URI::Escape::uri_escape_utf8("$area->{name}, $parent");
+ }
+ my $name = $area->{name};
$name =~ s/ (Borough|City|District|County) Council$//;
$name =~ s/ Council$//;
$name =~ s/ & / and /;
diff --git a/perllib/Problems.pm b/perllib/Problems.pm
index 1556b7724..3710c3a95 100644
--- a/perllib/Problems.pm
+++ b/perllib/Problems.pm
@@ -12,6 +12,7 @@
package Problems;
use strict;
+use Encode;
use Memcached;
use mySociety::DBHandle qw/dbh select_all/;
use mySociety::Locale;
@@ -87,18 +88,21 @@ sub recent_new {
# Front page recent lists
sub recent_photos {
- my ($num, $e, $n, $dist) = @_;
+ my ($num, $lat, $lon, $dist) = @_;
my $probs;
- if ($e) {
- my $key = "recent_photos:$site_key:$num:$e:$n:$dist";
+ if (defined $lat) {
+ my $dist2 = $dist; # Create a copy of the variable to stop it being stringified into a locale in the next line!
+ my $key = "recent_photos:$site_key:$num:$lat:$lon:$dist2";
$probs = Memcached::get($key);
unless ($probs) {
- $probs = select_all("select id, title
+ $probs = mySociety::Locale::in_gb_locale {
+ select_all("select id, title
from problem_find_nearby(?, ?, ?) as nearby, problem
where nearby.problem_id = problem.id
and state in ('confirmed', 'fixed') and photo is not null
$site_restriction
- order by confirmed desc limit $num", $e, $n, $dist);
+ order by confirmed desc limit $num", $lat, $lon, $dist);
+ };
Memcached::set($key, $probs, 3600);
}
} else {
@@ -170,46 +174,46 @@ sub front_stats {
# Problems around a location
sub around_map {
- my ($min_e, $max_e, $min_n, $max_n, $interval, $limit) = @_;
+ my ($min_lat, $max_lat, $min_lon, $max_lon, $interval, $limit) = @_;
my $limit_clause = '';
if ($limit) {
$limit_clause = " limit $limit";
}
mySociety::Locale::in_gb_locale { select_all(
- "select id,title,easting,northing,state,
+ "select id,title,latitude,longitude,state,
extract(epoch from confirmed) as time
from problem
where state in ('confirmed', 'fixed')
- and easting>=? and easting<? and northing>=? and northing<? " .
+ and latitude>=? and latitude<? and longitude>=? and longitude<? " .
($interval ? " and ms_current_timestamp()-lastupdate < '$interval'::interval" : '') .
" $site_restriction
order by created desc
- $limit_clause", $min_e, $max_e, $min_n, $max_n);
+ $limit_clause", $min_lat, $max_lat, $min_lon, $max_lon);
};
}
sub nearby {
- my ($dist, $ids, $limit, $mid_e, $mid_n, $interval) = @_;
+ my ($dist, $ids, $limit, $mid_lat, $mid_lon, $interval) = @_;
mySociety::Locale::in_gb_locale { select_all(
- "select id, title, easting, northing, distance, state,
+ "select id, title, latitude, longitude, distance, state,
extract(epoch from confirmed) as time
from problem_find_nearby(?, ?, $dist) as nearby, problem
where nearby.problem_id = problem.id " .
($interval ? " and ms_current_timestamp()-lastupdate < '$interval'::interval" : '') .
" and state in ('confirmed', 'fixed')" . ($ids ? ' and id not in (' . $ids . ')' : '') . "
$site_restriction
- order by distance, created desc limit $limit", $mid_e, $mid_n);
+ order by distance, created desc limit $limit", $mid_lat, $mid_lon);
}
}
sub fixed_nearby {
- my ($dist, $mid_e, $mid_n) = @_;
+ my ($dist, $mid_lat, $mid_lon) = @_;
mySociety::Locale::in_gb_locale { select_all(
- "select id, title, easting, northing, distance
+ "select id, title, latitude, longitude, distance
from problem_find_nearby(?, ?, $dist) as nearby, problem
where nearby.problem_id = problem.id and state='fixed'
$site_restriction
- order by lastupdate desc", $mid_e, $mid_n);
+ order by lastupdate desc", $mid_lat, $mid_lon);
}
}
@@ -218,7 +222,7 @@ sub fixed_nearby {
sub fetch_problem {
my $id = shift;
my $p = dbh()->selectrow_hashref(
- "select id, easting, northing, council, category, title, detail, photo,
+ "select id, latitude, longitude, council, category, title, detail, photo,
used_map, name, anonymous, extract(epoch from confirmed) as time,
state, extract(epoch from whensent-confirmed) as whensent,
extract(epoch from ms_current_timestamp()-lastupdate) as duration,
@@ -259,7 +263,7 @@ sub problems_matching_criteria {
my $areas_info = mySociety::MaPit::call('areas', \@councils);
foreach my $problem (@$problems){
if ($problem->{council}) {
- my @council_names = map { $areas_info->{$_}->{name}} @{$problem->{council}} ;
+ my @council_names = map { $areas_info->{$_}->{name} } @{$problem->{council}} ;
$problem->{council} = join(' and ', @council_names);
}
}
diff --git a/perllib/Utils.pm b/perllib/Utils.pm
index 24f4a6f94..21994d20b 100644
--- a/perllib/Utils.pm
+++ b/perllib/Utils.pm
@@ -13,18 +13,98 @@ package Utils;
use strict;
use mySociety::DBHandle qw(dbh);
+use mySociety::GeoUtil;
+use mySociety::Locale;
sub workaround_pg_bytea {
- my ($st, $img_idx, @elements) = @_;
+ my ( $st, $img_idx, @elements ) = @_;
my $s = dbh()->prepare($st);
- for (my $i=1; $i<=@elements; $i++) {
- if ($i == $img_idx) {
- $s->bind_param($i, $elements[$i-1], { pg_type => DBD::Pg::PG_BYTEA });
- } else {
- $s->bind_param($i, $elements[$i-1]);
+ for ( my $i = 1 ; $i <= @elements ; $i++ ) {
+ if ( $i == $img_idx ) {
+ $s->bind_param(
+ $i,
+ $elements[ $i - 1 ],
+ { pg_type => DBD::Pg::PG_BYTEA }
+ );
+ }
+ else {
+ $s->bind_param( $i, $elements[ $i - 1 ] );
}
}
$s->execute();
}
+=head2 convert_latlon_to_en
+
+ ( $easting, $northing ) = Utils::convert_en_to_latlon( $latitude, $longitude );
+
+Takes the WGS84 latitude and longitude and returns OSGB36 easting and northing.
+
+=cut
+
+sub convert_latlon_to_en {
+ my ( $latitude, $longitude ) = @_;
+
+ my ( $easting, $northing ) =
+ mySociety::Locale::in_gb_locale {
+ mySociety::GeoUtil::wgs84_to_national_grid( $latitude, $longitude, 'G' );
+ };
+
+ return ( $easting, $northing );
+}
+
+=head2 convert_en_to_latlon
+
+ ( $latitude, $longitude ) = Utils::convert_en_to_latlon( $easting, $northing );
+
+Takes the OSGB36 easting and northing and returns WGS84 latitude and longitude.
+
+=cut
+
+sub convert_en_to_latlon {
+ my ( $easting, $northing ) = @_;
+
+ my ( $latitude, $longitude ) =
+
+ # map { truncate_coordinate($_) }
+ mySociety::GeoUtil::national_grid_to_wgs84( $easting, $northing, 'G' );
+
+ return ( $latitude, $longitude );
+}
+
+=head2 convert_en_to_latlon_truncated
+
+ ( $lat, $lon ) = Utils::convert_en_to_latlon( $easting, $northing );
+
+Takes the OSGB36 easting and northing and returns WGS84 latitude and longitude
+(truncated using C<Utils::truncate_coordinate>).
+
+=cut
+
+sub convert_en_to_latlon_truncated {
+ my ( $easting, $northing ) = @_;
+
+ return
+ map { truncate_coordinate($_) }
+ convert_en_to_latlon( $easting, $northing );
+}
+
+=head2 truncate_coordinate
+
+ $short = Utils::truncate_coordinate( $long );
+
+Given a long coordinate returns a shorter one - rounded to 6 decimal places -
+which is < 1m at the equator, if you're using WGS84 lat/lon.
+
+=cut
+
+sub truncate_coordinate {
+ my $in = shift;
+ my $out = mySociety::Locale::in_gb_locale {
+ sprintf( '%0.6f', $in );
+ };
+ $out =~ s{\.?0+\z}{} if $out =~ m{\.};
+ return $out;
+}
+
1;
diff --git a/t/Cobrand.t b/t/Cobrand.t
index f6c2e9c87..1f38ec605 100755
--- a/t/Cobrand.t
+++ b/t/Cobrand.t
@@ -51,7 +51,7 @@ sub test_disambiguate_location {
$q = new MockQuery('nosite');
$s = 'London Road';
$s = Cobrand::disambiguate_location('nosite', $s, $q);
- ok($s eq 'London Road', 'should return location string as passed if no cobrand module exists') or diag("Got $s");
+ ok($s eq 'London Road&gl=uk', 'should return location string as passed if no cobrand module exists') or diag("Got $s");
}
diff --git a/t/Page.t b/t/Page.t
index d4ccc9f3d..a1ae7f3aa 100755
--- a/t/Page.t
+++ b/t/Page.t
@@ -38,17 +38,24 @@ sub set_lang($) {
sub test_geocode_string() {
my %params = ();
- my $q = new MockQuery('nosite', \%params);
-
- # geocode a straightforward string, expect success
- my ($easting, $northing, $error) = FixMyStreet::Geocode::string('Buckingham Palace', $q);
- ok($easting == 529068, 'example easting generated') or diag("Got $easting");
- ok($northing == 179684, 'example northing generated') or diag("Got $northing");
- ok(! defined($error), 'should not generate error for simple example') or diag("Got $error");
- # expect a failure message for Northern Ireland
- ($easting, $northing, $error) = FixMyStreet::Geocode::string('Falls Road, Belfast', $q);
- ok($error eq "We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region.", 'error message produced for NI location') or diag("Got $error");
+ my $q = new MockQuery( 'nosite', \%params );
+
+ # geocode a straightforward string, expect success
+ my ( $latitude, $longitude, $error ) =
+ FixMyStreet::Geocode::string( 'Buckingham Palace', $q );
+ is( $latitude, 51.5013639, 'example easting generated' );
+ is( $longitude, -0.1418898, 'example northing generated' );
+ is( $error, undef, 'should not generate error for simple example' );
+ # expect a failure message for Northern Ireland
+ ( $latitude, $longitude, $error ) =
+ FixMyStreet::Geocode::string( 'Falls Road, Belfast', $q );
+ is(
+ $error,
+ "We do not cover Northern Ireland, I'm afraid, as our licence doesn't "
+ . "include any maps for the region.",
+ 'error message produced for NI location'
+ );
}
sub test_header() {
@@ -64,9 +71,12 @@ sub test_header() {
# Test that template passed is rendered
$params{'template'} = 'test';
- $html = Page::template_header('test', $q, '/../t/templates/' . $q->{site} . '/', title=>'My test title', lang=>'en-gb');
+ $html = Page::template_include('test-header', $q,
+ '/../t/templates/' . $q->{site} . '/',
+ title => 'My test title', lang => 'en-gb'
+ );
+
like ($html, qr/My test header template/, 'named template rendered ok');
-
return 1;
}
diff --git a/t/utils.t b/t/utils.t
new file mode 100644
index 000000000..385c482ed
--- /dev/null
+++ b/t/utils.t
@@ -0,0 +1,41 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use Test::More tests => 9;
+
+use FindBin;
+use lib "$FindBin::Bin/../perllib";
+use lib "$FindBin::Bin/../commonlib/perllib";
+
+use Utils;
+
+my @truncate_tests = (
+ [ '1.1234567890123', '1.123457', "truncate down" ],
+ [ '1.123456', '1.123456', "leave untouched" ],
+ [ '1.12', '1.12', "don't extend" ],
+ [ '1.100000001', '1.1', "knock off trailing zeros" ],
+ [ '1.000000001', '1', "knock off trailing zeros" ],
+ [ '0.0', '0', "knock off trailing zeros" ],
+ [ '+123', '123', "drop plus sign" ],
+ [ '-123', '-123', "keep minus sign" ],
+);
+
+foreach my $test (@truncate_tests) {
+ my ( $in, $out, $msg ) = @$test;
+ is Utils::truncate_coordinate($in), $out, $msg;
+}
+
+my @convert_en_to_latlon_tests = (
+
+ # e n lat lon
+ [ 1234, 4567, 49.808509, -7.544784 ],
+);
+
+foreach my $test (@convert_en_to_latlon_tests) {
+ my ( $e, $n, $lat, $lon ) = @$test;
+ is_deeply #
+ [ Utils::convert_en_to_latlon_truncated( $e, $n ) ], #
+ [ $lat, $lon ], #
+ "convert ($e,$n) to ($lat,$lon)";
+}
diff --git a/templates/emails/alert-update b/templates/emails/alert-update
index f68ee55a4..ac0ddd50a 100644
--- a/templates/emails/alert-update
+++ b/templates/emails/alert-update
@@ -4,6 +4,8 @@ The following updates have been left on this problem:
<?=$values['data']?>
+<?=$values['state_message']?>
+
To view or reply to these updates, please visit the following URL:
<?=$values['problem_url']?>
diff --git a/templates/emails/submit-brent b/templates/emails/submit-brent
index 6cb226209..f3a9e5bb8 100644
--- a/templates/emails/submit-brent
+++ b/templates/emails/submit-brent
@@ -21,9 +21,9 @@ Email: <?=$values['email']?>
Details: <?=$values['detail']?>
-Easting: <?=$values['easting']?>
+<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>
-Northing: <?=$values['northing']?>
+Longitude: <?=$values['longitude']?>
<?=$values['closest_address_machine']?>----------
diff --git a/templates/emails/submit-council b/templates/emails/submit-council
index d3a4a0c64..21c89119d 100644
--- a/templates/emails/submit-council
+++ b/templates/emails/submit-council
@@ -21,9 +21,9 @@ Email: <?=$values['email']?>
Details: <?=$values['detail']?>
-Easting: <?=$values['easting']?>
+<?=$values['easting_northing']?>Latitude: <?=$values['latitude']?>
-Northing: <?=$values['northing']?>
+Longitude: <?=$values['longitude']?>
<?=$values['closest_address']?>----------
diff --git a/templates/website/cobrands/barnet/barnet-footer b/templates/website/cobrands/barnet/footer
index f6963e553..40b9adce0 100644
--- a/templates/website/cobrands/barnet/barnet-footer
+++ b/templates/website/cobrands/barnet/footer
@@ -1,3 +1,4 @@
+ </div>
<br class="cl">
</div><!-- end content -->
</div><!-- end wrap -->
diff --git a/templates/website/cobrands/barnet/barnet-header b/templates/website/cobrands/barnet/header
index 67619b417..cd274df7b 100644
--- a/templates/website/cobrands/barnet/barnet-header
+++ b/templates/website/cobrands/barnet/header
@@ -94,4 +94,5 @@
<div id="wrap">
<div id="content">
+ <div id="mysociety">
diff --git a/templates/website/faq-eha.cy.html b/templates/website/cobrands/emptyhomes/faq-cy
index 1a446055e..1a446055e 100644
--- a/templates/website/faq-eha.cy.html
+++ b/templates/website/cobrands/emptyhomes/faq-cy
diff --git a/templates/website/faq-eha.html b/templates/website/cobrands/emptyhomes/faq-en-gb
index aa70a26ee..aa70a26ee 100755
--- a/templates/website/faq-eha.html
+++ b/templates/website/cobrands/emptyhomes/faq-en-gb
diff --git a/templates/website/cobrands/emptyhomes/emptyhomes-footer b/templates/website/cobrands/emptyhomes/footer
index 011773e5b..011773e5b 100644
--- a/templates/website/cobrands/emptyhomes/emptyhomes-footer
+++ b/templates/website/cobrands/emptyhomes/footer
diff --git a/templates/website/cobrands/emptyhomes/emptyhomes-header b/templates/website/cobrands/emptyhomes/header
index dfdefa8cc..3281430dd 100644
--- a/templates/website/cobrands/emptyhomes/emptyhomes-header
+++ b/templates/website/cobrands/emptyhomes/header
@@ -38,4 +38,4 @@
</div>
<div id="wrapper">
-<div id="content">
+<div id="mysociety">
diff --git a/templates/website/cobrands/fiksgatami/faq-nb b/templates/website/cobrands/fiksgatami/faq-nb
new file mode 100644
index 000000000..e702a5f2f
--- /dev/null
+++ b/templates/website/cobrands/fiksgatami/faq-nb
@@ -0,0 +1,124 @@
+<h1>Ofte stilte spørsmål</h1>
+<dl>
+ <dt>Hva er FiksGatami?</dt>
+
+ <dd>FiksGataMi er et nettsted for å hjelpe folk til å rapportere
+ problemer, vise, eller diskutere lokale problemer de har funnet i
+ sitt område ved ganske enkelt å finne dem på et kart. Du kan melde
+ problemer uten å tenke på hvilken offentlig myndighet som er
+ ansvarlig for å løse det, det finner FiksGataMi ut for deg.</dd>
+
+ <dt>Hva slags problemer kan jeg rapportere med FiksGataMi?</dt>
+
+ <dd>FiksGataMi er primært for rapportering av ting som
+ er <strong>ødelagt, skadet, dumpet eller trenger å bli reparert,
+ rengjort eller ryddet</strong>. Dette kan for eksempel være:
+
+ <ul>
+ <li>Forlatte kjøretøy</li>
+ <li>Gatelys som ikke virker</li>
+ <li>Plakater eller graffiti</li>
+ <li>Søppel</li>
+ <li>Behov for rengjøring</li>
+ <li>Behov for brøyting</li>
+ <li>Glatt vei eller gangsti</li>
+ </ul>
+ </dd>
+
+ <dt>Hva er FiksGataMi ikke?</dt>
+ <dd>FiksGataMi er ikke en måte å komme i kontakt med offentlig
+ myndighet for alle spørsmål - vennligst bruk FiksGataMi bare for
+ problemer som de ovennevnte.
+
+ <strong>Du må kontakte offentlige myndigheter direkte for
+ problemer som for eksempel</strong>:
+
+ <ul>
+ <li>Saker som haster eller akutt problemer</li>
+ <li>Støyforurensning eller bjeffende hunder</li>
+ <li>Brann og røyk / luktforurensning</li>
+ <li>Endringsforslag til kommune, fylke eller stat</li>
+ <li>Klager over naboene</li>
+ <li>Kriminell aktivitet</li>
+ </ul>
+ </dd>
+
+ <dt>Hvordan bruker jeg nettstedet?</dt>
+ <dd>NÃ¥r du har angitt et postnummer eller sted, blir du presentert
+ med et kart over det området. Du kan se problemer allerede
+ rapportert i dette området, eller rapporten selv på egen hånd ved
+ å klikke på kartet for plasseringen av problemet.</dd>
+
+ <dt>Hvordan blir saken løst?</dt>
+ <dd>Saken blir meldt til offentlige myndigheter via e-post. Saken
+ blir så behandlet på normal måte. Alternativt kan du diskutere
+ problemet på nettstedet med andre, og da sammen påvirke offentlige
+ myndigheter til å fikse det, eller fikse det direkte selv.</dd>
+
+ <dt>Er det gratis å bruke fiksgatami.no?</dt>
+ <dd>Ja, nettsiden er gratis å bruke. FiksGataMi drives av NUUG,
+ skjønt, hvis du ønsker å gi et bidrag, kan du gjøre det.</dd>
+
+ <dt>Kan jeg bruke FiksGataMi fra min mobil?</dt>
+ <dd>Hvis mobilen har nettleser kan du fint bruke tjenesten fra
+ mobiltelefon. Det jobbes med å skaffe finansiering til å tilpasse
+ iPhone- og Android-apps til norske forhold for å gjøre det enda
+ enklere å rapportere fra smart-telefoner.</dd>
+
+ <dt>Praktisk informasjon</dt>
+ <dd>FiksGataMi er ikke ansvarlig for innholdet og riktigheten av
+ materiale innsendt av brukerne. Vi forbeholder oss retten til å
+ redigere eller fjerne eventuelle problemer eller oppdateringer som
+ vi anser å være upassende fortrinnsvis etter å bli informert av en
+ bruker på nettstedet.</dd>
+
+ <dt>Hvorfor blir ikke mitt stedsnavn funnet?</dt>
+
+ <dd>Tjenesten bruker navnesøk hos Google Maps for å lokalisere
+ steder. Hvis Google Maps har mangler i sin stedsnavndatabase, vil
+ stedet ikke bli funnet eller sende deg til feil plass.
+ Tilsvarende søk på Google Maps (etter f.eks. "Slogvær, Norway")
+ vil også feile. For å fikse det må en ta kontakt med Google.</dd>
+
+</dl>
+
+<h2><a name="privacy"></a>Spørsmål om personvern</h2>
+
+<dl>
+
+ <dt>Vil jeg motta reklame eller annet uønsket epost?</dt>
+ <dd>Det vil ikke forekomme. Vi sender deg en epost hvis det skjer en
+ oppdatering av de problemer du har meldt inn, og vi vil aldri
+ sende deg e-post i forhold til noe annet en de problemene du
+ abonnerer på eller har meldt inn.</dd>
+
+ <dt>Hvem får å se min e-postadresse?</dt>
+ <dd>Hvis du melder inn en sak, lagrer vi på detaljer om saken, vi
+ sender samtidig en melding til kontakten eller kontaktene hos den
+ relevante myndighet som er ansvarlig for området der saken er
+ geografisk lokalisert. Meldingen sendes til offentlig myndighet
+ som følger offentlighetsloven og vil gi enhver innsyn i meldingen
+ og epostadressen etter de gjeldene lover og regler. Vi i
+ FiksGataMi vi ikke under noen omstendighet gi eller selge
+ e-postadressen din til noen andre.</dd>
+
+ <dt>Hvem står bak FiksGataMi?</dt>
+ <dd><p>Foreningen Norwegian Unix User Group (NUUG) står bak og
+ driver FiksGataMi. <a href="http://www.friprog.no/">Nasjonalt
+ kompetansesenter for fri programvare</a> og
+ <a href="http://www.dss.dep.no/">Departementenes
+ Servicesenter</a> bidrar med finansiering av prosjektet.</p>
+
+ <p>Organisasjonen mySociety i England har drevet og utviklet
+ nettstedet FixMyStreet siden 2007. Programvaren for FiksGataMi
+ drives idag basert på den samme programvaren og utvikling
+ foregår som et samarbeid mellom NUUG i Norge og MySociety i
+ England. FiksGataMi er i så måte et internasjonalt prosjekt.</p>
+
+ <p>Programvaren bak dette nettstedet er fri programvare, og er
+ tilgjengelig i hovedsak under GNU Affero GPL
+ programvarelisensen. Du kan laste ned kildekoden og hjelpe oss å
+ utvikle det. Du må gjerne bruke den i egne prosjekter, men du må
+ også gjøre tilgjengelig i kildekoden til slike prosjekter.</p></dd>
+
+ </dl>
diff --git a/templates/website/cobrands/fiksgatami/footer b/templates/website/cobrands/fiksgatami/footer
new file mode 100644
index 000000000..e78e7d439
--- /dev/null
+++ b/templates/website/cobrands/fiksgatami/footer
@@ -0,0 +1,16 @@
+</div></div>
+<h2 class="v">{{ $navigation }}</h2>
+<ul id="navigation">
+<li><a href="/">{{ $report }}</a></li>
+<li><a href="/reports">{{ $reports }}</a></li>
+<li><a href="/alert{{ $pc }}">{{ $alerts }}</a></li>
+<li><a href="/faq">{{ $help }}</a></li>
+<li><a href="/contact">{{ $contact }}</a></li>
+</ul>
+
+{{ $orglogo }}
+
+<p id="footer">{{ $creditline }}</p>
+
+</body>
+</html>
diff --git a/templates/website/cobrands/fiksgatami/header b/templates/website/cobrands/fiksgatami/header
new file mode 100644
index 000000000..41ccabff9
--- /dev/null
+++ b/templates/website/cobrands/fiksgatami/header
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="{{ $lang_code }}">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <script type="text/javascript" src="/yui/utilities.js"></script>
+ <script type="text/javascript" src="/js.js"></script>
+ {{ $map_js }}
+ {{ $robots }}
+
+ <title>{{ $title }}{{ $site_title }}</title>
+ <style type="text/css">
+ @import url("/css/core.css");
+ @import url("/cobrands/fiksgatami/css.css");
+ </style>
+ {{ $rss }}
+ </head>
+ <body>
+ {{ $heading_element_start }}{{ $heading }}{{ $heading_element_end }}
+ <div id="wrapper"><div id="mysociety">
diff --git a/templates/website/cobrands/southampton/footer b/templates/website/cobrands/southampton/footer
new file mode 100644
index 000000000..dac5d9c1a
--- /dev/null
+++ b/templates/website/cobrands/southampton/footer
@@ -0,0 +1,25 @@
+ </div>
+ </div>
+
+ <!-- End of main content area -->
+
+
+
+ <!-- Start of footer -->
+
+ <div id="footer">
+ <a href="http://www.southampton.gov.uk/council-partners/accesstoinfo/" class="accessInfo"><img alt="Access to Information" src="/cobrands/southampton/accessInfo.gif" /></a>
+ <ul id="bottomMenu">
+ <li><a href="http://www.southampton.gov.uk/tools/copyright.aspx">Copyright &copy; Southampton City Council 2009</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/privacypolicy.aspx">Privacy</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/disclaimer.aspx">Disclaimer</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/sitestats.aspx">Site Statistics</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/living/emergency-planning/">Emergencies</a></li>
+ </ul>
+ </div>
+
+ <!-- End of footer -->
+
+ </div>
+</body>
+</html>
diff --git a/templates/website/cobrands/southampton/header b/templates/website/cobrands/southampton/header
new file mode 100644
index 000000000..4f47c92e5
--- /dev/null
+++ b/templates/website/cobrands/southampton/header
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <script type="text/javascript" src="/yui/utilities.js"></script>
+ <script type="text/javascript" src="/js.js"></script>
+ {{ $map_js }}
+ {{ $robots }}
+
+ <title>{{ $title }}{{ $site_title }}</title>
+ <link rel="stylesheet" type="text/css" href="/css/core.css" />
+ <link rel="stylesheet" type="text/css" href="/cobrands/southampton/style.css" />
+ <link rel="stylesheet" type="text/css" href="/cobrands/southampton/css.css" />
+ {{ $rss }}
+</head>
+<body>
+ <ul id="topMenu">
+ <li><a href="/#content">Skip to content</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/accesskeys.aspx">Access keys</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/accessibility.aspx">Accessibility Information</a>|</li>
+ <li><a href="http://app.readspeaker.com/proreader/proreader.php?cid=5386&amp;lang=en_uk&amp;url=http://www.southampton.gov.uk" class="listen" onclick='window.open(this.href+"&amp;selhtml="+escape(selectedString), "prwin", "width=190, height=120, resizable=1, scrollbars=1, screenX=0, screenY=0, left=0, top=0"); return false;'>Listen</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/help.aspx">Site help</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/sitemap.aspx">Site map</a></li>
+ </ul>
+ <div id="wrapper">
+
+ <!-- Start of header -->
+
+ <div id="header">
+ <img class="logo" alt="Southampton City Council Logo" src="/cobrands/southampton/SCClogo.png" />
+ <a class="siteTitle" href="http://www.southampton.gov.uk">Southampton City Council</a>
+ <div id="searchWrap">
+ <form id="frmSearch" method="get" action="http://websearch.southampton.gov.uk/search">
+ <fieldset>
+ <label for="searchbox">Search the site<br /></label>
+ <input class="text" type="text" value="Enter keywords" id="searchbox" name="q"/>
+ <input type="hidden" id="site" name="site" value="SouthamptonOnline"/>
+ <input type="hidden" id="client" name="client" value="SouthamptonOnline"/>
+ <input type="hidden" id="proxystylesheet" name="proxystylesheet" value="SouthamptonOnline"/>
+ <input type="hidden" id="output" name="output" value="xml_no_dtd"/>
+ <input class="button" type="submit" value="search" />
+ </fieldset>
+ </form>
+ <form id="whereILive" method="post" action="http://www.southampton.gov.uk/MySoton/default.aspx">
+ <fieldset>
+ <label for="PostCode">Where I live
+ <img class="moreInfo" src="/cobrands/southampton/information.gif" alt="Find information about where you live" title="Find information about where you live" /><br />
+ </label>
+ <input id="PostCode" name="Postcode" class="text2" type="text" value="Enter street/postcode" />
+ <input class="button" type="submit" value="go" />
+ </fieldset>
+ </form>
+
+ </div>
+ <a class="mctv" href="http://www.southampton.mycounciltv.org"><img src="/cobrands/southampton/mctv.png" alt="Link to MyCouncilTV videos" /></a>
+ <ul id="topNav">
+ <li><a href="http://www.southampton.gov.uk/online/">Do it online</a></li>
+ <li><a href="http://www.southampton.gov.uk/customer-service/">Customer Services</a></li>
+ <li><a href="http://www.southampton.gov.uk/business/">Business</a></li>
+ <li><a href="http://www.southampton.gov.uk/s-environment/">Environment</a></li>
+ <li><a href="http://www.southampton.gov.uk/learning/">Learning</a></li>
+ <li><a href="http://www.southampton.gov.uk/s-leisure/">Leisure</a></li>
+ <li><a href="http://www.southampton.gov.uk/living/">Living</a></li>
+ <li><a href="http://www.southampton.gov.uk/council-partners/">Council/Partners</a></li>
+ <li><a href="http://www.southampton.gov.uk/news-events/">News and events</a></li>
+ <li><a href="http://www.southampton.gov.uk/visitors/">Visitors</a></li>
+ </ul>
+ <p class="atoz">A-Z of Council Services:</p>
+ <ul id="atoz">
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=A">A</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=B">B</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=C">C</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=D">D</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=E">E</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=F">F</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=G">G</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=H">H</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=I">I</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=J">J</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=K">K</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=L">L</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=M">M</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=N">N</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=O">O</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=P">P</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=Q">Q</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=R">R</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=S">S</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=T">T</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=U">U</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=V">V</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=W">W</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=X">X</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=Y">Y</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=Z">Z</a></li>
+ </ul>
+ <ul id="contacts">
+ <li><a href="http://www.southampton.gov.uk/customer-service/contact/">Contact us</a></li>
+ <li><a href="http://map.southampton.gov.uk/gis/">location and maps</a></li>
+ </ul>
+
+ </div>
+
+ <!-- End of header -->
+
+
+ <!-- Start of menu bar -->
+
+ <div id="menuBar">
+ <ul id="leftMenu">
+ <li class="parent"><a href="/">Fix My Street</a></li>
+ <li class="selected"><a href="/">Report a problem</a></li>
+ <li><a href="/reports/Southampton">All reports</a></li>
+ <li><a href="/alerts">Local alerts</a></li>
+ <li><a href="/faq">Help</a></li>
+ <li><a href="/contact">Contact</a></li>
+ </ul>
+ </div>
+
+
+ <!-- End of menu bar -->
+
+
+ <!-- Start of main content area -->
+
+ <div id="contentArea">
+ <div id="mysociety">
diff --git a/templates/website/faq.html b/templates/website/faq-en-gb
index a0f364550..117a9bfa7 100755
--- a/templates/website/faq.html
+++ b/templates/website/faq-en-gb
@@ -29,8 +29,9 @@ or clearing</strong>, such as:
directly for problems such as</strong>:
<ul><li>Anti-social behaviour
-
+ <li>Any urgent or emergency problems
<li>Noise pollution or barking dogs
+ <li>Fires and smoke/smell pollution
<li>Missing wheelie bins or recycling boxes or missed rubbish collections
<li>Proposals for speed bumps/ CCTV/ pedestrian crossings/ new road layouts/ etc.
<li>Complaining about your neighbours
@@ -56,13 +57,19 @@ by a registered charity, though, so if you want to make a contribution, <a
href="https://secure.mysociety.org/donate/">please do</a>.</dd>
<dt>Can I use FixMyStreet on my mobile?</dt>
- <dd>There are two iPhone apps for FixMyStreet, one written by us in 2008 and
- another much more recently by a volunteer, Martin Stephenson. Both are available for
- download on the App Store:
+ <dd><ul>
+ <li><em>iPhone:</em> There are two apps for FixMyStreet, one written by us
+ in 2008 and another much more recently by a volunteer, Martin Stephenson.
+ Both are available for download on the App Store:
<a href="http://itunes.apple.com/gb/app/fixmystreet/id297456545">FixMyStreet</a>,
<a href="http://itunes.apple.com/gb/app/streetreport/id371891859">StreetReport</a>.
- There is an Android app written by a volunteer, Anna Powell-Smith,
- available from the Android Market.
+ <li><em>Android:</em> A volunteer, Anna Powell-Smith, has written an app
+ available from the
+ <a href="https://market.android.com/details?id=com.android.fixmystreet">Android Market</a>.
+ <li><em>Nokia:</em> A volunteer, Thomas Forth, has written an app available from the
+ <a href="http://store.ovi.com/content/107557">Ovi Store</a>.
+ </ul>
+ <p>We also hope to make the website itself much more mobile friendly in the future.</p>
</dd>
<dt>Why do you only cover the countries of Great Britain?</dt>
@@ -106,7 +113,7 @@ dragging an empty square.</dd>
this might mean that you&rsquo;ll need to pan around to figure out where the
problem is if you&rsquo;re not familiar with the area. If you&rsquo;re from the
council then the emailed version of the problem report will contain the
- closest postal address to the pin on the map.</dd>
+ closest road to the pin on the map.</dd>
<dt>This site is great – why aren&rsquo;t you better publicised?</dt>
<dd>As a tiny charity we simply don&rsquo;t have a publicity budget, and we
diff --git a/templates/website/header b/templates/website/header
index 028d05506..b88d9b82c 100644
--- a/templates/website/header
+++ b/templates/website/header
@@ -16,4 +16,4 @@
</head>
<body>
{{ $heading_element_start }}{{ $heading }}{{ $heading_element_end }}
- <div id="wrapper"><div id="content">
+ <div id="wrapper"><div id="mysociety">
diff --git a/templates/website/problem b/templates/website/problem
index aba6b009c..4debc1d2e 100644
--- a/templates/website/problem
+++ b/templates/website/problem
@@ -37,7 +37,7 @@
<input type="hidden" name="submit_update" value="1">
<input type="hidden" name="id" value="{{ $input_h{id} }}">
<div><label for="form_name">{{ $name_label }}</label>
-<input type="text" name="name" id="form_name" value="{{ $input_h{name} }}" size="20"> (optional)</div>
+<input type="text" name="name" id="form_name" value="{{ $input_h{name} }}" size="20"> {{ $optional }}</div>
{{ if ( $field_errors{email}) {
"<div class='form-error'>$field_errors{email}</div>";
} }}
diff --git a/web-admin/index.cgi b/web-admin/index.cgi
index 2868cf2d6..62fcfb587 100755
--- a/web-admin/index.cgi
+++ b/web-admin/index.cgi
@@ -18,7 +18,8 @@ use strict;
use FindBin;
use lib "$FindBin::Bin/../perllib";
use lib "$FindBin::Bin/../commonlib/perllib";
-use POSIX qw(strftime);
+use Encode;
+use POSIX qw(strftime strcoll);
use Digest::MD5 qw(md5_hex);
use Page;
@@ -64,10 +65,10 @@ sub allowed_pages($) {
my $pages = Cobrand::admin_pages($cobrand);
if (!$pages) {
$pages = {
- 'summary' => ['Summary', 0],
- 'councilslist' => ['Council contacts', 1],
- 'reports' => ['Reports', 2],
- 'timeline' => ['Timeline', 3],
+ 'summary' => [_('Summary'), 0],
+ 'councilslist' => [_('Council contacts'), 1],
+ 'reports' => [_('Search Reports'), 2],
+ 'timeline' => [_('Timeline'), 3],
'councilcontacts' => [undef, undef],
'counciledit' => [undef, undef],
'report_edit' => [undef, undef],
@@ -80,10 +81,11 @@ sub allowed_pages($) {
sub html_head($$) {
my ($q, $title) = @_;
my $ret = $q->header(-type => 'text/html', -charset => 'utf-8');
+ my $site_title = _('FixMyStreet administration');
$ret .= <<END;
<html>
<head>
-<title>$title - FixMyStreet administration</title>
+<title>$title - $site_title</title>
<style type="text/css">
dt { clear: left; float: left; font-weight: bold; }
dd { margin-left: 8em; }
@@ -95,7 +97,7 @@ END
my $pages = allowed_pages($q);
my @links = sort {$pages->{$a}[1] <=> $pages->{$b}[1]} grep {$pages->{$_}->[0] } keys %$pages;
$ret .= $q->p(
- $q->strong("FixMyStreet admin:"),
+ $q->strong(_("FixMyStreet admin:")),
map { $q->a( { href => NewURL($q, page => $_) }, $pages->{$_}->[0]) } @links
);
@@ -118,8 +120,8 @@ sub fetch_data {
sub admin_summary ($) {
my ($q) = @_;
my $cobrand = Page::get_cobrand($q);
- print html_head($q, "Summary");
- print $q->h1("Summary");
+ print html_head($q, _("Summary"));
+ print $q->h1(_("Summary"));
my $contacts = Problems::contact_counts($cobrand);
my %contacts = @$contacts;
@@ -148,24 +150,24 @@ sub admin_summary ($) {
my $questionnaires_pc = $questionnaires{total} ? $questionnaires{1} / $questionnaires{total} * 100 : 'na';
print $q->ul(
- $q->li("<strong>$total_problems_live</strong> live problems"),
- $q->li("$comments{confirmed} live updates"),
- $q->li("$alerts{1} confirmed alerts, $alerts{0} unconfirmed"),
- $q->li("$questionnaires{total} questionnaires sent &ndash; $questionnaires{1} answered ($questionnaires_pc%)"),
- $q->li("$contacts{total} council contacts &ndash; $contacts{1} confirmed, $contacts{0} unconfirmed"),
+ $q->li(sprintf(_("<strong>%d</strong> live problems"), $total_problems_live)),
+ $q->li(sprintf(_("%d live updates"), $comments{confirmed})),
+ $q->li(sprintf(_("%d confirmed alerts, %d unconfirmed"), $alerts{1}, $alerts{0})),
+ $q->li(sprintf(_("%d questionnaires sent &ndash; %d answered (%d%%)"), $questionnaires{total}, $questionnaires{1}, $questionnaires_pc)),
+ $q->li(sprintf(_("%d council contacts &ndash; %d confirmed, %d unconfirmed"), $contacts{total}, $contacts{1}, $contacts{0})),
);
if (Cobrand::admin_show_creation_graph($cobrand)) {
print $q->p( $q->a({ href => mySociety::Config::get('BASE_URL') . "/bci-live-creation.png" },
- "Graph of problem creation by status over time" ));
+ _("Graph of problem creation by status over time") ));
}
- print $q->h2("Problem breakdown by state");
+ print $q->h2(_("Problem breakdown by state"));
print $q->ul(
map { $q->li("$problems{$_} $_") } sort keys %problems
);
- print $q->h2("Update breakdown by state");
+ print $q->h2(_("Update breakdown by state"));
print $q->ul(
map { $q->li("$comments{$_} $_") } sort keys %comments
);
@@ -177,23 +179,27 @@ sub admin_summary ($) {
sub admin_councils_list ($) {
my ($q) = @_;
- print html_head($q, "Council contacts");
- print $q->h1("Council contacts");
+ print html_head($q, _("Council contacts"));
+ print $q->h1(_("Council contacts"));
# Table of editors
- print $q->h2("Diligency prize league table");
+ print $q->h2(_("Diligency prize league table"));
my $edit_activity = dbh()->selectall_arrayref("select count(*) as c, editor from contacts_history group by editor order by c desc");
- print $q->ul(
- map { $q->li($_->[0] . " edits by " . $_->[1]) } @$edit_activity
- );
+ if (@$edit_activity) {
+ print $q->ul(
+ map { $q->li( sprintf(_('%d edits by %s'), $_->[0], $_->[1])) } @$edit_activity
+ );
+ } else {
+ print $q->p(_('No edits have yet been made.'));
+ }
# Table of councils
- print $q->h2("Councils");
- my $ignore = 'LGD';
- $ignore .= '|CTY' if $q->{site} eq 'emptyhomes';
- my @types = grep { !/$ignore/ } @$mySociety::VotingArea::council_parent_types; # LGD are NI councils
- my $areas = mySociety::MaPit::call('areas', \@types);
- my @councils_ids = sort { $areas->{$a}->{name} cmp $areas->{$b}->{name} } keys %$areas;
+ print $q->h2(_("Councils"));
+ my $cobrand = Page::get_cobrand($q);
+ my @area_types = Cobrand::area_types($cobrand);
+ my $areas = mySociety::MaPit::call('areas', \@area_types);
+ my @councils_ids = sort { strcoll($areas->{$a}->{name}, $areas->{$b}->{name}) } keys %$areas;
+ @councils_ids = grep { $_ ne 301 } @councils_ids;
my $bci_info = dbh()->selectall_hashref("
select area_id, count(*) as c, count(case when deleted then 1 else null end) as deleted,
count(case when confirmed then 1 else null end) as confirmed
@@ -202,26 +208,31 @@ sub admin_councils_list ($) {
my $list_part = sub {
my @ids = @_;
if (!scalar(@ids)) {
- print "None";
+ print _("None");
return;
}
- print $q->p(join($q->br(),
- map {
- $q->a({ href => NewURL($q, area_id => $_, page => 'councilcontacts') },
- $areas->{$_}->{name}) . " " .
+ my @li;
+ foreach (@ids) {
+ my $parent = '';
+ $parent = ', ' . $areas->{$areas->{$_}->{parent_area}}->{name}
+ if $areas->{$_}->{parent_area};
+
+ push @li, $q->li($q->a({ href => NewURL($q, area_id => $_, page => 'councilcontacts') },
+ $areas->{$_}->{name}) . $parent . ' ' .
($bci_info->{$_} && $q->{site} ne 'emptyhomes' ?
- $bci_info->{$_}->{c} . ' addresses'
- : '')
- } @ids));
+ sprintf(_('%d addresses'), $bci_info->{$_}->{c})
+ : ''));
+ }
+ print $q->ul(@li);
};
- print $q->h3('No info at all');
+ print $q->h3(_('No info at all'));
&$list_part(grep { !$bci_info->{$_} } @councils_ids);
- print $q->h3('Currently has 1+ deleted');
+ print $q->h3(_('Currently has 1+ deleted'));
&$list_part(grep { $bci_info->{$_} && $bci_info->{$_}->{deleted} } @councils_ids);
- print $q->h3('Some unconfirmeds');
+ print $q->h3(_('Some unconfirmeds'));
&$list_part(grep { $bci_info->{$_} && !$bci_info->{$_}->{deleted} && $bci_info->{$_}->{confirmed} != $bci_info->{$_}->{c} } @councils_ids);
- print $q->h3('All confirmed');
+ print $q->h3(_('All confirmed'));
&$list_part(grep { $bci_info->{$_} && !$bci_info->{$_}->{deleted} && $bci_info->{$_}->{confirmed} == $bci_info->{$_}->{c} } @councils_ids);
print html_tail($q);
}
@@ -251,20 +262,20 @@ sub admin_council_contacts ($$) {
", {},
$email, ($q->param('confirmed') ? 1 : 0),
($q->param('deleted') ? 1 : 0),
- ($q->remote_user() || "*unknown*"), $q->param('note'),
+ ($q->remote_user() || _("*unknown*")), $q->param('note'),
$area_id, $category
);
- $updated = $q->p($q->em("Values updated"));
+ $updated = $q->p($q->em(_("Values updated")));
unless ($update > 0) {
dbh()->do('insert into contacts
(area_id, category, email, editor, whenedited, note, confirmed, deleted)
values
(?, ?, ?, ?, ms_current_timestamp(), ?, ?, ?)', {},
$area_id, $category, $email,
- ($q->remote_user() || '*unknown*'), $q->param('note'),
+ ($q->remote_user() || _('*unknown*')), $q->param('note'),
($q->param('confirmed') ? 1 : 0), ($q->param('deleted') ? 1 : 0)
);
- $updated = $q->p($q->em("New category contact added"));
+ $updated = $q->p($q->em(_("New category contact added")));
}
dbh()->commit();
} elsif ($posted eq 'update') {
@@ -278,11 +289,11 @@ sub admin_council_contacts ($$) {
where area_id = ?
and category = ?
", {},
- ($q->remote_user() || "*unknown*"),
+ ($q->remote_user() || _("*unknown*")),
$area_id, $cat
);
}
- $updated = $q->p($q->em("Values updated"));
+ $updated = $q->p($q->em(_("Values updated")));
dbh()->commit();
}
@@ -301,7 +312,7 @@ sub admin_council_contacts ($$) {
# Title
my $mapit_data = mySociety::MaPit::call('area', $area_id);
- my $title = 'Council contacts for ' . $mapit_data->{name};
+ my $title = sprintf(_('Council contacts for %s'), $mapit_data->{name});
print html_head($q, $title);
print $q->h1($title);
print $updated;
@@ -314,20 +325,20 @@ sub admin_council_contacts ($$) {
"Example postcode " . $example_postcode) . " | ";
}
$links_html .= ' ' .
- $q->a({ href => mySociety::Config::get('BASE_URL') . "/reports?council=" . $area_id }, " List all reported problems");
+ $q->a({ href => mySociety::Config::get('BASE_URL') . "/reports?council=" . $area_id }, _(" List all reported problems"));
$links_html .= ' ' .
- $q->a({ href => NewURL($q, area_id => $area_id, page => 'councilcontacts', text => 1) }, 'Text only version');
+ $q->a({ href => NewURL($q, area_id => $area_id, page => 'councilcontacts', text => 1) }, _('Text only version'));
print $q->p($links_html);
# Display of addresses / update statuses form
print $q->start_form(-method => 'POST', -action => './');
print $q->start_table({border=>1, cellpadding=>2, cellspacing=>0});
- print $q->Tr({}, $q->th({}, ["Category", "Email", "Confirmed", "Deleted", "Last editor", "Note", "When edited", 'Confirm']));
+ print $q->Tr({}, $q->th({}, [_("Category"), _("Email"), _("Confirmed"), _("Deleted"), _("Last editor"), _("Note"), _("When edited"), _('Confirm')]));
foreach my $l (@$bci_data) {
print $q->Tr($q->td([
$q->a({ href => NewURL($q, area_id => $area_id, category => $l->{category}, page => 'counciledit') },
- $l->{category}), $l->{email}, $l->{confirmed} ? 'Yes' : 'No',
- $l->{deleted} ? 'Yes' : 'No', $l->{editor}, ent($l->{note}),
+ $l->{category}), $l->{email}, $l->{confirmed} ? _('Yes') : _('No'),
+ $l->{deleted} ? _('Yes') : _('No'), $l->{editor}, ent($l->{note}),
$l->{whenedited} =~ m/^(.+)\.\d+$/,
$q->checkbox(-name => 'confirmed', -value => $l->{category}, -label => '')
]));
@@ -339,34 +350,34 @@ sub admin_council_contacts ($$) {
$q->hidden('posted', 'update'),
$q->hidden('token', get_token($q)),
$q->hidden('page', 'councilcontacts'),
- $q->submit('Update statuses')
+ $q->submit(_('Update statuses'))
);
print $q->end_form();
# Display form for adding new category
- print $q->h2('Add new category');
+ print $q->h2(_('Add new category'));
print $q->start_form(-method => 'POST', -action => './');
if ($q->{site} ne 'emptyhomes') {
- print $q->p($q->strong("Category: "),
+ print $q->p($q->strong(_("Category: ")),
$q->textfield(-name => "category", -size => 30));
}
- print $q->p($q->strong("Email: "),
+ print $q->p($q->strong(_("Email: ")),
$q->textfield(-name => "email", -size => 30));
$q->autoEscape(0);
print $q->p(
- $q->checkbox(-id => 'confirmed', -name => "confirmed", -value => 1, -label => ' ' . $q->label({-for => 'confirmed'}, 'Confirmed')),
+ $q->checkbox(-id => 'confirmed', -name => "confirmed", -value => 1, -label => ' ' . $q->label({-for => 'confirmed'}, _('Confirmed'))),
' ',
- $q->checkbox(-id => 'deleted', -name => "deleted", -value => 1, -label => ' ' . $q->label({-for => 'deleted'}, 'Deleted'))
+ $q->checkbox(-id => 'deleted', -name => "deleted", -value => 1, -label => ' ' . $q->label({-for => 'deleted'}, _('Deleted')))
);
$q->autoEscape(1);
- print $q->p($q->strong("Note: "),
+ print $q->p($q->strong(_("Note: ")),
$q->textarea(-name => "note", -rows => 3, -columns=>40));
print $q->p(
$q->hidden('area_id', $area_id),
$q->hidden('posted', 'new'),
$q->hidden('token', get_token($q)),
$q->hidden('page', 'councilcontacts'),
- $q->submit('Create category')
+ $q->submit(_('Create category'))
);
print $q->end_form();
@@ -384,7 +395,7 @@ sub admin_council_edit ($$$) {
my $mapit_data = mySociety::MaPit::call('area', $area_id);
# Title
- my $title = 'Council contacts for ' . $mapit_data->{name};
+ my $title = sprintf(_('Council contacts for %s'), $mapit_data->{name});
print html_head($q, $title);
print $q->h1($title);
@@ -401,35 +412,35 @@ sub admin_council_edit ($$$) {
map { $q->param($_, $bci_data->{$_}) } qw/category email confirmed deleted/;
$q->param('page', 'councilcontacts');
$q->param('posted', 'new');
- print $q->strong("Category: ") . $bci_data->{category};
+ print $q->strong(_("Category: ")) . $bci_data->{category};
print $q->hidden('token', get_token($q)),
print $q->hidden("category");
- print $q->strong(" Email: ");
+ print $q->strong(' ' . _("Email: "));
print $q->textfield(-name => "email", -size => 30) . " ";
$q->autoEscape(0);
- print $q->checkbox(-id => 'confirmed', -name => "confirmed", -value => 1, -label => ' ' . $q->label({-for => 'confirmed'}, 'Confirmed'));
+ print $q->checkbox(-id => 'confirmed', -name => "confirmed", -value => 1, -label => ' ' . $q->label({-for => 'confirmed'}, _('Confirmed')));
print ' ';
- print $q->checkbox(-id => 'deleted', -name => "deleted", -value => 1, -label => ' ' . $q->label({-for => 'deleted'}, 'Deleted'));
+ print $q->checkbox(-id => 'deleted', -name => "deleted", -value => 1, -label => ' ' . $q->label({-for => 'deleted'}, _('Deleted')));
$q->autoEscape(1);
print $q->br();
- print $q->strong("Note: ");
+ print $q->strong(_("Note: "));
print $q->textarea(-name => "note", -rows => 3, -columns=>40) . " ";
print $q->br();
print $q->hidden('area_id');
print $q->hidden('posted');
print $q->hidden('page');
- print $q->submit('Save changes');
+ print $q->submit(_('Save changes'));
print $q->end_form();
# Display history of changes
- print $q->h2('History');
+ print $q->h2(_('History'));
print $q->start_table({border=>1});
- print $q->Tr({}, $q->th({}, ["When edited", "Email", "Confirmed", "Deleted", "Editor", "Note"]));
+ print $q->Tr({}, $q->th({}, [_("When edited"), _("Email"), _("Confirmed"), _("Deleted"), _("Editor"), _("Note")]));
my $html = '';
my $prev = undef;
foreach my $h (@$bci_history) {
- $h->{confirmed} = $h->{confirmed} ? "yes" : "no",
- $h->{deleted} = $h->{deleted} ? "yes" : "no",
+ $h->{confirmed} = $h->{confirmed} ? _("yes") : _("no"),
+ $h->{deleted} = $h->{deleted} ? _("yes") : _("no"),
my $emailchanged = ($prev && $h->{email} ne $prev->{email}) ? 1 : 0;
my $confirmedchanged = ($prev && $h->{confirmed} ne $prev->{confirmed}) ? 1 : 0;
my $deletedchanged = ($prev && $h->{deleted} ne $prev->{deleted}) ? 1 : 0;
@@ -450,20 +461,20 @@ sub admin_council_edit ($$$) {
sub admin_reports {
my $q = shift;
- my $title = 'Reports';
+ my $title = _('Search Reports');
my $cobrand = Page::get_cobrand($q);
my $pages = allowed_pages($q);
print html_head($q, $title);
print $q->h1($title);
print $q->start_form(-method => 'GET', -action => './');
- print $q->label({-for => 'search'}, 'Search:'), ' ', $q->textfield(-id => 'search', -name => "search", -size => 30);
+ print $q->label({-for => 'search'}, _('Search:')), ' ', $q->textfield(-id => 'search', -name => "search", -size => 30);
print $q->hidden('page');
print $q->end_form;
if (my $search = $q->param('search')) {
my $results = Problems::problem_search($search);
print $q->start_table({border=>1, cellpadding=>2, cellspacing=>0});
- print $q->Tr({}, $q->th({}, ['ID', 'Title', 'Name', 'Email', 'Council', 'Category', 'Anonymous', 'Cobrand', 'Created', 'State', 'When sent', '*']));
+ print $q->Tr({}, $q->th({}, [_('ID'), _('Title'), _('Name'), _('Email'), _('Council'), _('Category'), _('Anonymous'), _('Cobrand'), _('Created'), _('State'), _('When sent'), _('*') ]));
my $cobrand_data;
foreach (@$results) {
my $url = $_->{id};
@@ -485,11 +496,11 @@ sub admin_reports {
(my $whensent = $_->{whensent} || '&nbsp;') =~ s/\..*//;
my $state = $_->{state};
$state .= '<small>';
- $state .= "<br>Confirmed:&nbsp;$confirmed" if $_->{state} eq 'confirmed' || $_->{state} eq 'fixed';
- $state .= '<br>Fixed: ' . $lastupdate if $_->{state} eq 'fixed';
- $state .= "<br>Last&nbsp;update:&nbsp;$lastupdate" if $_->{state} eq 'confirmed';
+ $state .= "<br>" . _('Confirmed:') . "&nbsp;$confirmed" if $_->{state} eq 'confirmed' || $_->{state} eq 'fixed';
+ $state .= '<br>' . _('Fixed:') . ' ' . $lastupdate if $_->{state} eq 'fixed';
+ $state .= "<br>" . _('Last&nbsp;update:') . "&nbsp;$lastupdate" if $_->{state} eq 'confirmed';
$state .= '</small>';
- my $anonymous = $_->{anonymous} ? 'Yes' : 'No';
+ my $anonymous = $_->{anonymous} ? _('Yes') : _('No');
my $cobrand = $_->{cobrand};
$cobrand .= "<br>" . $_->{cobrand_data};
my $counciltext = '';
@@ -503,12 +514,12 @@ sub admin_reports {
print $q->Tr($attr, $q->td([ $url, ent($_->{title}), ent($_->{name}), ent($_->{email}),
$counciltext,
$category, $anonymous, $cobrand, $created, $state, $whensent,
- $q->a({ -href => NewURL($q, page=>'report_edit', id=>$_->{id}) }, 'Edit')
+ $q->a({ -href => NewURL($q, page=>'report_edit', id=>$_->{id}) }, _('Edit'))
]));
}
print $q->end_table;
- print $q->h2('Updates');
+ print $q->h2(_('Updates'));
my $updates = Problems::update_search($search);
admin_show_updates($q, $updates);
}
@@ -528,13 +539,13 @@ sub admin_edit_report {
dbh()->do('update problem set whensent=null where id=?', {}, $id);
admin_log_edit($q, $id, 'problem', 'resend');
dbh()->commit();
- $status_message = '<p><em>That problem will now be resent.</em></p>';
+ $status_message = '<p><em>' . _('That problem will now be resent.') . '</em></p>';
} elsif ($q->param('submit')) {
return not_found($q) if $q->param('token') ne get_token($q);
my $new_state = $q->param('state');
my $done = 0;
if ($new_state eq 'confirmed' && $row{state} eq 'unconfirmed' && $q->{site} eq 'emptyhomes') {
- $status_message = '<p><em>I am afraid you cannot confirm unconfirmed reports.</em></p>';
+ $status_message = '<p><em>' . _('I am afraid you cannot confirm unconfirmed reports.') . '</em></p>';
$done = 1;
}
my $query = 'update problem set anonymous=?, state=?, name=?, email=?, title=?, detail=?';
@@ -563,21 +574,21 @@ sub admin_edit_report {
}
dbh()->commit();
map { $row{$_} = $q->param($_) } qw(anonymous state name email title detail);
- $status_message = '<p><em>Updated!</em></p>';
+ $status_message = '<p><em>' . _('Updated!') . '</em></p>';
}
}
my %row_h = map { $_ => $row{$_} ? ent($row{$_}) : '' } keys %row;
- my $title = "Editing problem $id";
+ my $title = sprintf(_("Editing problem %d"), $id);
print html_head($q, $title);
print $q->h1($title);
print $status_message;
- my $council = $row{council} || '<em>None</em>';
+ my $council = $row{council} || '<em>' . _('None') . '</em>';
(my $areas = $row{areas}) =~ s/^,(.*),$/$1/;
- my $easting = int($row{easting}+0.5);
- my $northing = int($row{northing}+0.5);
- my $questionnaire = $row{send_questionnaire} ? 'Yes' : 'No';
- my $used_map = $row{used_map} ? 'used map' : "didn't use map";
+ my $latitude = $row{latitude};
+ my $longitude = $row{longitude};
+ my $questionnaire = $row{send_questionnaire} ? _('Yes') : _('No');
+ my $used_map = $row{used_map} ? _('used map') : _("didn't use map");
(my $whensent = $row{whensent} || '&nbsp;') =~ s/\..*//;
(my $confirmed = $row{confirmed} || '-') =~ s/ (.*?)\..*/&nbsp;$1/;
my $photo = '';
@@ -589,50 +600,50 @@ sub admin_edit_report {
}
$photo = '<li><img align="top" src="' . Cobrand::base_url_for_emails($cobrand, $cobrand_data) . '/photo?id=' . $row{id} . '">
<input type="checkbox" id="remove_photo" name="remove_photo" value="1">
-<label for="remove_photo">Remove photo (can\'t be undone!)</label>' if $row{photo};
+<label for="remove_photo">' . _("Remove photo (can't be undone!)") . '</label>' if $row{photo};
my $url_base = Cobrand::base_url_for_emails($cobrand, $cobrand_data);
my $url = $url_base . '/report/' . $row{id};
- my $anon = $q->label({-for=>'anonymous'}, 'Anonymous:') . ' ' . $q->popup_menu(-id => 'anonymous', -name => 'anonymous', -values => { 1=>'Yes', 0=>'No' }, -default => $row{anonymous});
- my $state = $q->label({-for=>'state'}, 'State:') . ' ' . $q->popup_menu(-id => 'state', -name => 'state', -values => { confirmed => 'Open', fixed => 'Fixed', hidden => 'Hidden', unconfirmed => 'Unconfirmed', partial => 'Partial' }, -default => $row{state});
+ my $anon = $q->label({-for=>'anonymous'}, _('Anonymous:')) . ' ' . $q->popup_menu(-id => 'anonymous', -name => 'anonymous', -values => { 1=>_('Yes'), 0=>_('No') }, -default => $row{anonymous});
+ my $state = $q->label({-for=>'state'}, _('State:')) . ' ' . $q->popup_menu(-id => 'state', -name => 'state', -values => { confirmed => _('Open'), fixed => _('Fixed'), hidden => _('Hidden'), unconfirmed => _('Unconfirmed'), partial => _('Partial') }, -default => $row{state});
my $resend = '';
- $resend = ' <input onclick="return confirm(\'You really want to resend?\')" type="submit" name="resend" value="Resend report">' if $row{state} eq 'confirmed';
+ $resend = ' <input onclick="return confirm(\'' . _('You really want to resend?') . '\')" type="submit" name="resend" value="' . _('Resend report') . '">' if $row{state} eq 'confirmed';
print $q->start_form(-method => 'POST', -action => './');
print $q->hidden('page');
print $q->hidden('id');
print $q->hidden('token', get_token($q));
print $q->hidden('submit', 1);
- print <<EOF;
+ print "
<ul>
-<li><a href="$url">View report on site</a>
-<li><label for="title">Subject:</label> <input size=60 type="text" id="title" name="title" value="$row_h{title}">
-<li><label for="detail">Details:</label><br><textarea name="detail" id="detail" cols=60 rows=10>$row_h{detail}</textarea>
-<li>Co-ordinates: $easting,$northing (originally entered $row_h{postcode}, $used_map)
-<li>For council(s): $council (other areas: $areas)
+<li><a href='$url'>" . _('View report on site') . "</a>
+<li><label for='title'>" . _('Subject:') . "</label> <input size=60 type='text' id='title' name='title' value='$row_h{title}'>
+<li><label for='detail'>" . _('Details:') . "</label><br><textarea name='detail' id='detail' cols=60 rows=10>$row_h{detail}</textarea>
+<li>" . _('Co-ordinates:') . " $latitude,$longitude (" . _('originally entered') . " $row_h{postcode}, $used_map)
+<li>" . _('For council(s):') . " $council (" . _('other areas:') . " $areas)
<li>$anon
<li>$state
-<li>Category: $row{category}
-<li>Name: <input type="text" name="name" id="name" value="$row_h{name}">
-<li>Email: <input type="text" id="email" name="email" value="$row_h{email}">
-<li>Phone: $row_h{phone}
-<li>Created: $row{created}
-<li>Confirmed: $confirmed
-<li>Sent: $whensent $resend
-<li>Last update: $row{lastupdate}
-<li>Service: $row{service}
-<li>Cobrand: $row{cobrand}
-<li>Cobrand data: $row{cobrand_data}
-<li>Going to send questionnaire? $questionnaire
+<li>" . _('Category:') . " $row{category}
+<li>" . _('Name:') . " <input type='text' name='name' id='name' value='$row_h{name}'>
+<li>" . _('Email:') . " <input type='text' id='email' name='email' value='$row_h{email}'>
+<li>" . _('Phone:') . " $row_h{phone}
+<li>" . _('Created:') . " $row{created}
+<li>" . _('Confirmed:') . " $confirmed
+<li>" . _('Sent:') . " $whensent $resend
+<li>" . _('Last update:') . " $row{lastupdate}
+<li>" . _('Service:') . " $row{service}
+<li>" . _('Cobrand:') . " $row{cobrand}
+<li>" . _('Cobrand data:') . " $row{cobrand_data}
+<li>" . _('Going to send questionnaire?') . " $questionnaire
$photo
</ul>
-EOF
- print $q->submit('Submit changes');
+";
+ print $q->submit(_('Submit changes'));
print $q->end_form;
- print $q->h2('Updates');
+ print $q->h2(_('Updates'));
my $updates = select_all('select * from comment where problem_id=? order by created', $id);
admin_show_updates($q, $updates);
print html_tail($q);
@@ -642,7 +653,7 @@ sub admin_show_updates {
my ($q, $updates) = @_;
my $cobrand = Page::get_cobrand($q);
print $q->start_table({border=>1, cellpadding=>2, cellspacing=>0});
- print $q->Tr({}, $q->th({}, ['ID', 'State', 'Name', 'Email', 'Created', 'Cobrand', 'Text', '*']));
+ print $q->Tr({}, $q->th({}, [ _('ID'), _('State'), _('Name'), _('Email'), _('Created'), _('Cobrand'), _('Text'), _('*') ]));
my $base_url = '';
my $cobrand_data;
foreach (@$updates) {
@@ -661,7 +672,7 @@ sub admin_show_updates {
$attr->{-class} = 'hidden' if $_->{state} eq 'hidden' || ($_->{problem_state} && $_->{problem_state} eq 'hidden');
print $q->Tr($attr, $q->td([ $url, $_->{state}, ent($_->{name} || ''),
ent($_->{email}), $_->{created}, $cobrand, ent($_->{text}),
- $q->a({ -href => NewURL($q, page=>'update_edit', id=>$_->{id}) }, 'Edit')
+ $q->a({ -href => NewURL($q, page=>'update_edit', id=>$_->{id}) }, _('Edit'))
]));
}
print $q->end_table;
@@ -683,12 +694,12 @@ sub admin_edit_update {
}
$query .= ' where id=?';
dbh()->do($query, {}, $q->param('state'), $q->param('name'), $q->param('email'), $q->param('text'), $id);
- $status_message = '<p><em>Updated!</em></p>';
+ $status_message = '<p><em>' . _('Updated!') . '</em></p>';
# If we're hiding an update, see if it marked as fixed and unfix if so
if ($q->param('state') eq 'hidden' && $row{mark_fixed}) {
dbh()->do("update problem set state='confirmed' where state='fixed' and id=?", {}, $row{problem_id});
- $status_message .= '<p><em>Problem marked as open.</em></p>';
+ $status_message .= '<p><em>' . _('Problem marked as open.') . '</em></p>';
}
if ($q->param('state') ne $row{state}) {
@@ -703,8 +714,8 @@ sub admin_edit_update {
dbh()->commit();
map { $row{$_} = $q->param($_) } qw(state name email text);
}
- my %row_h = map { $_ => $row{$_} ? ent($row{$_}) : '' } keys %row;
- my $title = "Editing update $id";
+ my %row_h = map { $_ => $row{$_} ? ent($row{$_}) : '' } keys %row;
+ my $title = sprintf(_("Editing update %d"), $id);
print html_head($q, $title);
print $q->h1($title);
print $status_message;
@@ -719,31 +730,31 @@ sub admin_edit_update {
my $photo = '';
$photo = '<li><img align="top" src="' . Cobrand::base_url_for_emails($cobrand, $cobrand_data) . '/photo?c=' . $row{id} . '">
<input type="checkbox" id="remove_photo" name="remove_photo" value="1">
-<label for="remove_photo">Remove photo (can\'t be undone!)</label>' if $row{photo};
+<label for="remove_photo">' . _("Remove photo (can't be undone!)") . '</label>' if $row{photo};
my $url = Cobrand::base_url_for_emails($cobrand, $cobrand_data) . '/report/' . $row{problem_id} . '#update_' . $row{id};
- my $state = $q->label({-for=>'state'}, 'State:') . ' ' . $q->popup_menu(-id => 'state', -name => 'state', -values => { confirmed => 'Confirmed', hidden => 'Hidden', unconfirmed => 'Unconfirmed' }, -default => $row{state});
+ my $state = $q->label({-for=>'state'}, _('State:')) . ' ' . $q->popup_menu(-id => 'state', -name => 'state', -values => { confirmed => _('Confirmed'), hidden => _('Hidden'), unconfirmed => _('Unconfirmed') }, -default => $row{state});
print $q->start_form(-method => 'POST', -action => './');
print $q->hidden('page');
print $q->hidden('id');
print $q->hidden('token', get_token($q));
print $q->hidden('submit', 1);
- print <<EOF;
+ print "
<ul>
-<li><a href="$url">View update on site</a>
-<li><label for="text">Text:</label><br><textarea name="text" id="text" cols=60 rows=10>$row_h{text}</textarea>
+<li><a href='$url'>" . _('View update on site') . "</a>
+<li><label for='text'>" . _('Text:') . "</label><br><textarea name='text' id='text' cols=60 rows=10>$row_h{text}</textarea>
<li>$state
-<li>Name: <input type="text" name="name" id="name" value="$name"> (blank to go anonymous)
-<li>Email: <input type="text" id="email" name="email" value="$row_h{email}">
-<li>Cobrand: $row{cobrand}
-<li>Cobrand data: $row{cobrand_data}
-<li>Created: $row{created}
+<li>" . _('Name:') . " <input type='text' name='name' id='name' value='$name'> " . _('(blank to go anonymous)') . "
+<li>" . _('Email:') . " <input type='text' id='email' name='email' value='$row_h{email}'>
+<li>" . _('Cobrand:') . " $row{cobrand}
+<li>" . _('Cobrand data:') . " $row{cobrand_data}
+<li>" . _('Created:') . " $row{created}
$photo
</ul>
-EOF
- print $q->submit('Submit changes');
+";
+ print $q->submit(_('Submit changes'));
print $q->end_form;
print html_tail($q);
}
@@ -769,8 +780,8 @@ sub admin_log_edit {
sub admin_timeline {
my $q = shift;
my $cobrand = Page::get_cobrand($q);
- print html_head($q, 'Timeline');
- print $q->h1('Timeline');
+ print html_head($q, _('Timeline'));
+ print $q->h1(_('Timeline'));
my %time;
#my $backto_unix = time() - 60*60*24*7;
@@ -807,41 +818,42 @@ sub admin_timeline {
my $date = '';
my $cobrand_data;
foreach (reverse sort keys %time) {
- my $curdate = strftime('%A, %e %B %Y', localtime($_));
+ my $curdate = decode_utf8(strftime('%A, %e %B %Y', localtime($_)));
if ($date ne $curdate) {
print '</dl>' if $date;
print "<h2>$curdate</h2> <dl>";
$date = $curdate;
}
- print '<dt><b>', strftime('%H:%M:%S', localtime($_)), ':</b></dt> <dd>';
+ print '<dt><b>', decode_utf8(strftime('%H:%M:%S', localtime($_))), ':</b></dt> <dd>';
foreach (@{$time{$_}}) {
my $type = $_->{type};
+ my $name_str = '; ' . sprintf(_("by %s"), ent($_->{name})) . " &lt;" . ent($_->{email}) . "&gt;, '" . ent($_->{title}) . "'";
if ($type eq 'problemCreated') {
- print "Problem $_->{id} created; by " . ent($_->{name}) . " &lt;" . ent($_->{email}) . "&gt;, '" . ent($_->{title}) . "'";
+ print sprintf(_("Problem %d created"), $_->{id}) . $name_str;
} elsif ($type eq 'problemConfirmed') {
$cobrand_data = get_cobrand_data_from_hash($cobrand, $_);
my $url = Cobrand::base_url_for_emails($cobrand, $cobrand_data) . "/report/$_->{id}";
- print "Problem <a href='$url'>$_->{id}</a> confirmed; by " . ent($_->{name}) ." &lt;" . ent($_->{email}) . "&gt;, '" . ent($_->{title}) ."'";
+ print sprintf(_("Problem %s confirmed"), "<a href='$url'>$_->{id}</a>") . $name_str;
} elsif ($type eq 'problemSent') {
$cobrand_data = get_cobrand_data_from_hash($cobrand, $_);
my $url = Cobrand::base_url_for_emails($cobrand, $cobrand_data) . "/report/$_->{id}";
- print "Problem <a href='$url'>$_->{id}</a> sent to council $_->{council}; by " . ent($_->{name}) . " &lt;" . ent($_->{email}) . "&gt;, '" . ent($_->{title}) . "'";
+ print sprintf(_("Problem %s sent to council %s"), "<a href='$url'>$_->{id}</a>", $_->{council});
} elsif ($type eq 'quesSent') {
- print "Questionnaire $_->{id} sent for problem $_->{problem_id}";
+ print sprintf(_("Questionnaire %d sent for problem %d"), $_->{id}, $_->{problem_id});
} elsif ($type eq 'quesAnswered') {
- print "Questionnaire $_->{id} answered for problem $_->{problem_id}, $_->{old_state} to $_->{new_state}";
+ print sprintf(_("Questionnaire %d answered for problem %d, %s to %s"), $_->{id}, $_->{problem_id}, $_->{old_state}, $_->{new_state});
} elsif ($type eq 'update') {
$cobrand_data = get_cobrand_data_from_hash($cobrand, $_);
my $url = Cobrand::base_url_for_emails($cobrand, $cobrand_data) . "/report/$_->{problem_id}#$_->{id}";
my $name = ent($_->{name} || 'anonymous');
- print "Update <a href='$url'>$_->{id}</a> created for problem $_->{problem_id}; by $name &lt;" . ent($_->{email}) . "&gt;";
+ print sprintf(_("Update %s created for problem %d; by %s"), "<a href='$url'>$_->{id}</a>", $_->{problem_id}, $name) . " &lt;" . ent($_->{email}) . "&gt;";
} elsif ($type eq 'alertSub') {
my $param = $_->{parameter} || '';
my $param2 = $_->{parameter2} || '';
- print "Alert $_->{id} created for " . ent($_->{email}) . ", type $_->{alert_type}, parameters $param / $param2";
+ print sprintf(_("Alert %d created for %s, type %s, parameters %s / %s"), $_->{id}, ent($_->{email}), $_->{alert_type}, $param, $param2);
} elsif ($type eq 'alertDel') {
- my $sub = strftime('%H:%M:%S %e %B %Y', localtime($_->{whensubscribed}));
- print "Alert $_->{id} disabled (created $sub)";
+ my $sub = decode_utf8(strftime('%H:%M:%S %e %B %Y', localtime($_->{whensubscribed})));
+ print sprintf(_("Alert %d disabled (created %s)"), $_->{id}, $sub);
}
print '<br>';
}
diff --git a/web/ajax.cgi b/web/ajax.cgi
index 69c389765..f13529852 100755
--- a/web/ajax.cgi
+++ b/web/ajax.cgi
@@ -59,8 +59,8 @@ sub main {
$list = '';
foreach (@$around_map) {
- my $dist = int($_->{distance}/100+.5)/10;
- $link = Cobrand::url($cobrand, NewURL($q, -retain => 1,
+ my $dist = int($_->{distance}*10+.5)/10;
+ $link = Cobrand::url($cobrand, NewURL($q, -retain => 1,
-url => '/report/' . $_->{id},
pc => undef,
x => undef,
@@ -81,7 +81,7 @@ sub main {
#$list = '';
#foreach (@$fixed) {
# $list .= '<li><a href="/report/' . $_->{id} . '">';
- # $list .= $_->{title} . ' <small>(' . int($_->{distance}/100+.5)/10 . 'km)</small>';
+ # $list .= $_->{title} . ' <small>(' . int($_->{distance}*10+.5)/10 . 'km)</small>';
# $list .= '</a></li>';
#}
#my $f_list = $list;
diff --git a/web/alert.cgi b/web/alert.cgi
index 71249759e..fd30dbf4e 100755
--- a/web/alert.cgi
+++ b/web/alert.cgi
@@ -11,6 +11,7 @@
use strict;
use Standard;
use Digest::SHA1 qw(sha1_hex);
+use Encode;
use Error qw(:try);
use CrossSell;
use FixMyStreet::Alert;
@@ -24,6 +25,7 @@ use mySociety::MaPit;
use mySociety::VotingArea;
use mySociety::Web qw(ent);
use Cobrand;
+use Utils;
sub main {
my $q = shift;
@@ -56,7 +58,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,47 +74,99 @@ 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;
};
}
+
return FixMyStreet::Geocode::list_choices($error, '/alert', $q) if ref($error) eq 'ARRAY';
return alert_front_page($q, $error) if $error;
my $pretty_pc = $input_h{pc};
+ my $pretty_pc_text;# This one isnt't getting the nbsp.
if (mySociety::PostcodeUtil::is_valid_postcode($input{pc})) {
$pretty_pc = mySociety::PostcodeUtil::canonicalise_postcode($input{pc});
+ $pretty_pc_text = $pretty_pc;
+ $pretty_pc_text =~ s/ //g;
$pretty_pc =~ s/ /&nbsp;/;
}
+ # truncate the lat,lon for nicer urls
+ ( $lat, $lon ) = map { Utils::truncate_coordinate($_) } ( $lat, $lon );
+
my $errors = '';
$errors = '<ul class="error"><li>' . join('</li><li>', @errors) . '</li></ul>' if @errors;
- 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 $cobrand = Page::get_cobrand($q);
+ my @types = (Cobrand::area_types($cobrand), @$mySociety::VotingArea::council_child_types);
+ my %councils = map { $_ => 1 } Cobrand::area_types($cobrand);
+
+ my $areas = mySociety::MaPit::call('point', "4326/$lon,$lat", type => \@types);
my ($success, $error_msg) = Cobrand::council_check($cobrand, { all_councils => $areas }, $q, 'alert');
- if (!$success){
+ if (!$success) {
return alert_front_page($q, $error_msg);
}
return alert_front_page($q, _('That location does not appear to be covered by a council, perhaps it is offshore - please try somewhere more specific.')) if keys %$areas == 0;
my ($options, $options_start, $options_end);
- if (keys %$areas == 2) {
+ if (mySociety::Config::get('COUNTRY') eq 'NO') {
+
+ my (@options, $fylke, $kommune);
+ foreach (values %$areas) {
+ if ($_->{type} eq 'NKO') {
+ $kommune = $_;
+ } else {
+ $fylke = $_;
+ }
+ }
+ my $kommune_name = $kommune->{name};
+ my $fylke_name = $fylke->{name};
+
+ if ($fylke->{id} == 3) { # Oslo
+
+ push @options, [ 'council', $fylke->{id}, Page::short_name($fylke),
+ sprintf(_("Problems within %s"), $fylke_name) ];
+
+ $options_start = "<div><ul id='rss_feed'>";
+ $options = alert_list_options($q, @options);
+ $options_end = "</ul>";
+
+ } else {
+
+ push @options,
+ [ 'area', $kommune->{id}, Page::short_name($kommune), $kommune_name ],
+ [ 'area', $fylke->{id}, Page::short_name($fylke), $fylke_name ];
+ $options_start = '<div id="rss_list">';
+ $options = $q->p($q->strong(_('Problems within the boundary of:'))) .
+ $q->ul(alert_list_options($q, @options));
+ @options = ();
+ push @options,
+ [ 'council', $kommune->{id}, Page::short_name($kommune), $kommune_name ],
+ [ 'council', $fylke->{id}, Page::short_name($fylke), $fylke_name ];
+ $options .= $q->p($q->strong(_('Or problems reported to:'))) .
+ $q->ul(alert_list_options($q, @options));
+ $options_end = $q->p($q->small(_('FixMyStreet sends different categories of problem
+to the appropriate council, so problems within the boundary of a particular council
+might not match the problems sent to that council. For example, a graffiti report
+will be sent to the district council, so will appear in both of the district
+council&rsquo;s alerts, but will only appear in the "Within the boundary" alert
+for the county council.'))) . '</div><div id="rss_buttons">';
+
+ }
+
+ } elsif (keys %$areas == 2) {
# One-tier council
my (@options, $council, $ward);
@@ -123,10 +177,12 @@ sub alert_list {
$ward = $_;
}
}
- push @options, [ 'council', $council->{id}, Page::short_name($council->{name}),
- sprintf(_("Problems within %s"), $council->{name}) ];
- push @options, [ 'ward', $council->{id}.':'.$ward->{id}, Page::short_name($council->{name}) . '/'
- . Page::short_name($ward->{name}), sprintf(_("Problems within %s ward"), $ward->{name}) ];
+ my $council_name = $council->{name};
+ my $ward_name = $ward->{name};
+ push @options, [ 'council', $council->{id}, Page::short_name($council),
+ sprintf(_("Problems within %s"), $council_name) ];
+ push @options, [ 'ward', $council->{id}.':'.$ward->{id}, Page::short_name($council) . '/'
+ . Page::short_name($ward), sprintf(_("Problems within %s ward"), $ward_name) ];
$options_start = "<div><ul id='rss_feed'>";
$options = alert_list_options($q, @options);
@@ -139,8 +195,9 @@ sub alert_list {
foreach (values %$areas) {
$council = $_;
}
- push @options, [ 'council', $council->{id}, Page::short_name($council->{name}),
- sprintf(_("Problems within %s"), $council->{name}) ];
+ my $council_name = $council->{name};
+ push @options, [ 'council', $council->{id}, Page::short_name($council),
+ sprintf(_("Problems within %s"), $council_name) ];
$options_start = "<div><ul id='rss_feed'>";
$options = alert_list_options($q, @options);
@@ -161,26 +218,30 @@ sub alert_list {
$d_ward = $_;
}
}
+ my $district_name = $district->{name};
+ my $d_ward_name = $d_ward->{name};
+ my $county_name = $county->{name};
+ my $c_ward_name = $c_ward->{name};
push @options,
- [ 'area', $district->{id}, Page::short_name($district->{name}), $district->{name} ],
- [ 'area', $district->{id}.':'.$d_ward->{id}, Page::short_name($district->{name}) . '/'
- . Page::short_name($d_ward->{name}), "$d_ward->{name} ward, $district->{name}" ],
- [ 'area', $county->{id}, Page::short_name($county->{name}), $county->{name} ],
- [ 'area', $county->{id}.':'.$c_ward->{id}, Page::short_name($county->{name}) . '/'
- . Page::short_name($c_ward->{name}), "$c_ward->{name} ward, $county->{name}" ];
+ [ 'area', $district->{id}, Page::short_name($district), $district_name ],
+ [ 'area', $district->{id}.':'.$d_ward->{id}, Page::short_name($district) . '/'
+ . Page::short_name($d_ward), "$d_ward_name ward, $district_name" ],
+ [ 'area', $county->{id}, Page::short_name($county), $county_name ],
+ [ 'area', $county->{id}.':'.$c_ward->{id}, Page::short_name($county) . '/'
+ . Page::short_name($c_ward), "$c_ward_name ward, $county_name" ];
$options_start = '<div id="rss_list">';
$options = $q->p($q->strong(_('Problems within the boundary of:'))) .
$q->ul(alert_list_options($q, @options));
@options = ();
push @options,
- [ 'council', $district->{id}, Page::short_name($district->{name}), $district->{name} ],
- [ 'ward', $district->{id}.':'.$d_ward->{id}, Page::short_name($district->{name}) . '/' . Page::short_name($d_ward->{name}),
- "$district->{name}, within $d_ward->{name} ward" ];
+ [ 'council', $district->{id}, Page::short_name($district), $district_name ],
+ [ 'ward', $district->{id}.':'.$d_ward->{id}, Page::short_name($district) . '/' . Page::short_name($d_ward),
+ "$district_name, within $d_ward_name ward" ];
if ($q->{site} ne 'emptyhomes') {
push @options,
- [ 'council', $county->{id}, Page::short_name($county->{name}), $county->{name} ],
- [ 'ward', $county->{id}.':'.$c_ward->{id}, Page::short_name($county->{name}) . '/'
- . Page::short_name($c_ward->{name}), "$county->{name}, within $c_ward->{name} ward" ];
+ [ 'council', $county->{id}, Page::short_name($county), $county_name ],
+ [ 'ward', $county->{id}.':'.$c_ward->{id}, Page::short_name($county) . '/'
+ . Page::short_name($c_ward), "$county_name, within $c_ward_name ward" ];
$options .= $q->p($q->strong(_('Or problems reported to:'))) .
$q->ul(alert_list_options($q, @options));
$options_end = $q->p($q->small(_('FixMyStreet sends different categories of problem
@@ -194,18 +255,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 +291,26 @@ 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;
+ if ($pretty_pc_text) {
+ $rss_feed = Cobrand::url($cobrand, "/rss/pc/$pretty_pc_text", $q);
+ } else {
+ $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_feed.'/2', $q);
+ my $rss_feed_5k = Cobrand::url($cobrand, $rss_feed.'/5', $q);
+ my $rss_feed_10k = Cobrand::url($cobrand, $rss_feed.'/10', $q);
+ my $rss_feed_20k = Cobrand::url($cobrand, $rss_feed.'/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 +337,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);
@@ -371,8 +437,8 @@ sub alert_rss {
$url .= "?" . $extra_params if ($extra_params);
print $q->redirect($url);
return;
- } elsif ($feed =~ /^local:(\d+):(\d+)$/) {
- $url = $base_url . '/rss/n/' . $1 . ',' . $2;
+ } elsif ($feed =~ /^local:([\d\.-]+):([\d\.-]+)$/) {
+ $url = $base_url . '/rss/l/' . $1 . ',' . $2;
$url .= "?" . $extra_params if ($extra_params);
print $q->redirect($url);
return;
@@ -526,8 +592,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');
@@ -537,6 +605,6 @@ sub alert_do_subscribe {
$h{url} = Page::base_url_with_lang($q, undef, 1) . '/A/'
. mySociety::AuthToken::store('alert', { id => $alert_id, type => 'subscribe', email => $email } );
dbh()->commit();
- return Page::send_email($q, $email, undef, 'alert', %h);
+ return Page::send_confirmation_email($q, $email, undef, 'alert', %h);
}
diff --git a/web/cobrands/barnet/css/layout.css b/web/cobrands/barnet/css/layout.css
index b66f957b6..1445ff419 100644
--- a/web/cobrands/barnet/css/layout.css
+++ b/web/cobrands/barnet/css/layout.css
@@ -1,13 +1,13 @@
/* FixMyStreet additions */
/* Smaller map */
-#map_box {
+#mysociety #map_box {
width: 380px;
}
-#map, #drag {
+#mysociety #map, #mysociety #drag {
width: 378px;
height: 378px;
}
-#watermark {
+#mysociety #watermark {
background: url("/i/mojwatermark-378.png");
height: 84px;
width: 171px;
@@ -16,7 +16,7 @@
right: 0;
}
-p#fixed, p#unknown {
+#mysociety p#fixed, #mysociety p#unknown {
margin-right: 400px;
width: auto;
}
diff --git a/web/cobrands/fiksgatami/css.css b/web/cobrands/fiksgatami/css.css
new file mode 100644
index 000000000..8de8de1fe
--- /dev/null
+++ b/web/cobrands/fiksgatami/css.css
@@ -0,0 +1,148 @@
+#mysociety #front_stats div {
+ width: 6.5em;
+}
+#mysociety label {
+ width: 6em;
+}
+#mysociety #fieldset div.checkbox, #mysociety #problem_submit {
+ padding-left: 6.5em;
+}
+
+body {
+ font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
+ margin: 0;
+ padding: 0;
+}
+
+h1 {
+ margin: 0;
+ font-size: 175%;
+}
+
+h2 {
+ font-size: 140%;
+}
+
+select, input, textarea {
+ font-size: 99%;
+}
+
+#mysociety a.unsuitable-report {
+ font-size: small;
+}
+#mysociety blockquote {
+ border-left: solid 4px #1a4f7f;
+}
+#mysociety .a {
+ color: #000000;
+ background-color: #a9cff1;
+}
+#mysociety #postcodeForm {
+ background-color: #99bfe1;
+}
+#mysociety #front_stats div {
+ background-color: #99bfe1;
+}
+
+#header {
+ font-size: 200%;
+ font-weight: bold;
+ border-bottom: solid 2px #1a4f7f;
+ margin: 0;
+ padding: 0.15em 0.5em;
+ background-color: #99bfe1;
+ color: #1a4f7f;
+}
+#header a:link, #header a:visited {
+ color: #1a4f7f;
+ background-color: #99bfe1;
+ text-decoration: none;
+}
+#header a:active, #header a:hover {
+ text-decoration: underline;
+}
+
+#my {
+ color: #0a3f6f;
+ background-color: #99bfe1;
+}
+
+#mysociety {
+ width: 100%;
+ /* Must specify a width or IE goes crazy wrong! */
+ position: relative;
+ margin: 0 auto;
+ max-width: 60em;
+}
+
+/* Can't put the margin in #mysociety because of above IE craziness */
+#wrapper {
+ margin: 2em;
+}
+
+#navigation {
+ position: absolute;
+ top: 1em;
+ right: 1em;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
+}
+#navigation li {
+ display: inline;
+ padding: 0;
+ margin: 0;
+}
+#navigation a {
+ display: -moz-inline-box;
+ display: inline-block;
+ padding: 0.4em 1em;
+}
+#navigation a:link, #navigation a:visited {
+ color: #1a4f7f;
+}
+#navigation a:hover, #navigation a:active {
+ background-color: #1a4f7f;
+ color: #99bfe1;
+}
+
+#nav_new a {
+ background-image: url("/i/new.png");
+ background-repeat: no-repeat;
+ background-position: 100% 0;
+}
+
+#logo {
+ border: none;
+ position: absolute;
+ top: 3.3em;
+ right: 10px;
+}
+
+#footer {
+ clear: both;
+ text-align: right;
+ font-size: 83%;
+ border-top: solid 1px #1a4f7f;
+ display: table;
+ margin: 2em 0 1em auto;
+ padding: 2px 4px;
+}
+
+body {
+ font-family: Helmet, Freesans, "Helvetica Neue", Arial, sans-serif;
+}
+
+a:link {
+ color: #215d93;
+}
+a:visited {
+ color: #518dc3;
+}
+a:hover, a:active {
+ color: #cc0000;
+}
+
+#header {
+ padding: 0.1em 0.5em 0.15em;
+}
diff --git a/web/cobrands/fiksgatami/css.scss b/web/cobrands/fiksgatami/css.scss
new file mode 100644
index 000000000..aa09b024a
--- /dev/null
+++ b/web/cobrands/fiksgatami/css.scss
@@ -0,0 +1,41 @@
+$header_back: #99bfe1;
+$header_back_lighter: #a9cff1;
+$header_colour: #1a4f7f;
+$header_darker: #0a3f6f;
+
+// Overrides of core.css
+
+#mysociety {
+
+ #front_stats div {
+ width: 6.5em;
+ }
+
+ label {
+ width: 6em;
+ }
+
+ #fieldset div.checkbox, #problem_submit {
+ padding-left: 6.5em;
+ }
+
+}
+
+@import "../../css/_main";
+
+// Overrides of main.css
+
+body {
+ font-family: Helmet, Freesans, "Helvetica Neue", Arial, sans-serif;
+}
+
+a {
+ &:link { color: #215d93; }
+ &:visited { color: #518dc3; }
+ &:hover, &:active { color: #cc0000; }
+}
+
+#header {
+ padding: 0.1em 0.5em 0.15em;
+}
+
diff --git a/web/cobrands/southampton/SCClogo.png b/web/cobrands/southampton/SCClogo.png
new file mode 100644
index 000000000..74a037a8c
--- /dev/null
+++ b/web/cobrands/southampton/SCClogo.png
Binary files differ
diff --git a/web/cobrands/southampton/accessInfo.gif b/web/cobrands/southampton/accessInfo.gif
new file mode 100644
index 000000000..418698ed5
--- /dev/null
+++ b/web/cobrands/southampton/accessInfo.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-box.gif b/web/cobrands/southampton/bg-box.gif
new file mode 100644
index 000000000..559a5ae00
--- /dev/null
+++ b/web/cobrands/southampton/bg-box.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-button.gif b/web/cobrands/southampton/bg-button.gif
new file mode 100644
index 000000000..f5f8122dc
--- /dev/null
+++ b/web/cobrands/southampton/bg-button.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-footer.gif b/web/cobrands/southampton/bg-footer.gif
new file mode 100644
index 000000000..89919c1cd
--- /dev/null
+++ b/web/cobrands/southampton/bg-footer.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-header.jpg b/web/cobrands/southampton/bg-header.jpg
new file mode 100644
index 000000000..70e0ec46a
--- /dev/null
+++ b/web/cobrands/southampton/bg-header.jpg
Binary files differ
diff --git a/web/cobrands/southampton/bg-input.gif b/web/cobrands/southampton/bg-input.gif
new file mode 100644
index 000000000..267fe9b6b
--- /dev/null
+++ b/web/cobrands/southampton/bg-input.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-repeat.gif b/web/cobrands/southampton/bg-repeat.gif
new file mode 100644
index 000000000..b68346517
--- /dev/null
+++ b/web/cobrands/southampton/bg-repeat.gif
Binary files differ
diff --git a/web/cobrands/southampton/blue-line.gif b/web/cobrands/southampton/blue-line.gif
new file mode 100644
index 000000000..c7a587ee5
--- /dev/null
+++ b/web/cobrands/southampton/blue-line.gif
Binary files differ
diff --git a/web/cobrands/southampton/bullet.gif b/web/cobrands/southampton/bullet.gif
new file mode 100644
index 000000000..a86ef002b
--- /dev/null
+++ b/web/cobrands/southampton/bullet.gif
Binary files differ
diff --git a/web/cobrands/southampton/bulletActiveSG.gif b/web/cobrands/southampton/bulletActiveSG.gif
new file mode 100644
index 000000000..6f4e3e438
--- /dev/null
+++ b/web/cobrands/southampton/bulletActiveSG.gif
Binary files differ
diff --git a/web/cobrands/southampton/css.css b/web/cobrands/southampton/css.css
new file mode 100644
index 000000000..85f66dcc3
--- /dev/null
+++ b/web/cobrands/southampton/css.css
@@ -0,0 +1,47 @@
+#mysociety #map_box {
+ width: 380px;
+}
+#mysociety #map, #mysociety #drag {
+ width: 378px;
+ height: 378px;
+}
+#mysociety #watermark {
+ background: url("/i/mojwatermark-378.png");
+ height: 84px;
+ width: 171px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+}
+#mysociety p#fixed, #mysociety p#unknown {
+ margin-right: 400px;
+ width: auto;
+}
+#mysociety h1 {
+ margin: 0;
+ font-size: 175%;
+}
+#mysociety h2 {
+ font-size: 140%;
+}
+#mysociety select, #mysociety input, #mysociety textarea {
+ font-size: 99%;
+}
+#mysociety a.unsuitable-report {
+ font-size: small;
+}
+#mysociety blockquote {
+ border-left: solid 4px #768eb5;
+}
+#mysociety .a {
+ color: #000000;
+ background-color: #e9eef7;
+}
+#mysociety #postcodeForm {
+ background-color: #e9eef7;
+}
+#mysociety #front_stats div {
+ background-color: #e9eef7;
+ width: 6em;
+ padding: 0.5em;
+}
diff --git a/web/cobrands/southampton/css.scss b/web/cobrands/southampton/css.scss
new file mode 100644
index 000000000..57cb95a8f
--- /dev/null
+++ b/web/cobrands/southampton/css.scss
@@ -0,0 +1,67 @@
+$map_width: 378px;
+$background: #E9EEF7;
+$darker: #768EB5;
+
+#mysociety {
+
+ // Smaller map
+
+ #map_box {
+ width: $map_width + 2px;
+ }
+ #map, #drag {
+ width: $map_width;
+ height: $map_width;
+ }
+ #watermark {
+ background: url("/i/mojwatermark-378.png");
+ height: 84px;
+ width: 171px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ }
+
+ p#fixed, p#unknown {
+ margin-right: $map_width + 22px;
+ width: auto;
+ }
+
+ // Generics
+
+ h1 {
+ margin: 0;
+ font-size: 175%;
+ }
+ h2 {
+ font-size: 140%;
+ }
+
+ select, input, textarea {
+ font-size: 99%;
+ }
+
+ a.unsuitable-report {
+ font-size: small;
+ }
+
+ blockquote {
+ border-left: solid 4px $darker;
+ }
+
+ .a {
+ color: #000000;
+ background-color: $background;
+ }
+
+ #postcodeForm {
+ background-color: $background;
+ }
+
+ #front_stats div {
+ background-color: $background;
+ width: 6em;
+ padding: 0.5em;
+ }
+
+}
diff --git a/web/cobrands/southampton/ff.png b/web/cobrands/southampton/ff.png
new file mode 100644
index 000000000..ef7d91148
--- /dev/null
+++ b/web/cobrands/southampton/ff.png
Binary files differ
diff --git a/web/cobrands/southampton/forms.png b/web/cobrands/southampton/forms.png
new file mode 100644
index 000000000..4f278e9ae
--- /dev/null
+++ b/web/cobrands/southampton/forms.png
Binary files differ
diff --git a/web/cobrands/southampton/ie6.png b/web/cobrands/southampton/ie6.png
new file mode 100644
index 000000000..d6179fa02
--- /dev/null
+++ b/web/cobrands/southampton/ie6.png
Binary files differ
diff --git a/web/cobrands/southampton/information.gif b/web/cobrands/southampton/information.gif
new file mode 100644
index 000000000..ea2f14bd2
--- /dev/null
+++ b/web/cobrands/southampton/information.gif
Binary files differ
diff --git a/web/cobrands/southampton/line.gif b/web/cobrands/southampton/line.gif
new file mode 100644
index 000000000..fa6ddca0c
--- /dev/null
+++ b/web/cobrands/southampton/line.gif
Binary files differ
diff --git a/web/cobrands/southampton/logo.png b/web/cobrands/southampton/logo.png
new file mode 100644
index 000000000..71bdc9d97
--- /dev/null
+++ b/web/cobrands/southampton/logo.png
Binary files differ
diff --git a/web/cobrands/southampton/mctv.png b/web/cobrands/southampton/mctv.png
new file mode 100644
index 000000000..17f3ecec6
--- /dev/null
+++ b/web/cobrands/southampton/mctv.png
Binary files differ
diff --git a/web/cobrands/southampton/safari.png b/web/cobrands/southampton/safari.png
new file mode 100644
index 000000000..e99547a7f
--- /dev/null
+++ b/web/cobrands/southampton/safari.png
Binary files differ
diff --git a/web/cobrands/southampton/style.css b/web/cobrands/southampton/style.css
new file mode 100644
index 000000000..400859102
--- /dev/null
+++ b/web/cobrands/southampton/style.css
@@ -0,0 +1,87 @@
+body {font-family:Verdana, Geneva, sans-serif; font-size:62.5%;}
+
+a {text-decoration:none; color:#1c4384; font-weight:bold;}
+
+a:hover {text-decoration:underline;}
+
+p {margin:0 0 10px 0;}
+
+/* ******* Start of Header ******* */
+
+ul#topMenu {width:860px; height:15px; margin:13px auto 3px auto;}
+ul#topMenu li {float:left; list-style-type:none;}
+ul#topMenu a {padding:0 5px 2px 5px; font-size:0.9em; color:#000; font-weight:400;}
+
+#wrapper {width:960px; height:auto; margin:0 auto; background:url(bg-repeat.gif) repeat-y;}
+#header {width:100%; height:176px; background:url(bg-header.jpg) no-repeat; background-position:1px 0px;}
+#header .logo {float:left; width:87px; height:81px; margin:25px 0 17px 46px;}
+#header a.siteTitle {height:27px; width:287px; background:url(logo.png) no-repeat; display:block; font-family:verdana; float:left; margin:60px 0 0 15px; text-indent:-9999px;}
+
+a.mctv {float:right; height:37px; width:104px; margin:15px 7px 0 0;}
+a.mctv img {border:none;}
+
+#searchWrap {width:210px; height:auto; float:right; margin:10px 30px 0 0;}
+#searchWrap form {border:none; padding:0; margin:0 0 10px 0;}
+#searchWrap fieldset {border:none; padding:0; margin:0;}
+#searchWrap label {color:#1b4384; font-weight:700; font-size:1.1em; margin:0; padding:0;}
+#searchWrap input {float:left; background:url(bg-input.gif) repeat-x; margin:3px 0 0 0; line-height:16px; padding:3px 5px 3px 4px;}
+#searchWrap .button {background:url(bg-button.gif) repeat-x; margin:3px 0 0 5px; float:left; height:26px; padding:0 3px 4px 3px; color:#fff; border:none;}
+
+.moreInfo {margin:0 0 -2px 2px;}
+.text {width:109px; color:#999;}
+.text2 {width:137px; color:#999;}
+
+ul#topNav {width:870px; height:17px; background:#1b4384; clear:both; margin:0 auto; padding:3px 0 1px 0;}
+ul#topNav li {float:left; list-style-type:none; background:url(line.gif) no-repeat 0 2px;}
+ul#topNav li:first-child {background:none;}
+ul#topNav li a {color:#ffffff; font-size:1.2em; padding:0 7px 0 8px; font-size:1.2em; font-weight:400;}
+
+p.atoz {float:left; margin:8px 0 0 43px; padding:5px 5px 3px 0; font-size:1.2em; border-bottom:1px solid #E0DBEF;}
+ul#atoz {width:485px; float:left; margin:13px 0 0 0; border-bottom:1px solid #E0DBEF; padding:0 0 1px 0;}
+ul#atoz li {list-style-type:none; display:inline;}
+ul#atoz li a {font-size:13px; font-weight:400;}
+
+ul#contacts {float:right; margin:13px 36px 0 0; padding:0;}
+ul#contacts li {float:left; list-style-type:none; background:url(blue-line.gif) no-repeat 0 2px;}
+ul#contacts li:first-child {background:none;}
+ul#contacts li a {font-size:1.2em; padding:0 8px 0 10px; font-weight:400;}
+
+/* ******* End of Header ******* */
+
+
+
+/* ******* Start of Left Menu Bar ******* */
+
+#menuBar {width:200px; height:auto; float:left; margin:25px 0 0 43px; padding-bottom:25px;}
+
+ul#leftMenu {height:auto; width:199px; float:left; background:#e9eef7 url(bg-box.gif) no-repeat -1px 100%; padding:0 0 10px 0; margin:5px 0 0 0; overflow:hidden;}
+ul#leftMenu li {list-style-type:none; width:199px; padding:0;}
+ul#leftMenu li a {display:block; width:100%; line-height:1.5em; padding:3px 10px 3px 32px; font-size:1.2em; font-weight:700;}
+ul#leftMenu li.parent {background:url(bulletActiveSG.gif) no-repeat #768eb5; background-position:10px 11px; color:#fff; padding:3px 0 3px 0;}
+ul#leftMenu li.parent a {color:#fff}
+ul#leftMenu li.selected {background:url(bullet.gif) no-repeat; background-position:10px 8px; color:#fff; padding:0;}
+
+/* ******* End of Left Menu Bar ******* */
+
+
+
+/* ******* Start of Main Content Area ******* */
+
+#contentArea {width:640px; height:auto; float:left; padding-bottom:25px; font-size:1.1em; margin:15px 0 0 0; padding:15px 0 20px 25px;}
+
+/* ******* End of Main Content Area ******* */
+
+
+
+/* ******* Start of Footer ******* */
+
+#footer {width:100%; height:54px; clear:both; background:url(bg-footer.gif) no-repeat;}
+
+a.accessInfo {float:left; height:32px; width:117px; margin:0 10px 0 43px;}
+a.accessInfo img {border:none;}
+
+ul#bottomMenu {float:left; margin:10px 0 0 10px;}
+ul#bottomMenu li {float:left; list-style-type:none;}
+ul#bottomMenu a {padding:0 4px 2px 4px; font-size:0.9em; color:#000; font-weight:400;}
+
+/* ******* End of Footer ******* */
diff --git a/web/confirm.cgi b/web/confirm.cgi
index a16f8fb93..c4a37c67f 100755
--- a/web/confirm.cgi
+++ b/web/confirm.cgi
@@ -192,7 +192,7 @@ sub ask_questionnaire {
my $qn_thanks = _("Thanks, glad to hear it's been fixed! Could we just ask if you have ever reported a problem to a council before?");
my $yes = _('Yes');
my $no = _('No');
- my $go = _('Go');
+ my $go = _('Submit');
my $form_action = Cobrand::url($cobrand, "/confirm", $q);
my $form_extra_elements = Cobrand::form_elements($cobrand, 'questionnaire', $q);
my $out = <<EOF;
diff --git a/web/contact.cgi b/web/contact.cgi
index fd0043d94..aefd3de7a 100755
--- a/web/contact.cgi
+++ b/web/contact.cgi
@@ -106,6 +106,8 @@ sub contact_details {
my $out = '';
my $sitename = _('FixMyStreet');
my $contact_info = '';
+ if ( mySociety::Config::get('COUNTRY') eq 'GB' ) {
+ # XXX Rewrite to make brandable?
$contact_info .= <<EOF;
<div class="contact-details">
<p>$sitename is a service provided by mySociety, which is the project of a
@@ -120,6 +122,7 @@ UK</p>
</div>
EOF
$out .= $contact_info unless $q->{site} eq 'emptyhomes';
+ }
return $out;
}
@@ -203,10 +206,12 @@ sub contact_page {
} else {
$intro .= $q->p(_('You are reporting the following problem report for being abusive, containing personal information, or similar:'));
$item_title = ent($p->{title});
+ my $date_time = Page::prettify_epoch($q, $p->{confirmed});
$item_meta = $q->em(
- 'Reported ',
- ($p->{anonymous}) ? 'anonymously' : "by " . ent($p->{name}),
- ' at ' . Page::prettify_epoch($q, $p->{confirmed}));
+ $p->{anonymous}
+ ? sprintf(_('Reported anonymously at %s'), $date_time)
+ : sprintf(_('Reported by %s at %s'), ent($p->{name}), $date_time)
+ );
$item_body = ent($p->{detail});
}
}
diff --git a/web/css/_main.scss b/web/css/_main.scss
new file mode 100644
index 000000000..1dd678271
--- /dev/null
+++ b/web/css/_main.scss
@@ -0,0 +1,135 @@
+// Generics
+
+body {
+ font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
+ margin: 0;
+ padding: 0;
+ // color: #a9aeb0;
+}
+
+h1 {
+ margin: 0;
+ font-size: 175%;
+}
+h2 {
+ font-size: 140%;
+}
+
+select, input, textarea {
+ font-size: 99%;
+}
+
+#mysociety {
+
+ a.unsuitable-report {
+ font-size: small;
+ }
+
+ blockquote {
+ border-left: solid 4px $header_colour;
+ }
+
+ .a {
+ color: #000000;
+ background-color: $header_back_lighter;
+ }
+
+ #postcodeForm {
+ background-color: $header_back;
+ }
+
+ #front_stats div {
+ background-color: $header_back;
+ }
+
+}
+
+// Site layout
+
+#header {
+ font-size: 200%;
+ font-weight: bold;
+ border-bottom: solid 2px $header_colour;
+ margin: 0;
+ padding: 0.15em 0.5em;
+ background-color: $header_back;
+ color: $header_colour;
+
+ a:link, a:visited {
+ color: $header_colour;
+ background-color: $header_back;
+ text-decoration: none;
+ }
+ a:active, a:hover {
+ text-decoration: underline;
+ }
+}
+
+#my {
+ color: $header_darker;
+ background-color: $header_back;
+}
+
+#mysociety {
+ width: 100%; /* Must specify a width or IE goes crazy wrong! */
+ position: relative;
+ margin: 0 auto;
+ max-width: 60em;
+}
+
+/* Can't put the margin in #mysociety because of above IE craziness */
+#wrapper {
+ margin: 2em;
+}
+
+#navigation {
+ position: absolute;
+ top: 1em;
+ right: 1em;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
+
+ li {
+ display: inline;
+ padding: 0;
+ margin: 0;
+ }
+
+ a {
+ display: -moz-inline-box;
+ display: inline-block;
+ padding: 0.4em 1em;
+ }
+ a:link, a:visited {
+ color: $header_colour;
+ }
+ a:hover, a:active {
+ background-color: $header_colour;
+ color: $header_back;
+ }
+}
+
+#nav_new a {
+ background-image: url("/i/new.png");
+ background-repeat: no-repeat;
+ background-position: 100% 0;
+}
+
+#logo {
+ border: none;
+ position: absolute;
+ top: 3.3em;
+ right: 10px;
+}
+
+#footer {
+ clear: both;
+ text-align: right;
+ font-size: 83%;
+ border-top: solid 1px $header_colour;
+ display: table;
+ margin: 2em 0 1em auto;
+ padding: 2px 4px;
+}
+
diff --git a/web/css/cobrands/emptyhomes/emptyhomes.css b/web/css/cobrands/emptyhomes/emptyhomes.css
index 2dcdce523..15afee568 100644
--- a/web/css/cobrands/emptyhomes/emptyhomes.css
+++ b/web/css/cobrands/emptyhomes/emptyhomes.css
@@ -93,14 +93,14 @@ blockquote {
margin-top: 0.5em;
}
-#content {
+#mysociety {
width: 100%; /* Must specify a width or IE goes crazy wrong! */
position: relative;
margin: 0 auto;
max-width: 60em;
}
-/* Can't put the margin in #content because of above IE craziness */
+/* Can't put the margin in #mysociety because of above IE craziness */
#wrapper {
clear: both;
margin: 0 2em 2em;
diff --git a/web/css/core.css b/web/css/core.css
index 5c8dad666..fb3ea393f 100644
--- a/web/css/core.css
+++ b/web/css/core.css
@@ -1,484 +1,380 @@
-/* Generics */
-
-blockquote {
- border-left: solid 4px #666666;
- padding-left: 0.5em;
-}
-blockquote h2, blockquote p {
- margin: 0;
-}
-
-form {
- margin: 0;
-}
-
-label {
- float: left;
- text-align: right;
- padding-right: 0.5em;
- width: 5em;
-}
-
-fieldset, #fieldset {
- border: none;
- padding: 0.5em;
-}
-
-legend {
- display: none;
-}
-
-dt {
- font-weight: bold;
- margin-top: 0.5em;
-}
-
-.v { display: none; }
-
-.gone {
- color: #666666;
- background-color: #cccccc;
-}
-
-p.error {
- text-align: center;
- color: #cc0000;
- font-size: larger;
-}
-
-ul {
- padding: 0 0 0 1.5em;
- margin: 0;
-}
-
-ul.error {
- color: #cc0000;
- background-color: #ffeeee;
- padding-right: 4px;
- text-align: left;
- font-size: larger;
-}
-
-div.form-error {
- color: #cc0000;
- margin: 5px 1em 5px 1em;
- padding: 2px 5px 2px 5px;
- float: left;
- background-color: #ffeeee;
- text-align: left;
-}
-
-div.form-field {
- clear: both;
-}
-
-/* Site-wide layout */
-
-#advert_thin {
- width: 50%;
- margin: 1em auto;
- border-top: dotted 1px #999999;
-}
-#advert_hfymp {
- border-top: dotted 1px #999999;
- text-align: center;
-}
-
-/* Front page */
-
-p#expl {
- text-align: center;
- font-size: 150%;
- margin: 0 2em;
-}
-
-#postcodeForm {
- display: table;
- _width: 33em;
- text-align: center;
- font-size: 150%;
- margin: 1em auto;
- padding: 1em;
- -moz-border-radius: 1em;
- -webkit-border-radius: 1em;
- border-radius: 1em;
+#mysociety blockquote {
+ border-left: solid 4px #666666;
+ padding-left: 0.5em;
+}
+#mysociety blockquote h2, #mysociety blockquote p {
+ margin: 0;
+}
+#mysociety dt {
+ font-weight: bold;
+ margin-top: 0.5em;
+}
+#mysociety .v {
+ display: none;
+}
+#mysociety .gone {
+ color: #666666;
+ background-color: #cccccc;
+}
+#mysociety p.error {
+ text-align: center;
+ color: #cc0000;
+ font-size: larger;
+}
+#mysociety ul {
+ padding: 0 0 0 1.5em;
+ margin: 0;
+}
+#mysociety ul.error {
+ color: #cc0000;
+ background-color: #ffeeee;
+ padding-right: 4px;
+ text-align: left;
+ font-size: larger;
+}
+#mysociety div.form-error {
+ color: #cc0000;
+ margin: 5px 1em 5px 1em;
+ padding: 2px 5px 2px 5px;
+ float: left;
+ background-color: #ffeeee;
+ text-align: left;
+}
+#mysociety div.form-field {
+ clear: both;
+}
+#mysociety #advert_thin {
+ width: 50%;
+ margin: 1em auto;
+ border-top: dotted 1px #999999;
+}
+#mysociety #advert_hfymp {
+ border-top: dotted 1px #999999;
+ text-align: center;
+}
+#mysociety p#expl {
+ text-align: center;
+ font-size: 150%;
+ margin: 0 2em;
+}
+#mysociety #postcodeForm {
+ display: table;
+ _width: 33em;
+ text-align: center;
+ font-size: 150%;
+ margin: 1em auto;
+ padding: 1em;
+ -moz-border-radius: 1em;
+ -webkit-border-radius: 1em;
+ border-radius: 1em;
+}
+#mysociety #postcodeForm label {
+ float: none;
+ padding-right: 0;
+}
+#mysociety #postcodeForm #submit {
+ font-size: 83%;
+}
+#mysociety #front_intro {
+ float: left;
+ width: 48%;
+}
+#mysociety #front_intro p {
+ clear: both;
+ margin-top: 0;
+}
+#mysociety #front_stats div {
+ text-align: center;
+ width: 5.5em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ border-radius: 0.5em;
+ float: left;
+ margin: 0 1em 1em;
+}
+#mysociety #front_stats div big {
+ font-size: 150%;
+ display: block;
+}
+#mysociety #front_recent {
+ float: right;
+ width: 48%;
+ margin-bottom: 1em;
+}
+#mysociety #front_recent img, #mysociety #alert_recent img {
+ margin-right: 0.25em;
+ margin-bottom: 0.25em;
+}
+#mysociety #front_recent > h2:first-child, #mysociety #front_intro > h2:first-child {
+ margin-top: 0;
+}
+#mysociety form {
+ margin: 0;
+}
+#mysociety label {
+ float: left;
+ text-align: right;
+ padding-right: 0.5em;
+ width: 5em;
+}
+#mysociety fieldset, #mysociety #fieldset {
+ border: none;
+ padding: 0.5em;
+}
+#mysociety fieldset div, #mysociety #fieldset div {
+ margin-top: 2px;
+ clear: left;
+}
+#mysociety legend {
+ display: none;
+}
+#mysociety #fieldset div.checkbox, #mysociety #problem_submit {
+ padding-left: 5.5em;
+}
+#mysociety #fieldset div.checkbox label, #mysociety label.n {
+ float: none;
+ text-align: left;
+ padding-right: 0;
+ width: auto;
+ cursor: pointer;
+ cursor: hand;
+}
+#mysociety #questionnaire label, #mysociety #alerts label {
+ float: none;
+}
+#mysociety .confirmed {
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+ padding: 5px;
+ text-align: center;
+}
+#mysociety #watermark {
+ background: url("/i/mojwatermark6.png");
+ height: 113px;
+ width: 231px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+}
+#mysociety #map_box {
+ float: right;
+ width: 502px;
+ position: relative;
+ padding-left: 20px;
+ background-color: #ffffff;
+}
+#mysociety p#copyright {
+ float: right;
+ margin: 0 0 1em 0;
+ font-size: 78%;
+}
+#mysociety #map {
+ border: solid 1px #000000;
+ width: 500px;
+ height: 500px;
+ overflow: hidden;
+ position: relative;
+ background-color: #f1f1f1;
+}
+#mysociety #drag {
+ position: absolute;
+ width: 500px;
+ height: 500px;
+ right: 0;
+ top: 0;
+}
+#mysociety #drag input, #mysociety #drag img {
+ position: absolute;
+ border: none;
+}
+#mysociety #drag input {
+ cursor: crosshair;
+ background-color: #cccccc;
+}
+#mysociety #drag img {
+ cursor: move;
+}
+#mysociety #drag img.pin {
+ z-index: 100;
+ background-color: inherit;
+}
+#mysociety #drag a img.pin {
+ cursor: pointer;
+ cursor: hand;
+}
+#mysociety form#mapForm #map {
+ cursor: pointer;
+}
+#mysociety form#mapForm .olTileImage {
+ cursor: crosshair;
+}
+#mysociety #compass {
+ background-color: #ffffff;
+ border: solid 1px #000000;
+ border-width: 0 1px 1px 0;
+ color: #000000;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+}
+#mysociety #compass img {
+ border: 0;
+}
+#mysociety #text_map {
+ margin-top: 0.5em;
+ margin-bottom: 1em;
+ font-size: 110%;
+}
+#mysociety #text_no_map {
+ margin-top: 0;
+}
+#mysociety #sub_map_links {
+ float: right;
+ clear: right;
+ margin-top: 0;
+}
+#mysociety #fixed {
+ margin: 0 530px 1em 0;
+ padding: 5px;
+ text-align: center;
+ position: relative;
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+}
+#mysociety #unknown {
+ margin: 0 530px 1em 0;
+ padding: 5px;
+ text-align: center;
+ position: relative;
+ background-color: #ffcccc;
+ border: solid 2px #990000;
+}
+#mysociety #updates div {
+ padding: 0 0 0.5em;
+ margin: 0 0 0.25em;
+ border-bottom: dotted 1px #5e552b;
+}
+#mysociety #updates div .problem-update, #mysociety #updates div .update-text {
+ padding: 0;
+ margin: 0;
+ border-bottom: 0;
+}
+#mysociety #updates p {
+ margin: 0;
+}
+#mysociety #nearby_lists h2 {
+ margin-top: 0.5em;
+ margin-bottom: 0;
+}
+#mysociety #alert_links {
+ float: right;
+}
+#mysociety #alert_links_area {
+ background-color: #ffeecc;
+ border: solid 1px #ff9900;
+ border-width: 1px 0;
+ padding: 3px 10px;
+ margin: 0;
+}
+#mysociety #rss_alert {
+ text-decoration: none;
+}
+#mysociety #rss_alert span {
+ text-decoration: underline;
+}
+#mysociety #email_alert_box {
+ display: none;
+ position: absolute;
+ padding: 3px;
+ font-size: 83%;
+ border: solid 1px #7399C3;
+ background-color: #eeeeff;
+ color: #000000;
+}
+#mysociety #email_alert_box p {
+ margin: 0;
+}
+#mysociety .council_sent_info {
+ font-size: smaller;
+}
+#mysociety #rss_items {
+ width: 62%;
+ float: left;
+}
+#mysociety #rss_rhs {
+ border-left: 1px dashed #999;
+ width: 36%;
+ float: right;
+ padding: 0 0 0 0.5em;
+ margin: 0 0 1em 0.5em;
+}
+#mysociety #rss_box {
+ padding: 10px;
+ border: 1px solid #999999;
+}
+#mysociety #rss_feed {
+ list-style-type: none;
+ margin-bottom: 2em;
+}
+#mysociety #rss_feed li {
+ margin-bottom: 1em;
+}
+#mysociety #alert_or {
+ font-style: italic;
+ font-size: 125%;
+ margin: 0;
+}
+#mysociety #rss_list {
+ float: left;
+ width: 47%;
+}
+#mysociety #rss_list ul {
+ list-style-type: none;
+}
+#mysociety #rss_buttons {
+ float: right;
+ width: 35%;
+ text-align: center;
+ margin-bottom: 2em;
+}
+#mysociety #rss_local {
+ margin-left: 1.5em;
+ margin-bottom: 0;
+}
+#mysociety #rss_local_alt {
+ margin: 0 0 2em 4em;
+}
+#mysociety #alert_photos {
+ text-align: center;
+ float: right;
+ width: 150px;
+ margin-left: 0.5em;
+}
+#mysociety #alert_photos h2 {
+ font-size: 100%;
}
-
-#postcodeForm label {
- float: none;
- padding-right: 0;
-}
-
-#postcodeForm #submit {
- font-size: 83%;
-}
-
-#front_intro {
- float: left;
- width: 48%;
-}
-
-#front_intro p {
- clear: both;
- margin-top: 0;
-}
-
-#front_stats div {
- text-align: center;
- width: 5.5em;
- -moz-border-radius: 0.5em;
- -webkit-border-radius: 0.5em;
- border-radius: 0.5em;
- float: left;
- margin: 0 1em 1em;
-}
-
-#front_stats div big {
- font-size: 150%;
- display: block;
-}
-
-#front_recent {
- float: right;
- width: 48%;
- margin-bottom: 1em;
-}
-#front_recent img, #alert_recent img {
- margin-right: 0.25em;
- margin-bottom: 0.25em;
-}
-#front_recent > h2:first-child, #front_intro > h2:first-child {
- margin-top: 0;
-}
-
-/* Forms */
-
-fieldset div, #fieldset div {
- margin-top: 2px;
- clear: left;
-}
-#fieldset div.checkbox, #problem_submit {
- padding-left: 5.5em;
-}
-#fieldset div.checkbox label, label.n {
- float: none;
- text-align: left;
- padding-right: 0;
- width: auto;
- cursor: pointer;
- cursor: hand;
+#mysociety #alert_photos img {
+ margin-bottom: 0.25em;
}
-
-#questionnaire label, #alerts label {
- float: none;
-}
-
-.confirmed {
- background-color: #ccffcc;
- border: solid 2px #009900;
- padding: 5px;
- text-align: center;
+#mysociety #col_problems, #mysociety #col_fixed {
+ float: left;
+ width: 48%;
+ margin-right: 1em;
}
-
-/* Map */
-
-#watermark {
- background: url("/i/mojwatermark6.png");
- height: 113px;
- width: 231px;
- position: absolute;
- bottom: 0;
- right: 0;
-}
-
-#map_box {
- float: right;
- width: 502px; /* Two pixels more than width of #map */
- position: relative;
- padding-left: 20px;
- background-color: #ffffff;
-}
-
-p#copyright {
- float: right;
- margin: 0 0 1em 0;
- font-size: 78%;
-}
-
-#map {
- border: solid 1px #000000;
- width: 500px; /* Twice a tile width */
- height: 500px;
- overflow: hidden;
- position: relative;
- background-color: #f1f1f1;
+#mysociety .contact-details {
+ font-size: 80%;
+ margin-top: 2em;
}
-#drag {
- position: absolute;
- width: 500px;
- height: 500px;
- right: 0;
- top: 0;
-}
-
-#drag input {
- cursor: crosshair;
- background-color: #cccccc;
-}
-#drag img {
- cursor: move;
-}
-#drag input, #drag img {
- position: absolute;
- border: none;
-}
-#drag img.pin {
- z-index: 100;
- background-color: inherit;
-}
-#drag a img.pin {
- cursor: pointer;
- cursor: hand;
-}
-
-#compass {
- background-color: #ffffff;
- border: solid 1px #000000;
- border-width: 0 1px 1px 0;
- color: #000000;
- position: absolute;
- top: 0px;
- left: 0px;
-}
-
-#compass img {
- border: 0;
-}
-
-#text_map {
- margin-top: 0.5em;
- margin-bottom: 1em;
- font-size: 110%;
-}
-#text_no_map {
- margin-top: 0;
- /* background-color: #ffeecc;
- padding: 4px; */
-}
-
-#sub_map_links {
- float: right;
- clear: right;
- margin-top: 0;
-}
-
-/* Problem pages */
-
-#fixed, #unknown {
- margin: 0 530px 1em 0;
- padding: 5px;
- text-align: center;
- position: relative;
-}
-#fixed {
- background-color: #ccffcc;
- border: solid 2px #009900;
-}
-#unknown {
- background-color: #ffcccc;
- border: solid 2px #990000;
-}
-
-#updates div {
- padding: 0 0 0.5em;
- margin: 0 0 0.25em;
- border-bottom: dotted 1px #5e552b;
-}
-
-#updates div .problem-update,
-#updates div .update-text {
- padding: 0;
- margin: 0;
- border-bottom: 0;
-}
-#updates p {
- margin: 0;
-}
-
-#nearby_lists h2 {
- margin-top: 0.5em;
- margin-bottom: 0;
-}
-#alert_links {
- float: right;
-}
-#alert_links_area {
- background-color: #ffeecc;
- border: solid 1px #ff9900;
- border-width: 1px 0;
- padding: 3px 10px;
- /* padding: 0 3px; */
- margin: 0;
-}
-#rss_alert {
- text-decoration: none;
-}
-#rss_alert span {
- text-decoration: underline;
-}
-#email_alert {
-}
-#email_alert_box {
- display:none;
- position: absolute;
- padding: 3px;
- font-size:83%;
- border:solid 1px #7399C3;
- background-color: #eeeeff;
- color: #000000;
-}
-#email_alert_box p {
- margin: 0;
-}
-
-.council_sent_info {
- font-size: smaller;
-}
-
-/* RSS feed XSL */
-
-#rss_items {
- width:62%;
- float:left;
-}
-#rss_rhs {
- border-left:1px dashed #999;
- width:36%;
- float:right;
- padding: 0 0 0 0.5em;
- margin: 0 0 1em 0.5em;
-}
-#rss_box {
- padding:10px;
- border:1px solid #999999;
-}
-
-/* Alerts */
-#rss_feed {
- list-style-type: none;
- margin-bottom: 2em;
-}
-#rss_feed li {
- margin-bottom: 1em;
-}
-#alert_or {
- font-style: italic;
- font-size: 125%;
- margin: 0;
-}
-#rss_list {
- float: left;
- width: 47%;
-}
-#rss_list ul {
- list-style-type: none;
-}
-#rss_buttons {
- float: right;
- width: 35%;
- text-align: center;
- margin-bottom: 2em;
-}
-#rss_local {
- margin-left: 1.5em;
- margin-bottom: 0;
-}
-#rss_local_alt {
- margin: 0 0 2em 4em;
-}
-
-#alert_photos {
- text-align: center;
- float: right;
- width: 150px;
- margin-left: 0.5em;
-}
-#alert_photos h2 {
- font-size: 100%;
-}
-#alert_photos img {
- margin-bottom: 0.25em;
-}
-
-/* Report page */
-
-#col_problems, #col_fixed {
- float: left;
- width: 48%;
- margin-right: 1em;
-}
-
-/* Contact page */
-.contact-details {
- font-size: 80%;
- margin-top: 2em;
-}
-
-/* Printing */
@media print {
- #map_box { float: none; margin: 0 auto; }
- #content { max-width: none; }
- #side { margin-right: 0; }
-}
-
-/* File upload */
-.progressContainer {
- margin: 5px;
- padding: 4px;
- width: 357px;
- border: solid 1px #E8E8E8;
- background-color: #F7F7F7;
- overflow: hidden;
-}
-.red { border: solid 1px #B50000; background-color: #FFEBEB; }
-.green { border: solid 1px #DDF0DD; background-color: #EBFFEB; }
-.blue { border: solid 1px #CEE2F2; background-color: #F0F5FF; }
-
-.progressName {
- font-size: 8pt;
- font-weight: bold;
- color: #555555;
- width: 323px;
- height: 14px;
- text-align: left;
- white-space: nowrap;
- overflow: hidden;
-}
-.progressBarInProgress, .progressBarComplete, .progressBarError {
- font-size: 0px;
- width: 0%;
- height: 2px;
- background-color: blue;
- margin-top: 2px;
-}
-.progressBarComplete {
- width: 100%;
- background-color: green;
- visibility: hidden;
-}
-.progressBarError {
- width: 100%;
- background-color: red;
- visibility: hidden;
-}
-.progressBarStatus {
- margin-top: 2px;
- width: 337px;
- font-size: 7pt;
- font-family: Verdana;
- text-align: left;
- white-space: nowrap;
+ #mysociety #map_box {
+ float: none;
+ margin: 0 auto;
+ }
+ #mysociety #mysociety {
+ max-width: none;
+ }
+ #mysociety #side {
+ margin-right: 0;
+ }
}
-
-
diff --git a/web/css/core.scss b/web/css/core.scss
new file mode 100644
index 000000000..ed8667983
--- /dev/null
+++ b/web/css/core.scss
@@ -0,0 +1,507 @@
+$map_width: 500px;
+
+@mixin problem-banner {
+ margin: 0 $map_width + 30px 1em 0;
+ padding: 5px;
+ text-align: center;
+ position: relative;
+}
+
+// Generics
+
+#mysociety {
+
+ blockquote {
+ border-left: solid 4px #666666;
+ padding-left: 0.5em;
+ h2, p {
+ margin: 0;
+ }
+ }
+
+ dt {
+ font-weight: bold;
+ margin-top: 0.5em;
+ }
+
+ .v {
+ display: none;
+ }
+
+ .gone {
+ color: #666666;
+ background-color: #cccccc;
+ }
+
+ p.error {
+ text-align: center;
+ color: #cc0000;
+ font-size: larger;
+ }
+
+ ul {
+ padding: 0 0 0 1.5em;
+ margin: 0;
+ }
+
+ ul.error {
+ color: #cc0000;
+ background-color: #ffeeee;
+ padding-right: 4px;
+ text-align: left;
+ font-size: larger;
+ }
+
+ div.form-error {
+ color: #cc0000;
+ margin: 5px 1em 5px 1em;
+ padding: 2px 5px 2px 5px;
+ float: left;
+ background-color: #ffeeee;
+ text-align: left;
+ }
+
+ div.form-field {
+ clear: both;
+ }
+
+ // Site-wide layout
+
+ #advert_thin {
+ width: 50%;
+ margin: 1em auto;
+ border-top: dotted 1px #999999;
+ }
+ #advert_hfymp {
+ border-top: dotted 1px #999999;
+ text-align: center;
+ }
+
+ // Front page
+
+ p#expl {
+ text-align: center;
+ font-size: 150%;
+ margin: 0 2em;
+ }
+
+ #postcodeForm {
+ display: table;
+ _width: 33em;
+ text-align: center;
+ font-size: 150%;
+ margin: 1em auto;
+ padding: 1em;
+ -moz-border-radius: 1em;
+ -webkit-border-radius: 1em;
+ border-radius: 1em;
+
+ label {
+ float: none;
+ padding-right: 0;
+ }
+
+ #submit {
+ font-size: 83%;
+ }
+ }
+
+ #front_intro {
+ float: left;
+ width: 48%;
+
+ p {
+ clear: both;
+ margin-top: 0;
+ }
+ }
+
+ #front_stats div {
+ text-align: center;
+ width: 5.5em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ border-radius: 0.5em;
+ float: left;
+ margin: 0 1em 1em;
+
+ big {
+ font-size: 150%;
+ display: block;
+ }
+ }
+
+ #front_recent {
+ float: right;
+ width: 48%;
+ margin-bottom: 1em;
+ }
+ #front_recent img, #alert_recent img {
+ margin-right: 0.25em;
+ margin-bottom: 0.25em;
+ }
+ #front_recent > h2:first-child, #front_intro > h2:first-child {
+ margin-top: 0;
+ }
+
+ // Forms
+
+ form {
+ margin: 0;
+ }
+
+ label {
+ float: left;
+ text-align: right;
+ padding-right: 0.5em;
+ width: 5em;
+ }
+
+ fieldset, #fieldset {
+ border: none;
+ padding: 0.5em;
+ div {
+ margin-top: 2px;
+ clear: left;
+ }
+ }
+
+ legend {
+ display: none;
+ }
+
+ #fieldset div.checkbox, #problem_submit {
+ padding-left: 5.5em;
+ }
+ #fieldset div.checkbox label, label.n {
+ float: none;
+ text-align: left;
+ padding-right: 0;
+ width: auto;
+ cursor: pointer;
+ cursor: hand;
+ }
+
+ #questionnaire label, #alerts label {
+ float: none;
+ }
+
+ .confirmed {
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+ padding: 5px;
+ text-align: center;
+ }
+
+ // Map
+
+ #watermark {
+ background: url("/i/mojwatermark6.png");
+ height: 113px;
+ width: 231px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ }
+
+ #map_box {
+ float: right;
+ width: $map_width + 2px;
+ position: relative;
+ padding-left: 20px;
+ background-color: #ffffff;
+ }
+
+ p#copyright {
+ float: right;
+ margin: 0 0 1em 0;
+ font-size: 78%;
+ }
+
+ #map {
+ border: solid 1px #000000;
+ width: $map_width; // Twice a tile width
+ height: $map_width;
+ overflow: hidden;
+ position: relative;
+ background-color: #f1f1f1;
+ }
+
+ #drag {
+ position: absolute;
+ width: $map_width;
+ height: $map_width;
+ right: 0;
+ top: 0;
+
+ input, img {
+ position: absolute;
+ border: none;
+ }
+ input {
+ cursor: crosshair;
+ background-color: #cccccc;
+ }
+ img {
+ cursor: move;
+ }
+ img.pin {
+ z-index: 100;
+ background-color: inherit;
+ }
+ a img.pin {
+ cursor: pointer;
+ cursor: hand;
+ }
+ }
+
+ form#mapForm #map {
+ cursor: pointer;
+ }
+
+ form#mapForm .olTileImage {
+ cursor: crosshair;
+ }
+
+ #compass {
+ background-color: #ffffff;
+ border: solid 1px #000000;
+ border-width: 0 1px 1px 0;
+ color: #000000;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ img {
+ border: 0;
+ }
+ }
+
+ #text_map {
+ margin-top: 0.5em;
+ margin-bottom: 1em;
+ font-size: 110%;
+ }
+ #text_no_map {
+ margin-top: 0;
+ // background-color: #ffeecc;
+ // padding: 4px;
+ }
+
+ #sub_map_links {
+ float: right;
+ clear: right;
+ margin-top: 0;
+ }
+
+ // Problem pages
+
+ #fixed {
+ @include problem-banner;
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+ }
+
+ #unknown {
+ @include problem-banner;
+ background-color: #ffcccc;
+ border: solid 2px #990000;
+ }
+
+ #updates {
+ div {
+ padding: 0 0 0.5em;
+ margin: 0 0 0.25em;
+ border-bottom: dotted 1px #5e552b;
+
+ .problem-update, .update-text {
+ padding: 0;
+ margin: 0;
+ border-bottom: 0;
+ }
+ }
+
+ p {
+ margin: 0;
+ }
+ }
+
+ #nearby_lists h2 {
+ margin-top: 0.5em;
+ margin-bottom: 0;
+ }
+ #alert_links {
+ float: right;
+ }
+ #alert_links_area {
+ background-color: #ffeecc;
+ border: solid 1px #ff9900;
+ border-width: 1px 0;
+ padding: 3px 10px;
+ // padding: 0 3px;
+ margin: 0;
+ }
+ #rss_alert {
+ text-decoration: none;
+ span {
+ text-decoration: underline;
+ }
+ }
+ #email_alert {
+ }
+ #email_alert_box {
+ display:none;
+ position: absolute;
+ padding: 3px;
+ font-size:83%;
+ border:solid 1px #7399C3;
+ background-color: #eeeeff;
+ color: #000000;
+ }
+ #email_alert_box p {
+ margin: 0;
+ }
+
+ .council_sent_info {
+ font-size: smaller;
+ }
+
+ // RSS feed XSL
+
+ #rss_items {
+ width:62%;
+ float:left;
+ }
+ #rss_rhs {
+ border-left:1px dashed #999;
+ width:36%;
+ float:right;
+ padding: 0 0 0 0.5em;
+ margin: 0 0 1em 0.5em;
+ }
+ #rss_box {
+ padding:10px;
+ border:1px solid #999999;
+ }
+
+ // Alerts
+ #rss_feed {
+ list-style-type: none;
+ margin-bottom: 2em;
+ }
+ #rss_feed li {
+ margin-bottom: 1em;
+ }
+ #alert_or {
+ font-style: italic;
+ font-size: 125%;
+ margin: 0;
+ }
+ #rss_list {
+ float: left;
+ width: 47%;
+ }
+ #rss_list ul {
+ list-style-type: none;
+ }
+ #rss_buttons {
+ float: right;
+ width: 35%;
+ text-align: center;
+ margin-bottom: 2em;
+ }
+ #rss_local {
+ margin-left: 1.5em;
+ margin-bottom: 0;
+ }
+ #rss_local_alt {
+ margin: 0 0 2em 4em;
+ }
+
+ #alert_photos {
+ text-align: center;
+ float: right;
+ width: 150px;
+ margin-left: 0.5em;
+ }
+ #alert_photos h2 {
+ font-size: 100%;
+ }
+ #alert_photos img {
+ margin-bottom: 0.25em;
+ }
+
+ // Report page
+
+ #col_problems, #col_fixed {
+ float: left;
+ width: 48%;
+ margin-right: 1em;
+ }
+
+ // Contact page
+ .contact-details {
+ font-size: 80%;
+ margin-top: 2em;
+ }
+
+ // File upload
+ // .progressContainer {
+ // margin: 5px;
+ // padding: 4px;
+ // width: 357px;
+ // border: solid 1px #E8E8E8;
+ // background-color: #F7F7F7;
+ // overflow: hidden;
+ // }
+ // .red { border: solid 1px #B50000; background-color: #FFEBEB; }
+ // .green { border: solid 1px #DDF0DD; background-color: #EBFFEB; }
+ // .blue { border: solid 1px #CEE2F2; background-color: #F0F5FF; }
+
+ // .progressName {
+ // font-size: 8pt;
+ // font-weight: bold;
+ // color: #555555;
+ // width: 323px;
+ // height: 14px;
+ // text-align: left;
+ // white-space: nowrap;
+ // overflow: hidden;
+ // }
+ // .progressBarInProgress, .progressBarComplete, .progressBarError {
+ // font-size: 0px;
+ // width: 0%;
+ // height: 2px;
+ // background-color: blue;
+ // margin-top: 2px;
+ // }
+ // .progressBarComplete {
+ // width: 100%;
+ // background-color: green;
+ // visibility: hidden;
+ // }
+ // .progressBarError {
+ // width: 100%;
+ // background-color: red;
+ // visibility: hidden;
+ // }
+ // .progressBarStatus {
+ // margin-top: 2px;
+ // width: 337px;
+ // font-size: 7pt;
+ // font-family: Verdana;
+ // text-align: left;
+ // white-space: nowrap;
+ // }
+
+}
+
+// Printing, SCSS doesn't handle @media nesting
+
+@media print {
+ #mysociety {
+ #map_box { float: none; margin: 0 auto; }
+ #mysociety { max-width: none; }
+ #side { margin-right: 0; }
+ }
+}
+
diff --git a/web/css/ie6-378.css b/web/css/ie6-378.css
index e22f519ff..83efdb634 100644
--- a/web/css/ie6-378.css
+++ b/web/css/ie6-378.css
@@ -1,4 +1,4 @@
-#watermark {
+#mysociety #watermark {
background: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/i/mojwatermark-378.png',sizingMethod='scale');
}
diff --git a/web/css/ie6.css b/web/css/ie6.css
index cccb99f12..3bb91aa31 100644
--- a/web/css/ie6.css
+++ b/web/css/ie6.css
@@ -1,4 +1,4 @@
-#watermark {
+#mysociety #watermark {
background: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/i/mojwatermark6.png',sizingMethod='scale');
}
diff --git a/web/css/main.css b/web/css/main.css
index f1d416773..a7bb81d31 100644
--- a/web/css/main.css
+++ b/web/css/main.css
@@ -1,146 +1,130 @@
-/* Generics */
+a:link {
+ color: #0000ff;
+}
+a:visited {
+ color: #000099;
+}
+a:hover, a:active {
+ color: #ff0000;
+}
body {
- font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
- margin: 0;
- padding: 0;
- /* color: #a9aeb0; */
+ font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
+ margin: 0;
+ padding: 0;
}
h1 {
- margin: 0;
- font-size: 175%;
+ margin: 0;
+ font-size: 175%;
}
+
h2 {
- font-size: 140%;
+ font-size: 140%;
}
select, input, textarea {
- font-size: 99%;
+ font-size: 99%;
}
-a:link {
- color: #0000ff;
+#mysociety a.unsuitable-report {
+ font-size: small;
}
-a:visited {
- color: #000099;
+#mysociety blockquote {
+ border-left: solid 4px #5e552b;
}
-a:hover, a:active {
- color: #ff0000;
+#mysociety .a {
+ color: #000000;
+ background-color: #f3e5a5;
}
-
-a.unsuitable-report {
- font-size: small;
+#mysociety #postcodeForm {
+ background-color: #e3d595;
}
-
-blockquote {
- border-left: solid 4px #5e552b;
+#mysociety #front_stats div {
+ background-color: #e3d595;
}
-.a {
- color: #000000;
- background-color: #f3e5a5;
-}
-
-/* Site layout */
-
#header {
- font-size: 200%;
- font-weight: bold;
- border-bottom: solid 2px #5e552b;
- margin: 0;
- padding: 0.15em 0.5em;
- background-color: #e3d595;
- color: #5e552b;
+ font-size: 200%;
+ font-weight: bold;
+ border-bottom: solid 2px #5e552b;
+ margin: 0;
+ padding: 0.15em 0.5em;
+ background-color: #e3d595;
+ color: #5e552b;
}
-
-#my {
- color: #4e451b;
- background-color: #e3d595;
-}
-#beta {
- color: #6e653b;
- background-color: #e3d595;
- font-size: 50%;
- font-style: italic;
-}
-
#header a:link, #header a:visited {
- color: #5e552b;
- background-color: #e3d595;
- text-decoration: none;
+ color: #5e552b;
+ background-color: #e3d595;
+ text-decoration: none;
}
#header a:active, #header a:hover {
- text-decoration: underline;
+ text-decoration: underline;
+}
+
+#my {
+ color: #4e451b;
+ background-color: #e3d595;
}
-#content {
- width: 100%; /* Must specify a width or IE goes crazy wrong! */
- position: relative;
- margin: 0 auto;
- max-width: 60em;
+#mysociety {
+ width: 100%;
+ /* Must specify a width or IE goes crazy wrong! */
+ position: relative;
+ margin: 0 auto;
+ max-width: 60em;
}
-/* Can't put the margin in #content because of above IE craziness */
+/* Can't put the margin in #mysociety because of above IE craziness */
#wrapper {
- margin: 2em;
+ margin: 2em;
}
#navigation {
- position: absolute;
- top: 1em;
- right: 1em;
- padding: 0;
- margin: 0;
- list-style-type: none;
+ position: absolute;
+ top: 1em;
+ right: 1em;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
}
#navigation li {
- display: inline;
- padding: 0;
- margin: 0;
+ display: inline;
+ padding: 0;
+ margin: 0;
}
-
#navigation a {
- display: -moz-inline-box;
- display: inline-block;
- padding: 0.4em 1em;
+ display: -moz-inline-box;
+ display: inline-block;
+ padding: 0.4em 1em;
}
#navigation a:link, #navigation a:visited {
- color: #5e552b;
+ color: #5e552b;
}
#navigation a:hover, #navigation a:active {
- background-color: #5e552b;
- color: #e3d595;
+ background-color: #5e552b;
+ color: #e3d595;
}
#nav_new a {
- background-image: url("/i/new.png");
- background-repeat: no-repeat;
- background-position: 100% 0;
+ background-image: url("/i/new.png");
+ background-repeat: no-repeat;
+ background-position: 100% 0;
}
#logo {
- border: none;
- position: absolute;
- top: 3.3em;
- right: 10px;
+ border: none;
+ position: absolute;
+ top: 3.3em;
+ right: 10px;
}
#footer {
- clear: both;
- text-align: right;
- font-size: 83%;
- border-top: solid 1px #5e552b;
- display: table;
- margin: 2em 0 1em auto;
- padding: 2px 4px;
-}
-
-#postcodeForm {
- background-color: #e3d595;
+ clear: both;
+ text-align: right;
+ font-size: 83%;
+ border-top: solid 1px #5e552b;
+ display: table;
+ margin: 2em 0 1em auto;
+ padding: 2px 4px;
}
-
-#front_stats div {
- background-color: #e3d595;
-}
-
diff --git a/web/css/main.scss b/web/css/main.scss
new file mode 100644
index 000000000..bcebc2bd0
--- /dev/null
+++ b/web/css/main.scss
@@ -0,0 +1,14 @@
+// Generics
+
+$header_back: #e3d595;
+$header_back_lighter: #f3e5a5;
+$header_colour: #5e552b;
+$header_darker: #4e451b;
+
+a {
+ &:link { color: #0000ff; }
+ &:visited { color: #000099; }
+ &:hover, &:active { color: #ff0000; }
+}
+
+@import "_main";
diff --git a/web/down.default.html b/web/down.default.html
index 4e432473d..35d2cf237 100644
--- a/web/down.default.html
+++ b/web/down.default.html
@@ -12,7 +12,7 @@
<body>
<h1 id="header">Fix<span id="my">My</span>Street</h1>
-<div id="wrapper"><div id="content">
+<div id="wrapper"><div id="mysociety">
<p id="expl"><strong>FixMyStreet is currently down for maintenance.</strong>
<br><small>Please come back later.</small></p>
diff --git a/web/faq.cgi b/web/faq.cgi
index 2046f6955..4d9c7413a 100755
--- a/web/faq.cgi
+++ b/web/faq.cgi
@@ -16,16 +16,8 @@ my $lastmodified = (stat $0)[9];
sub main {
my $q = shift;
print Page::header($q, title=>_('Frequently Asked Questions'));
- if ($q->{site} eq 'emptyhomes') {
- my $lang = $mySociety::Locale::lang;
- if ($lang eq 'cy') {
- print File::Slurp::read_file("$FindBin::Bin/../templates/website/faq-eha.cy.html");
- } else {
- print File::Slurp::read_file("$FindBin::Bin/../templates/website/faq-eha.html");
- }
- } else {
- print File::Slurp::read_file("$FindBin::Bin/../templates/website/faq.html");
- }
+ my $lang = $mySociety::Locale::lang;
+ print Page::template_include("faq-$lang", $q, Page::template_root($q));
print Page::footer($q);
}
Page::do_fastcgi(\&main, $lastmodified);
diff --git a/web/import.cgi b/web/import.cgi
index 2aede1697..371e70f7a 100755
--- a/web/import.cgi
+++ b/web/import.cgi
@@ -13,16 +13,14 @@ use Error qw(:try);
use Standard;
use Utils;
use mySociety::AuthToken;
+use mySociety::Config;
use mySociety::EmailUtil;
-use mySociety::EvEl;
sub main {
my $q = shift;
my @vars = qw(service subject detail name email phone easting northing lat lon id phone_id);
my %input = map { $_ => $q->param($_) || '' } @vars;
- $input{easting} ||= 0;
- $input{northing} ||= 0;
my @errors;
unless ($ENV{REQUEST_METHOD} eq 'POST') {
@@ -32,6 +30,18 @@ sub main {
return;
}
+ # If we were given easting, northing convert to lat lon now
+ my $latitude = $input{lat} ||= 0;
+ my $longitude = $input{lon} ||= 0;
+ if (
+ !( $latitude || $longitude ) # have not been given lat or lon
+ && ( $input{easting} && $input{northing} ) # but do have e and n
+ )
+ {
+ ( $latitude, $longitude ) =
+ Utils::convert_en_to_latlon( $input{easting}, $input{northing});
+ }
+
my $fh = $q->upload('photo'); # MUST come before $q->header, don't know why!
print $q->header(-charset => 'utf-8', -content_type => 'text/plain');
@@ -50,14 +60,15 @@ sub main {
push @errors, 'Please enter a valid email';
}
- if ($input{lat}) {
+ if ( $latitude && mySociety::Config::get('COUNTRY') eq 'GB' ) {
try {
- ($input{easting}, $input{northing}) = mySociety::GeoUtil::wgs84_to_national_grid($input{lat}, $input{lon}, 'G');
- } catch Error::Simple with {
+ Utils::convert_latlon_to_en( $latitude, $longitude );
+ } catch Error::Simple with {
my $e = shift;
push @errors, "We had a problem with the supplied co-ordinates - outside the UK?";
};
}
+
# TODO: Get location from photo if present in EXIF data?
my $photo;
@@ -70,7 +81,7 @@ sub main {
};
}
- unless ($photo || ($input{easting} && $input{northing})) {
+ unless ( $photo || ( $latitude || $longitude ) ) {
push @errors, 'Either a location or a photo must be provided.';
}
@@ -92,30 +103,23 @@ sub main {
# Store what we have so far in the database
my $id = dbh()->selectrow_array("select nextval('problem_id_seq')");
Utils::workaround_pg_bytea("insert into problem
- (id, postcode, easting, northing, title, detail, name, service,
+ (id, postcode, latitude, longitude, title, detail, name, service,
email, phone, photo, state, used_map, anonymous, category, areas)
values
(?, '', ?, ?, ?, ?, ?, ?, ?, ?, ?, 'partial', 't', 'f', '', '')", 10,
- $id, $input{easting}, $input{northing}, $input{subject},
+ $id, $latitude, $longitude, $input{subject},
$input{detail}, $input{name}, $input{service}, $input{email}, $input{phone}, $photo);
- # Send checking email
- my $template = File::Slurp::read_file("$FindBin::Bin/../templates/emails/partial");
my $token = mySociety::AuthToken::store('partial', $id);
my %h = (
name => $input{name} ? ' ' . $input{name} : '',
- url => mySociety::Config::get('BASE_URL') . '/L/' . $token,
+ url => Page::base_url_with_lang($q, undef, 1) . '/L/' . $token,
service => $input{service},
+ title => $input{title},
+ detail => $input{detail},
);
- my $sender = mySociety::Config::get('CONTACT_EMAIL');
- $sender =~ s/team/fms-DO-NOT-REPLY/;
- mySociety::EvEl::send({
- _template_ => $template,
- _parameters_ => \%h,
- To => $input{name} ? [ [ $input{email}, $input{name} ] ] : $input{email},
- From => [ $sender, 'FixMyStreet' ],
- }, $input{email});
+ Page::send_email($q, $input{email}, $input{name}, 'partial', %h);
dbh()->commit();
print 'SUCCESS';
diff --git a/web/index.cgi b/web/index.cgi
index e503f50ba..c86ac6ad1 100755
--- a/web/index.cgi
+++ b/web/index.cgi
@@ -9,26 +9,34 @@
use strict;
use Standard;
use Utils;
+use Encode;
use Error qw(:try);
use File::Slurp;
-use LWP::Simple;
-use RABX;
use CGI::Carp;
+use POSIX qw(strcoll);
use URI::Escape;
+# use Carp::Always;
+
use CrossSell;
use FixMyStreet::Geocode;
use mySociety::AuthToken;
use mySociety::Config;
use mySociety::DBHandle qw(select_all);
use mySociety::EmailUtil;
-use mySociety::GeoUtil;
use mySociety::Locale;
use mySociety::MaPit;
use mySociety::PostcodeUtil;
use mySociety::Random;
use mySociety::VotingArea;
use mySociety::Web qw(ent NewURL);
+use Utils;
+
+sub debug (@) {
+ return;
+ my ( $format, @args ) = @_;
+ warn sprintf $format, map { defined $_ ? $_ : 'undef' } @args;
+}
BEGIN {
if (!dbh()->selectrow_array('select secret from secret for update of secret')) {
@@ -47,13 +55,13 @@ sub main {
my $id = mySociety::AuthToken::retrieve('partial', $partial);
if ($id) {
my @row = dbh()->selectrow_array(
- "select easting, northing, name, email, title, (photo is not null) as has_photo, phone, detail
+ "select latitude, longitude, name, email, title, (photo is not null) as has_photo, phone, detail
from problem where id=? and state='partial'", {}, $id);
if (@row) {
$q->param('anonymous', 1);
$q->param('submit_map', 1);
- $q->param('easting', $row[0]);
- $q->param('northing', $row[1]);
+ $q->param('latitude', $row[0]);
+ $q->param('longitude', $row[1]);
$q->param('name', $row[2]);
$q->param('email', $row[3]);
$q->param('title', $row[4]);
@@ -72,19 +80,21 @@ sub main {
my %params;
if ($q->param('submit_problem')) {
$params{title} = _('Submitting your report');
- ($out) = submit_problem($q);
+ ($out, %params) = submit_problem($q);
} elsif ($q->param('submit_update')) {
$params{title} = _('Submitting your update');
- ($out) = submit_update($q);
+ ($out, %params) = submit_update($q);
} elsif ($q->param('submit_map')) {
($out, %params) = display_form($q, [], {});
$params{title} = _('Reporting a problem');
} elsif ($q->param('id')) {
($out, %params) = display_problem($q, [], {});
$params{title} .= ' - ' . _('Viewing a problem');
- } elsif ($q->param('pc') || ($q->param('x') && $q->param('y')) || ($q->param('e') && $q->param('n'))) {
+ } elsif ($q->param('pc') || ($q->param('x') && $q->param('y')) || ($q->param('lat') || $q->param('lon'))) {
($out, %params) = display_location($q);
$params{title} = _('Viewing a location');
+ } elsif ($q->param('e') && $q->param('n')) {
+ ($out, %params) = redirect_from_osgb_to_wgs84($q);
} else {
($out, %params) = front_page($q);
}
@@ -107,6 +117,8 @@ sub front_page {
my $cobrand_form_elements = Cobrand::form_elements($cobrand, 'postcodeForm', $q);
my $form_action = Cobrand::url($cobrand, '/', $q);
my $question = Cobrand::enter_postcode_text($cobrand, $q);
+ $question = _("Enter a nearby GB postcode, or street name and area")
+ unless $question;
my %params = ('context' => 'front-page');
$params{status_code} = $status_code if $status_code;
my %vars = (
@@ -114,7 +126,7 @@ sub front_page {
pc_h => $pc_h,
cobrand_form_elements => $cobrand_form_elements,
form_action => $form_action,
- question => $question,
+ question => "$question:",
);
my $cobrand_front_page = Page::template_include('front-page', $q, Page::template_root($q), %vars);
return ($cobrand_front_page, %params) if $cobrand_front_page;
@@ -152,7 +164,7 @@ EOF
}
my $activate = _("Go");
$out .= <<EOF;
-<label for="pc">$question</label>
+<label for="pc">$question:</label>
&nbsp;<input type="text" name="pc" value="$pc_h" id="pc" size="10" maxlength="200">
&nbsp;<input type="submit" value="$activate" id="submit">
$cobrand_form_elements
@@ -247,13 +259,13 @@ sub submit_update {
$h{url} = $base . '/C/' . mySociety::AuthToken::store('update', { id => $id, add_alert => $input{add_alert} } );
dbh()->commit();
- my $out = Page::send_email($q, $input{rznvy}, $input{name}, 'update', %h);
+ my $out = Page::send_confirmation_email($q, $input{rznvy}, $input{name}, 'update', %h);
return $out;
}
sub submit_problem {
my $q = shift;
- my @vars = qw(council title detail name email phone pc easting northing skipped anonymous category partial upload_fileid lat lon);
+ my @vars = qw(council title detail name email phone pc skipped anonymous category partial upload_fileid latitude longitude);
my %input = map { $_ => scalar $q->param($_) } @vars;
for (qw(title detail)) {
$input{$_} = lc $input{$_} if $input{$_} !~ /[a-z]/;
@@ -265,15 +277,18 @@ sub submit_problem {
my @errors;
my %field_errors;
- if ($input{lat}) {
+ my $cobrand = Page::get_cobrand($q);
+
+ # If in UK and we have a lat,lon coocdinate check it is in UK
+ if ( $input{latitude} && mySociety::Config::get('COUNTRY') eq 'GB' ) {
try {
- ($input{easting}, $input{northing}) = mySociety::GeoUtil::wgs84_to_national_grid($input{lat}, $input{lon}, 'G');
+ Utils::convert_latlon_to_en( $input{latitude}, $input{longitude} );
} catch Error::Simple with {
my $e = shift;
push @errors, "We had a problem with the supplied co-ordinates - outside the UK?";
};
}
-
+
my $fh = $q->upload('photo');
if ($fh) {
my $err = Page::check_photo($q, $fh);
@@ -294,7 +309,7 @@ sub submit_problem {
} elsif (!mySociety::EmailUtil::is_valid_email($input{email})) {
$field_errors{email} = _('Please enter a valid email');
}
- if ($input{category} && $input{category} eq '-- Pick a category --') {
+ if ($input{category} && $input{category} eq _('-- Pick a category --')) {
$field_errors{category} = _('Please choose a category');
$input{category} = '';
} elsif ($input{category} && $input{category} eq _('-- Pick a property type --')) {
@@ -305,11 +320,13 @@ sub submit_problem {
return display_form($q, \@errors, \%field_errors) if (@errors || scalar keys %field_errors); # Short circuit
my $areas;
- if ($input{easting} && $input{northing}) {
- $areas = mySociety::MaPit::call('point', "27700/$input{easting},$input{northing}");
+ if (defined $input{latitude} && defined $input{longitude}) {
+ my $mapit_query = "4326/$input{longitude},$input{latitude}";
+ $areas = mySociety::MaPit::call( 'point', $mapit_query );
if ($input{council} =~ /^[\d,]+(\|[\d,]+)?$/) {
my $no_details = $1 || '';
- my %va = map { $_ => 1 } @$mySociety::VotingArea::council_parent_types;
+ my @area_types = Cobrand::area_types($cobrand);
+ my %va = map { $_ => 1 } @area_types;
my %councils;
foreach (keys %$areas) {
$councils{$_} = 1 if $va{$areas->{$_}->{type}};
@@ -345,10 +362,10 @@ sub submit_problem {
$input{council} = join(',', @valid_councils) . $no_details;
}
$areas = ',' . join(',', sort keys %$areas) . ',';
- } elsif ($input{easting} || $input{northing}) {
+ } elsif (defined $input{latitude} || defined $input{longitude}) {
push(@errors, _('Somehow, you only have one co-ordinate. Please try again.'));
} else {
- push(@errors, _('You haven\'t specified any sort of co-ordinates. Please try again.'));
+ push(@errors, _("You haven't specified any sort of co-ordinates. Please try again."));
}
my $image;
@@ -373,15 +390,14 @@ sub submit_problem {
my $used_map = $input{skipped} ? 'f' : 't';
$input{category} = _('Other') unless $input{category};
my ($id, $out);
- my $cobrand = Page::get_cobrand($q);
my $cobrand_data = Cobrand::extra_problem_data($cobrand, $q);
if (my $token = $input{partial}) {
my $id = mySociety::AuthToken::retrieve('partial', $token);
if ($id) {
- dbh()->do("update problem set postcode=?, easting=?, northing=?, title=?, detail=?,
+ dbh()->do("update problem set postcode=?, latitude=?, longitude=?, title=?, detail=?,
name=?, email=?, phone=?, state='confirmed', council=?, used_map='t',
anonymous=?, category=?, areas=?, cobrand=?, cobrand_data=?, confirmed=ms_current_timestamp(),
- lastupdate=ms_current_timestamp() where id=?", {}, $input{pc}, $input{easting}, $input{northing},
+ lastupdate=ms_current_timestamp() where id=?", {}, $input{pc}, $input{latitude}, $input{longitude},
$input{title}, $input{detail}, $input{name}, $input{email},
$input{phone}, $input{council}, $input{anonymous} ? 'f' : 't',
$input{category}, $areas, $cobrand, $cobrand_data, $id);
@@ -400,11 +416,11 @@ Please <a href="/contact">let us know what went on</a> and we\'ll look into it.'
} else {
$id = dbh()->selectrow_array("select nextval('problem_id_seq');");
Utils::workaround_pg_bytea("insert into problem
- (id, postcode, easting, northing, title, detail, name,
+ (id, postcode, latitude, longitude, title, detail, name,
email, phone, photo, state, council, used_map, anonymous, category, areas, lang, cobrand, cobrand_data)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'unconfirmed', ?, ?, ?, ?, ?, ?, ?, ?)", 10,
- $id, $input{pc}, $input{easting}, $input{northing}, $input{title},
+ $id, $input{pc}, $input{latitude}, $input{longitude}, $input{title},
$input{detail}, $input{name}, $input{email}, $input{phone}, $image,
$input{council}, $used_map, $input{anonymous} ? 'f': 't', $input{category},
$areas, $mySociety::Locale::lang, $cobrand, $cobrand_data);
@@ -416,7 +432,7 @@ Please <a href="/contact">let us know what went on</a> and we\'ll look into it.'
$h{url} = $base . '/P/' . mySociety::AuthToken::store('problem', $id);
dbh()->commit();
- $out = Page::send_email($q, $input{email}, $input{name}, 'problem', %h);
+ $out = Page::send_confirmation_email($q, $input{email}, $input{name}, 'problem', %h);
}
return $out;
@@ -430,22 +446,29 @@ sub display_form {
push @errors, _('There were problems with your report. Please see below.') if (scalar keys %field_errors);
my ($pin_x, $pin_y, $pin_tile_x, $pin_tile_y) = (0,0,0,0);
- my @vars = qw(title detail name email phone pc easting northing x y skipped council anonymous partial upload_fileid lat lon);
- my %input = map { $_ => $q->param($_) || '' } @vars;
- my %input_h = map { $_ => $q->param($_) ? ent($q->param($_)) : '' } @vars;
+ my @vars = qw(title detail name email phone pc latitude longitude x y skipped council anonymous partial upload_fileid);
- # Convert lat/lon to easting/northing if given
- if ($input{lat}) {
- try {
- ($input{easting}, $input{northing}) = mySociety::GeoUtil::wgs84_to_national_grid($input{lat}, $input{lon}, 'G');
- $input_h{easting} = $input{easting};
- $input_h{northing} = $input{northing};
- } catch Error::Simple with {
- my $e = shift;
- push @errors, "We had a problem with the supplied co-ordinates - outside the UK?";
- };
+ my %input = ();
+ my %input_h = ();
+
+ foreach my $key (@vars) {
+ my $val = $q->param($key);
+ $input{$key} = defined($val) ? $val : ''; # '0' is valid for longitude
+ $input_h{$key} = ent( $input{$key} );
}
+ # Convert lat/lon to easting/northing if given
+ # if ($input{lat}) {
+ # try {
+ # ($input{easting}, $input{northing}) = mySociety::GeoUtil::wgs84_to_national_grid($input{lat}, $input{lon}, 'G');
+ # $input_h{easting} = $input{easting};
+ # $input_h{northing} = $input{northing};
+ # } catch Error::Simple with {
+ # my $e = shift;
+ # push @errors, "We had a problem with the supplied co-ordinates - outside the UK?";
+ # };
+ # }
+
# Get tile co-ordinates if map clicked
($input{x}) = $input{x} =~ /^(\d+)/; $input{x} ||= 0;
($input{y}) = $input{y} =~ /^(\d+)/; $input{y} ||= 0;
@@ -458,28 +481,32 @@ sub display_form {
# We need either a map click, an E/N, to be skipping the map, or be filling in a partial form
return display_location($q, @errors)
unless ($pin_x && $pin_y)
- || ($input{easting} && $input{northing})
+ || ($input{latitude} && $input{longitude})
|| ($input{skipped} && $input{pc})
|| ($input{partial} && $input{pc});
# Work out some co-ordinates from whatever we've got
- my ($easting, $northing);
+ my ($latitude, $longitude);
if ($input{skipped}) {
# Map is being skipped
- if ($input{easting} && $input{northing}) {
- $easting = $input{easting};
- $northing = $input{northing};
+ if ( length $input{latitude} && length $input{longitude} ) {
+ $latitude = $input{latitude};
+ $longitude = $input{longitude};
} else {
- my ($e, $n, $error) = FixMyStreet::Geocode::lookup($input{pc}, $q);
- $easting = $e; $northing = $n;
+ my ( $lat, $lon, $error ) =
+ FixMyStreet::Geocode::lookup( $input{pc}, $q );
+ $latitude = $lat;
+ $longitude = $lon;
}
} elsif ($pin_x && $pin_y) {
- # tilma map was clicked on
- ($easting, $northing) = FixMyStreet::Map::click_to_os($pin_tile_x, $pin_x, $pin_tile_y, $pin_y);
- } elsif ($input{partial} && $input{pc} && !$input{easting} && !$input{northing}) {
+
+ # Map was clicked on (tilma, or non-JS OpenLayers, for example)
+ ($latitude, $longitude) = FixMyStreet::Map::click_to_wgs84($q, $pin_tile_x, $pin_x, $pin_tile_y, $pin_y);
+
+ } elsif ( $input{partial} && $input{pc} && !length $input{latitude} && !length $input{longitude} ) {
my $error;
try {
- ($easting, $northing, $error) = FixMyStreet::Geocode::lookup($input{pc}, $q);
+ ($latitude, $longitude, $error) = FixMyStreet::Geocode::lookup($input{pc}, $q);
} catch Error::Simple with {
$error = shift;
};
@@ -487,28 +514,37 @@ sub display_form {
return front_page($q, $error) if $error;
} else {
# Normal form submission
- $easting = $input_h{easting};
- $northing = $input_h{northing};
+ $latitude = $input_h{latitude};
+ $longitude = $input_h{longitude};
}
+ # Shrink, as don't need accuracy plus we want them as English strings
+ ($latitude, $longitude) = map { Utils::truncate_coordinate($_) } ( $latitude, $longitude );
+
# Look up councils and do checks for the point we've got
- my $parent_types = $mySociety::VotingArea::council_parent_types;
- $parent_types = [qw(DIS LBO MTD UTA LGD COI)] # No CTY
- if $q->{site} eq 'emptyhomes';
+ my @area_types = Cobrand::area_types($cobrand);
# XXX: I think we want in_gb_locale around the next line, needs testing
- my $all_councils = mySociety::MaPit::call('point', "27700/$easting,$northing", type => $parent_types);
+ my $all_councils = mySociety::MaPit::call('point', "4326/$longitude,$latitude", type => \@area_types);
# Let cobrand do a check
my ($success, $error_msg) = Cobrand::council_check($cobrand, { all_councils => $all_councils }, $q, 'submit_problem');
- if (!$success){
+ if (!$success) {
return front_page($q, $error_msg);
}
- # Ipswich & St Edmundsbury are responsible for everything in their areas, no Suffolk
- delete $all_councils->{2241} if $all_councils->{2446} || $all_councils->{2443};
+ if (mySociety::Config::get('COUNTRY') eq 'GB') {
+ # Ipswich & St Edmundsbury are responsible for everything in their areas, not Suffolk
+ delete $all_councils->{2241} if $all_councils->{2446} || $all_councils->{2443};
+
+ # Norwich is responsible for everything in its areas, not Norfolk
+ delete $all_councils->{2233} if $all_councils->{2391};
+
+ } elsif (mySociety::Config::get('COUNTRY') eq 'NO') {
- # Norwich is responsible for everything in its areas, no Norfolk
- delete $all_councils->{2233} if $all_councils->{2391};
+ # Oslo is both a kommune and a fylke, we only want to show it once
+ delete $all_councils->{301} if $all_councils->{3};
+
+ }
return display_location($q, _('That spot does not appear to be covered by a council.
If you have tried to report an issue past the shoreline, for example,
@@ -520,7 +556,7 @@ please specify the closest point on land.')) unless %$all_councils;
my $categories = select_all("select area_id, category from contacts
where deleted='f' and area_id in (" . join(',', keys %$all_councils) . ')');
if ($q->{site} ne 'emptyhomes') {
- @$categories = sort { $a->{category} cmp $b->{category} } @$categories;
+ @$categories = sort { strcoll($a->{category}, $b->{category}) } @$categories;
foreach (@$categories) {
$council_ok{$_->{area_id}} = 1;
next if $_->{category} eq _('Other');
@@ -530,7 +566,7 @@ please specify the closest point on land.')) unless %$all_councils;
@categories = Page::scambs_categories();
}
if (@categories) {
- @categories = ('-- Pick a category --', @categories, _('Other'));
+ @categories = (_('-- Pick a category --'), @categories, _('Other'));
$category = _('Category:');
}
} else {
@@ -574,6 +610,8 @@ please specify the closest point on land.')) unless %$all_councils;
my $form_action = Cobrand::url($cobrand, '/', $q);
$vars{form_start} = <<EOF;
<form action="$form_action" method="post" name="mapSkippedForm"$enctype>
+<input type="hidden" name="latitude" value="$latitude">
+<input type="hidden" name="longitude" value="$longitude">
<input type="hidden" name="pc" value="$input_h{pc}">
<input type="hidden" name="skipped" value="1">
$cobrand_form_elements
@@ -587,9 +625,9 @@ EOF
$type = 1;
}
$vars{form_start} = FixMyStreet::Map::display_map($q,
- easting => $easting, northing => $northing,
+ latitude => $latitude, longitude => $longitude,
type => $type,
- pins => [ [ $easting, $northing, 'purple' ] ],
+ pins => [ [ $latitude, $longitude, 'purple' ] ],
);
my $partial_id;
if (my $token = $input{partial}) {
@@ -606,7 +644,7 @@ If this is not the correct location, simply click on the map again. '));
$vars{page_heading} = $q->h1(_('Reporting a problem'));
if ($details eq 'all') {
- my $council_list = join('</strong> or <strong>', map { $_->{name} } values %$all_councils);
+ my $council_list = join('</strong>' . _(' or ') . '<strong>', map { $_->{name} } values %$all_councils);
if ($q->{site} eq 'emptyhomes'){
$vars{text_help} = '<p>' . sprintf(_('All the information you provide here will be sent to <strong>%s</strong>.
On the site, we will show the subject and details of the problem, plus your
@@ -625,33 +663,37 @@ name if you give us permission.'), $council_list);
push @missing, $_ unless $councils{$_};
}
my $n = @missing;
- my $list = join(' or ', map { $all_councils->{$_}->{name} } @missing);
- $vars{text_help} = '<p>All the information you provide here will be sent to <strong>'
- . join('</strong> or <strong>', map { $all_councils->{$_}->{name} } @councils)
- . '</strong>. The subject and details of the problem will be public, plus your
-name if you give us permission.';
- $vars{text_help} .= ' We do <strong>not</strong> yet have details for the other council';
- $vars{text_help} .= ($n>1) ? 's that cover' : ' that covers';
- $vars{text_help} .= " this location. You can help us by finding a contact email address for local
-problems for $list and emailing it to us at <a href='mailto:$e'>$e</a>.";
+ my $list = join(_(' or '), map { $all_councils->{$_}->{name} } @missing);
+ $vars{text_help} = '<p>' . _('All the information you provide here will be sent to') . ' <strong>'
+ . join('</strong>' . _(' or ') . '<strong>', map { $all_councils->{$_}->{name} } @councils)
+ . '</strong>. ';
+ $vars{text_help} .= _('The subject and details of the problem will be public, plus your name if you give us permission.');
+ $vars{text_help} .= ' ' . mySociety::Locale::nget(
+ 'We do <strong>not</strong> yet have details for the other council that covers this location.',
+ 'We do <strong>not</strong> yet have details for the other councils that cover this location.',
+ $n
+ );
+ $vars{text_help} .= ' ' . sprintf(_("You can help us by finding a contact email address for local problems for %s and emailing it to us at <a href='mailto:%s'>%s</a>."), $list, $e, $e);
$vars{text_help} .= '<input type="hidden" name="council" value="' . join(',', @councils)
. '|' . join(',', @missing) . '">';
} else {
my $e = Cobrand::contact_email($cobrand);
- my $list = join(' or ', map { $_->{name} } values %$all_councils);
+ my $list = join(_(' or '), map { $_->{name} } values %$all_councils);
my $n = scalar keys %$all_councils;
if ($q->{site} ne 'emptyhomes') {
- $vars{text_help} = '<p>We do not yet have details for the council';
- $vars{text_help} .= ($n>1) ? 's that cover' : ' that covers';
- $vars{text_help} .= " this location. If you submit a problem here the subject and details
-of the problem will be public, but the problem will <strong>not</strong> be reported to the council.
-You can help us by finding a contact email address for local
-problems for $list and emailing it to us at <a href='mailto:$e'>$e</a>.";
+ $vars{text_help} = '<p>';
+ $vars{text_help} .= mySociety::Locale::nget(
+ 'We do not yet have details for the council that covers this location.',
+ 'We do not yet have details for the councils that cover this location.',
+ $n
+ );
+ $vars{text_help} .= _("If you submit a problem here the subject and details of the problem will be public, but the problem will <strong>not</strong> be reported to the council.");
+ $vars{text_help} .= sprintf(_("You can help us by finding a contact email address for local problems for %s and emailing it to us at <a href='mailto:%s'>%s</a>."), $list, $e, $e);
} else {
- $vars{text_help} = _("<p>We do not yet have details for the council that covers
-this location. If you submit a report here it will be left on the site, but
-not reported to the council &ndash; please still leave your report, so that
-we can show to the council the activity in their area.");
+ $vars{text_help} = '<p>'
+ . _('We do not yet have details for the council that covers this location.')
+ . ' '
+ . _("If you submit a report here it will be left on the site, but not reported to the council &ndash; please still leave your report, so that we can show to the council the activity in their area.");
}
$vars{text_help} .= '<input type="hidden" name="council" value="-1">';
}
@@ -682,10 +724,6 @@ photo of the problem if you have one), etc.'));
$vars{text_help} .= $q->p(_('Please fill in details of the problem below.'));
}
- $vars{text_help} .= '
-<input type="hidden" name="easting" value="' . $easting . '">
-<input type="hidden" name="northing" value="' . $northing . '">';
-
if (@errors) {
$vars{errors} = '<ul class="error"><li>' . join('</li><li>', @errors) . '</li></ul>';
}
@@ -731,27 +769,18 @@ EOF
}
if ($q->{site} ne 'emptyhomes') {
- $vars{text_notes} = <<EOF;
-<p>Please note:</p>
-<ul>
-<li>We will only use your personal
-information in accordance with our <a href="/faq#privacy">privacy policy.</a></li>
-<li>Please be polite, concise and to the point.</li>
-<li>Please do not be abusive &mdash; abusing your council devalues the service for all users.</li>
-<li>Writing your message entirely in block capitals makes it hard to read,
-as does a lack of punctuation.</li>
-<li>Remember that FixMyStreet is primarily for reporting physical
-problems that can be fixed. If your problem is not appropriate for
-submission via this site remember that you can contact your council
-directly using their own website.</li>
-<li>
-FixMyStreet and the Guardian are providing this service in
-partnership in <a href="/faq#privacy">certain cities</a>. In those cities, both have access to
-any information submitted, including names and email addresses, and will use it only to ensure the
-smooth running of the service, in accordance with their privacy policies.
-</li>
-</ul>
-EOF
+ $vars{text_notes} =
+ $q->p(_("Please note:")) .
+ "<ul>" .
+ $q->li(_("We will only use your personal information in accordance with our <a href=\"/faq#privacy\">privacy policy.</a>")) .
+ $q->li(_("Please be polite, concise and to the point.")) .
+ $q->li(_("Please do not be abusive &mdash; abusing your council devalues the service for all users.")) .
+ $q->li(_("Writing your message entirely in block capitals makes it hard to read, as does a lack of punctuation.")) .
+ $q->li(_("Remember that FixMyStreet is primarily for reporting physical problems that can be fixed. If your problem is not appropriate for submission via this site remember that you can contact your council directly using their own website."));
+ $vars{text_notes} .=
+ $q->li(_("FixMyStreet and the Guardian are providing this service in partnership in <a href=\"/faq#privacy\">certain cities</a>. In those cities, both have access to any information submitted, including names and email addresses, and will use it only to ensure the smooth running of the service, in accordance with their privacy policies."))
+ if mySociety::Config::get('COUNTRY') eq 'GB';
+ $vars{text_notes} .= "</ul>\n";
}
%vars = (%vars,
@@ -760,43 +789,93 @@ EOF
url_home => Cobrand::url($cobrand, '/', $q),
submit_button => _('Submit')
);
- return (Page::template_include('report-form', $q, Page::template_root($q), %vars), robots => 'noindex,nofollow');
+ return (Page::template_include('report-form', $q, Page::template_root($q), %vars),
+ robots => 'noindex,nofollow',
+ js => FixMyStreet::Map::header_js(),
+ );
+}
+
+# redirect from osgb
+sub redirect_from_osgb_to_wgs84 {
+ my ($q) = @_;
+
+ my $e = $q->param('e');
+ my $n = $q->param('n');
+
+ my ( $lat, $lon ) = Utils::convert_en_to_latlon_truncated( $e, $n );
+
+ my $lat_lon_url = NewURL(
+ $q,
+ -retain => 1,
+ e => undef,
+ n => undef,
+ lat => $lat,
+ lon => $lon
+ );
+
+ print $q->redirect(
+ -location => $lat_lon_url,
+ -status => 301, # permanent
+ );
+
+ return '';
}
sub display_location {
my ($q, @errors) = @_;
my $cobrand = Page::get_cobrand($q);
- my @vars = qw(pc x y e n all_pins no_pins);
- my %input = map { $_ => $q->param($_) || '' } @vars;
- my %input_h = map { $_ => $q->param($_) ? ent($q->param($_)) : '' } @vars;
+ my @vars = qw(pc x y lat lon all_pins no_pins);
+
+ my %input = ();
+ my %input_h = ();
+
+ foreach my $key (@vars) {
+ my $val = $q->param($key);
+ $input{$key} = defined($val) ? $val : ''; # '0' is valid for longitude
+ $input_h{$key} = ent( $input{$key} );
+ }
- (my $easting) = $input{e} =~ /^(\d+)/; $easting ||= 0;
- (my $northing) = $input{n} =~ /^(\d+)/; $northing ||= 0;
+ my $latitude = $input{lat};
+ my $longitude = $input{lon};
# X/Y referring to tiles old-school
(my $x) = $input{x} =~ /^(\d+)/; $x ||= 0;
(my $y) = $input{y} =~ /^(\d+)/; $y ||= 0;
- return front_page($q, @errors) unless $x || $y || $input{pc} || $easting || $northing;
- if ($x && $y) {
+ return front_page( $q, @errors )
+ unless ( $x && $y )
+ || $input{pc}
+ || ( defined $latitude && defined $longitude );
+
+ if ( $x && $y ) {
+
# Convert the tile co-ordinates to real ones.
- $easting = FixMyStreet::Map::tile_to_os($x);
- $northing = FixMyStreet::Map::tile_to_os($y);
- } elsif ($easting && $northing) {
+ ( $latitude, $longitude ) =
+ FixMyStreet::Map::tile_xy_to_wgs84( $x, $y );
+ }
+ elsif ( $latitude && $longitude ) {
+
# Don't need to do anything
- } else {
+ }
+ else {
my $error;
try {
- ($easting, $northing, $error) = FixMyStreet::Geocode::lookup($input{pc}, $q);
- } catch Error::Simple with {
+ ( $latitude, $longitude, $error ) =
+ FixMyStreet::Geocode::lookup( $input{pc}, $q );
+
+ debug 'Looked up postcode "%s": lat: "%s", lon: "%s", error: "%s"',
+ $input{pc}, $latitude, $longitude, $error;
+ }
+ catch Error::Simple with {
$error = shift;
};
- return FixMyStreet::Geocode::list_choices($error, '/', $q) if (ref($error) eq 'ARRAY');
- return front_page($q, $error) if $error;
+ return FixMyStreet::Geocode::list_choices( $error, '/', $q )
+ if ( ref($error) eq 'ARRAY' );
+ return front_page( $q, $error ) if $error;
}
# Check this location is okay to be displayed for the cobrand
- my ($success, $error_msg) = Cobrand::council_check($cobrand, { e => $easting, n => $northing }, $q, 'display_location');
+ my ($success, $error_msg) = Cobrand::council_check($cobrand, { lat => $latitude, lon => $longitude }, $q, 'display_location');
return front_page($q, $error_msg) unless $success;
# Deal with pin hiding/age
@@ -810,14 +889,14 @@ sub display_location {
$interval = '6 months';
}
- my ($on_map_all, $on_map, $around_map, $dist) = FixMyStreet::Map::map_features($q, $easting, $northing, $interval);
+ my ($on_map_all, $on_map, $around_map, $dist) = FixMyStreet::Map::map_features($q, $latitude, $longitude, $interval);
my @pins;
foreach (@$on_map_all) {
- push @pins, [ $_->{easting}, $_->{northing}, $_->{state} eq 'fixed' ? 'green' : 'red' ];
+ push @pins, [ $_->{latitude}, $_->{longitude}, ($_->{state} eq 'fixed' ? 'green' : 'red'), $_->{id} ];
}
my $on_list = '';
foreach (@$on_map) {
- my $report_url = NewURL($q, -retain => 1, -url => '/report/' . $_->{id}, pc => undef, x => undef, 'y' => undef);
+ my $report_url = NewURL($q, -url => '/report/' . $_->{id});
$report_url = Cobrand::url($cobrand, $report_url, $q);
$on_list .= '<li><a href="' . $report_url . '">';
$on_list .= ent($_->{title}) . '</a> <small>(';
@@ -830,16 +909,16 @@ sub display_location {
my $around_list = '';
foreach (@$around_map) {
- my $report_url = Cobrand::url($cobrand, NewURL($q, -retain => 1, -url => '/report/' . $_->{id}, pc => undef, x => undef, 'y' => undef), $q);
+ my $report_url = Cobrand::url($cobrand, NewURL($q, -url => '/report/' . $_->{id}), $q);
$around_list .= '<li><a href="' . $report_url . '">';
- my $dist = int($_->{distance}/100+0.5);
+ my $dist = int($_->{distance}*10+0.5);
$dist = $dist / 10;
$around_list .= ent($_->{title}) . '</a> <small>(';
$around_list .= Page::prettify_epoch($q, $_->{time}, 1) . ', ';
$around_list .= $dist . 'km)</small>';
$around_list .= ' <small>' . _('(fixed)') . '</small>' if $_->{state} eq 'fixed';
$around_list .= '</li>';
- push @pins, [ $_->{easting}, $_->{northing}, $_->{state} eq 'fixed' ? 'green' : 'red' ];
+ push @pins, [ $_->{latitude}, $_->{longitude}, ($_->{state} eq 'fixed' ? 'green' : 'red'), $_->{id} ];
}
$around_list = $q->li(_('No problems found.'))
unless $around_list;
@@ -852,25 +931,44 @@ sub display_location {
$hide_link = NewURL($q, -retain=>1, no_pins=>1);
$hide_text = _('Hide pins');
}
- my $map_links = "<p id='sub_map_links'><a id='hide_pins_link' rel='nofollow' href='$hide_link'>$hide_text</a> | <a id='all_pins_link' rel='nofollow' href='$all_link'>$all_text</a></p> <input type='hidden' id='all_pins' name='all_pins' value='$input_h{all_pins}'>";
+ my $map_links = "<p id='sub_map_links'><a id='hide_pins_link' rel='nofollow' href='$hide_link'>$hide_text</a>";
+ if (mySociety::Config::get('COUNTRY') eq 'GB') {
+ $map_links .= " | <a id='all_pins_link' rel='nofollow' href='$all_link'>$all_text</a></p> <input type='hidden' id='all_pins' name='all_pins' value='$input_h{all_pins}'>";
+ } else {
+ $map_links .= "</p>";
+ }
- my $url_skip = NewURL($q, -retain=>1, pc => undef,
+ # truncate the lat,lon for nicer rss urls, and strings for outputting
+ my ( $short_lat, $short_lon ) =
+ map { Utils::truncate_coordinate($_) } #
+ ( $latitude, $longitude );
+
+ my $url_skip = NewURL($q, -retain=>1,
x => undef, 'y' => undef,
- easting => $easting, northing => $northing,
+ latitude => $short_lat, longitude => $short_lon,
'submit_map'=>1, skipped=>1
);
my $pc_h = ent($q->param('pc') || '');
+
+ my $rss_url;
+ if ($pc_h) {
+ $rss_url = "/rss/pc/" . URI::Escape::uri_escape_utf8($pc_h);
+ } else {
+ $rss_url = "/rss/l/$short_lat,$short_lon";
+ }
+ $rss_url = Cobrand::url( $cobrand, NewURL($q, -url=> $rss_url), $q);
+
my %vars = (
'map' => FixMyStreet::Map::display_map($q,
- easting => $easting, northing => $northing,
+ latitude => $short_lat, longitude => $short_lon,
type => 1,
pins => \@pins,
post => $map_links
),
map_end => FixMyStreet::Map::display_map_end(1),
url_home => Cobrand::url($cobrand, '/', $q),
- url_rss => Cobrand::url($cobrand, NewURL($q, -retain => 1, -url=> "/rss/n/$easting,$northing", pc => undef, x => undef, 'y' => undef), $q),
- url_email => Cobrand::url($cobrand, NewURL($q, -retain => 1, pc => undef, -url=>'/alert', e=>$easting, 'n'=>$northing, feed=>"local:$easting:$northing"), $q),
+ url_rss => $rss_url,
+ url_email => Cobrand::url($cobrand, NewURL($q, lat => $short_lat, lon => $short_lon, -url=>'/alert', feed=>"local:$short_lat:$short_lon"), $q),
url_skip => $url_skip,
email_me => _('Email me new local problems'),
rss_alt => _('RSS feed'),
@@ -890,7 +988,8 @@ sub display_location {
);
my %params = (
- rss => [ _('Recent local problems, FixMyStreet'), "/rss/n/$easting,$northing" ],
+ rss => [ _('Recent local problems, FixMyStreet'), $rss_url ],
+ js => FixMyStreet::Map::header_js(),
robots => 'noindex,nofollow',
);
@@ -931,9 +1030,18 @@ sub display_problem {
my $extra_data = Cobrand::extra_data($cobrand, $q);
my $google_link = Cobrand::base_url_for_emails($cobrand, $extra_data)
. '/report/' . $problem->{id};
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($problem->{easting}, $problem->{northing}, 'G');
- my $map_links = "<p id='sub_map_links'><a href=\"http://maps.google.co.uk/maps?output=embed&amp;z=16&amp;q="
- . URI::Escape::uri_escape_utf8($problem->{title} . ' - ' . $google_link) . "\@$lat,$lon\">View on Google Maps</a></p>";
+
+ # truncate the lat,lon for nicer rss urls
+ my ( $short_lat, $short_lon ) =
+ map { Utils::truncate_coordinate($_) } #
+ ( $problem->{latitude}, $problem->{longitude} );
+
+ my $map_links = '';
+ $map_links = "<p id='sub_map_links'>"
+ . "<a href=\"http://maps.google.co.uk/maps?output=embed&amp;z=16&amp;q="
+ . URI::Escape::uri_escape_utf8( $problem->{title} . ' - ' . $google_link )
+ . "\@$short_lat,$short_lon\">View on Google Maps</a></p>"
+ if mySociety::Config::get('COUNTRY') eq 'GB';
my $banner;
if ($q->{site} ne 'emptyhomes' && $problem->{state} eq 'confirmed' && $problem->{duration} > 8*7*24*60*60) {
@@ -945,7 +1053,7 @@ sub display_problem {
my $contact_url = Cobrand::url($cobrand, NewURL($q, -retain => 1, pc => undef, x => undef, 'y' => undef, -url=>'/contact?id=' . $input{id}), $q);
my $back = Cobrand::url($cobrand, NewURL($q, -url => '/',
- 'e' => int($problem->{easting}), 'n' => int($problem->{northing}),
+ lat => $short_lat, lon => $short_lon,
-retain => 1, pc => undef, x => undef, 'y' => undef, id => undef
), $q);
my $fixed = ($input{fixed}) ? ' checked' : '';
@@ -953,9 +1061,9 @@ sub display_problem {
my %vars = (
banner => $banner,
map_start => FixMyStreet::Map::display_map($q,
- easting => $problem->{easting}, northing => $problem->{northing},
+ latitude => $problem->{latitude}, longitude => $problem->{longitude},
type => 0,
- pins => [ [ $problem->{easting}, $problem->{northing}, 'blue' ] ],
+ pins => $problem->{used_map} ? [ [ $problem->{latitude}, $problem->{longitude}, 'blue' ] ] : [],
post => $map_links
),
map_end => FixMyStreet::Map::display_map_end(0),
@@ -989,6 +1097,7 @@ sub display_problem {
cobrand_form_elements => Cobrand::form_elements($cobrand, 'updateForm', $q),
form_action => Cobrand::url($cobrand, '/', $q),
input_h => \%input_h,
+ optional => _('(optional)'),
);
$vars{update_blurb} = $q->p($q->small(_('Please note that updates are not sent to the council. If you leave your name it will be public. Your information will only be used in accordance with our <a href="/faq#privacy">privacy policy</a>')))
@@ -1013,6 +1122,7 @@ EOF
my %params = (
rss => [ _('Updates to this problem, FixMyStreet'), "/rss/$input_h{id}" ],
robots => 'index, nofollow',
+ js => FixMyStreet::Map::header_js(),
title => $problem->{title}
);
diff --git a/web/js.js b/web/js.js
index b2012fc84..07bede2d7 100644
--- a/web/js.js
+++ b/web/js.js
@@ -16,8 +16,12 @@ YAHOO.util.Event.onContentReady('mapForm', function() {
this.onsubmit = function() { return false; };
}
- this.x.value = fixmystreet.x + 3;
- this.y.value = fixmystreet.y + 3;
+ /* XXX Should be in Tilma code only */
+ if (this.x) {
+ this.x.value = fixmystreet.x + 3;
+ this.y.value = fixmystreet.y + 3;
+ }
+
/*
if (swfu && swfu.getStats().files_queued > 0) {
swfu.startUpload();
diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js
new file mode 100644
index 000000000..1134bafb7
--- /dev/null
+++ b/web/js/map-OpenLayers.js
@@ -0,0 +1,182 @@
+YAHOO.util.Event.onContentReady('map', function() {
+
+ fixmystreet.ZOOM_OFFSET = 14;
+
+ var perm = new OpenLayers.Control.Permalink();
+ set_map_config(perm);
+
+ fixmystreet.map = new OpenLayers.Map("map", {
+ controls: fixmystreet.controls,
+ displayProjection: new OpenLayers.Projection("EPSG:4326")
+ });
+
+ fixmystreet.layer_options = OpenLayers.Util.extend({
+ zoomOffset: fixmystreet.ZOOM_OFFSET,
+ transitionEffect: 'resize',
+ numZoomLevels: 4
+ }, fixmystreet.layer_options);
+ var layer = new fixmystreet.map_type("", fixmystreet.layer_options);
+ fixmystreet.map.addLayer(layer);
+
+ if (!fixmystreet.map.getCenter()) {
+ var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude );
+ centre.transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ fixmystreet.map.getProjectionObject()
+ );
+ fixmystreet.map.setCenter(centre, 2);
+ }
+
+ if (document.getElementById('mapForm')) {
+ var click = new OpenLayers.Control.Click();
+ fixmystreet.map.addControl(click);
+ click.activate();
+ }
+
+ /* To let permalink not be caught by the Click layer, answer found
+ * at http://www.mail-archive.com/users@openlayers.org/msg12958.html
+ * Not sure why you can't use eventListeners or events.register...
+ */
+ OpenLayers.Event.observe( perm.element, "click", function(e) {
+ OpenLayers.Event.stop(e);
+ location.href = OpenLayers.Event.element(e).href;
+ return false;
+ });
+
+ fixmystreet.markers = new OpenLayers.Layer.Markers("Markers");
+ var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' };
+ for (var i=0; i<fixmystreet.pins.length; i++) {
+ var pin = fixmystreet.pins[i];
+ var src = '/i/pin' + cols[pin[2]] + '.gif';
+ var size = new OpenLayers.Size(32, 59);
+ var offset = new OpenLayers.Pixel(-3, -size.h-2);
+ var icon = new OpenLayers.Icon(src, size, offset);
+ var loc = new OpenLayers.LonLat(pin[1], pin[0]);
+ loc.transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ fixmystreet.map.getProjectionObject()
+ );
+ var marker = new OpenLayers.Marker(loc, icon);
+ if (pin[3]) {
+ marker.id = pin[3];
+ marker.events.register('click', marker, function(evt) {
+ window.location = '/report/' + this.id;
+ OpenLayers.Event.stop(evt);
+ });
+ }
+ fixmystreet.markers.addMarker(marker);
+ }
+ fixmystreet.map.addLayer(fixmystreet.markers);
+
+});
+
+YAHOO.util.Event.addListener('hide_pins_link', 'click', function(e) {
+ YAHOO.util.Event.preventDefault(e);
+ var showhide = [
+ 'Show pins', 'Hide pins',
+ 'Dangos pinnau', 'Cuddio pinnau',
+ "Vis nåler", "Gjem nåler"
+ ];
+ for (var i=0; i<showhide.length; i+=2) {
+ if (this.innerHTML == showhide[i]) {
+ fixmystreet.markers.setVisibility(true);
+ this.innerHTML = showhide[i+1];
+ } else if (this.innerHTML == showhide[i+1]) {
+ fixmystreet.markers.setVisibility(false);
+ this.innerHTML = showhide[i];
+ }
+ }
+});
+
+/* Overridding the buttonDown function of PanZoom so that it does
+ zoomTo(0) rather than zoomToMaxExtent()
+*/
+OpenLayers.Control.PanZoomFMS = OpenLayers.Class(OpenLayers.Control.PanZoom, {
+ buttonDown: function (evt) {
+ if (!OpenLayers.Event.isLeftClick(evt)) {
+ return;
+ }
+
+ switch (this.action) {
+ case "panup":
+ this.map.pan(0, -this.getSlideFactor("h"));
+ break;
+ case "pandown":
+ this.map.pan(0, this.getSlideFactor("h"));
+ break;
+ case "panleft":
+ this.map.pan(-this.getSlideFactor("w"), 0);
+ break;
+ case "panright":
+ this.map.pan(this.getSlideFactor("w"), 0);
+ break;
+ case "zoomin":
+ this.map.zoomIn();
+ break;
+ case "zoomout":
+ this.map.zoomOut();
+ break;
+ case "zoomworld":
+ this.map.zoomTo(0);
+ break;
+ }
+
+ OpenLayers.Event.stop(evt);
+ }
+});
+
+/* Overriding Permalink so that it can pass the correct zoom to OSM */
+OpenLayers.Control.PermalinkFMS = OpenLayers.Class(OpenLayers.Control.Permalink, {
+ updateLink: function() {
+ var separator = this.anchor ? '#' : '?';
+ var href = this.base;
+ if (href.indexOf(separator) != -1) {
+ href = href.substring( 0, href.indexOf(separator) );
+ }
+
+ href += separator + OpenLayers.Util.getParameterString(this.createParams(null, this.map.getZoom()+fixmystreet.ZOOM_OFFSET));
+ if (this.anchor && !this.element) {
+ window.location.href = href;
+ }
+ else {
+ this.element.href = href;
+ }
+ }
+});
+
+/* Click handler */
+OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
+ defaultHandlerOptions: {
+ 'single': true,
+ 'double': false,
+ 'pixelTolerance': 0,
+ 'stopSingle': false,
+ 'stopDouble': false
+ },
+
+ initialize: function(options) {
+ this.handlerOptions = OpenLayers.Util.extend(
+ {}, this.defaultHandlerOptions
+ );
+ OpenLayers.Control.prototype.initialize.apply(
+ this, arguments
+ );
+ this.handler = new OpenLayers.Handler.Click(
+ this, {
+ 'click': this.trigger
+ }, this.handlerOptions
+ );
+ },
+
+ trigger: function(e) {
+ var lonlat = fixmystreet.map.getLonLatFromViewPortPx(e.xy);
+ lonlat.transform(
+ fixmystreet.map.getProjectionObject(),
+ new OpenLayers.Projection("EPSG:4326")
+ );
+ document.getElementById('fixmystreet.latitude').value = lonlat.lat;
+ document.getElementById('fixmystreet.longitude').value = lonlat.lon;
+ document.getElementById('mapForm').submit();
+ }
+});
+
diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js
index 04237e075..9d226f6a7 100644
--- a/web/js/map-OpenStreetMap.js
+++ b/web/js/map-OpenStreetMap.js
@@ -1,27 +1,13 @@
-YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- //new OpenLayers.Control.LayerSwitcher(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanZoom()
- ],
- displayProjection: new OpenLayers.Projection("EPSG:4326")
- });
- var streetview = new fixmystreet.map_type("", {
- zoomOffset: 14,
- numZoomLevels: 4
- });
- map.addLayer(streetview);
-
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
- centre.transform(
- new OpenLayers.Projection("EPSG:27700"),
- map.getProjectionObject()
- );
- map.setCenter(centre, 2);
-});
-
+function set_map_config(perm) {
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ //new OpenLayers.Control.LayerSwitcher(),
+ new OpenLayers.Control.Navigation(),
+ perm,
+ new OpenLayers.Control.PermalinkFMS('osm_link', 'http://www.openstreetmap.org/'),
+ new OpenLayers.Control.PanZoomFMS()
+ ];
+}
// http://www.openstreetmap.org/openlayers/OpenStreetMap.js (added maxResolution)
diff --git a/web/js/map-bing-ol.js b/web/js/map-bing-ol.js
index ba9445326..254d407f4 100644
--- a/web/js/map-bing-ol.js
+++ b/web/js/map-bing-ol.js
@@ -1,33 +1,13 @@
-YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- //new OpenLayers.Control.LayerSwitcher(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanZoom()
- ],
- displayProjection: new OpenLayers.Projection("EPSG:4326")
- });
- var bing = new OpenLayers.Layer.Bing("", {
- zoomOffset: 13,
- numZoomLevels: 4
- });
- map.addLayer(bing);
-
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
- centre.transform(
- new OpenLayers.Projection("EPSG:27700"),
- map.getProjectionObject()
- );
- map.setCenter(centre, 3);
-});
-
-OpenLayers.Util.OS = {};
-OpenLayers.Util.OS.MISSING_TILE_URL = "http://openstreetmap.org/openlayers/img/404.png";
-OpenLayers.Util.OS.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;
-OpenLayers.Util.onImageLoadError = function() {
- OpenLayers.Util.OS.originalOnImageLoadError;
-};
+function set_map_config(perm) {
+ fixmystreet.ZOOM_OFFSET = 13;
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ new OpenLayers.Control.Navigation(),
+ perm,
+ new OpenLayers.Control.PanZoomFMS()
+ ];
+ fixmystreet.map_type = OpenLayers.Layer.Bing;
+}
OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
initialize: function(name, options) {
@@ -38,6 +18,7 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
numZoomLevels: 18,
transitionEffect: "resize",
sphericalMercator: true,
+ buffer: 0,
attribution: "© Microsoft / OS 2010"
}, options);
var newArguments = [name, url, options];
diff --git a/web/js/map-bing.js b/web/js/map-bing.js
index fbbbcc676..748a03525 100644
--- a/web/js/map-bing.js
+++ b/web/js/map-bing.js
@@ -1,6 +1,7 @@
YAHOO.util.Event.onContentReady('map', function() {
- var centre = new Microsoft.Maps.Location( fixmystreet.lat, fixmystreet.lon );
+ var centre = new Microsoft.Maps.Location( fixmystreet.latitude, fixmystreet.longitude );
var map = new Microsoft.Maps.Map(document.getElementById("map"), {
+ credentials: fixmystreet.key,
mapTypeId: Microsoft.Maps.MapTypeId.ordnanceSurvey,
center: centre,
zoom: 15,
diff --git a/web/js/map-google.js b/web/js/map-google.js
index 77e54ab7c..ab9bb9042 100644
--- a/web/js/map-google.js
+++ b/web/js/map-google.js
@@ -1,5 +1,5 @@
YAHOO.util.Event.onContentReady('map', function() {
- var centre = new google.maps.LatLng( fixmystreet.lat, fixmystreet.lon );
+ var centre = new google.maps.LatLng( fixmystreet.latitude, fixmystreet.longitude );
var map = new google.maps.Map(document.getElementById("map"), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: centre,
diff --git a/web/js/map-streetview.js b/web/js/map-streetview.js
index 088e5b6a2..cfd595b95 100644
--- a/web/js/map-streetview.js
+++ b/web/js/map-streetview.js
@@ -1,27 +1,13 @@
-YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- //new OpenLayers.Control.LayerSwitcher(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanZoom()
- ],
- displayProjection: new OpenLayers.Projection("EPSG:4326")
- });
- var streetview = new OpenLayers.Layer.StreetView("OS StreetView (1:10000)", {
- zoomOffset: 14,
- numZoomLevels: 4
- });
- map.addLayer(streetview);
-
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
- centre.transform(
- new OpenLayers.Projection("EPSG:27700"),
- map.getProjectionObject()
- );
- map.setCenter(centre, 2);
-});
-
+function set_map_config(perm) {
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ //new OpenLayers.Control.LayerSwitcher(),
+ new OpenLayers.Control.Navigation(),
+ perm,
+ new OpenLayers.Control.PanZoomFMS()
+ ];
+ fixmystreet.map_type = OpenLayers.Layer.StreetView;
+}
// http://os.openstreetmap.org/openlayers/OS.js (added one line)
diff --git a/web/js/map-tilma-ol.js b/web/js/map-tilma-ol.js
index cfd196c1d..5230a5d2c 100644
--- a/web/js/map-tilma-ol.js
+++ b/web/js/map-tilma-ol.js
@@ -1,21 +1,19 @@
-YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanPanel()
- ]
- });
- var tilma = new OpenLayers.Layer.Tilma("Tilma", {
+function set_map_config(perm) {
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ perm,
+ new OpenLayers.Control.Navigation(),
+ new OpenLayers.Control.PanPanel()
+ ];
+ fixmystreet.map_type = OpenLayers.Layer.Tilma;
+ fixmystreet.layer_options = {
maxResolution: fixmystreet.maxResolution,
tileSize: new OpenLayers.Size(fixmystreet.tilewidth, fixmystreet.tileheight),
- map_type: fixmystreet.tile_type
- });
- map.addLayer(tilma);
-
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
- map.setCenter(centre);
-});
+ map_type: fixmystreet.tile_type,
+ numZoomLevels: 1,
+ zoomOffset: 0
+ };
+}
OpenLayers.Layer.Tilma = OpenLayers.Class(OpenLayers.Layer.XYZ, {
initialize: function(name, options) {
@@ -23,8 +21,9 @@ OpenLayers.Layer.Tilma = OpenLayers.Class(OpenLayers.Layer.XYZ, {
options = OpenLayers.Util.extend({
transitionEffect: "resize",
numZoomLevels: 1,
+ projection: "EPSG:27700",
units: "m",
- maxExtent: new OpenLayers.Bounds(0, 0, 700000, 1300000),
+ maxExtent: new OpenLayers.Bounds(0, 0, 700000, 1300000)
}, options);
var newArguments = [name, url, options];
OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArguments);
diff --git a/web/js/map-tilma.js b/web/js/map-tilma.js
index 1ae38cff1..1b8cc6450 100644
--- a/web/js/map-tilma.js
+++ b/web/js/map-tilma.js
@@ -135,7 +135,7 @@ function update_tiles(dx, dy, force) {
}
function load_pins(x, y) {
- if (document.getElementById('formX')) {
+ if (document.getElementById('formX') && !document.getElementById('problem_submit')) {
all_pins = '';
if (document.getElementById('all_pins')) {
all_pins = document.getElementById('all_pins').value;
diff --git a/web/photo.cgi b/web/photo.cgi
index fc89fc0f7..bd38e3bf1 100755
--- a/web/photo.cgi
+++ b/web/photo.cgi
@@ -39,7 +39,7 @@ sub main {
print $photo;
}
-Page::do_fastcgi(\&main);
+Page::do_fastcgi(\&main, 0, 1);
sub resize {
my ($photo, $size) = @_;
diff --git a/web/questionnaire.cgi b/web/questionnaire.cgi
index 33e823560..fdb1c08a4 100755
--- a/web/questionnaire.cgi
+++ b/web/questionnaire.cgi
@@ -25,7 +25,10 @@ sub main {
} else {
$out = display_questionnaire($q);
}
- print Page::header($q, title=>_('Questionnaire'));
+ print Page::header($q,
+ title => _('Questionnaire'),
+ js => FixMyStreet::Map::header_js(),
+ );
print $out;
print Page::footer($q);
}
@@ -220,9 +223,9 @@ sub display_questionnaire {
my %vars = (
input_h => \%input_h,
map_start => FixMyStreet::Map::display_map($q,
- easting => $problem->{easting}, northing => $problem->{northing},
+ latitude => $problem->{latitude}, longitude => $problem->{longitude},
pins => [
- [ $problem->{easting}, $problem->{northing}, $problem->{state} eq 'fixed'?'green':'red' ],
+ [ $problem->{latitude}, $problem->{longitude}, $problem->{state} eq 'fixed'?'green':'red' ],
],
pre => $problem_text, post => $updates
),
@@ -302,9 +305,10 @@ EOF
(please note it will not be sent to the council). For example, what was
your experience of getting the problem fixed?'));
if ($allow_photo_upload) {
- $vars{photo_input} = <<EOF;
+ my $photo = _('Photo:');
+ $vars{photo_input} = <<EOF;
<div id="fileupload_normalUI">
-<label for="form_photo">Photo:</label>
+<label for="form_photo">$photo</label>
<input type="file" name="photo" id="form_photo">
</div>
EOF
@@ -315,14 +319,17 @@ EOF
);
$vars{another_yes} = $another{yes};
$vars{another_no} = $another{no};
+ my $another_qn = _('Would you like to receive another questionnaire in 4 weeks, reminding you to check the status?');
+ my $yes = _('Yes');
+ my $no = _('No');
$vars{another_questionnaire} = <<EOF if $q->{site} ne 'emptyhomes';
<div id="another_qn">
-<p>Would you like to receive another questionnaire in 4 weeks, reminding you to check the status?</p>
+<p>$another_qn</p>
<p>
<input type="radio" name="another" id="another_yes" value="Yes"$another{yes}>
-<label for="another_yes">Yes</label>
+<label for="another_yes">$yes</label>
<input type="radio" name="another" id="another_no" value="No"$another{no}>
-<label for="another_no">No</label>
+<label for="another_no">$no</label>
</p>
</div>
EOF
diff --git a/web/reports.cgi b/web/reports.cgi
index fe4213be4..22dbe344a 100755
--- a/web/reports.cgi
+++ b/web/reports.cgi
@@ -11,6 +11,8 @@
use strict;
use Standard;
+use Encode;
+use POSIX qw(strcoll);
use URI::Escape;
use FixMyStreet::Alert;
use mySociety::MaPit;
@@ -22,9 +24,11 @@ sub main {
my $all = $q->param('all') || 0;
my $rss = $q->param('rss') || '';
my $cobrand = Page::get_cobrand($q);
+
# Look up council name, if given
my $q_council = $q->param('council') || '';
my $base_url = Cobrand::base_url($cobrand);
+
# Manual misspelling redirect
if ($q_council =~ /^rhondda cynon taff$/i) {
print $q->redirect($base_url . '/reports/Rhondda+Cynon+Taf');
@@ -38,24 +42,49 @@ sub main {
print $q->redirect($base_url . '/reports');
return;
}
- $area_name = Page::short_name($va_info->{name});
+ $area_name = Page::short_name($va_info);
if (length($q_council) == 6) {
$va_info = mySociety::MaPit::call('area', $va_info->{parent_area});
- $area_name = Page::short_name($va_info->{name}) . '/' . $area_name;
+ $area_name = Page::short_name($va_info) . '/' . $area_name;
}
$rss = '/rss' if $rss;
print $q->redirect($base_url . $rss . '/reports/' . $area_name);
return;
+ } elsif (mySociety::Config::get('COUNTRY') eq 'NO' && $q_council eq 'Oslo') {
+ $one_council = mySociety::MaPit::call('area', 3);
+ $area_type = $one_council->{type};
+ $area_name = $one_council->{name};
+ } elsif (mySociety::Config::get('COUNTRY') eq 'NO' && $q_council =~ /,/) {
+ my ($kommune, $fylke) = split /\s*,\s*/, $q_council;
+ my @area_types = Cobrand::area_types($cobrand);
+ my $areas_k = mySociety::MaPit::call('areas', $kommune, type => \@area_types);
+ my $areas_f = mySociety::MaPit::call('areas', $fylke, type => \@area_types);
+ if (keys %$areas_f == 1) {
+ ($fylke) = values %$areas_f;
+ foreach (values %$areas_k) {
+ if ($_->{name} eq $kommune && $_->{parent_area} == $fylke->{id}) {
+ $one_council = $_;
+ $area_type = $_->{type};
+ $area_name = $_->{name};
+ last;
+ }
+ }
+ }
+ if (!$one_council) { # Given a false council name
+ print $q->redirect($base_url . '/reports');
+ return;
+ }
} elsif ($q_council =~ /\D/) {
- my $areas = mySociety::MaPit::call('areas', $q_council, type => $mySociety::VotingArea::council_parent_types, min_generation=>10 );
+ my @area_types = Cobrand::area_types($cobrand);
+ my $areas = mySociety::MaPit::call('areas', $q_council, type => \@area_types, min_generation=>Cobrand::area_min_generation($cobrand) );
if (keys %$areas == 1) {
- ($one_council) = keys %$areas;
- $area_type = $areas->{$one_council}->{type};
- $area_name = $areas->{$one_council}->{name};
+ ($one_council) = values %$areas;
+ $area_type = $one_council->{type};
+ $area_name = $one_council->{name};
} else {
foreach (keys %$areas) {
- if ($areas->{$_}->{name} =~ /^\Q$q_council\E (Borough|City|District|County) Council$/) {
- $one_council = $_;
+ if ($areas->{$_}->{name} eq $q_council || $areas->{$_}->{name} =~ /^\Q$q_council\E (Borough|City|District|County) Council$/) {
+ $one_council = $areas->{$_};
$area_type = $areas->{$_}->{type};
$area_name = $q_council;
}
@@ -71,8 +100,7 @@ sub main {
print $q->redirect($base_url . '/reports');
return;
}
- $area_name = $va_info->{name};
- print $q->redirect($base_url . '/reports/' . Page::short_name($area_name));
+ print $q->redirect($base_url . '/reports/' . Page::short_name($va_info));
return;
}
$all = 0 unless $one_council;
@@ -81,23 +109,24 @@ sub main {
my $q_ward = $q->param('ward') || '';
my $ward;
if ($one_council && $q_ward) {
- my $qw = mySociety::MaPit::call('areas', $q_ward, type => $mySociety::VotingArea::council_child_types, min_generation => 10);
+ my $qw = mySociety::MaPit::call('areas', $q_ward, type => $mySociety::VotingArea::council_child_types,
+ min_generation => Cobrand::area_min_generation($cobrand));
foreach my $id (sort keys %$qw) {
- if ($qw->{$id}->{parent_area} == $one_council) {
- $ward = $id;
+ if ($qw->{$id}->{parent_area} == $one_council->{id}) {
+ $ward = $qw->{$id};
last;
}
}
if (!$ward) { # Given a false ward name
- print $q->redirect($base_url . '/reports/' . Page::short_name($q_council));
+ print $q->redirect($base_url . '/reports/' . Page::short_name($one_council));
return;
}
}
# RSS - reports for sent reports, area for all problems in area
if ($rss && $one_council) {
- my $url = Page::short_name($q_council);
- $url .= '/' . Page::short_name($q_ward) if $ward;
+ my $url = Page::short_name($one_council);
+ $url .= '/' . Page::short_name($ward) if $ward;
if ($rss eq 'area' && $area_type ne 'DIS' && $area_type ne 'CTY') {
# Two possibilites are the same for one-tier councils, so redirect one to the other
print $q->redirect($base_url . '/rss/reports/' . $url);
@@ -106,8 +135,8 @@ sub main {
my $type = 'council_problems'; # Problems sent to a council
my (@params, %title_params);
$title_params{COUNCIL} = $area_name;
- push @params, $one_council if $rss eq 'reports';
- push @params, $ward ? $ward : $one_council;
+ push @params, $one_council->{id} if $rss eq 'reports';
+ push @params, $ward ? $ward->{id} : $one_council->{id};
if ($ward && $rss eq 'reports') {
$type = 'ward_problems'; # Problems sent to a council, restricted to a ward
$title_params{WARD} = $q_ward;
@@ -125,16 +154,20 @@ sub main {
my $areas_info;
if ($one_council) {
- $areas_info = mySociety::MaPit::call('areas', $one_council);
+ $areas_info = mySociety::MaPit::call('areas', [ $one_council->{id}, $one_council->{parent_area} ])
+ if $one_council->{parent_area};
+ $areas_info = { $one_council->{id} => $one_council }
+ unless $areas_info;
} else {
# Show all councils on main report page
- my $ignore = 'LGD';
- $ignore .= '|CTY' if $q->{site} eq 'emptyhomes';
- my @types = grep { !/$ignore/ } @$mySociety::VotingArea::council_parent_types;
- $areas_info = mySociety::MaPit::call('areas', [ @types ], min_generation=>10 );
+ my @area_types = Cobrand::area_types($cobrand);
+ $areas_info = mySociety::MaPit::call('areas', \@area_types, min_generation=>Cobrand::area_min_generation($cobrand) );
}
- my $problems = Problems::council_problems($ward, $one_council);
+ my $problems = Problems::council_problems(
+ $ward ? $ward->{id} : undef,
+ $one_council ? $one_council->{id} : undef
+ );
my (%fixed, %open);
my $re_councils = join('|', keys %$areas_info);
@@ -149,7 +182,7 @@ sub main {
$row->{council} =~ s/\|.*$//;
my @council = split /,/, $row->{council};
foreach (@council) {
- next if $one_council && $_ != $one_council;
+ next if $one_council && $_ != $one_council->{id};
add_row($row, scalar @council, $_, \%fixed, \%open);
}
}
@@ -168,18 +201,23 @@ sub main {
print '<th>' . _('Old problems,<br>state unknown') . '</th>';
}
print '<th>' . _('Recently fixed') . '</th><th>' . _('Older fixed') . '</th></tr>';
- foreach (sort { $areas_info->{$a}->{name} cmp $areas_info->{$b}->{name} } keys %$areas_info) {
+ foreach (sort { strcoll($areas_info->{$a}->{name}, $areas_info->{$b}->{name}) } keys %$areas_info) {
+ next if mySociety::Config::get('COUNTRY') eq 'NO' && $_ eq 301; # Only want one Oslo
print '<tr align="center"';
++$c;
- if ($areas_info->{$_}->{generation_high}==10) {
+ if (mySociety::Config::get('COUNTRY') eq 'GB' && $areas_info->{$_}->{generation_high} == 10) {
print ' class="gone"';
} elsif ($c%2) {
print ' class="a"';
}
- my $url = Page::short_name($areas_info->{$_}->{name});
+ my $url = Page::short_name($areas_info->{$_}, $areas_info);
my $cobrand_url = Cobrand::url($cobrand, "/reports/$url", $q);
print '><td align="left"><a href="' . $cobrand_url . '">' .
- $areas_info->{$_}->{name} . '</a></td>';
+ $areas_info->{$_}->{name};
+ if ($areas_info->{$_}->{parent_area} && $url =~ /,|%2C/) {
+ print ', ' . $areas_info->{$areas_info->{$_}->{parent_area}}->{name};
+ }
+ print '</a></td>';
summary_cell(\@{$open{$_}{new}});
if ($q->{site} eq 'emptyhomes') {
my $c = 0;
@@ -196,17 +234,17 @@ sub main {
}
print '</table>';
} else {
- my $name = $areas_info->{$one_council}->{name};
+ my $name = $one_council->{name};
if (!$name) {
print Page::header($q, title=>_("Summary reports"));
- print "Council with identifier " . ent($one_council). " not found. ";
+ print "Council with identifier " . ent($one_council->{id}). " not found. ";
print $q->a({href => Cobrand::url($cobrand, '/reports', $q) }, 'Show all councils');
print ".";
} else {
- my $rss_url = '/rss/reports/' . Page::short_name($name);
+ my $rss_url = '/rss/reports/' . Page::short_name($one_council, $areas_info);
my $thing = _('council');
if ($ward) {
- $rss_url .= '/' . Page::short_name($q_ward);
+ $rss_url .= '/' . Page::short_name($ward);
$thing = 'ward';
$name = ent($q_ward) . ", $name";
}
@@ -232,24 +270,25 @@ sub main {
$vars{summary_line} = sprintf(_('You can <a href="%s">see more details</a> or go back and <a href="/reports">show all councils</a>.'), Cobrand::url($cobrand, NewURL($q, all=>1), $q));
}
- if ($open{$one_council}) {
- my $col = list_problems($q, _('New problems'), $open{$one_council}{new}, $all, 0);
+ my $id = $one_council->{id};
+ if ($open{$id}) {
+ my $col = list_problems($q, _('New problems'), $open{$id}{new}, $all, 0);
my $old = [];
if ($q->{site} eq 'emptyhomes') {
- push @$old, @{$open{$one_council}{older}} if $open{$one_council}{older};
- push @$old, @{$open{$one_council}{unknown}} if $open{$one_council}{unknown};
+ push @$old, @{$open{$id}{older}} if $open{$id}{older};
+ push @$old, @{$open{$id}{unknown}} if $open{$id}{unknown};
} else {
- $old = $open{$one_council}{older};
+ $old = $open{$id}{older};
}
$col .= list_problems($q, _('Older problems'), $old, $all, 0);
if ($q->{site} ne 'emptyhomes') {
- $col .= list_problems($q, _('Old problems, state unknown'), $open{$one_council}{unknown}, $all, 0);
+ $col .= list_problems($q, _('Old problems, state unknown'), $open{$id}{unknown}, $all, 0);
}
$vars{col_problems} = $col;
}
- if ($fixed{$one_council}) {
- my $col = list_problems($q, _('Recently fixed'), $fixed{$one_council}{new}, $all, 1);
- $col .= list_problems($q, _('Old fixed'), $fixed{$one_council}{old}, $all, 1);
+ if ($fixed{$id}) {
+ my $col = list_problems($q, _('Recently fixed'), $fixed{$id}{new}, $all, 1);
+ $col .= list_problems($q, _('Old fixed'), $fixed{$id}{old}, $all, 1);
$vars{col_fixed} = $col;
}
print Page::header($q, context => 'reports', title=>sprintf(_('%s - Summary reports'), $name), rss => [ sprintf(_('Problems within %s, FixMyStreet'), $name), Cobrand::url($cobrand, $rss_url, $q) ]);
@@ -291,8 +330,8 @@ sub list_problems {
$out .= '<li><a href="' . $url . '">';
$out .= ent($_->{title});
$out .= '</a>';
- $out .= ' <small>(sent to both)</small>' if $_->{councils}>1;
- $out .= ' <small>(not sent to council)</small>' if $_->{councils}==0 && $q->{site} ne 'emptyhomes';
+ $out .= ' <small>' . _('(sent to both)') . '</small>' if $_->{councils}>1;
+ $out .= ' <small>' . _('(not sent to council)') . '</small>' if $_->{councils}==0 && $q->{site} ne 'emptyhomes';
$out .= '<br><small>' . ent($_->{detail}) . '</small>' if $all;
$out .= '</li>';
}
diff --git a/web/rss.cgi b/web/rss.cgi
index 8885af249..1570ca97f 100755
--- a/web/rss.cgi
+++ b/web/rss.cgi
@@ -11,12 +11,14 @@
use strict;
use Error qw(:try);
use Standard;
+use Encode;
use URI::Escape;
use FixMyStreet::Alert;
use FixMyStreet::Geocode;
+use mySociety::Locale;
use mySociety::MaPit;
-use mySociety::GeoUtil;
use mySociety::Gaze;
+use Utils;
sub main {
my $q = shift;
@@ -62,6 +64,7 @@ Page::do_fastcgi(\&main);
sub rss_local_problems {
my $q = shift;
my $pc = $q->param('pc');
+
my $x = $q->param('x');
my $y = $q->param('y');
my $lat = $q->param('lat');
@@ -81,50 +84,86 @@ sub rss_local_problems {
$state = 'confirmed' if $state eq 'open';
+ my $qs;
+ my %title_params;
+ my $alert_type;
+
my $cobrand = Page::get_cobrand($q);
my $base = Cobrand::base_url($cobrand);
- if ($lat) { # In the UK, it'll never be 0 :)
- ($e, $n) = mySociety::GeoUtil::wgs84_to_national_grid($lat, $lon, 'G');
- $e = int($e + 0.5);
- $n = int($n + 0.5);
- print $q->redirect(-location => "$base/rss/n/$e,$n$d_str$state_qs");
- return '';
- } elsif ($x && $y) {
+ if ($x && $y) {
# 5000/31 as initial scale factor for these RSS feeds, now variable so redirect.
$e = int( ($x * 5000/31) + 0.5 );
$n = int( ($y * 5000/31) + 0.5 );
- print $q->redirect(-location => "$base/rss/n/$e,$n$d_str$state_qs");
+ ($lat, $lon) = Utils::convert_en_to_latlon_truncated($e, $n);
+ print $q->redirect(-location => "$base/rss/l/$lat,$lon$d_str$state_qs");
return '';
} elsif ($e && $n) {
- ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($e, $n, 'G');
+ ($lat, $lon) = Utils::convert_en_to_latlon_truncated($e, $n);
+ print $q->redirect(-location => "$base/rss/l/$lat,$lon$d_str$state_qs");
+ return '';
} elsif ($pc) {
my $error;
try {
- ($e, $n, $error) = FixMyStreet::Geocode::lookup($pc, $q);
+ ($lat, $lon, $error) = FixMyStreet::Geocode::lookup($pc, $q);
} catch Error::Simple with {
$error = shift;
};
- unless ($error) {
- print $q->redirect(-location => "$base/rss/n/$e,$n$d_str$state_qs");
+ if ($error) {
+ print $q->redirect(-location => "$base/alert");
+ return '';
+ } else {
+ ( $lat, $lon ) = map { Utils::truncate_coordinate($_) } ( $lat, $lon );
+
+ my $pretty_pc = $pc;
+ if (mySociety::PostcodeUtil::is_valid_postcode($pc)) {
+ $pretty_pc = mySociety::PostcodeUtil::canonicalise_postcode($pc);
+ }
+ my $pretty_pc_escaped = URI::Escape::uri_escape_utf8($pretty_pc);
+ $pretty_pc_escaped =~ s/%20/+/g;
+ $qs = "?pc=$pretty_pc_escaped";
+
+ $title_params{'POSTCODE'} = $pretty_pc;
}
- return '';
+ # pass through rather than redirecting.
+ } elsif ( $lat || $lon ) {
+ # pass through
} else {
die "Missing E/N, x/y, lat/lon, or postcode parameter in RSS feed";
}
- my $qs = '?e=' . int($e) . ';n=' . int($n);
+
+ # truncate the lat,lon for nicer urls
+ ( $lat, $lon ) = map { Utils::truncate_coordinate($_) } ( $lat, $lon );
+
+ if (!$qs) {
+ $qs = "?lat=$lat;lon=$lon";
+ }
+
if ($d) {
$qs .= ";d=$d";
$d = 100 if $d > 100;
} else {
$d = mySociety::Gaze::get_radius_containing_population($lat, $lon, 200000);
$d = int($d*10+0.5)/10;
+ mySociety::Locale::in_gb_locale {
+ $d = sprintf("%f", $d);
+ }
}
my $xsl = Cobrand::feed_xsl($cobrand);
- if ($state eq 'all') {
- return FixMyStreet::Alert::generate_rss('local_problems', $xsl, $qs, [$e, $n, $d], undef, $cobrand, $q);
+
+ if ($pc) {
+ $alert_type = 'postcode_local_problems';
} else {
- return FixMyStreet::Alert::generate_rss('local_problems_state', $xsl, $qs, [$e, $n, $d, $state], undef, $cobrand, $q);
+ $alert_type = 'local_problems';
+ }
+
+ my @db_params = ($lat, $lon, $d);
+
+ if ($state ne 'all') {
+ $alert_type .= '_state';
+ push @db_params, $state;
}
+
+ return FixMyStreet::Alert::generate_rss($alert_type, $xsl, $qs, \@db_params, \%title_params, $cobrand, $q);
}
diff --git a/web/tms-signup.cgi b/web/tms-signup.cgi
index 44099417f..5975a324f 100755
--- a/web/tms-signup.cgi
+++ b/web/tms-signup.cgi
@@ -108,7 +108,7 @@ sub tms_do_subscribe {
mobile => $input{mobile},
});
dbh()->commit();
- return Page::send_email($q, $input{email}, $input{name}, 'tms', %h);
+ return Page::send_confirmation_email($q, $input{email}, $input{name}, 'tms', %h);
}
sub tms_confirm {
diff --git a/web/xsl.eha.xsl b/web/xsl.eha.xsl
index 6c66037d7..14015cfd9 100644
--- a/web/xsl.eha.xsl
+++ b/web/xsl.eha.xsl
@@ -22,7 +22,7 @@
</ul>
</div>
- <div id="wrapper"><div id="content">
+ <div id="wrapper"><div id="mysociety">
<xsl:apply-templates select="rss/channel"/>
</div></div>
diff --git a/web/xsl.xsl b/web/xsl.xsl
index 9d30b1d61..1aa0eef4b 100644
--- a/web/xsl.xsl
+++ b/web/xsl.xsl
@@ -12,7 +12,7 @@
</head>
<body>
<div id="header"><a href="/">FixMyStreet</a></div>
- <div id="wrapper"><div id="content">
+ <div id="wrapper"><div id="mysociety">
<xsl:apply-templates select="rss/channel"/>
</div></div>