diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2017-03-09 10:33:42 +0000 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2017-03-09 10:33:43 +0000 |
commit | 286b4cb512c1e2d8c817318a2f082191efb39625 (patch) | |
tree | 4dc1fcb10c99551de4092cb9a42eaf6c68e36d93 | |
parent | c0b5775a599cfda73bb378d43ddc274f9522ddcf (diff) |
Check cobrand users list when admin merging users.
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin.pm | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm index 2a5b3600b..87a4191af 100644 --- a/perllib/FixMyStreet/App/Controller/Admin.pm +++ b/perllib/FixMyStreet/App/Controller/Admin.pm @@ -1264,6 +1264,7 @@ sub user_edit : Path('user_edit') : Args(1) { } $user->name( $c->get_param('name') ); + my $original_email = $user->email; $user->email( $email ); $user->phone( $c->get_param('phone') ) if $c->get_param('phone'); $user->flagged( $c->get_param('flagged') || 0 ); @@ -1365,11 +1366,17 @@ sub user_edit : Path('user_edit') : Args(1) { return if %{$c->stash->{field_errors}}; my $existing_user = $c->model('DB::User')->search({ email => $user->email, id => { '!=', $user->id } })->first; - if ($existing_user) { + my $existing_user_cobrand = $c->cobrand->users->search({ email => $user->email, id => { '!=', $user->id } })->first; + if ($existing_user_cobrand) { $existing_user->adopt($user); $c->forward( 'log_edit', [ $id, 'user', 'merge' ] ); $c->res->redirect( $c->uri_for( 'user_edit', $existing_user->id ) ); } else { + if ($existing_user) { + # Tried to change email to an existing one lacking permission + # so make sure it's switched back + $user->email($original_email); + } $user->update; if ($edited) { $c->forward( 'log_edit', [ $id, 'user', 'edit' ] ); |