From d9a909d4e018438a6bd20c1b291f64a6bafea0c6 Mon Sep 17 00:00:00 2001 From: Henrique Recidive Date: Mon, 21 Feb 2011 20:48:09 -0300 Subject: [PATCH 1/2] Disable payment rules for payment methods that get disabled. --- modules/payment/commerce_payment.module | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/modules/payment/commerce_payment.module b/modules/payment/commerce_payment.module index c263660c..0468a015 100644 --- a/modules/payment/commerce_payment.module +++ b/modules/payment/commerce_payment.module @@ -150,6 +150,28 @@ function commerce_payment_theme() { ); } +/** + * Implements hook_modules_disabled(). + * + * Disable rules for disabled payment methods. + */ +function commerce_payment_modules_disabled($modules) { + foreach($modules as $module_name) { + // Check if module being disabled implements payment methods. + if (module_hook($module_name, 'commerce_payment_method_info')) { + // Loop over all payment methods this module declares. + foreach (array_keys(module_invoke($module_name, 'commerce_payment_method_info')) as $payment_method_id) { + $rules_config = rules_config_load('commerce_payment_' . $payment_method_id); + if ($rules_config->active) { + // Disable the rule and save it. + $rules_config->active = FALSE; + $rules_config->save(); + } + } + } + } +} + /** * Adds the necessary CSS for the line item summary template. */ From 08ea79ffc3ae6b53960f21514db32b5d24d0738b Mon Sep 17 00:00:00 2001 From: Henrique Recidive Date: Tue, 22 Feb 2011 00:21:21 -0300 Subject: [PATCH 2/2] Adding code to delete the rule if it's wasn't overriden, so it doesn't display as disabled in the payments admin screen and get enabled automatically when the payment module is re-enabled. --- modules/payment/commerce_payment.module | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/payment/commerce_payment.module b/modules/payment/commerce_payment.module index 0468a015..185dd84d 100644 --- a/modules/payment/commerce_payment.module +++ b/modules/payment/commerce_payment.module @@ -163,9 +163,16 @@ function commerce_payment_modules_disabled($modules) { foreach (array_keys(module_invoke($module_name, 'commerce_payment_method_info')) as $payment_method_id) { $rules_config = rules_config_load('commerce_payment_' . $payment_method_id); if ($rules_config->active) { - // Disable the rule and save it. - $rules_config->active = FALSE; - $rules_config->save(); + if (!$rules_config->hasStatus(ENTITY_OVERRIDDEN)) { + // If the rule wasn't overridden it's safe to delete it so it get + // recreated when the payment module is re-enabled. + $rules_config->delete(); + } + else { + // Otherwise, just disable and save it. + $rules_config->active = FALSE; + $rules_config->save(); + } } } }