aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller/Admin.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Admin.pm')
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin.pm42
1 files changed, 42 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm
index aab114576..cd1246134 100644
--- a/perllib/FixMyStreet/App/Controller/Admin.pm
+++ b/perllib/FixMyStreet/App/Controller/Admin.pm
@@ -375,6 +375,8 @@ sub update_contacts : Private {
$contact->set_extra_metadata( reputation_threshold => int($c->get_param('reputation_threshold')) );
}
+ $c->forward('update_extra_fields', [ $contact ]);
+
if ( %errors ) {
$c->stash->{updated} = _('Please correct the errors below');
$c->stash->{contact} = $contact;
@@ -1973,6 +1975,46 @@ sub fetch_body_areas : Private {
$c->stash->{fetched_areas_body_id} = $body->id;
}
+sub update_extra_fields : Private {
+ my ($self, $c, $object) = @_;
+
+ my @indices = grep { /^metadata\[\d+\]\.code/ } keys %{ $c->req->params };
+ @indices = sort map { /(\d+)/ } @indices;
+
+ my @extra_fields;
+ foreach my $i (@indices) {
+ my $meta = {};
+ $meta->{code} = $c->get_param("metadata[$i].code");
+ next unless $meta->{code};
+ $meta->{order} = int $c->get_param("metadata[$i].order");
+ $meta->{datatype} = $c->get_param("metadata[$i].datatype");
+ my $required = $c->get_param("metadata[$i].required") && $c->get_param("metadata[$i].required") eq 'on';
+ $meta->{required} = $required ? 'true' : 'false';
+ my $notice = $c->get_param("metadata[$i].notice") && $c->get_param("metadata[$i].notice") eq 'on';
+ $meta->{variable} = $notice ? 'false' : 'true';
+ $meta->{description} = $c->get_param("metadata[$i].description");
+ $meta->{datatype_description} = $c->get_param("metadata[$i].datatype_description");
+
+ if ( $meta->{datatype} eq "singlevaluelist" ) {
+ $meta->{values} = [];
+ my $re = qr{^metadata\[$i\]\.values\[\d+\]\.key};
+ my @vindices = grep { /$re/ } keys %{ $c->req->params };
+ @vindices = sort map { /values\[(\d+)\]/ } @vindices;
+ foreach my $j (@vindices) {
+ my $name = $c->get_param("metadata[$i].values[$j].name");
+ my $key = $c->get_param("metadata[$i].values[$j].key");
+ push(@{$meta->{values}}, {
+ name => $name,
+ key => $key,
+ }) if $name;
+ }
+ }
+ push @extra_fields, $meta;
+ }
+ @extra_fields = sort { $a->{order} <=> $b->{order} } @extra_fields;
+ $object->set_extra_fields(@extra_fields);
+}
+
sub trim {
my $self = shift;
my $e = shift;