diff options
author | Struan Donald <struan@exo.org.uk> | 2018-04-19 17:16:50 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2018-04-26 16:27:37 +0100 |
commit | 0d80aa2f5e71ca6de5d70d81e795124703c1c3f7 (patch) | |
tree | 4a407a02ca1fdeed3a49808d26c049e2deeeb22c | |
parent | b002374a885736b7436fc1c3132e50b6a1f8bdf9 (diff) |
display the contents of report's extra field in admin
Instead of just a Yes/No display a formatted list of values in extra.
Has special handling for known fields otherwise just prints them out
dumbly.
Fixes #1809
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin.pm | 21 | ||||
-rw-r--r-- | t/app/controller/admin/report_edit.t | 76 | ||||
-rw-r--r-- | templates/web/base/admin/report_edit.html | 2 |
4 files changed, 99 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cef435f0..ae4eafc96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ - Add link to admin edit page for reports. #2071 - Nicer Open311 errors. #2078 - Deleted body categories now hidden by default #1962 + - Display contents of report's extra field #1809 - Development improvements: - Add HTML email previewer. - Add CORS header to Open311 output. #2022 diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm index 2cd34b7e2..a923a3407 100644 --- a/perllib/FixMyStreet/App/Controller/Admin.pm +++ b/perllib/FixMyStreet/App/Controller/Admin.pm @@ -843,6 +843,27 @@ sub report_edit : Path('report_edit') : Args(1) { } $c->stash->{problem} = $problem; + if ( $problem->extra ) { + my @fields; + if ( my $fields = $problem->get_extra_fields ) { + for my $field ( @{$fields} ) { + my $name = $field->{description} ? + "$field->{description} ($field->{name})" : + "$field->{name}"; + push @fields, { name => $name, val => $field->{value} }; + } + } + my $extra = $problem->get_extra_metadata; + if ( $extra->{duplicates} ) { + push @fields, { name => 'Duplicates', val => join( ',', @{ $problem->get_extra_metadata('duplicates') } ) }; + delete $extra->{duplicates}; + } + for my $key ( keys %$extra ) { + push @fields, { name => $key, val => $extra->{$key} }; + } + + $c->stash->{extra_fields} = \@fields; + } $c->forward('/auth/get_csrf_token'); diff --git a/t/app/controller/admin/report_edit.t b/t/app/controller/admin/report_edit.t index e61f781f5..34277ca74 100644 --- a/t/app/controller/admin/report_edit.t +++ b/t/app/controller/admin/report_edit.t @@ -557,4 +557,80 @@ subtest "Test setting a report from unconfirmed to something else doesn't cause $mech->get_ok("/report/$report_id"); }; +subtest "Test display of report extra data" => sub { + $report->unset_extra_metadata; + $mech->get_ok("/admin/report_edit/$report_id"); + $mech->content_contains('Extra data: No'); + $report->set_extra_metadata('extra_field', 'this is extra data'); + $report->update; + $mech->get_ok("/admin/report_edit/$report_id"); + $mech->content_contains('extra_field</strong>: this is extra data'); +}; + +my $report2 = FixMyStreet::App->model('DB::Problem')->find_or_create( + { + postcode => 'SW1A 1AA', + bodies_str => '2504', + areas => ',105255,11806,11828,2247,2504,', + category => 'Other', + title => 'Report to Duplicate Edit', + detail => 'Detail for Duplicate Report to Edit', + used_map => 't', + name => 'Test User', + anonymous => 'f', + external_id => '13', + state => 'confirmed', + confirmed => $dt->ymd . ' ' . $dt->hms, + lang => 'en-gb', + service => '', + cobrand => '', + cobrand_data => '', + send_questionnaire => 't', + latitude => '51.5016605453401', + longitude => '-0.142497580865087', + user_id => $user->id, + whensent => $dt->ymd . ' ' . $dt->hms, + } +); + +subtest "Test display of report duplicates extra data" => sub { + $report->update( { extra => undef } ); + $mech->get_ok("/admin/report_edit/$report_id"); + $mech->content_contains('Extra data: No'); + + $report2->set_duplicate_of($report_id); + $report2->update; + + $mech->get_ok("/admin/report_edit/$report_id"); + $mech->content_contains('Duplicates</strong>: ' . $report2->id); +}; + +subtest "Test display of fields extra data" => sub { + $report->unset_extra_metadata( 'duplicates' ); + $report->update; + $mech->get_ok("/admin/report_edit/$report_id"); + $mech->content_contains('Extra data: No'); + + $report->push_extra_fields( { + name => 'report_url', + value => 'http://example.com', + }); + $report->update; + + $report->discard_changes; + + $mech->get_ok("/admin/report_edit/$report_id"); + $mech->content_contains('report_url</strong>: http://example.com'); + + $report->set_extra_fields( { + description => 'Report URL', + name => 'report_url', + value => 'http://example.com', + }); + $report->update; + + $mech->get_ok("/admin/report_edit/$report_id"); + $mech->content_contains('Report URL (report_url)</strong>: http://example.com'); +}; + done_testing(); diff --git a/templates/web/base/admin/report_edit.html b/templates/web/base/admin/report_edit.html index 00e686566..138ba8c05 100644 --- a/templates/web/base/admin/report_edit.html +++ b/templates/web/base/admin/report_edit.html @@ -92,7 +92,6 @@ class="admin-offsite-link">[% problem.latitude %], [% problem.longitude %]</a> <li>[% loc('Cobrand:') %] [% problem.cobrand %] <br><small>[% loc('Cobrand data:') %] [% cobrand_data OR '<em>' _ loc('None') _ '</em>' %]</small> </li> -<li>[% loc('Extra data:') %] [% problem.extra ? 'Yes' : 'No' %]</li> <li>[% loc('Going to send questionnaire?') %] [% IF problem.send_questionnaire %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</li> <li><label for="external_id">[% loc('External ID') %]:</label> @@ -126,6 +125,7 @@ class="admin-offsite-link">[% problem.latitude %], [% problem.longitude %]</a> <li><label class="inline-text" for="category">[% loc('Category:') %]</label> [% INCLUDE 'admin/report-category.html' %] </li> +<li>[% loc('Extra data:') %] [% IF extra_fields.size %]<ul>[% FOREACH field IN extra_fields %]<li><strong>[% field.name %]</strong>: [% field.val %]</li>[% END %]</ul>[% ELSE %]No[% END %]</li> <li><label class="inline-text" for="anonymous">[% loc('Anonymous:') %]</label> <select class="form-control" name="anonymous" id="anonymous"> <option [% 'selected ' IF problem.anonymous %]value="1">[% loc('Yes') %]</option> |