aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm46
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/Update.pm39
-rw-r--r--perllib/FixMyStreet/DB/Result/User.pm8
-rw-r--r--perllib/FixMyStreet/TestMech.pm1
-rw-r--r--t/app/controller/report_as_other.t194
-rw-r--r--templates/email/default/other-reported.html30
-rw-r--r--templates/email/default/other-reported.txt27
-rw-r--r--templates/email/default/other-updated.html26
-rw-r--r--templates/email/default/other-updated.txt16
-rw-r--r--templates/web/base/report/new/form_user_loggedin.html30
-rw-r--r--templates/web/base/report/update/form_name.html18
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js28
12 files changed, 448 insertions, 15 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index bbd27c666..8eabf64c1 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -718,16 +718,31 @@ sub process_user : Private {
}
}
- # The user is already signed in
- if ( $c->user_exists ) {
+ # The user is already signed in. Extra bare block for 'last'.
+ if ( $c->user_exists ) { {
my $user = $c->user->obj;
+
+ if ($c->stash->{contributing_as_another_user} = $user->contributing_as('another_user', $c, $c->stash->{bodies})) {
+ # Act as if not logged in (and it will be auto-confirmed later on)
+ $report->user(undef);
+ last;
+ }
+
$user->name( Utils::trim_text( $params{name} ) ) if $params{name};
$user->phone( Utils::trim_text( $params{phone} ) );
$user->title( $user_title ) if $user_title;
$report->user( $user );
- $report->name( $user->name );
+
+ if ($c->stash->{contributing_as_body} = $user->contributing_as('body', $c, $c->stash->{bodies})) {
+ $report->name($user->from_body->name);
+ $user->name($user->from_body->name) unless $user->name;
+ $c->stash->{no_reporter_alert} = 1;
+ } else {
+ $report->name($user->name);
+ }
+
return 1;
- }
+ } }
# cleanup the email address
my $email = $params{email} ? lc $params{email} : '';
@@ -796,7 +811,11 @@ sub process_report : Private {
$report->send_questionnaire( $c->cobrand->send_questionnaires() );
# set some simple bool values (note they get inverted)
- $report->anonymous( $params{may_show_name} ? 0 : 1 );
+ if ($c->stash->{contributing_as_body}) {
+ $report->anonymous(0);
+ } else {
+ $report->anonymous( $params{may_show_name} ? 0 : 1 );
+ }
# clean up text before setting
$report->title( Utils::cleanup_text( $params{title} ) );
@@ -1075,7 +1094,10 @@ sub save_user_and_report : Private {
$report->user->insert();
}
$report->confirm();
-
+ } elsif ( $c->forward('created_as_someone_else', [ $c->stash->{bodies} ]) ) {
+ # If created on behalf of someone else, we automatically confirm it,
+ # but we don't want to update the user account
+ $report->confirm();
} elsif ( !$report->user->in_storage ) {
# User does not exist.
$c->forward('tokenize_user', [ $report ]);
@@ -1111,6 +1133,11 @@ sub save_user_and_report : Private {
return 1;
}
+sub created_as_someone_else : Private {
+ my ($self, $c, $bodies) = @_;
+ return $c->stash->{contributing_as_another_user} || $c->stash->{contributing_as_body};
+}
+
=head2 generate_map
Add the html needed to for the map to the stash.
@@ -1166,6 +1193,11 @@ sub redirect_or_confirm_creation : Private {
if ( $report->confirmed ) {
# Subscribe problem reporter to email updates
$c->forward( 'create_reporter_alert' );
+ if ($c->stash->{contributing_as_another_user}) {
+ $c->send_email( 'other-reported.txt', {
+ to => [ [ $report->user->email, $report->name ] ],
+ } );
+ }
$c->log->info($report->user->id . ' was logged in, showing confirmation page for ' . $report->id);
$c->stash->{created_report} = 'loggedin';
$c->stash->{template} = 'tokens/confirm_problem.html';
@@ -1184,6 +1216,8 @@ sub redirect_or_confirm_creation : Private {
sub create_reporter_alert : Private {
my ( $self, $c ) = @_;
+ return if $c->stash->{no_reporter_alert};
+
my $problem = $c->stash->{report};
my $alert = $c->model('DB::Alert')->find_or_create( {
user => $problem->user,
diff --git a/perllib/FixMyStreet/App/Controller/Report/Update.pm b/perllib/FixMyStreet/App/Controller/Report/Update.pm
index d03797f56..705e6ee99 100644
--- a/perllib/FixMyStreet/App/Controller/Report/Update.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/Update.pm
@@ -109,8 +109,15 @@ sub process_user : Private {
my $update = $c->stash->{update};
- if ( $c->user_exists ) {
+ # Extra block to use 'last'
+ if ( $c->user_exists ) { {
my $user = $c->user->obj;
+
+ if ($c->stash->{contributing_as_another_user} = $user->contributing_as('another_user', $c, $update->problem->bodies_str)) {
+ # Act as if not logged in (and it will be auto-confirmed later on)
+ last;
+ }
+
my $name = $c->get_param('name');
$user->name( Utils::trim_text( $name ) ) if $name;
my $title = $c->get_param('fms_extra_title');
@@ -119,8 +126,14 @@ sub process_user : Private {
$user->title( Utils::trim_text( $title ) );
}
$update->user( $user );
+
+ # Just in case, make sure the user will have a name
+ if ($c->stash->{contributing_as_body}) {
+ $user->name($user->from_body->name) unless $user->name;
+ }
+
return 1;
- }
+ } }
# Extract all the params to a hash to make them easier to work with
my %params = map { $_ => $c->get_param($_) }
@@ -254,16 +267,23 @@ sub process_update : Private {
Utils::cleanup_text( $params{update}, { allow_multiline => 1 } );
my $name = Utils::trim_text( $params{name} );
- my $anonymous = $c->get_param('may_show_name') ? 0 : 1;
$params{reopen} = 0 unless $c->user && $c->user->id == $c->stash->{problem}->user->id;
my $update = $c->stash->{update};
$update->text($params{update});
- $update->name($name);
+
$update->mark_fixed($params{fixed} ? 1 : 0);
$update->mark_open($params{reopen} ? 1 : 0);
- $update->anonymous($anonymous);
+
+ $c->stash->{contributing_as_body} = $c->user_exists && $c->user->contributing_as('body', $c, $update->problem->bodies_str);
+ if ($c->stash->{contributing_as_body}) {
+ $update->name($c->user->from_body->name);
+ $update->anonymous(0);
+ } else {
+ $update->name($name);
+ $update->anonymous($c->get_param('may_show_name') ? 0 : 1);
+ }
if ( $params{state} ) {
$params{state} = 'fixed - council'
@@ -431,6 +451,10 @@ sub save_update : Private {
$update->user->insert();
}
$update->confirm();
+ } elsif ( $c->forward('/report/new/created_as_someone_else', [ $update->problem->bodies_str ]) ) {
+ # If created on behalf of someone else, we automatically confirm it,
+ # but we don't want to update the user account
+ $update->confirm();
} elsif ( !$update->user->in_storage ) {
# User does not exist.
$c->forward('tokenize_user', [ $update ]);
@@ -474,6 +498,11 @@ sub redirect_or_confirm_creation : Private {
if ( $update->confirmed ) {
$c->forward( 'update_problem' );
$c->forward( 'signup_for_alerts' );
+ if ($c->stash->{contributing_as_another_user}) {
+ $c->send_email( 'other-updated.txt', {
+ to => [ [ $update->user->email, $update->name ] ],
+ } );
+ }
$c->stash->{template} = 'tokens/confirm_update.html';
return 1;
}
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm
index 65dd1dab1..7d1785c4b 100644
--- a/perllib/FixMyStreet/DB/Result/User.pm
+++ b/perllib/FixMyStreet/DB/Result/User.pm
@@ -243,6 +243,14 @@ sub has_permission_to {
return $permission ? 1 : undef;
}
+sub contributing_as {
+ my ($self, $other, $c, $bodies) = @_;
+ $bodies = join(',', keys %$bodies) if ref $bodies eq 'HASH';
+ $c->log->error("Bad data $bodies passed to contributing_as") if ref $bodies;
+ my $form_as = $c->get_param('form_as') || '';
+ return 1 if $form_as eq $other && $self->has_permission_to("contribute_as_$other", $bodies);
+}
+
sub adopt {
my ($self, $other) = @_;
diff --git a/perllib/FixMyStreet/TestMech.pm b/perllib/FixMyStreet/TestMech.pm
index 5f4a6ceed..45f32f46a 100644
--- a/perllib/FixMyStreet/TestMech.pm
+++ b/perllib/FixMyStreet/TestMech.pm
@@ -165,6 +165,7 @@ sub delete_user {
}
$_->delete for $user->comments;
$_->delete for $user->admin_logs;
+ $_->delete for $user->user_body_permissions;
$user->delete;
return 1;
diff --git a/t/app/controller/report_as_other.t b/t/app/controller/report_as_other.t
new file mode 100644
index 000000000..505a1bf6b
--- /dev/null
+++ b/t/app/controller/report_as_other.t
@@ -0,0 +1,194 @@
+use strict;
+use warnings;
+use Test::More;
+use LWP::Protocol::PSGI;
+
+use t::Mock::MapIt;
+use FixMyStreet::TestMech;
+use FixMyStreet::App;
+
+# disable info logs for this test run
+FixMyStreet::App->log->disable('info');
+END { FixMyStreet::App->log->enable('info'); }
+
+my $mech = FixMyStreet::TestMech->new;
+
+my $body = $mech->create_body_ok(2245, 'Wiltshire Council');
+my $contact1 = $mech->create_contact_ok( body_id => $body->id, category => 'Street lighting', email => 'highways@example.com' );
+my $contact2 = $mech->create_contact_ok( body_id => $body->id, category => 'Potholes', email => 'potholes@example.com' );
+
+my $test_email = 'body-user@example.net';
+my $user = $mech->log_in_ok($test_email);
+$user->update({ from_body => $body->id, name => 'Body User' });
+
+my ($report_to_update) = $mech->create_problems_for_body(1, $body->id, 'Title');
+
+subtest "Body user, no permissions, no special reporting tools shown" => sub {
+ start_report();
+ dropdown_shown(0);
+ start_update();
+ dropdown_shown(0, 'updateForm');
+};
+
+subtest "Body user, has permission to add report as council" => sub {
+ my $report = add_report(
+ 'contribute_as_body',
+ form_as => 'body',
+ title => "Test Report",
+ detail => 'Test report details.',
+ category => 'Street lighting',
+ );
+ is $report->name, 'Wiltshire Council', 'report name is body';
+ is $report->user->name, 'Body User', 'user name unchanged';
+ is $report->user->id, $user->id, 'user matches';
+ is $report->anonymous, 0, 'report not anonymous';
+};
+
+my @users;
+subtest "Body user, has permission to add report as another user" => sub {
+ my $report = add_report(
+ 'contribute_as_another_user',
+ form_as => 'another_user',
+ title => "Test Report",
+ detail => 'Test report details.',
+ category => 'Potholes',
+ name => 'Another User',
+ email => 'another@example.net',
+ );
+ is $report->name, 'Another User', 'report name is given name';
+ is $report->user->name, 'Another User', 'user name matches';
+ is $report->user->email, 'another@example.net', 'user email correct';
+ isnt $report->user->id, $user->id, 'user does not match';
+ like $mech->get_text_body_from_email, qr/Your report to Wiltshire Council has been logged/;
+ push @users, $report->user;
+};
+
+subtest "Body user, has permission to add report as another (existing) user" => sub {
+ $mech->create_user_ok('existing@example.net', name => 'Existing User');
+ my $report = add_report(
+ 'contribute_as_another_user',
+ form_as => 'another_user',
+ title => "Test Report",
+ detail => 'Test report details.',
+ category => 'Potholes',
+ name => 'Existing Yooser',
+ email => 'existing@example.net',
+ );
+ is $report->name, 'Existing Yooser', 'report name is given name';
+ is $report->user->name, 'Existing User', 'user name remains same';
+ is $report->user->email, 'existing@example.net', 'user email correct';
+ isnt $report->user->id, $user->id, 'user does not match';
+ like $mech->get_text_body_from_email, qr/Your report to Wiltshire Council has been logged/;
+ push @users, $report->user;
+};
+
+subtest "Body user, has permission to add update as council" => sub {
+ my $update = add_update(
+ 'contribute_as_body',
+ form_as => 'body',
+ update => 'Test Update',
+ );
+ is $update->name, 'Wiltshire Council', 'update name is body';
+ is $update->user->name, 'Body User', 'user name unchanged';
+ is $update->user->id, $user->id, 'user matches';
+ is $update->anonymous, 0, 'update not anonymous';
+};
+
+subtest "Body user, has permission to add update as another user" => sub {
+ my $update = add_update(
+ 'contribute_as_another_user',
+ form_as => 'another_user',
+ update => 'Test Update',
+ name => 'Another User',
+ rznvy => 'another2@example.net',
+ );
+ is $update->name, 'Another User', 'update name is given name';
+ is $update->user->name, 'Another User', 'user name matches';
+ is $update->user->email, 'another2@example.net', 'user email correct';
+ isnt $update->user->id, $user->id, 'user does not match';
+ like $mech->get_text_body_from_email, qr/Your update has been logged/;
+ push @users, $update->user;
+};
+
+subtest "Body user, has permission to add update as another (existing) user" => sub {
+ my $update = add_update(
+ 'contribute_as_another_user',
+ form_as => 'another_user',
+ update => 'Test Update',
+ name => 'Existing Yooser',
+ rznvy => 'existing@example.net',
+ );
+ is $update->name, 'Existing Yooser', 'update name is given name';
+ is $update->user->name, 'Existing User', 'user name remains same';
+ is $update->user->email, 'existing@example.net', 'user email correct';
+ isnt $update->user->id, $user->id, 'user does not match';
+ like $mech->get_text_body_from_email, qr/Your update has been logged/;
+};
+
+done_testing();
+
+END {
+ $mech->delete_body($body);
+ $mech->delete_user($_) for @users;
+}
+
+sub start_report {
+ my $permission = shift;
+ LWP::Protocol::PSGI->register(t::Mock::MapIt->run_if_script, host => 'mapit.uk');
+ $_->delete for $user->user_body_permissions;
+ $user->user_body_permissions->create({ body => $body, permission_type => $permission })
+ if $permission;
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => [ 'fixmystreet' ],
+ MAPIT_URL => 'http://mapit.uk/',
+ }, sub {
+ $mech->get_ok('/report/new?latitude=51.7549262252&longitude=-1.25617899435');
+ };
+}
+
+sub add_report {
+ my ($permission, %fields) = @_;
+ start_report($permission);
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => [ 'fixmystreet' ],
+ MAPIT_URL => 'http://mapit.uk/',
+ }, sub {
+ dropdown_shown(1);
+ $mech->submit_form_ok({
+ with_fields => \%fields,
+ }, "submit details");
+ };
+ $mech->content_contains('Thank you for reporting this issue');
+ my $report = FixMyStreet::DB->resultset("Problem")->search(undef, { order_by => { -desc => 'id' } })->first;
+ ok $report, "Found the report";
+ is $report->state, 'confirmed', "report is now confirmed";
+ return $report;
+}
+
+sub start_update {
+ my $permission = shift;
+ $_->delete for $user->user_body_permissions;
+ $user->user_body_permissions->create({ body => $body, permission_type => $permission })
+ if $permission;
+ $mech->get_ok('/report/' . $report_to_update->id);
+}
+
+sub add_update {
+ my ($permission, %fields) = @_;
+ start_update($permission);
+ dropdown_shown(1, 'updateForm');
+ $mech->submit_form_ok({
+ with_fields => \%fields,
+ }, "submit details");
+ $mech->content_contains('Thank you for updating this issue');
+ my $update = FixMyStreet::DB->resultset("Comment")->search(undef, { order_by => { -desc => 'id' } })->first;
+ ok $update, "Found the update";
+ is $update->state, 'confirmed', "update is now confirmed";
+ return $update;
+}
+
+sub dropdown_shown {
+ my ($shown, $name) = @_;
+ is grep({ $_ eq 'form_as' } keys %{$mech->visible_form_values($name)}), $shown, "Dropdown shown = $shown";
+}
+
diff --git a/templates/email/default/other-reported.html b/templates/email/default/other-reported.html
new file mode 100644
index 000000000..5435e735a
--- /dev/null
+++ b/templates/email/default/other-reported.html
@@ -0,0 +1,30 @@
+[%
+
+email_summary = "Thanks for logging your report";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box %]
+ <h1 style="[% h1_style %]">Your report has been&nbsp;logged</h1>
+ <p style="[% p_style %]">Your report to [% report.body %] has been logged on [% site_name %].
+[% IF c.cobrand.is_council && !c.cobrand.owns_problem( report ) %]
+Please note that [% c.cobrand.council_name %] is not responsible for this type
+of report, so it will instead be sent to [% report.body %].
+[% END %]
+ </p>
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.url %]">View my report</a>
+ </p>
+ [% end_padded_box %]
+</th>
+[% WRAPPER '_email_sidebar.html' object = report %]
+ <h2 style="[% h2_style %]">[% report.title | html %]</h2>
+ <p style="[% secondary_p_style %]">[% report.detail | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/default/other-reported.txt b/templates/email/default/other-reported.txt
new file mode 100644
index 000000000..b626e56d9
--- /dev/null
+++ b/templates/email/default/other-reported.txt
@@ -0,0 +1,27 @@
+Subject: Your report has been logged: [% report.title %]
+
+Hello [% report.name %],
+
+Your report to [% report.body %] has been logged on [% site_name %].
+
+[% IF c.cobrand.is_council && !c.cobrand.owns_problem( report ) %]
+Please note that [% c.cobrand.council_name %] is not responsible for this type
+of report, so it will instead be sent to [% report.body %].
+[% END %]
+
+It is available to view at:
+
+[% cobrand.base_url_for_report(report) %][% report.url %]
+
+Your report has the title:
+
+[% report.title %]
+
+And details:
+
+[% report.detail %]
+
+[% INCLUDE 'signature.txt' %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/default/other-updated.html b/templates/email/default/other-updated.html
new file mode 100644
index 000000000..fbae37268
--- /dev/null
+++ b/templates/email/default/other-updated.html
@@ -0,0 +1,26 @@
+[%
+
+email_summary = "Thanks for logging your update";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box %]
+ <h1 style="[% h1_style %]">Your update has been&nbsp;logged</h1>
+ <p style="[% p_style %]">Your update has been logged on [% site_name %]:</p>
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(problem) %][% problem.url %]#update_[% update.id %]">View my update</a>
+ </p>
+ [% end_padded_box %]
+</th>
+[% WRAPPER '_email_sidebar.html'
+ object = update
+ report = problem %]
+ <p style="[% secondary_p_style %]">[% update.text | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/default/other-updated.txt b/templates/email/default/other-updated.txt
new file mode 100644
index 000000000..4900f6c29
--- /dev/null
+++ b/templates/email/default/other-updated.txt
@@ -0,0 +1,16 @@
+Subject: Your update has been logged
+
+Hello [% update.name %],
+
+Your update has been logged on [% site_name %]:
+
+[% cobrand.base_url_for_report(problem) %][% problem.url %]#update_[% update.id %]
+
+Your update reads:
+
+[% update.text %]
+
+[% INCLUDE 'signature.txt' %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/web/base/report/new/form_user_loggedin.html b/templates/web/base/report/new/form_user_loggedin.html
index 75ff76204..79b8d866e 100644
--- a/templates/web/base/report/new/form_user_loggedin.html
+++ b/templates/web/base/report/new/form_user_loggedin.html
@@ -1,7 +1,29 @@
<div class="form-box" id="form-box--logged-in-name">
- <label for="form_email">[% loc('Your email') %]</label>
- <input disabled type="text" value="[% c.user.email | html %]">
+ [% can_contribute_as_another_user = c.user.has_permission_to("contribute_as_another_user", bodies.keys.join(",")) %]
+ [% can_contribute_as_body = c.user.from_body AND c.user.has_permission_to("contribute_as_body", bodies.keys.join(",")) %]
+
+ [% IF can_contribute_as_another_user OR can_contribute_as_body %]
+ <label for="form_as">[% loc('Report as') %]</label>
+ <select id="form_as" class="js-contribute-as" name="form_as">
+ <option value="myself" selected>[% loc('Yourself') %]</option>
+ [% IF can_contribute_as_another_user %]
+ <option value="another_user">[% loc('Another user') %]</option>
+ [% END %]
+ [% IF can_contribute_as_body %]
+ <option value="body">[% c.user.from_body.name %]</option>
+ [% END %]
+ </select>
+ [% END %]
+
+ <label for="form_email">[% loc('Email address') %]</label>
+ <input id="form_email"
+ [%- IF can_contribute_as_another_user OR can_contribute_as_body -%]
+ name="email"
+ [%- ELSE -%]
+ disabled
+ [%- END -%]
+ type="text" value="[% c.user.email | html %]">
[% INCLUDE 'report/new/extra_name.html' %]
[% PROCESS 'user/_anonymity.html' anonymous = report.anonymous %]
@@ -15,7 +37,7 @@
[% IF field_errors.name %]
<p class='form-error'>[% field_errors.name %]</p>
[% END %]
- <input type="text" class="validName" value="[% report.name | html %]" name="name" id="form_name" placeholder="[% loc('Your name') %]">
+ <input type="text" class="validName" value="[% report.name | html %]" name="name" id="form_name">
[%# if there is nothing in the name field then set check box as default on form %]
<div class="checkbox-group">
@@ -24,7 +46,7 @@
</div>
<label for="form_phone">[% loc('Phone number (optional)') %]</label>
- <input class="" type="text" value="[% report.user.phone | html %]" name="phone" id="form_phone" placeholder="[% loc('Your phone number') %]">
+ <input class="" type="text" value="[% report.user.phone | html %]" name="phone" id="form_phone">
<div class="general-notes">
<p>[% loc('We never show your email address or phone number.') %]</p>
diff --git a/templates/web/base/report/update/form_name.html b/templates/web/base/report/update/form_name.html
index 4cb3e516c..e65ab1790 100644
--- a/templates/web/base/report/update/form_name.html
+++ b/templates/web/base/report/update/form_name.html
@@ -2,6 +2,24 @@
[% PROCESS 'user/_anonymity.html' anonymous = update.anonymous %]
+ [% can_contribute_as_another_user = c.user.has_permission_to("contribute_as_another_user", problem.bodies_str) %]
+ [% can_contribute_as_body = c.user.from_body AND c.user.has_permission_to("contribute_as_body", problem.bodies_str) %]
+
+ [% IF can_contribute_as_another_user OR can_contribute_as_body %]
+ <label for="form_as">[% loc('Provide update as') %]</label>
+ <select id="form_as" class="js-contribute-as" name="form_as">
+ <option value="myself" selected>[% loc('Yourself') %]</option>
+ [% IF can_contribute_as_another_user %]
+ <option value="another_user">[% loc('Another user') %]</option>
+ [% END %]
+ [% IF can_contribute_as_body %]
+ <option value="body">[% c.user.from_body.name %]</option>
+ [% END %]
+ </select>
+ <label for="form_email">[% loc('Email address') %]</label>
+ <input name="rznvy" id="form_email" type="text" value="[% c.user.email | html %]">
+ [% END %]
+
<label for="form_name">[% loc('Name') %]</label>
[% IF field_errors.name %]
<p class='form-error'>[% field_errors.name %]</p>
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index acdfc869d..52f098b07 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -397,6 +397,34 @@ $.extend(fixmystreet.set_up, {
$('#mapForm').removeAttr('novalidate');
},
+ contribute_as: function() {
+ $('.js-contribute-as').on('change', function(){
+ var opt = this.options[this.selectedIndex],
+ val = opt.value,
+ txt = opt.text;
+ var $emailInput = $('#form_email');
+ var $nameInput = $('#form_name');
+ var $showNameCheckbox = $('#form_may_show_name');
+ var $addAlertCheckbox = $('#form_add_alert');
+ if (val === 'myself') {
+ $emailInput.val($emailInput.prop('defaultValue')).prop('disabled', true);
+ $nameInput.val($nameInput.prop('defaultValue')).prop('disabled', false);
+ $showNameCheckbox.prop('checked', false).prop('disabled', false);
+ $addAlertCheckbox.prop('checked', true).prop('disabled', false);
+ } else if (val === 'another_user') {
+ $emailInput.val('').prop('disabled', false);
+ $nameInput.val('').prop('disabled', false);
+ $showNameCheckbox.prop('checked', false).prop('disabled', false);
+ $addAlertCheckbox.prop('checked', true).prop('disabled', false);
+ } else if (val === 'body') {
+ $emailInput.val('-').prop('disabled', true);
+ $nameInput.val(txt).prop('disabled', true);
+ $showNameCheckbox.prop('checked', true).prop('disabled', true);
+ $addAlertCheckbox.prop('checked', false).prop('disabled', true);
+ }
+ }).change();
+ },
+
on_resize: function() {
var last_type;
$(window).on('resize', function() {