aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2018-04-19 17:16:50 +0100
committerStruan Donald <struan@exo.org.uk>2018-04-26 16:27:37 +0100
commit0d80aa2f5e71ca6de5d70d81e795124703c1c3f7 (patch)
tree4a407a02ca1fdeed3a49808d26c049e2deeeb22c
parentb002374a885736b7436fc1c3132e50b6a1f8bdf9 (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.md1
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin.pm21
-rw-r--r--t/app/controller/admin/report_edit.t76
-rw-r--r--templates/web/base/admin/report_edit.html2
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>