From: Tomas Sedovic <tsedovic(a)redhat.com>
https://bugzilla.redhat.com/show_bug.cgi?id=678071
The user couldn't delete a provider account that had any instances associated
with it -- even if these instances were stopped. Moreover, the UI did not show
any error message.
This fix allows deleting an account that has all its instances in the 'stopped'
state and shows a propper message.
---
.../admin/provider_accounts_controller.rb | 23 ++++++++++++++++---
src/app/models/provider_account.rb | 2 +-
src/config/locales/en.yml | 6 +++++
3 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/src/app/controllers/admin/provider_accounts_controller.rb
b/src/app/controllers/admin/provider_accounts_controller.rb
index 6affc73..ceffe17 100644
--- a/src/app/controllers/admin/provider_accounts_controller.rb
+++ b/src/app/controllers/admin/provider_accounts_controller.rb
@@ -119,13 +119,28 @@ class Admin::ProviderAccountsController < ApplicationController
end
def multi_destroy
- if (not params[:accounts_selected]) or (params[:accounts_selected].length == 0)
+ if params[:accounts_selected].blank?
flash[:notice] = "You must select some accounts first."
- else
- ProviderAccount.find(params[:accounts_selected]).each do |account|
- account.destroy if check_privilege(Privilege::MODIFY, account)
+ redirect_to admin_provider_accounts_url and return
+ end
+
+ succeeded = []
+ failed = []
+ ProviderAccount.find(params[:accounts_selected]).each do |account|
+ if check_privilege(Privilege::MODIFY, account) && account.destroyable?
+ account.destroy
+ succeeded << account.label
+ else
+ failed << account.label
end
end
+
+ unless succeeded.empty?
+ flash[:notice] = t 'provider_accounts.index.account_deleted', :count =>
succeeded.length, :list => succeeded.join(', ')
+ end
+ unless failed.empty?
+ flash[:error] = t 'provider_accounts.index.account_not_deleted', :count
=> failed.length, :list => failed.join(', ')
+ end
redirect_to admin_provider_accounts_url
end
diff --git a/src/app/models/provider_account.rb b/src/app/models/provider_account.rb
index 6ed677b..076bafd 100644
--- a/src/app/models/provider_account.rb
+++ b/src/app/models/provider_account.rb
@@ -114,7 +114,7 @@ class ProviderAccount < ActiveRecord::Base
end
def destroyable?
- instances.empty?
+ instances.all? { |i| i.state == Instance::STATE_STOPPED }
end
def read_x509_files
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index 233cd14..da36621 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -119,6 +119,12 @@ en:
provider_accounts:
index:
provider_accounts: Provider Accounts
+ account_deleted:
+ one: "Account %{list} was deleted."
+ other: "Accounts %{list} were deleted."
+ account_not_deleted:
+ one: "Account %{list} was not deleted. Its instances must be stopped
first."
+ other: "Accounts %{list} were not deleted. Their instances must be stopped
first."
new:
new_provider_account: New Account
required_field: Required field.
--
1.7.4