aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--perllib/FixMyStreet/App/Controller/Moderate.pm4
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/User.pm11
-rw-r--r--t/app/controller/moderate.t25
-rw-r--r--t/app/controller/report_import.t17
-rw-r--r--templates/web/base/report/_main.html10
-rw-r--r--templates/web/base/report/new/report_import.html1
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>