diff options
author | M Somerville <matthew-github@dracos.co.uk> | 2020-09-30 20:04:05 +0100 |
---|---|---|
committer | M Somerville <matthew-github@dracos.co.uk> | 2020-09-30 20:04:05 +0100 |
commit | 3a511f5facc4bd066f0e7e4d00060979686bb766 (patch) | |
tree | 9438a2b3de8f2784e9ee588bb8b4b871f152213e | |
parent | b6fb09db4ff31aba28833b9e735e6c92ce9081c7 (diff) | |
parent | 2abe443efb8bbbd7cf3048eec271fd28a777932f (diff) |
Merge branch 'improved-email-phone-in-form'
27 files changed, 364 insertions, 173 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e158da8f..083c9d935 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Add aerial maps option to Bing and OSM maps. - Select matches for both filter category and group. #3110 - Add an extra zoom level to most map types. #3130 + - Improve new report form when using phone verification. - Changes: - Mark user as active when sent an email alert. - Bugfixes: diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index e7b4d70a7..d676e2856 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -6,7 +6,7 @@ BEGIN { extends 'Catalyst::Controller'; } use utf8; use Encode; -use List::Util qw(first uniq); +use List::Util qw(uniq); use HTML::Entities; use Path::Class; use Utils; @@ -126,8 +126,10 @@ sub report_new_ajax : Path('mobile') : Args(0) { # Apps are sending email as username # Prepare for when they upgrade - if (!$c->get_param('username')) { - $c->set_param('username', $c->get_param('email')); + my $username_field = ( $c->get_param('submit_sign_in') || $c->get_param('password_sign_in') ) + ? 'username': 'username_register'; + if (!$c->get_param($username_field)) { + $c->set_param($username_field, $c->get_param('email')); } # create the report - loading a partial if available @@ -844,10 +846,16 @@ sub process_user : Private { # Extract all the params to a hash to make them easier to work with my %params = map { $_ => $c->get_param($_) } - ( 'email', 'name', 'phone', 'password_register', 'fms_extra_title' ); + qw( email name phone password_register fms_extra_title update_method ); - # Report form includes two username fields: #form_username_register and #form_username_sign_in - $params{username} = (first { $_ } $c->get_param_list('username')) || ''; + if ($c->user_exists) { + $params{username} = $c->get_param('username'); + } elsif ($c->get_param('submit_sign_in') || $c->get_param('password_sign_in')) { + $params{username} = $c->get_param('username'); + } else { + $params{username} = $c->get_param('username_register'); + } + $params{username} ||= ''; my $anon_button = $c->cobrand->allow_anonymous_reports eq 'button' && $c->get_param('report_anonymously'); my $anon_fallback = $c->cobrand->allow_anonymous_reports eq '1' && !$c->user_exists && !$params{username}; @@ -898,11 +906,24 @@ sub process_user : Private { $params{username} = $params{phone}; } + # Code to deal with SMS being switched on and so the user being asked to + # pick a method and no username field + if (!$params{username} && !$params{update_method}) { + $c->stash->{field_errors}->{update_method} = _('Please pick your update preference'); + } + if (!$params{username} && $params{update_method}) { + if ($params{update_method} eq 'phone') { + $params{username} = $params{phone}; + } else { + $params{username} = $params{email}; + } + $c->stash->{update_method} = $params{update_method}; + } + my $parsed = FixMyStreet::SMS->parse_username($params{username}); my $type = $parsed->{type} || 'email'; $type = 'email' unless FixMyStreet->config('SMS_AUTHENTICATION') || $c->stash->{contributing_as_another_user}; - $report->user( $c->model('DB::User')->find_or_new( { $type => $parsed->{username} } ) ) - unless $report->user; + $report->user( $c->model('DB::User')->find_or_new( { $type => $parsed->{username} } ) ); $c->stash->{phone_may_be_mobile} = $type eq 'phone' && $parsed->{may_be_mobile}; @@ -1235,6 +1256,7 @@ sub check_for_errors : Private { # if using social login then we don't care about other errors $c->stash->{is_social_user} = $c->get_param('social_sign_in') ? 1 : 0; if ( $c->stash->{is_social_user} ) { + delete $field_errors{update_method}; delete $field_errors{name}; delete $field_errors{username}; } @@ -1250,6 +1272,16 @@ sub check_for_errors : Private { $field_errors{photo} = $photo_error; } + # Now assign the username error according to where it came from + if ($field_errors{username}) { + if ($c->get_param('submit_sign_in') || $c->get_param('password_sign_in')) { + $field_errors{username_sign_in} = $field_errors{username}; + } else { + $field_errors{username_register} = $field_errors{username}; + } + delete $field_errors{username}; + } + # all good if no errors return 1 unless scalar keys %field_errors || $c->stash->{login_success}; @@ -1308,6 +1340,11 @@ sub send_problem_confirm_text : Private { $data->{id} = $report->id; $c->forward('/auth/phone/send_token', [ $data, 'problem', $report->user->phone ]); + my $error = $c->render_fragment( 'auth/_username_error.html', { default => 'phone' }); + if ($error) { + $c->stash->{field_errors}{phone} = $error; + $c->forward('generate_map'); + } $c->stash->{submit_url} = '/report/new/text'; } diff --git a/perllib/FixMyStreet/App/Controller/Report/Update.pm b/perllib/FixMyStreet/App/Controller/Report/Update.pm index 8ffba3dcf..2acafc654 100644 --- a/perllib/FixMyStreet/App/Controller/Report/Update.pm +++ b/perllib/FixMyStreet/App/Controller/Report/Update.pm @@ -6,7 +6,6 @@ BEGIN { extends 'Catalyst::Controller'; } use utf8; use Path::Class; -use List::Util 'first'; use Utils; =head1 NAME @@ -103,8 +102,14 @@ sub process_user : Private { my %params = map { $_ => $c->get_param($_) } ( 'name', 'password_register', 'fms_extra_title' ); - # Update form includes two username fields: #form_username_register and #form_username_sign_in - $params{username} = (first { $_ } $c->get_param_list('username')) || ''; + if ($c->user_exists) { + $params{username} = $c->get_param('username'); + } elsif ($c->get_param('submit_sign_in') || $c->get_param('password_sign_in')) { + $params{username} = $c->get_param('username'); + } else { + $params{username} = $c->get_param('username_register'); + } + $params{username} ||= ''; my $anon_button = $c->cobrand->allow_anonymous_reports eq 'button' && $c->get_param('report_anonymously'); if ($anon_button) { @@ -145,8 +150,7 @@ sub process_user : Private { my $parsed = FixMyStreet::SMS->parse_username($params{username}); my $type = $parsed->{type} || 'email'; $type = 'email' unless FixMyStreet->config('SMS_AUTHENTICATION') || $c->stash->{contributing_as_another_user}; - $update->user( $c->model('DB::User')->find_or_new( { $type => $parsed->{username} } ) ) - unless $update->user; + $update->user( $c->model('DB::User')->find_or_new( { $type => $parsed->{username} } ) ); $c->stash->{phone_may_be_mobile} = $type eq 'phone' && $parsed->{may_be_mobile}; @@ -404,6 +408,16 @@ sub check_for_errors : Private { $field_errors{photo} = $photo_error; } + # Now assign the username error according to where it came from + if ($field_errors{username}) { + if ($c->get_param('submit_sign_in') || $c->get_param('password_sign_in')) { + $field_errors{username_sign_in} = $field_errors{username}; + } else { + $field_errors{username_register} = $field_errors{username}; + } + delete $field_errors{username}; + } + # all good if no errors return 1 unless ( scalar keys %field_errors @@ -578,6 +592,11 @@ sub send_confirmation_text : Private { my ( $self, $c ) = @_; my $update = $c->stash->{update}; $c->forward('/auth/phone/send_token', [ $c->stash->{token_data}, 'comment', $update->user->phone ]); + my $error = $c->render_fragment( 'auth/_username_error.html', { default => 'phone' }); + if ($error) { + $c->stash->{field_errors}{username_register} = $error; + $c->go( '/report/display', [ $c->stash->{problem}->id ], [] ); + } $c->stash->{submit_url} = '/report/update/text'; } diff --git a/t/app/controller/auth_social.t b/t/app/controller/auth_social.t index 1f6889dcc..9d1ea836f 100644 --- a/t/app/controller/auth_social.t +++ b/t/app/controller/auth_social.t @@ -241,7 +241,8 @@ for my $state ( 'refused', 'no email', 'existing UID', 'okay' ) { $mech->content_contains('We need your email address, please give it below.'); # We don't have an email, so check that we can still submit it, # and the ID carries through the confirmation - $fields->{username} = $test->{email}; + $fields->{username} = $test->{email} if $page eq 'my'; + $fields->{username_register} = $test->{email} unless $page eq 'my'; $fields->{name} = 'Ffion Tester' unless $page eq 'my'; $mech->submit_form(with_fields => $fields, $page eq 'my' ? (button => 'sign_in_by_code') : ()); $mech->content_contains('Nearly done! Now check your email'); @@ -408,7 +409,8 @@ for my $tw_state ( 'refused', 'existing UID', 'no email' ) { $mech->content_contains('We need your email address, please give it below.'); # We don't have an email, so check that we can still submit it, # and the ID carries through the confirmation - $fields->{username} = $tw_email; + $fields->{username_register} = $tw_email unless $page eq 'my'; + $fields->{username} = $tw_email if $page eq 'my'; $fields->{name} = 'Ffion Tester' unless $page eq 'my'; $mech->submit_form(with_fields => $fields, $page eq 'my' ? (button => 'sign_in_by_code') : ()); $mech->content_contains('Nearly done! Now check your email'); diff --git a/t/app/controller/contact_enquiry.t b/t/app/controller/contact_enquiry.t index feb2a0545..f1b5b15cd 100644 --- a/t/app/controller/contact_enquiry.t +++ b/t/app/controller/contact_enquiry.t @@ -80,7 +80,7 @@ FixMyStreet::override_config { $mech->submit_form_ok( { with_fields => { name => 'Test User', - username => 'testuser@example.org', + username_register => 'testuser@example.org', category => 'Other', detail => 'This is a general enquiry', } @@ -149,7 +149,7 @@ FixMyStreet::override_config { $mech->submit_form_ok( { with_fields => { name => 'Simon Neil', - username => $user->email, + username_register => $user->email, category => 'General Enquiry', detail => 'This is a general enquiry', } @@ -212,7 +212,7 @@ FixMyStreet::override_config { submit_problem => 1, token => $csrf, name => 'Test User', - username => 'testuser@example.org', + username_register => 'testuser@example.org', category => 'Other', detail => encode_utf8('This is a general enquiry‽'), photo1 => [ $sample_jpeg, undef, Content_Type => 'image/jpeg' ], diff --git a/t/app/controller/report_display.t b/t/app/controller/report_display.t index 4bd0fc991..00c7bf19b 100644 --- a/t/app/controller/report_display.t +++ b/t/app/controller/report_display.t @@ -109,7 +109,7 @@ subtest "test a good report" => sub { my %fields = ( name => '', - username => '', + username_register => '', update => '', add_alert => 1, # defaults to true fixed => undef diff --git a/t/app/controller/report_import.t b/t/app/controller/report_import.t index b2e15330a..7b5ede7a9 100644 --- a/t/app/controller/report_import.t +++ b/t/app/controller/report_import.t @@ -376,7 +376,7 @@ subtest "Submit a correct entry (with location) to cobrand" => sub { photo2 => '', photo3 => '', phone => '', - username => 'test-ll@example.com', + username_register => 'test-ll@example.com', }, "check imported fields are shown" or diag Dumper( $mech->visible_form_values ); use Data::Dumper; diff --git a/t/app/controller/report_new.t b/t/app/controller/report_new.t index 6af709c2c..b0c93c332 100644 --- a/t/app/controller/report_new.t +++ b/t/app/controller/report_new.t @@ -156,7 +156,7 @@ foreach my $test ( photo1 => '', name => 'Joe Bloggs', may_show_name => '1', - username => 'test-1@example.com', + username_register => 'test-1@example.com', phone => '07903 123 456', category => 'Street lighting', password_register => $test->{password} ? 'secret' : '', @@ -680,7 +680,7 @@ subtest "test report creation for a category that is non public" => sub { title => 'Test Report', detail => 'Test report details.', photo1 => '', - username => $user->email, + username_register => $user->email, name => 'Joe Bloggs', category => 'Street lighting', } @@ -940,7 +940,7 @@ for my $test ( title => "Test Report", detail => 'Test report details.', photo1 => '', - username => 'firstlast@example.com', + username_register => 'firstlast@example.com', may_show_name => '1', phone => '07903 123 456', category => 'Trees', @@ -1085,7 +1085,7 @@ subtest "test Hart" => sub { $mech->submit_form_ok( { with_fields => { pc => 'GU51 4AE' } }, "submit location" ); $mech->follow_link_ok( { text_regex => qr/skip this step/i, }, "follow 'skip this step' link" ); my %optional_fields = $test->{confirm} ? () : - ( username => $test_email, phone => '07903 123 456' ); + ( username_register => $test_email, phone => '07903 123 456' ); # we do this as otherwise test::www::mechanize::catalyst # goes to the value set in ->host above irregardless and @@ -1279,7 +1279,7 @@ subtest "extra google analytics code displayed on email confirmation problem cre title => "Test Report", detail => 'Test report details.', photo1 => '', - username => 'firstlast@example.com', + username_register => 'firstlast@example.com', name => 'Test User', may_show_name => '1', phone => '07903 123 456', diff --git a/t/app/controller/report_new_errors.t b/t/app/controller/report_new_errors.t index f45f13c1e..470cb7d79 100644 --- a/t/app/controller/report_new_errors.t +++ b/t/app/controller/report_new_errors.t @@ -112,6 +112,7 @@ foreach my $test ( photo3 => '', name => '', may_show_name => '1', + username_register => '', username => '', phone => '', password_sign_in => '', @@ -137,6 +138,7 @@ foreach my $test ( photo3 => '', name => '', may_show_name => '1', + username_register => '', username => '', phone => '', category => 'Something bad', @@ -165,6 +167,7 @@ foreach my $test ( photo3 => '', name => '', may_show_name => '1', + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -190,6 +193,7 @@ foreach my $test ( photo3 => '', name => '', may_show_name => undef, + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -215,6 +219,7 @@ foreach my $test ( photo3 => '', name => 'Bob Jones', may_show_name => undef, + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -239,6 +244,7 @@ foreach my $test ( photo3 => '', name => 'Bob Jones', may_show_name => '1', + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -263,6 +269,7 @@ foreach my $test ( photo3 => '', name => 'Bob Jones', may_show_name => '1', + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -287,6 +294,7 @@ foreach my $test ( photo3 => '', name => 'DUDE', may_show_name => '1', + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -310,6 +318,7 @@ foreach my $test ( photo3 => '', name => 'anonymous', may_show_name => '1', + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -333,13 +342,14 @@ foreach my $test ( photo3 => '', name => 'Joe Smith', may_show_name => '1', - username => 'not an email', + username_register => 'not an email', + username => '', phone => '', category => 'Street lighting', password_sign_in => '', password_register => '', }, - changes => { username => 'notanemail' }, + changes => {}, errors => [ 'Please enter a valid email', ], }, { @@ -353,6 +363,7 @@ foreach my $test ( photo3 => '', name => '', may_show_name => '1', + username_register => '', username => '', phone => '', category => 'Street lighting', @@ -379,7 +390,8 @@ foreach my $test ( photo3 => '', name => ' Bob Jones ', may_show_name => '1', - username => ' BOB @ExAmplE.COM ', + username_register => ' BOB @ExAmplE.COM ', + username => '', phone => '', category => 'Street lighting', password_sign_in => '', @@ -387,7 +399,6 @@ foreach my $test ( }, changes => { name => 'Bob Jones', - username => 'bob@example.com', }, errors => [ 'Please enter a subject', 'Please enter some details', ], }, @@ -402,7 +413,8 @@ foreach my $test ( photo3 => '', name => 'Bob Jones', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '', category => 'Street lighting', password_sign_in => '', @@ -424,7 +436,8 @@ foreach my $test ( photo3 => '', name => 'Bob Jones', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '', category => 'Street lighting', password_sign_in => '', @@ -446,7 +459,8 @@ foreach my $test ( photo3 => '', name => 'Bob Jones', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '', category => 'Street lighting', password_sign_in => '', @@ -468,14 +482,14 @@ foreach my $test ( photo3 => '', name => 'Joe Smith', may_show_name => '1', - username => 'user@example.com', + username_register => 'user@example.com', + username => '', phone => '', category => 'Street lighting', password_sign_in => '', password_register => '', }, changes => { - username => 'user@example.com', title => 'User@example.com' }, errors => [ 'Please make sure you are not including an email address', ], @@ -492,7 +506,8 @@ foreach my $test ( photo3 => '', name => 'Bob Example', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '', category => 'Trees', password_sign_in => '', @@ -512,7 +527,8 @@ foreach my $test ( photo3 => '', name => 'Bob Example', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '', category => 'Trees', password_sign_in => '', @@ -532,7 +548,8 @@ foreach my $test ( photo3 => '', name => 'Bob Example', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '123456789 12345678910', category => 'Trees', password_sign_in => '', @@ -552,7 +569,8 @@ foreach my $test ( photo3 => '', name => 'This is a very long name that should fail validation', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '', category => 'Street lighting', password_sign_in => '', @@ -572,7 +590,8 @@ foreach my $test ( photo3 => '', name => 'This is a very long name that should fail validation', may_show_name => '1', - username => 'bob@example.com', + username_register => 'bob@example.com', + username => '', phone => '', category => 'Trees', password_sign_in => '', @@ -592,7 +611,8 @@ foreach my $test ( photo3 => '', name => 'This is a really extraordinarily long name that definitely should fail validation', may_show_name => '1', - username => 'bob.has.a.very.long.email@thisisalonghostname.example.com', + username_register => 'bob.has.a.very.long.email@thisisalonghostname.example.com', + username => '', phone => '01234 5678910 09876 54321 ext 203', category => 'Trees', password_sign_in => '', @@ -612,7 +632,8 @@ foreach my $test ( photo3 => '', name => 'A User', may_show_name => '1', - username => 'user@example.org', + username_register => 'user@example.org', + username => '', phone => '', category => 'Trees', password_sign_in => '', @@ -632,7 +653,8 @@ foreach my $test ( photo3 => '', name => 'A User', may_show_name => '1', - username => 'user@example.org', + username_register => 'user@example.org', + username => '', phone => '', category => 'Trees', password_sign_in => '', @@ -702,6 +724,26 @@ subtest "test password errors for a user who is signing in as they report" => su title => 'Test Report', detail => 'Test report details.', photo1 => '', + username => 'test-2', + password_sign_in => 'secret1', + category => 'Street lighting', + } + }, + "submit with wrong password" + ); + + is_deeply $mech->page_errors, [ + "Please enter a valid email", + "There was a problem with your login information. If you cannot remember your password, or do not have one, please fill in the \x{2018}No\x{2019} section of the form.", + ], "check there were errors"; + + $mech->submit_form_ok( + { + button => 'submit_sign_in', + with_fields => { + title => 'Test Report', + detail => 'Test report details.', + photo1 => '', username => 'test-2@example.com', password_sign_in => 'secret1', category => 'Street lighting', diff --git a/t/app/controller/report_new_open311.t b/t/app/controller/report_new_open311.t index 7cd6dca09..ebbb06567 100644 --- a/t/app/controller/report_new_open311.t +++ b/t/app/controller/report_new_open311.t @@ -108,7 +108,8 @@ my $empty_form = { photo3 => '', name => '', may_show_name => '1', - username => '', + username_register => '', + username => '', phone => '', category => '', password_sign_in => '', @@ -130,14 +131,14 @@ foreach my $test ( 'This information is required', 'Please enter a subject', 'Please enter some details', - 'Please enter your email', 'Please enter your name', + 'Please enter your email', ], submit_with => { title => 'test', detail => 'test detail', name => 'Test User', - username => 'testopen311@example.com', + username_register => 'testopen311@example.com', category => 'Street lighting', number => 27, type => 'old', @@ -170,14 +171,14 @@ foreach my $test ( 'This information is required', 'Please enter a subject', 'Please enter some details', - 'Please enter your email', 'Please enter your name', + 'Please enter your email', ], submit_with => { title => 'test', detail => 'test detail', name => 'Test User', - username => 'testopen311@example.com', + username_register => 'testopen311@example.com', size => 'big', colour => 'red', }, @@ -201,7 +202,7 @@ foreach my $test ( $mech->clear_emails_ok; # check that the user does not exist - my $test_email = $test->{submit_with}->{username}; + my $test_email = $test->{submit_with}->{username_register}; my $user = FixMyStreet::DB->resultset('User')->find( { email => $test_email } ); if ( $user ) { $user->problems->delete; @@ -452,7 +453,7 @@ subtest "Category extras includes form disabling string" => sub { # Test submission of whole form, switching back to a blocked category at the same time $mech->submit_form_ok({ with_fields => { category => 'Pothole', title => 'Title', detail => 'Detail', - username => 'testing@example.org', name => 'Testing Example', + username_register => 'testing@example.org', name => 'Testing Example', } }); $mech->content_contains('<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">'); $mech->content_contains('Please ring us!'); diff --git a/t/app/controller/report_new_text.t b/t/app/controller/report_new_text.t index 852cdac76..fa012c6ae 100644 --- a/t/app/controller/report_new_text.t +++ b/t/app/controller/report_new_text.t @@ -15,20 +15,46 @@ $mech->create_contact_ok( body_id => $body->id, category => 'Street lighting', e $mech->create_contact_ok( body_id => $body->id, category => 'Trees', email => 'trees@example.com' ); # test that phone number validation works okay +my %defaults = ( + title => 'Title', detail => 'Detail', name => 'Bob Jones', + category => 'Street lighting', may_show_name => 1, + photo1 => '', photo2 => '', photo3 => '', + password_register => '', password_sign_in => '', +); foreach my $test ( { + msg => 'missing update method', + pc => 'EH1 1BB', + fields => { + update_method => undef, phone => '', email => '', + %defaults, + }, + changes => { + username => '', + }, + errors => [ 'Please enter your email', 'Please pick your update preference' ], + }, + { + msg => 'email method', + pc => 'EH1 1BB', + fields => { + update_method => 'email', phone => '', email => 'bademail', + %defaults, + }, + changes => { + username => '', + }, + errors => [ 'Please enter a valid email' ], + }, + { msg => 'invalid number', pc => 'EH1 1BB', fields => { - username => '0121 4960000000', email => '', phone => '', - title => 'Title', detail => 'Detail', name => 'Bob Jones', - category => 'Street lighting', - may_show_name => '1', - photo1 => '', photo2 => '', photo3 => '', - password_register => '', password_sign_in => '', + update_method => 'phone', phone => '0121 4960000000', email => '', + %defaults, }, changes => { - username => '01214960000000', + username => '', phone => '01214960000000', }, errors => [ 'Please check your phone number is correct' ], @@ -37,19 +63,28 @@ foreach my $test ( msg => 'landline number', pc => 'EH1 1BB', fields => { - username => '0121 4960000', email => '', phone => '', - title => 'Title', detail => 'Detail', name => 'Bob Jones', - category => 'Street lighting', - may_show_name => '1', - photo1 => '', photo2 => '', photo3 => '', - password_register => '', password_sign_in => '', + update_method => 'phone', phone => '0121 4960000', email => '', + %defaults, }, changes => { - username => '0121 496 0000', + username => '', phone => '0121 496 0000', }, errors => [ 'Please enter a mobile number', ], }, + { + msg => 'number that fails', + pc => 'EH1 1BB', + fields => { + update_method => 'phone', phone => '+18165550101', email => '', + %defaults, + }, + changes => { + username => '', + phone => '+1 816-555-0101', + }, + errors => [ 'Sending a confirmation text failed: "Unable to send (21408)"' ], + }, ) { subtest "check form errors where $test->{msg}" => sub { @@ -60,6 +95,7 @@ foreach my $test ( MAPIT_URL => 'http://mapit.uk/', SMS_AUTHENTICATION => 1, PHONE_COUNTRY => 'GB', + TWILIO_ACCOUNT_SID => 'AC123', }, sub { $mech->submit_form_ok( { with_fields => { pc => $test->{pc} } }, "submit location" ); @@ -142,7 +178,8 @@ foreach my $test ( title => 'Test Report', detail => 'Test report details.', photo1 => '', name => 'Joe Bloggs', may_show_name => '1', - username => $test_phone, + update_method => 'phone', + phone => $test_phone, category => 'Street lighting', password_register => $test->{password} ? 'secret' : '', } diff --git a/t/app/controller/report_new_unresponsive.t b/t/app/controller/report_new_unresponsive.t index 033475c25..211f7198d 100644 --- a/t/app/controller/report_new_unresponsive.t +++ b/t/app/controller/report_new_unresponsive.t @@ -107,7 +107,7 @@ sub make_report { detail => 'Test report details.', photo1 => '', name => 'Joe Bloggs', - username => $user->email, + username_register => $user->email, may_show_name => '1', phone => '07903 123 456', category => 'Trees', diff --git a/t/app/controller/report_update_text.t b/t/app/controller/report_update_text.t index 52f221264..fbf5ca0c6 100644 --- a/t/app/controller/report_update_text.t +++ b/t/app/controller/report_update_text.t @@ -58,21 +58,25 @@ my $comment = FixMyStreet::DB->resultset('Comment')->find_or_create( { my $comment_id = $comment->id; ok $comment, "created test update - $comment_id"; +my %defaults = ( + username => '', + update => 'Update', + name => 'Name', + photo1 => '', + photo2 => '', + photo3 => '', + fixed => undef, + add_alert => 1, + may_show_name => undef, + password_sign_in => '', + password_register => '', +); for my $test ( { desc => 'Invalid phone', fields => { - username => '01214960000000', - update => 'Update', - name => 'Name', - photo1 => '', - photo2 => '', - photo3 => '', - fixed => undef, - add_alert => 1, - may_show_name => undef, - password_sign_in => '', - password_register => '', + username_register => '01214960000000', + %defaults, }, changes => {}, field_errors => [ 'Please check your phone number is correct' ] @@ -80,23 +84,21 @@ for my $test ( { desc => 'landline number', fields => { - username => '01214960000', - update => 'Update', - name => 'Name', - photo1 => '', - photo2 => '', - photo3 => '', - fixed => undef, - add_alert => 1, - may_show_name => undef, - password_register => '', - password_sign_in => '', - }, - changes => { - username => '0121 496 0000', + username_register => '01214960000', + %defaults, }, + changes => {}, field_errors => [ 'Please enter a mobile number' ] }, + { + desc => 'fails to send', + fields => { + username_register => '+18165550101', + %defaults, + }, + changes => {}, + field_errors => [ 'Sending a confirmation text failed: "Unable to send (21408)"' ] + }, ) { subtest "submit an update - $test->{desc}" => sub { @@ -104,6 +106,7 @@ for my $test ( FixMyStreet::override_config { SMS_AUTHENTICATION => 1, + TWILIO_ACCOUNT_SID => 'AC123', PHONE_COUNTRY => 'GB', }, sub { $mech->submit_form_ok( { with_fields => $test->{fields} }, 'submit update' ); @@ -126,7 +129,7 @@ for my $test ( desc => 'submit an update, unregistered, logged out', form_values => { submit_update => 1, - username => $test_phone, + username_register => $test_phone, update => 'Update from an unregistered user', add_alert => undef, name => 'Unreg User', @@ -137,7 +140,7 @@ for my $test ( desc => 'submit an update, unregistered, logged out, sign up for alerts', form_values => { submit_update => 1, - username => $test_phone, + username_register => $test_phone, update => 'Update from an unregistered user', add_alert => 1, name => 'Unreg User', @@ -149,7 +152,7 @@ for my $test ( registered => 1, form_values => { submit_update => 1, - username => $test_phone, + username_register => $test_phone, update => 'Update from a registered user', add_alert => undef, name => 'Reg User', @@ -194,7 +197,7 @@ for my $test ( ok $update, 'found update in database'; is $update->state, 'unconfirmed', 'update unconfirmed'; my $details = $test->{form_values}; - is $update->user->phone, $details->{username}, 'update phone'; + is $update->user->phone, $details->{username_register}, 'update phone'; is $update->user->phone_verified, 1; is $update->text, $details->{update}, 'update text'; is $add_alerts, $details->{add_alert} ? 1 : 0, 'do not sign up for alerts'; @@ -211,7 +214,7 @@ for my $test ( ok $user->check_password( 'new_secret' ), 'password changed'; is $user->name, 'Reg User', 'name changed'; } else { - $user = FixMyStreet::DB->resultset( 'User' )->find( { phone => $details->{username} } ); + $user = FixMyStreet::DB->resultset( 'User' )->find( { phone => $details->{username_register} } ); ok $user, 'found user'; } diff --git a/t/app/controller/report_updates.t b/t/app/controller/report_updates.t index 92cbed861..760a5a45b 100644 --- a/t/app/controller/report_updates.t +++ b/t/app/controller/report_updates.t @@ -272,7 +272,8 @@ for my $test ( { desc => 'No email, no message', fields => { - username => '', + username_register => '', + username => '', update => '', name => '', photo1 => '', @@ -285,12 +286,13 @@ for my $test ( password_sign_in => '', }, changes => {}, - field_errors => [ 'Please enter a message', 'Please enter your email', 'Please enter your name' ] + field_errors => [ 'Please enter a message', 'Please enter your name', 'Please enter your email' ] }, { desc => 'Invalid email, no message', fields => { - username => 'test', + username_register => 'test', + username => '', update => '', name => '', photo1 => '', @@ -303,12 +305,13 @@ for my $test ( password_register => '', }, changes => {}, - field_errors => [ 'Please enter a message', 'Please enter a valid email', 'Please enter your name' ] + field_errors => [ 'Please enter a message', 'Please enter your name', 'Please enter a valid email' ] }, { desc => 'email with spaces, no message', fields => { - username => 'test @ example. com', + username_register => 'test @ example. com', + username => '', update => '', name => '', photo1 => '', @@ -320,15 +323,14 @@ for my $test ( password_register => '', password_sign_in => '', }, - changes => { - username => 'test@example.com', - }, + changes => {}, field_errors => [ 'Please enter a message', 'Please enter your name' ] }, { desc => 'email with uppercase, no message', fields => { - username => 'test@EXAMPLE.COM', + username_register => 'test@EXAMPLE.COM', + username => '', update => '', name => '', photo1 => '', @@ -340,9 +342,7 @@ for my $test ( password_register => '', password_sign_in => '', }, - changes => { - username => 'test@example.com', - }, + changes => {}, field_errors => [ 'Please enter a message', 'Please enter your name' ] }, ) @@ -369,6 +369,7 @@ for my $test ( desc => 'submit an update for a non registered user', initial_values => { name => '', + username_register => '', username => '', may_show_name => undef, add_alert => 1, @@ -382,7 +383,7 @@ for my $test ( }, form_values => { submit_update => 1, - username => 'unregistered@example.com', + username_register => 'unregistered@example.com', update => 'Update from an unregistered user', add_alert => undef, name => 'Unreg User', @@ -394,6 +395,7 @@ for my $test ( desc => 'submit an update for a non registered user and sign up', initial_values => { name => '', + username_register => '', username => '', may_show_name => undef, add_alert => 1, @@ -407,7 +409,7 @@ for my $test ( }, form_values => { submit_update => 1, - username => 'unregistered@example.com', + username_register => 'unregistered@example.com', update => "update from an\r\n\r\nunregistered user", add_alert => 1, name => 'Unreg User', @@ -465,14 +467,14 @@ for my $test ( ok $update, 'found update in database'; is $update->state, 'unconfirmed', 'update unconfirmed'; - is $update->user->email, $details->{username}, 'update email'; + is $update->user->email, $details->{username_register}, 'update email'; is $update->text, $details->{update}, 'update text'; is $add_alerts, $details->{add_alert} ? 1 : 0, 'do not sign up for alerts'; $mech->get_ok( $url ); $mech->content_contains("/report/$report_id#update_$update_id"); - my $unreg_user = FixMyStreet::DB->resultset( 'User' )->find( { email => $details->{username} } ); + my $unreg_user = FixMyStreet::DB->resultset( 'User' )->find( { email => $details->{username_register} } ); ok $unreg_user, 'found user'; @@ -497,6 +499,7 @@ for my $test ( desc => 'overriding email confirmation allows report confirmation with no email sent', initial_values => { name => '', + username_register => '', username => '', may_show_name => undef, add_alert => 1, @@ -510,7 +513,7 @@ for my $test ( }, form_values => { submit_update => 1, - username => 'unregistered@example.com', + username_register => 'unregistered@example.com', update => "update no email confirm", add_alert => 1, name => 'Unreg User', @@ -562,10 +565,10 @@ for my $test ( ok $update, 'found update in database'; is $update->state, 'confirmed', 'update confirmed'; - is $update->user->email, $details->{username}, 'update email'; + is $update->user->email, $details->{username_register}, 'update email'; is $update->text, $details->{update}, 'update text'; - my $unreg_user = FixMyStreet::DB->resultset( 'User' )->find( { email => $details->{username} } ); + my $unreg_user = FixMyStreet::DB->resultset( 'User' )->find( { email => $details->{username_register} } ); ok $unreg_user, 'found user'; @@ -1223,6 +1226,21 @@ $report->comments->delete; for my $test ( { + desc => 'submit an update with bad email and password', + form_values => { + submit_update => 1, + username => 'registered@', + update => 'Update from a user', + add_alert => undef, + password_sign_in => 'secret', + }, + field_errors => [ + 'Please enter a valid email', + "There was a problem with your login information. If you cannot remember your password, or do not have one, please fill in the \x{2018}No\x{2019} section of the form.", + 'Please enter your name', # FIXME Not really necessary error + ], + }, + { desc => 'submit an update for a registered user, signing in with wrong password', form_values => { submit_update => 1, @@ -1308,7 +1326,7 @@ subtest 'submit an update for a registered user, creating update by email' => su $mech->submit_form_ok( { with_fields => { submit_update => 1, - username => $user->email, + username_register => $user->email, update => 'Update from a user', add_alert => undef, name => 'New Name', @@ -1757,7 +1775,7 @@ for my $test ( fields => { submit_update => 1, name => 'Test User', - username => $report->user->email, + username_register => $report->user->email, may_show_name => 1, update => 'update from owner', add_alert => undef, @@ -1779,7 +1797,7 @@ for my $test ( submit_update => 1, name => 'Test User', may_show_name => 1, - username => $report->user->email, + username_register => $report->user->email, update => 'update from owner', add_alert => undef, fixed => 1, @@ -1844,7 +1862,7 @@ for my $test ( my $update = $report->comments->first; ok $update, 'found update'; is $update->text, $results->{update}, 'update text'; - is $update->user->email, $test->{fields}->{username}, 'update user'; + is $update->user->email, $test->{fields}->{username_register}, 'update user'; is $update->state, 'unconfirmed', 'update confirmed'; is $update->anonymous, $test->{anonymous}, 'user anonymous'; diff --git a/t/cobrand/bromley.t b/t/cobrand/bromley.t index 6a7a60811..d26b10709 100644 --- a/t/cobrand/bromley.t +++ b/t/cobrand/bromley.t @@ -123,7 +123,7 @@ for my $test ( cobrand => 'bromley', fields => { submit_update => 1, - username => 'unregistered@example.com', + username_register => 'unregistered@example.com', update => 'Update from an unregistered user', add_alert => undef, first_name => 'Unreg', @@ -136,7 +136,7 @@ for my $test ( cobrand => 'fixmystreet', fields => { submit_update => 1, - username => 'unregistered@example.com', + username_register => 'unregistered@example.com', update => 'Update from an unregistered user', add_alert => undef, name => 'Unreg User', diff --git a/t/cobrand/form_extras.t b/t/cobrand/form_extras.t index 3807dd56a..72c725d75 100644 --- a/t/cobrand/form_extras.t +++ b/t/cobrand/form_extras.t @@ -41,7 +41,7 @@ FixMyStreet::override_config { detail => 'Test report details.', name => 'Joe Bloggs', may_show_name => '1', - username => 'test-1@example.com', + username_register => 'test-1@example.com', password_register => '', } }, diff --git a/t/cobrand/hackney.t b/t/cobrand/hackney.t index 6ab47a7ce..8022d562a 100644 --- a/t/cobrand/hackney.t +++ b/t/cobrand/hackney.t @@ -178,7 +178,7 @@ subtest "sends branded confirmation emails" => sub { detail => 'Test report details.', photo1 => '', name => 'Joe Bloggs', - username => 'test-1@example.com', + username_register => 'test-1@example.com', category => 'Roads', } }, diff --git a/t/cobrand/isleofwight.t b/t/cobrand/isleofwight.t index 303cdbc07..ad9017e26 100644 --- a/t/cobrand/isleofwight.t +++ b/t/cobrand/isleofwight.t @@ -481,7 +481,7 @@ subtest "sends branded confirmation emails" => sub { detail => 'Test report details.', photo1 => '', name => 'Joe Bloggs', - username => 'test-1@example.com', + username_register => 'test-1@example.com', category => 'Roads', } }, diff --git a/t/cobrand/zurich.t b/t/cobrand/zurich.t index 2992a37e7..c73bd01e1 100644 --- a/t/cobrand/zurich.t +++ b/t/cobrand/zurich.t @@ -907,7 +907,7 @@ subtest "photo must be supplied for categories that require it" => sub { $mech->get_ok('/report/new?lat=47.381817&lon=8.529156'); $mech->submit_form_ok({ with_fields => { detail => 'Problem-Bericht', - username => 'user@example.org', + username_register => 'user@example.org', category => 'Graffiti - photo required', }}); is $mech->res->code, 200, "missing photo shouldn't return anything but 200"; diff --git a/templates/web/base/contact/enquiry/index.html b/templates/web/base/contact/enquiry/index.html index 1180c08b4..b19c5181b 100644 --- a/templates/web/base/contact/enquiry/index.html +++ b/templates/web/base/contact/enquiry/index.html @@ -16,10 +16,10 @@ <input type="text" class="form-control required" name="name" id="form_name" value="[% ( form_name OR c.user.name ) | html %]" size="30"> <label for="form_email">[% loc('Your email') %]</label> - [% IF field_errors.username %] - <div class="form-error">[% field_errors.username %]</div> + [% IF field_errors.username_register %] + <div class="form-error">[% field_errors.username_register %]</div> [% END %] - <input type="text" class="form-control required email" name="username" id="form_email" [% "disabled" IF c.user.email %] value="[% ( email OR c.user.email ) | html %]" size="30"> + <input type="text" class="form-control required email" name="username_register" id="form_email" [% "disabled" IF c.user.email %] value="[% ( email OR c.user.email ) | html %]" size="30"> <div class="form-group"> <label for="form_phone">[% loc('Your phone number') %]</label> diff --git a/templates/web/base/report/form/user_loggedout_by_email.html b/templates/web/base/report/form/user_loggedout_by_email.html index 459428059..2e41deaea 100644 --- a/templates/web/base/report/form/user_loggedout_by_email.html +++ b/templates/web/base/report/form/user_loggedout_by_email.html @@ -7,15 +7,13 @@ [% INCLUDE 'report/form/user_name.html' %] [% INCLUDE 'report/_show_name_label.html' %] - [% IF type != 'update' %] - [% IF NOT c.cobrand.call_hook('disable_phone_number_entry') AND NOT c.config.SMS_AUTHENTICATION %] - <div id="js-hide-if-username-phone"> - <label for="form_phone">[% loc('Phone number (optional)') %]</label> - [% IF field_errors.phone %] - <p class='form-error'>[% field_errors.phone %]</p> - [% END %] - <input class="form-control" type="text" value="[% phone | html %]" name="phone" id="form_phone"> - </div> + [% IF type != 'update' AND NOT c.config.SMS_AUTHENTICATION %] + [% UNLESS c.cobrand.call_hook('disable_phone_number_entry') %] + <label for="form_phone">[% loc('Phone number (optional)') %]</label> + [% IF field_errors.phone %] + <p class='form-error'>[% field_errors.phone %]</p> + [% END %] + <input class="form-control" type="text" value="[% phone | html %]" name="phone" id="form_phone"> [% END %] [% END %] @@ -25,19 +23,44 @@ </div> [% END %] - [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' %] + [% IF type != 'update' AND c.config.SMS_AUTHENTICATION AND NOT c.cobrand.call_hook('disable_phone_number_entry') %] - [% IF type != 'update' AND c.config.SMS_AUTHENTICATION %] - [% UNLESS c.cobrand.call_hook('disable_phone_number_entry') %] - <div id="js-hide-if-username-phone" class="hidden-js"> - <label for="form_phone">[% loc('Phone number (optional)') %]</label> - <input class="form-control" type="text" value="[% phone | html %]" name="phone" id="form_phone"> - </div> + <fieldset> + <legend>How would you like to receive updates?</legend> + + [% IF field_errors.update_method %] + <p class='form-error'>[% field_errors.update_method %]</p> [% END %] - <div id="js-hide-if-username-email" class="hidden-js"> - <label for="form_email">[% loc('Email address (optional)') %]</label> - <input class="form-control" type="text" value="[% email | html %]" name="email" id="form_email"> - </div> + <p class="segmented-control segmented-control--radio"> + <input required type="radio" name="update_method" id="update_method_email" + data-show="#js-optional-phone" data-hide="#js-optional-email" + value="email"[% ' checked' IF update_method == 'email' %]> + <label class="btn" for="update_method_email">[% loc('Email') %]</label> + <input type="radio" name="update_method" id="update_method_phone" + data-show="#js-optional-email" data-hide="#js-optional-phone" + value="phone"[% ' checked' IF update_method == 'phone' %]> + <label class="btn" for="update_method_phone">[% loc('Phone') %]</label> + </p> + </fieldset> + + [% IF field_errors.username_register %] + <p class='form-error'>[% field_errors.username_register %]</p> + [% END %] + + <label for="form_email">[% loc('Your email') %]<span class="hidden-js" id="js-optional-email"> [% loc('(optional)') %]</span></label> + [% IF field_errors.email %] + <p class='form-error'>[% field_errors.email %]</p> + [% END %] + <input type="email" name="email" id="form_email" value="[% email %]" class="form-control"> + + <label for="form_phone">[% loc('Phone number') %]<span class="hidden-js" id="js-optional-phone"> [% loc('(optional)') %]</span></label> + [% IF field_errors.phone %] + <p class='form-error'>[% field_errors.phone %]</p> + [% END %] + <input class="form-control" type="text" value="[% phone %]" name="phone" id="form_phone"> + + [% ELSE %] + [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' %] [% END %] [% IF type == 'update' %] diff --git a/templates/web/base/report/form/user_loggedout_email.html b/templates/web/base/report/form/user_loggedout_email.html index 9f631987b..db3604d54 100644 --- a/templates/web/base/report/form/user_loggedout_email.html +++ b/templates/web/base/report/form/user_loggedout_email.html @@ -2,18 +2,17 @@ [% IF c.config.SMS_AUTHENTICATION %] [% SET username_label = loc('Your email or mobile') %] [% SET username_type = 'text' %] - [% SET username_value = object.user.username %] [% ELSE %] [% SET username_label = loc('Your email') %] [% SET username_type = 'email' %] - [% SET username_value = object.user.email %] [% END %] +[% SET username_field = (name == 'username_sign_in') ? 'username' : name ~%] <label for="form_[% name %]">[% username_label %]</label> -[% IF field_errors.username %] - <p class='form-error'>[% field_errors.username %]</p> +[% IF field_errors.$name %] + <p class='form-error'>[% field_errors.$name %]</p> [% END %] -<input type="[% username_type %]" name="username" id="form_[% name %]" - value="[% username_value | html %]" +<input type="[% username_type %]" name="[% username_field %]" id="form_[% name %]" + value="[% c.get_param(username_field) %]" class="form-control required"> <!-- /user_loggedout_email.html --> diff --git a/templates/web/base/report/new/form_user_loggedin.html b/templates/web/base/report/new/form_user_loggedin.html index d26948fc2..515f3842a 100644 --- a/templates/web/base/report/new/form_user_loggedin.html +++ b/templates/web/base/report/new/form_user_loggedin.html @@ -37,6 +37,9 @@ [% IF c.user.email_verified %] <label for="form_username">[% loc('Email address') %]<span class="hidden"> [% loc('(optional)') %]</span></label> + [% IF field_errors.username_register %] + <p class='form-error'>[% field_errors.username_register %]</p> + [% END %] <input class="form-control" id="form_username" name="username" [%- IF NOT can_contribute_as_another_user -%] disabled diff --git a/templates/web/base/report/update/form_user_loggedin.html b/templates/web/base/report/update/form_user_loggedin.html index 35c9beeff..8d55737d2 100644 --- a/templates/web/base/report/update/form_user_loggedin.html +++ b/templates/web/base/report/update/form_user_loggedin.html @@ -23,6 +23,9 @@ [% END %] </select> <label for="form_username">[% loc('Email address') %]</label> + [% IF field_errors.username_register %] + <p class='form-error'>[% field_errors.username_register %]</p> + [% END %] <input class="form-control" name="username" id="form_username" type="text" value="[% c.user.email | html %]"> [% END %] diff --git a/templates/web/bromley/report/form/user_loggedout_email.html b/templates/web/bromley/report/form/user_loggedout_email.html index 8aad16289..e7f08a4a8 100644 --- a/templates/web/bromley/report/form/user_loggedout_email.html +++ b/templates/web/bromley/report/form/user_loggedout_email.html @@ -1,21 +1,20 @@ [% IF c.config.SMS_AUTHENTICATION %] [% SET username_label = loc('Your email or mobile') %] [% SET username_type = 'text' %] - [% SET username_value = object.user.username %] [% ELSE %] [% SET username_label = loc('Your email') %] [% SET username_type = 'email' %] - [% SET username_value = object.user.email %] [% END %] +[% SET username_field = (name == 'username_sign_in') ? 'username' : 'username_register' ~%] <label for="form_[% name %]">[% loc('Email' ) %] [% IF type == 'update' %] <span class="muted">([% loc('We never show your email') %])</span> [% END %] </label> -[% IF field_errors.username %] - <p class='form-error'>[% field_errors.username %]</p> +[% IF field_errors.$name %] + <p class='form-error'>[% field_errors.$name %]</p> [% END %] -<input type="[% username_type %]" name="username" id="form_[% name %]" - value="[% username_value | html %]" +<input type="[% username_type %]" name="[% username_field %]" id="form_[% name %]" + value="[% c.get_param(username_field) %]" class="form-control required"> diff --git a/templates/web/zurich/report/new/fill_in_details_form.html b/templates/web/zurich/report/new/fill_in_details_form.html index 376429dad..8d840c43e 100644 --- a/templates/web/zurich/report/new/fill_in_details_form.html +++ b/templates/web/zurich/report/new/fill_in_details_form.html @@ -51,10 +51,10 @@ [% PROCESS "report/new/category_wrapper.html" %] <label for="form_username_register">[% loc('Your email') %]</label> - [% IF field_errors.username %] - <p class='form-error'>[% field_errors.username %]</p> + [% IF field_errors.username_register %] + <p class='form-error'>[% field_errors.username_register %]</p> [% END %] - <input class="form-control" type="email" value="[% email | html %]" name="username" id="form_username_register" required> + <input class="form-control" type="email" value="[% email | html %]" name="username_register" id="form_username_register" required> <label for="form_name">[% loc('Name') %] [% loc('(optional)') %]</label> [% IF field_errors.name %] diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js index 9161282f3..9c6ce83ed 100644 --- a/web/cobrands/fixmystreet/fixmystreet.js +++ b/web/cobrands/fixmystreet/fixmystreet.js @@ -316,7 +316,11 @@ $.extend(fixmystreet.set_up, { errorElement: 'div', errorClass: 'form-error', errorPlacement: function( error, element ) { - element.before( error ); + if (element.parent().hasClass('segmented-control')) { + element.parent().before( error ); + } else { + element.before( error ); + } }, submitHandler: function(form) { if (form.submit_problem) { @@ -1094,16 +1098,16 @@ $.extend(fixmystreet.set_up, { }); }, - reporting_hide_phone_email: function() { - $('#form_username_register').on('keyup change', function() { - var username = $(this).val(); - if (/^[^a-z]+$/i.test(username)) { - $('#js-hide-if-username-phone').hide(); - $('#js-hide-if-username-email').show(); - } else { - $('#js-hide-if-username-phone').show(); - $('#js-hide-if-username-email').hide(); - } + reporting_required_phone_email: function() { + var fem = $('#form_email'); + var fph = $('#form_phone'); + $('#update_method_email').on('change', function() { + fem.prop('required', true); + fph.prop('required', false); + }); + $('#update_method_phone').on('change', function() { + fem.prop('required', false); + fph.prop('required', true); }); }, |