diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-09-09 16:13:55 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-09-09 16:13:55 +0100 |
commit | 712e156776f9761665d2b4ace591a52d426dc088 (patch) | |
tree | cd25d229b1018922b5e2c32cdcd1063f35a25e3b | |
parent | 2835ee9d82d508e32720138702ca3879a41c19db (diff) | |
parent | 61a9a61baa45040c7479a316118cc28ecb85934e (diff) |
Merge branch 'issues/forcouncils/72-show-extra-data'
-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 | ||||
-rw-r--r-- | t/app/model/extra.t | 8 | ||||
-rw-r--r-- | templates/web/base/admin/category_edit.html | 31 |
5 files changed, 48 insertions, 38 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index 7960f5e4c..7b012e0a1 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 diff --git a/t/app/model/extra.t b/t/app/model/extra.t index 52e2d839c..3b46ce128 100644 --- a/t/app/model/extra.t +++ b/t/app/model/extra.t @@ -54,14 +54,14 @@ subtest 'Old list layout transparently upgraded' => sub { subtest 'metadata' => sub { my $contact = get_test_contact([]); - is_deeply $contact->get_extra_metadata_as_hashref(), {}, 'No extra metadata'; + is_deeply $contact->get_extra_metadata, {}, 'No extra metadata'; $contact->set_extra_metadata('foo' => 'bar'); is $contact->get_extra_metadata('foo'), 'bar', 'extra metadata set...'; $contact->update; $contact->discard_changes; is $contact->get_extra_metadata('foo'), 'bar', '... and retrieved'; - is_deeply $contact->get_extra_metadata_as_hashref(), { foo => 'bar' }, 'No extra metadata'; + is_deeply $contact->get_extra_metadata, { foo => 'bar' }, 'No extra metadata'; }; }; @@ -88,14 +88,14 @@ subtest 'Default hash layout' => sub { subtest 'metadata' => sub { my $contact = get_test_contact(); - is_deeply $contact->get_extra_metadata_as_hashref(), {}, 'No extra metadata'; + is_deeply $contact->get_extra_metadata, {}, 'No extra metadata'; $contact->set_extra_metadata('foo' => 'bar'); is $contact->get_extra_metadata('foo'), 'bar', 'extra metadata set...'; $contact->update; $contact->discard_changes; is $contact->get_extra_metadata( 'foo'), 'bar', '... and retrieved'; - is_deeply $contact->get_extra_metadata_as_hashref(), { foo => 'bar' }, 'No extra metadata'; + is_deeply $contact->get_extra_metadata, { foo => 'bar' }, 'No extra metadata'; $contact->unset_extra_metadata('foo'); is $contact->get_extra_metadata('foo'), undef, 'extra metadata now unset'; diff --git a/templates/web/base/admin/category_edit.html b/templates/web/base/admin/category_edit.html index cdf371643..6aec0c132 100644 --- a/templates/web/base/admin/category_edit.html +++ b/templates/web/base/admin/category_edit.html @@ -23,11 +23,7 @@ <p><strong>[% loc('Category:') %] </strong>[% contact.category | html %] <input type="hidden" name="category" value="[% contact.category | html %]" > <input type="hidden" name="token" value="[% csrf_token %]" > - [% IF contact.extra %] - <p><strong>[% loc('Extra data:') %] </strong> - [% USE Dumper %] - [% Dumper.dump(contact.extra) | html %]</p> - [% END %] + <p><strong>[% loc('Email:') %] </strong> <input type="text" name="email" value="[% contact.email | html %]" size="30"> @@ -86,6 +82,31 @@ <p><input type="submit" name="Save changes" value="[% loc('Save changes') %]"> </form> +[% IF contact.extra %] +<h2>[% loc('Extra data:') %] </h2> +<dl> + [% FOR pair IN contact.get_extra_metadata %] + <dt>[% pair.key %]</dt> <dd>[% pair.value %]</dd> + [% END %] +</dl> +<ul> + [% FOR meta IN contact.get_metadata_for_input %] + <li> + [% meta.order %], <code>[% meta.code %]</code>, [% meta.datatype %], + [% meta.required ? loc('required') : loc('optional') %] + <br><small>[% meta.description %]</small> + [% IF meta.variable != 'false' AND meta.exists('values') %] + <ul> + [% FOR option IN meta.values %] + <li>[% option.name %] <small>([% option.key %])</small></li> + [% END %] + </ul> + [%- END %] + </li> + [%- END %] +</ul> +[% END %] + <h2>[% loc('History') %]</h2> <table border="1"> <tr> |