aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--perllib/FixMyStreet/App/Controller/Contact.pm11
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Develop.pm21
-rw-r--r--perllib/FixMyStreet/DB/Result/User.pm9
-rw-r--r--t/app/controller/contact.t64
-rw-r--r--templates/email/default/_email_settings.html1
-rw-r--r--templates/email/default/contact.html13
-rw-r--r--templates/email/default/contact.txt8
-rw-r--r--web/cobrands/bristol/assets.js7
9 files changed, 134 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e92d541bf..401241388 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,7 @@
- Pass ‘filter_category’ param to front page to pre-filter map.
- Admin improvements:
- Add new roles system, to group permissions and apply to users. #2483
+ - Contact form emails now include user admin links.
- New features:
- Categories can be listed under more than one group #2475
- OpenID Connect login support. #2523
diff --git a/perllib/FixMyStreet/App/Controller/Contact.pm b/perllib/FixMyStreet/App/Controller/Contact.pm
index e2b76ca60..c8cd14907 100644
--- a/perllib/FixMyStreet/App/Controller/Contact.pm
+++ b/perllib/FixMyStreet/App/Controller/Contact.pm
@@ -197,6 +197,17 @@ sub prepare_params_for_email : Private {
my $base_url = $c->cobrand->base_url();
my $admin_url = $c->cobrand->admin_base_url;
+ my $user = $c->cobrand->users->find( { email => $c->stash->{em} } );
+ if ( $user ) {
+ $c->stash->{user_admin_url} = $admin_url . '/users/' . $user->id;
+ $c->stash->{user_reports_admin_url} = $admin_url . '/reports?search=' . $user->email;
+
+ my $user_latest_problem = $user->latest_visible_problem();
+ if ( $user_latest_problem) {
+ $c->stash->{user_latest_report_admin_url} = $admin_url . '/report_edit/' . $user_latest_problem->id;
+ }
+ }
+
if ( $c->stash->{update} ) {
$c->stash->{problem_url} = $base_url . $c->stash->{update}->url;
diff --git a/perllib/FixMyStreet/App/Controller/Develop.pm b/perllib/FixMyStreet/App/Controller/Develop.pm
index ae7122fa1..d2457a3d7 100755
--- a/perllib/FixMyStreet/App/Controller/Develop.pm
+++ b/perllib/FixMyStreet/App/Controller/Develop.pm
@@ -115,6 +115,27 @@ sub email_previewer : Path('/_dev/email') : Args(1) {
}
} elsif ($template eq 'questionnaire') {
$vars->{created} = 'N weeks';
+ } elsif ($template eq 'contact') {
+ $vars->{problem} = $c->model('DB::Problem')->search(undef, { rows => 1 } )->first;
+ $vars->{subject} = 'Please remove my details';
+ $vars->{message} = 'I accidentally put my phone number, address, mothers maiden name, and facebook password in my most recent report!! Please remove it!!';
+ $vars->{form_name} = $c->user->name;
+ $vars->{em} = $c->user->email;
+ $vars->{host} = $c->req->header('HOST');
+ $vars->{ip} = $c->req->address;
+ $vars->{user_agent} = $c->req->user_agent;
+ $vars->{complaint} = sprintf(
+ "Complaint about report %d",
+ $vars->{problem}->id,
+ );
+ $vars->{problem_url} = $c->cobrand->base_url() . '/report/' . $vars->{problem}->id;
+ $vars->{admin_url} = $c->cobrand->admin_base_url . '/report_edit/' . $vars->{problem}->id;
+ $vars->{user_admin_url} = $c->cobrand->admin_base_url . '/users/' . $c->user->id;
+ $vars->{user_reports_admin_url} = $c->cobrand->admin_base_url . '/reports?search=' . $c->user->email;
+ my $user_latest_problem = $c->user->latest_visible_problem();
+ if ( $user_latest_problem ) {
+ $vars->{user_latest_report_admin_url} = $c->cobrand->admin_base_url . '/report_edit/' . $user_latest_problem->id;
+ }
}
my $email = $c->construct_email("$template.txt", $vars);
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm
index 4ea7524bb..51f959e0e 100644
--- a/perllib/FixMyStreet/DB/Result/User.pm
+++ b/perllib/FixMyStreet/DB/Result/User.pm
@@ -198,6 +198,15 @@ sub latest_anonymity {
return $obj ? $obj->anonymous : 0;
}
+sub latest_visible_problem {
+ my $self = shift;
+ return $self->problems->search({
+ state => [ FixMyStreet::DB::Result::Problem->visible_states() ]
+ }, {
+ order_by => { -desc => 'id' }
+ })->single;
+}
+
=head2 check_for_errors
$error_hashref = $user->check_for_errors();
diff --git a/t/app/controller/contact.t b/t/app/controller/contact.t
index c74aaa5ff..908ec971b 100644
--- a/t/app/controller/contact.t
+++ b/t/app/controller/contact.t
@@ -337,6 +337,70 @@ for my $test (
}
for my $test (
+ { fields => \%common }
+ )
+{
+ subtest 'check email contains user details' => sub {
+ my $user = $mech->create_user_ok(
+ $test->{fields}->{em},
+ name => $test->{fields}->{name}
+ );
+
+ my $older_unhidden_problem = FixMyStreet::App->model('DB::Problem')->create(
+ {
+ title => 'Some problem or other',
+ detail => 'More detail on the problem',
+ postcode => 'EH99 1SP',
+ confirmed => '2011-05-04 10:44:28.145168',
+ anonymous => 0,
+ name => $test->{fields}->{name},
+ state => 'confirmed',
+ user => $user,
+ latitude => 0,
+ longitude => 0,
+ areas => 0,
+ used_map => 0,
+ }
+ );
+
+ my $newer_hidden_problem = FixMyStreet::App->model('DB::Problem')->create(
+ {
+ title => 'A hidden problem',
+ detail => 'Shhhh secret',
+ postcode => 'EH99 1SP',
+ confirmed => '2012-06-05 10:44:28.145168',
+ anonymous => 0,
+ name => $test->{fields}->{name},
+ state => 'hidden',
+ user => $user,
+ latitude => 0,
+ longitude => 0,
+ areas => 0,
+ used_map => 0,
+ }
+ );
+
+ $mech->clear_emails_ok;
+ $mech->get_ok('/contact');
+ $mech->submit_form_ok( { with_fields => $test->{fields} } );
+
+ my $email = $mech->get_email;
+ my $body = $mech->get_text_body_from_email($email);
+
+ my $user_id = $user->id;
+ my $user_email = $user->email;
+ my $older_unhidden_problem_id = $older_unhidden_problem->id;
+ my $newer_hidden_problem_id = $newer_hidden_problem->id;
+
+ like $body, qr/admin\/users\/$user_id/, 'email contains admin link to edit user';
+ like $body, qr/admin\/reports\?search=$user_email/, 'email contains admin link to show users reports';
+ like $body, qr/admin\/report_edit\/$older_unhidden_problem_id/, 'email contains admin link for users latest unhidden report';
+ unlike $body, qr/admin\/report_edit\/$newer_hidden_problem_id/, 'email does not link to hidden reports';
+
+ };
+}
+
+for my $test (
{
fields => { %common, dest => undef },
page_errors =>
diff --git a/templates/email/default/_email_settings.html b/templates/email/default/_email_settings.html
index 94045bd3c..bdb8af692 100644
--- a/templates/email/default/_email_settings.html
+++ b/templates/email/default/_email_settings.html
@@ -108,6 +108,7 @@ list_item_photo_style = "float: right; margin: 0 0 1em 1em; border: none;"
contact_meta_style = "padding: 15px ${ column_padding }px; vertical-align: top; background-color: $secondary_column_background_color; border-bottom: 1px solid $column_divider_color;"
contact_th_style = "vertical-align: top; padding: 0.4em 1em 0 0; white-space: nowrap; text-align: left;"
contact_td_style = "vertical-align: top; padding: 0.4em 0 0.4em 0; width: 100%;"
+contact_admin_links_style = "display: block;"
# The below is so the buttons work okay in Outlook: https://litmus.com/blog/a-guide-to-bulletproof-buttons-in-email-design
button_style = "display: inline-block; border: 10px solid $button_background_color; border-width: 10px 15px; border-radius: $button_border_radius; background-color: $button_background_color; color: $button_text_color; font-size: 18px; line-height: 21px; font-weight: $button_font_weight; text-decoration: underline;"
diff --git a/templates/email/default/contact.html b/templates/email/default/contact.html
index 8dc9f3af0..33c858dfb 100644
--- a/templates/email/default/contact.html
+++ b/templates/email/default/contact.html
@@ -16,7 +16,18 @@ INCLUDE '_email_top.html';
<table [% table_reset %]>
<tr>
<th style="[% contact_th_style %]">From</th>
- <td style="[% contact_td_style %]">[% name %] &lt;<a href="mailto:[% em | html %]">[% em | html %]</a>&gt;</td>
+ <td style="[% contact_td_style %]">
+ [% name %] &lt;<a href="mailto:[% em | html %]">[% em | html %]</a>&gt;
+ [%~ IF user_admin_url %]
+ <small style="[% contact_admin_links_style %]">
+ <a href="[% user_admin_url | html %]">Edit user</a> –
+ [%~ IF user_latest_report_admin_url %]
+ <a href="[% user_latest_report_admin_url | html %]">Edit latest report</a> –
+ [%~ END %]
+ <a href="[% user_reports_admin_url | html %]">Show all reports</a>
+ </small>
+ [%~ END %]
+ </td>
</tr>
</table>
</th>
diff --git a/templates/email/default/contact.txt b/templates/email/default/contact.txt
index bd97d17a6..67ff6f610 100644
--- a/templates/email/default/contact.txt
+++ b/templates/email/default/contact.txt
@@ -6,6 +6,14 @@ Subject: [% site_name %] message: [% subject %]
[ [% complaint %] - [% problem_url %] - [% admin_url %] ]
[% END %]
+[%~ IF user_admin_url %]
+[ Edit user: [% user_admin_url %] ]
+[%~ IF user_latest_report_admin_url %]
+[ Edit latest report: [% user_latest_report_admin_url %] ]
+[%~ END %]
+[ Show all reports: [% user_reports_admin_url %] ]
+[%~ END %]
+
--
Sent by contact form on [% host %].
IP address [% ip %], user agent [% user_agent %]
diff --git a/web/cobrands/bristol/assets.js b/web/cobrands/bristol/assets.js
index af9d0f7d0..d770b45d6 100644
--- a/web/cobrands/bristol/assets.js
+++ b/web/cobrands/bristol/assets.js
@@ -48,6 +48,13 @@ fixmystreet.assets.add(options, {
});
fixmystreet.assets.add(options, {
+ asset_category: "Flooding",
+ asset_item: 'flood risk structure',
+ filter_key: 'COD_ASSET_TYPE',
+ filter_value: 'FRST'
+});
+
+fixmystreet.assets.add(options, {
asset_category: "Street Light",
asset_item: 'street light',
filter_value: [ 'S070', 'S080', 'S100', 'S110', 'S120', 'S170', 'S220', 'S230' ]