diff options
Diffstat (limited to 'perllib/FixMyStreet/App/Form')
-rw-r--r-- | perllib/FixMyStreet/App/Form/Field/Postcode.pm | 50 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Form/Waste/UPRN.pm | 37 |
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; |