diff options
Diffstat (limited to 'perllib/FixMyStreet/App/Form/Field')
-rw-r--r-- | perllib/FixMyStreet/App/Form/Field/JSON.pm | 42 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Form/Field/Postcode.pm | 50 |
2 files changed, 92 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/App/Form/Field/JSON.pm b/perllib/FixMyStreet/App/Form/Field/JSON.pm new file mode 100644 index 000000000..4da4ef2b0 --- /dev/null +++ b/perllib/FixMyStreet/App/Form/Field/JSON.pm @@ -0,0 +1,42 @@ +package FixMyStreet::App::Form::Field::JSON; + +use HTML::FormHandler::Moose; +extends 'HTML::FormHandler::Field::Hidden'; + +use JSON::MaybeXS; +use MIME::Base64; + +has '+inflate_method' => ( default => sub { \&inflate_json } ); +has '+deflate_method' => ( default => sub { \&deflate_json } ); +has '+fif_from_value' => ( default => 1 ); + +sub inflate_json { + my ($self, $value) = @_; + return $value unless $value; + $value = decode_json(decode_base64($value)); + return $value; +} + +sub deflate_json { + my ($self, $value) = @_; + return $value unless $value; + $value = encode_base64(encode_json($value), ""); + return $value; +} + +__PACKAGE__->meta->make_immutable; +use namespace::autoclean; + +1; + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +FixMyStreet::App::Form::Field::JSON - used to store some data in a hidden field + +=cut 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 + |