aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Form
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/App/Form')
-rw-r--r--perllib/FixMyStreet/App/Form/Field/Postcode.pm50
-rw-r--r--perllib/FixMyStreet/App/Form/Waste/UPRN.pm37
2 files changed, 87 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/App/Form/Field/Postcode.pm b/perllib/FixMyStreet/App/Form/Field/Postcode.pm
new file mode 100644
index 000000000..093ae66a3
--- /dev/null
+++ b/perllib/FixMyStreet/App/Form/Field/Postcode.pm
@@ -0,0 +1,50 @@
+package FixMyStreet::App::Form::Field::Postcode;
+
+use HTML::FormHandler::Moose;
+extends 'HTML::FormHandler::Field::Text';
+
+use mySociety::PostcodeUtil;
+
+apply(
+ [
+ {
+ transform => sub {
+ my ( $value, $field ) = @_;
+ $value =~ s/[^A-Z0-9]//i;
+ return mySociety::PostcodeUtil::canonicalise_postcode($value);
+ }
+ },
+ {
+ check => sub { mySociety::PostcodeUtil::is_valid_postcode(shift) },
+ message => 'Sorry, we did not recognise that postcode.',
+ }
+ ]
+);
+
+
+__PACKAGE__->meta->make_immutable;
+use namespace::autoclean;
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+FixMyStreet::App::Form::Field::Postcode - validates postcode using mySociety::PostcodeUtil
+
+=head1 DESCRIPTION
+
+Validates that the input looks like a postcode using L<mySociety::PostcodeUtil>.
+Widget type is 'text'.
+
+=head1 DEPENDENCIES
+
+L<mySociety::PostcodeUtil>
+
+=cut
+
diff --git a/perllib/FixMyStreet/App/Form/Waste/UPRN.pm b/perllib/FixMyStreet/App/Form/Waste/UPRN.pm
new file mode 100644
index 000000000..d0ac7b3cb
--- /dev/null
+++ b/perllib/FixMyStreet/App/Form/Waste/UPRN.pm
@@ -0,0 +1,37 @@
+package FixMyStreet::App::Form::Waste::UPRN;
+
+use utf8;
+use HTML::FormHandler::Moose;
+extends 'HTML::FormHandler';
+
+use mySociety::PostcodeUtil qw(is_valid_postcode);
+
+has '+field_name_space' => ( default => 'FixMyStreet::App::Form::Field' );
+
+has cobrand => ( is => 'ro' );
+
+has_field postcode => (
+ required => 1,
+ type => 'Postcode',
+ validate_method => sub {
+ my $self = shift;
+ return if $self->has_errors; # Called even if already failed
+ my $data = $self->form->cobrand->bin_addresses_for_postcode($self->value);
+ if (!@$data) {
+ $self->add_error('Sorry, we did not find any results for that postcode');
+ }
+ push @$data, { value => 'missing', label => 'I can’t find my address' };
+ $self->value($data);
+ },
+ tags => { autofocus => 1 },
+);
+
+has_field go => (
+ type => 'Submit',
+ value => 'Go',
+ element_attr => { class => 'govuk-button' },
+);
+
+__PACKAGE__->meta->make_immutable;
+
+1;