aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm9
-rw-r--r--perllib/FixMyStreet/DB/Result/Contact.pm10
-rw-r--r--perllib/FixMyStreet/Roles/Extra.pm28
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