diff options
Diffstat (limited to 'perllib/FixMyStreet/App/Form/Field/JSON.pm')
-rw-r--r-- | perllib/FixMyStreet/App/Form/Field/JSON.pm | 42 |
1 files changed, 42 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 |