diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 4c43d12d317d4dccce83867e1abe52c14ccb21f3..065ebf81793a6226ae975c52e7465600bc837051 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -136,7 +136,7 @@ class Admin::UsersController < Admin::ApplicationController # restore username to keep form action url. user.username = params[:id] format.html { render "edit" } - format.json { render json: result[:message], status: result[:status] } + format.json { render json: [result[:message]], status: result[:status] } end end end @@ -152,11 +152,7 @@ class Admin::UsersController < Admin::ApplicationController def remove_email email = user.emails.find(params[:email_id]) - Emails::DestroyService.new(current_user, self, email: email.email).execute - - result = Users::UpdateService.new(current_user, @user).execute do |user| - user.update_secondary_emails! - end + Emails::DestroyService.new(current_user, user, email: email.email).execute respond_to do |format| if result[:status] == :success diff --git a/app/controllers/profiles/emails_controller.rb b/app/controllers/profiles/emails_controller.rb index 40b43278439d73cea53e8add6064b4a5408d7838..5c7a5fa9a644ab9cc8643789029f8f45eea8e394 100644 --- a/app/controllers/profiles/emails_controller.rb +++ b/app/controllers/profiles/emails_controller.rb @@ -18,9 +18,7 @@ class Profiles::EmailsController < Profiles::ApplicationController def destroy @email = current_user.emails.find(params[:id]) - Emails::DestroyService.new(self, self, email: @email.email).execute - - Users::UpdateService.new(current_user, current_user).execute { |user| user.update_secondary_emails! } + Emails::DestroyService.new(current_user, current_user, email: @email.email).execute respond_to do |format| format.html { redirect_to profile_emails_url, status: 302 } diff --git a/app/models/user.rb b/app/models/user.rb index 117f54cf312c8d2df458e52bf44c4280c82e8e22..d53837fbdb299c8163135f3bf61dae8afde0f2d8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -496,8 +496,6 @@ class User < ActiveRecord::Base if primary_email_record Emails::DestroyService.new(self, self, email: email).execute Emails::CreateService.new(self, self, email: email_was).execute - - update_secondary_emails! end end diff --git a/app/services/emails/destroy_service.rb b/app/services/emails/destroy_service.rb index 1275d31efb03693c3bd42606f35eec0e7a28299f..8150918986c9b77121c9fe255ab30ec2cddc27de 100644 --- a/app/services/emails/destroy_service.rb +++ b/app/services/emails/destroy_service.rb @@ -3,7 +3,17 @@ module Emails def execute(skip_authorization: false) raise Gitlab::Access::AccessDeniedError unless skip_authorization || can_manage_emails? - Email.find_by_email(@email).destroy + Email.find_by_email(@email).destroy && update_secondary_emails! + end + + private + + def update_secondary_emails! + result = ::Users::UpdateService.new(@current_user, @current_user).execute do |user| + user.update_secondary_emails! + end + + result[:status] == 'success' end end end diff --git a/lib/api/users.rb b/lib/api/users.rb index 190e2e71884ab0d67ad2c4ea49b38b7666e47b3f..07e7c774f2b48b2b0ea9ed2f0af00c461c04b0d6 100644 --- a/lib/api/users.rb +++ b/lib/api/users.rb @@ -275,10 +275,6 @@ module API not_found!('Email') unless email Emails::DestroyService.new(current_user, user, email: email.email).execute(skip_authorization: true) - - ::Users::UpdateService.new(current_user, user).execute do |user| - user.update_secondary_emails! - end end desc 'Delete a user. Available only for admins.' do @@ -509,10 +505,6 @@ module API not_found!('Email') unless email Emails::DestroyService.new(current_user, current_user, email: email.email).execute - - ::Users::UpdateService.new(current_user, current_user).execute do |user| - user.update_secondary_emails! - end end desc 'Get a list of user activities'