aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin.pm1
-rw-r--r--perllib/FixMyStreet/App/Controller/Moderate.pm43
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm2
-rw-r--r--t/app/controller/moderate.t40
5 files changed, 84 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 621c61192..14ec75be5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,7 +10,7 @@
- Admin improvements:
- List number of alerts on report page #669
- viewing and managing of user alerts in admin #676
- - Allow moderation to potentially change photos. #2291
+ - Allow moderation to potentially change photos/extra info. #2291 #2307
- Bugfixes:
- Add perl 5.26/5.28 support.
- Fix subcategory issues when visiting /report/new directly #2276
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm
index 75684c773..8aac408e4 100644
--- a/perllib/FixMyStreet/App/Controller/Admin.pm
+++ b/perllib/FixMyStreet/App/Controller/Admin.pm
@@ -1083,6 +1083,7 @@ sub report_edit_location : Private {
# comparison.
my $safe_stash = { %{$c->stash} };
$c->stash->{fetch_all_areas} = 1;
+ $c->stash->{area_check_action} = 'admin';
$c->forward('/council/load_and_check_areas', []);
$c->forward('/report/new/setup_categories_and_bodies');
my %allowed_bodies = map { $_ => 1 } @{$problem->bodies_str_ids};
diff --git a/perllib/FixMyStreet/App/Controller/Moderate.pm b/perllib/FixMyStreet/App/Controller/Moderate.pm
index d8fc38211..3b452e090 100644
--- a/perllib/FixMyStreet/App/Controller/Moderate.pm
+++ b/perllib/FixMyStreet/App/Controller/Moderate.pm
@@ -82,7 +82,9 @@ sub moderate_report : Chained('report') : PathPart('') : Args(0) {
: ()),
$c->forward('moderate_text', [ 'detail' ]),
$c->forward('moderate_boolean', [ 'anonymous', 'show_name' ]),
- $c->forward('moderate_boolean', [ 'photo' ]);
+ $c->forward('moderate_boolean', [ 'photo' ]),
+ $c->forward('moderate_location'),
+ $c->forward('moderate_extra');
# Deal with possible photo changes. If a moderate form uses a standard
# photo upload field (with upload_fileid, label and file upload handlers),
@@ -92,7 +94,8 @@ sub moderate_report : Chained('report') : PathPart('') : Args(0) {
if ($photo_edit_form) {
$c->forward('/photo/process_photo');
if ( my $photo_error = delete $c->stash->{photo_error} ) {
- $c->flash->{photo_error} = $photo_error;
+ $c->flash->{moderate_errors} ||= [];
+ push @{ $c->flash->{moderate_errors} }, $photo_error;
} else {
my $fileid = $c->stash->{upload_fileid};
if ($fileid ne $problem->photo) {
@@ -230,6 +233,42 @@ sub moderate_boolean : Private {
return;
}
+sub moderate_extra : Private {
+ my ($self, $c) = @_;
+
+ my $object = $c->stash->{comment} || $c->stash->{problem};
+ my $changed;
+ my @extra = grep { /^extra\./ } keys %{$c->req->params};
+ foreach (@extra) {
+ my ($field_name) = /extra\.(.*)/;
+ my $old = $object->get_extra_metadata($field_name) || '';
+ my $new = $c->get_param($_);
+ if ($new ne $old) {
+ $object->set_extra_metadata($field_name, $new);
+ $changed = 1;
+ }
+ }
+ if ($changed) {
+ $object->update;
+ return 'extra';
+ }
+}
+
+sub moderate_location : Private {
+ my ($self, $c) = @_;
+
+ my $problem = $c->stash->{problem};
+ if ( !$c->forward( '/admin/report_edit_location', [ $problem ] ) ) {
+ # New lat/lon isn't valid, show an error
+ $c->flash->{moderate_errors} ||= [];
+ push @{ $c->flash->{moderate_errors} }, _('Invalid location. New location must be covered by the same council.');
+ return;
+ }
+
+ $problem->update;
+ return 'location';
+}
+
sub update : Chained('report') : PathPart('update') : CaptureArgs(1) {
my ($self, $c, $id) = @_;
my $comment = $c->stash->{problem}->comments->find($id);
diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm
index d4ff0a2ca..5718bc021 100644
--- a/perllib/FixMyStreet/App/Controller/Report.pm
+++ b/perllib/FixMyStreet/App/Controller/Report.pm
@@ -194,7 +194,7 @@ sub load_updates : Private {
$c->stash->{updates} = \@combined;
if ($c->sessionid) {
- foreach (qw(alert_to_reporter anonymized photo_error)) {
+ foreach (qw(alert_to_reporter anonymized moderate_errors)) {
$c->stash->{$_} = $c->flash->{$_} if $c->flash->{$_};
}
}
diff --git a/t/app/controller/moderate.t b/t/app/controller/moderate.t
index c2b185cde..9f6bc7450 100644
--- a/t/app/controller/moderate.t
+++ b/t/app/controller/moderate.t
@@ -21,6 +21,7 @@ $mech->host('www.example.org');
my $BROMLEY_ID = 2482;
my $body = $mech->create_body_ok( $BROMLEY_ID, 'Bromley Council' );
+$mech->create_contact_ok( body => $body, category => 'Lost toys', email => 'losttoys@example.net' );
my $dt = DateTime->now;
@@ -232,6 +233,45 @@ subtest 'Problem moderation' => sub {
is $report->detail, 'Changed detail';
}
};
+
+ subtest 'Moderate extra data' => sub {
+ $report->set_extra_metadata('moon', 'waxing full');
+ $report->update;
+ my ($csrf) = $mech->content =~ /meta content="([^"]*)" name="csrf-token"/;
+ $mech->post_ok('http://www.example.org/moderate/report/' . $report->id, {
+ %problem_prepopulated,
+ 'extra.weather' => 'snow',
+ 'extra.moon' => 'waxing full',
+ token => $csrf,
+ });
+ $report->discard_changes;
+ is $report->get_extra_metadata('weather'), 'snow';
+ };
+
+ subtest 'Moderate location' => sub {
+ FixMyStreet::override_config {
+ MAPIT_URL => 'http://mapit.uk/',
+ ALLOWED_COBRANDS => 'fixmystreet',
+ }, sub {
+ my ($csrf) = $mech->content =~ /meta content="([^"]*)" name="csrf-token"/;
+ $mech->post_ok('http://www.example.org/moderate/report/' . $report->id, {
+ %problem_prepopulated,
+ latitude => '53',
+ longitude => '0.01578',
+ token => $csrf,
+ });
+ $report->discard_changes;
+ is $report->latitude, 51.4129, 'No change when moved out of area';
+ $mech->post_ok('http://www.example.org/moderate/report/' . $report->id, {
+ %problem_prepopulated,
+ latitude => '51.4021',
+ longitude => '0.01578',
+ token => $csrf,
+ });
+ $report->discard_changes;
+ is $report->latitude, 51.4021, 'Updated when same body';
+ };
+ };
};
$mech->content_lacks('Posted anonymously', 'sanity check');