aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Form/Field/JSON.pm
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2021-10-07 13:32:40 +0200
committerMarius Halden <marius.h@lden.org>2021-10-07 13:32:40 +0200
commit09dacfc6b8bf62addeee16c20b1d90c2a256da96 (patch)
tree7caa2bf9e92227ab74448f9b746dd28bbcb81b2a /perllib/FixMyStreet/App/Form/Field/JSON.pm
parent585e57484f9c6332668bf1ac0a6a3b39dbe32223 (diff)
parentcea89fb87a96943708a1db0f646492fbfaaf000f (diff)
Merge tag 'v3.1' into fiksgatami-devfiksgatami-dev
Diffstat (limited to 'perllib/FixMyStreet/App/Form/Field/JSON.pm')
-rw-r--r--perllib/FixMyStreet/App/Form/Field/JSON.pm42
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