diff options
| -rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 46 | ||||
| -rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/Update.pm | 39 | ||||
| -rw-r--r-- | perllib/FixMyStreet/DB/Result/User.pm | 8 | ||||
| -rw-r--r-- | perllib/FixMyStreet/TestMech.pm | 1 | ||||
| -rw-r--r-- | t/app/controller/report_as_other.t | 194 | ||||
| -rw-r--r-- | templates/email/default/other-reported.html | 30 | ||||
| -rw-r--r-- | templates/email/default/other-reported.txt | 27 | ||||
| -rw-r--r-- | templates/email/default/other-updated.html | 26 | ||||
| -rw-r--r-- | templates/email/default/other-updated.txt | 16 | ||||
| -rw-r--r-- | templates/web/base/report/new/form_user_loggedin.html | 30 | ||||
| -rw-r--r-- | templates/web/base/report/update/form_name.html | 18 | ||||
| -rw-r--r-- | web/cobrands/fixmystreet/fixmystreet.js | 34 | 
12 files changed, 453 insertions, 16 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 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 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..ba93a6995 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() { @@ -923,7 +951,11 @@ fixmystreet.display = {              fixmystreet.set_up.map_controls();              $('.js-back-to-report-list').attr('href', location.href); -            $sideReport.find('#key-tool-problems-nearby').addClass('js-back-to-report-list'); +            // Problems nearby should act the same as 'Back to all reports' on around, +            // but on /my and /reports should go to that around page. +            if (fixmystreet.original.page == 'around') { +                $sideReport.find('#key-tool-problems-nearby').addClass('js-back-to-report-list'); +            }              fixmystreet.set_up.map_sidebar_key_tools();              fixmystreet.set_up.form_validation();              fixmystreet.set_up.email_login_form();  | 
