diff options
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Moderate.pm | 4 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 6 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/User.pm | 11 | ||||
-rw-r--r-- | t/app/controller/moderate.t | 25 | ||||
-rw-r--r-- | t/app/controller/report_import.t | 17 | ||||
-rw-r--r-- | templates/web/base/report/_main.html | 10 | ||||
-rw-r--r-- | templates/web/base/report/new/report_import.html | 1 |
8 files changed, 73 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 53807228b..b34fb900e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,13 @@ ## Releases * Unreleased + - Front end improvements: + - Import end point can optionally return a web page #2225 - Bugfixes: - Fix display of area/pins on body page when using Bing or TonerLite map. - Do not scan through all problems to show /_dev pages. + - Development improvements: + - Cobrand hook for disallowing title moderation. #2228 * v2.4 (6th September 2018) - Security diff --git a/perllib/FixMyStreet/App/Controller/Moderate.pm b/perllib/FixMyStreet/App/Controller/Moderate.pm index 45a303309..c47c34f37 100644 --- a/perllib/FixMyStreet/App/Controller/Moderate.pm +++ b/perllib/FixMyStreet/App/Controller/Moderate.pm @@ -75,7 +75,9 @@ sub moderate_report : Chained('report') : PathPart('') : Args(0) { $c->forward('report_moderate_hide'); my @types = grep $_, - $c->forward('moderate_text', [ 'title' ]), + ($c->user->can_moderate_title($c->stash->{problem}, 1) + ? $c->forward('moderate_text', [ 'title' ]) + : ()), $c->forward('moderate_text', [ 'detail' ]), $c->forward('moderate_boolean', [ 'anonymous', 'show_name' ]), $c->forward('moderate_boolean', [ 'photo' ]); diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index 869ed9461..dd4fef388 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -418,6 +418,12 @@ sub report_import : Path('/import') { $c->send_email( 'partial.txt', { to => $report->user->email, } ); + if ( $c->get_param('web') ) { + $c->res->content_type('text/html; charset=utf-8'); + $c->stash->{template} = 'email_sent.html'; + $c->stash->{email_type} = 'problem'; + return 1; + } $c->res->body('SUCCESS'); return 1; } diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm index 246159009..c50f8834c 100644 --- a/perllib/FixMyStreet/DB/Result/User.pm +++ b/perllib/FixMyStreet/DB/Result/User.pm @@ -350,6 +350,17 @@ sub can_moderate { return $cobrand->call_hook('moderate_permission', $self, $type => $object); } +sub can_moderate_title { + my ($self, $problem, $perm) = @_; + + # Must have main permission, this is to potentially restrict only + return 0 unless $perm; + + # If hook returns anything use it, otherwise default to yes + my $cobrand = $self->result_source->schema->cobrand; + return $cobrand->call_hook('moderate_permission_title', $self, $problem) // 1; +} + has body_permissions => ( is => 'ro', lazy => 1, diff --git a/t/app/controller/moderate.t b/t/app/controller/moderate.t index c2ac3ad5a..c3aba0ebb 100644 --- a/t/app/controller/moderate.t +++ b/t/app/controller/moderate.t @@ -4,6 +4,12 @@ use parent 'FixMyStreet::Cobrand::Default'; sub send_moderation_notifications { 0 } +package FixMyStreet::Cobrand::TestTitle; + +use parent 'FixMyStreet::Cobrand::Default'; + +sub moderate_permission_title { 0 } + package main; use FixMyStreet::TestMech; @@ -208,6 +214,25 @@ subtest 'Problem moderation' => sub { $report->update({ state => 'confirmed' }); } }; + + subtest 'Try and moderate title when not allowed' => sub { + FixMyStreet::override_config { + ALLOWED_COBRANDS => 'testtitle' + }, sub { + $mech->get_ok($REPORT_URL); + $mech->submit_form_ok({ with_fields => { + problem_show_name => 1, + problem_photo => 1, + problem_detail => 'Changed detail', + }}); + $mech->base_like( qr{\Q$REPORT_URL\E} ); + $mech->content_like(qr/Moderated by Bromley Council/); + + $report->discard_changes; + is $report->title, 'Good bad good'; + is $report->detail, 'Changed detail'; + } + }; }; $mech->content_lacks('Posted anonymously', 'sanity check'); diff --git a/t/app/controller/report_import.t b/t/app/controller/report_import.t index e4a202db7..223979d1b 100644 --- a/t/app/controller/report_import.t +++ b/t/app/controller/report_import.t @@ -89,6 +89,15 @@ subtest "Test creating bad partial entries" => sub { }; +for my $test ( + { + desc => 'Submit a correct entry', + }, + { + desc => 'Submit a correct web entry', + web => 1, + } +) { subtest "Submit a correct entry" => sub { $mech->get_ok('/import'); @@ -101,13 +110,18 @@ subtest "Submit a correct entry" => sub { subject => 'Test report', detail => 'This is a test report', photo => $sample_file, + web => $test->{web}, } }, "fill in form" ); is_deeply( $mech->import_errors, [], "got no errors" ); - is $mech->content, 'SUCCESS', "Got success response"; + if ( $test->{web} ) { + $mech->content_contains('Nearly done! Now check', "Got email confirmation page"); + } else { + is $mech->content, 'SUCCESS', "Got success response"; + } # check that we have received the email my $token_url = $mech->get_link_from_email; @@ -223,6 +237,7 @@ subtest "Submit a correct entry" => sub { $mech->delete_user($user); }; +} subtest "Submit a correct entry (with location)" => sub { diff --git a/templates/web/base/report/_main.html b/templates/web/base/report/_main.html index 1e427fd86..6c5537fb4 100644 --- a/templates/web/base/report/_main.html +++ b/templates/web/base/report/_main.html @@ -1,4 +1,7 @@ -[% can_moderate = permissions.moderate OR c.user.can_moderate(problem, staff = permissions.moderate) %] +[% +can_moderate = permissions.moderate OR c.user.can_moderate(problem, staff = permissions.moderate) +can_moderate_title = c.user.can_moderate_title(problem, can_moderate) +%] <a href="[% c.uri_for( '/around', { lat => latitude, lon => longitude } ) %]" class="problem-back js-back-to-report-list">[% loc('Back to all reports') %]</a> @@ -38,9 +41,8 @@ <input type="hidden" name="token" value="[% csrf_token %]"> [% END %] + [% IF can_moderate_title %] <h1 class="moderate-display">[% problem.title | html %]</h1> - - [% IF can_moderate %] <div class="moderate-edit"> [% IF problem.title != original.title %] <label> @@ -50,6 +52,8 @@ [% END %] <h1><input class="form-control" type="text" name="problem_title" value="[% problem.title | html %]" data-original-value="[% original.title | html %]"></h1> </div> + [% ELSE %] + <h1>[% problem.title | html %]</h1> [% END %] <div class="moderate-edit"> diff --git a/templates/web/base/report/new/report_import.html b/templates/web/base/report/new/report_import.html index 7aa105afe..f2ead081b 100644 --- a/templates/web/base/report/new/report_import.html +++ b/templates/web/base/report/new/report_import.html @@ -85,6 +85,7 @@ line each starting with <samp>ERROR:</samp>. </dd> </dl> +<input type="hidden" name="web" value="0"> <input type="submit" /> </form> |