diff options
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 9 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/Contact.pm | 10 | ||||
-rw-r--r-- | perllib/FixMyStreet/Roles/Extra.pm | 28 |
3 files changed, 18 insertions, 29 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index cfb572d83..0a95715f0 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -616,14 +616,7 @@ sub setup_categories_and_bodies : Private { push @category_options, $contact->category; my $metas = $contact->get_metadata_for_input; - if (scalar @$metas) { - foreach (@$metas) { - if (ref $_->{values} eq 'HASH') { - $_->{values} = [ map { { name => $_->{name}[0], key => $_->{key}[0] } } @{$_->{values}->{value}} ]; - } - } - $category_extras{ $contact->category } = $metas; - } + $category_extras{$contact->category} = $metas if @$metas; my $body_send_method = $bodies{$contact->body_id}->send_method || ''; $c->stash->{unresponsive}{$contact->category} = $contact->body_id diff --git a/perllib/FixMyStreet/DB/Result/Contact.pm b/perllib/FixMyStreet/DB/Result/Contact.pm index b37734e7a..0c9a7c0d8 100644 --- a/perllib/FixMyStreet/DB/Result/Contact.pm +++ b/perllib/FixMyStreet/DB/Result/Contact.pm @@ -86,7 +86,15 @@ __PACKAGE__->many_to_many( response_priorities => 'contact_response_priorities', sub get_metadata_for_input { my $self = shift; my $id_field = $self->id_field; - return [ grep { $_->{code} !~ /^(easting|northing|$id_field)$/ } @{$self->get_extra_fields} ]; + my @metadata = grep { $_->{code} !~ /^(easting|northing|$id_field)$/ } @{$self->get_extra_fields}; + + # Just in case the extra data is in an old parsed format + foreach (@metadata) { + if (ref $_->{values} eq 'HASH') { + $_->{values} = [ map { { name => $_->{name}[0], key => $_->{key}[0] } } @{$_->{values}->{value}} ]; + } + } + return \@metadata; } sub id_field { diff --git a/perllib/FixMyStreet/Roles/Extra.pm b/perllib/FixMyStreet/Roles/Extra.pm index 19fc91873..dc2e5c241 100644 --- a/perllib/FixMyStreet/Roles/Extra.pm +++ b/perllib/FixMyStreet/Roles/Extra.pm @@ -23,13 +23,13 @@ And # e.g. for sites like Zurich (but handled gracefully otherwise) $problem->set_extra_metadata( overdue => 1 ); - if ($problem->get_extra_metadata( 'overdue')) { ... } + if ($problem->get_extra_metadata('overdue')) { ... } =head1 METHODS =head2 set_extra_metadata - $problem->set_extra_metadata( overdue => 1); + $problem->set_extra_metadata(overdue => 1); =cut @@ -42,7 +42,7 @@ sub set_extra_metadata { =head2 set_extra_metadata_if_undefined - $problem->set_extra_metadata_if_undefined( overdue => 1); + $problem->set_extra_metadata_if_undefined(overdue => 1); # as above, but won't set if, for example 'overdue' is already set to 0 =cut @@ -72,33 +72,21 @@ sub unset_extra_metadata { =head2 get_extra_metadata + my $metadata = $problem->get_extra_metadata; my $overdue = $problem->get_extra_metadata('overdue'); =cut -sub get_extra_metadata { - my ($self, $key) = @_; - my $extra = $self->get_extra(); - - return $extra->{$key}; -}; - -=head2 get_extra_metadata_as_hashref - - my $hashref = $contact->get_extra_metadata_as_hashref(); - -=cut - my $META_FIELD = '_fields'; -sub get_extra_metadata_as_hashref { - my ($self) = @_; +sub get_extra_metadata { + my ($self, $key) = @_; my $extra = $self->get_extra(); my %extra = %$extra; delete $extra{$META_FIELD}; - return \%extra; -} + return $key ? $extra{$key} : \%extra; +}; =head2 get_extra_fields |