From ece22652f84afd19c205ce797bbeb476b7f18388 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 27 Apr 2023 20:46:59 -0400 Subject: [PATCH] CiviGrant - Fix upgrade to work on multiple domains --- CRM/Core/BAO/ConfigSetting.php | 22 ++++++------------- .../Incremental/php/FiveFortySeven.php | 8 ++++--- CRM/Upgrade/Incremental/php/FiveSixtyTwo.php | 4 ++++ 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/CRM/Core/BAO/ConfigSetting.php b/CRM/Core/BAO/ConfigSetting.php index 44b7178062..00698964cf 100644 --- a/CRM/Core/BAO/ConfigSetting.php +++ b/CRM/Core/BAO/ConfigSetting.php @@ -310,8 +310,8 @@ class CRM_Core_BAO_ConfigSetting { */ public static function enableComponent($componentName) { $enabledComponents = Civi::settings()->get('enable_components'); - if (in_array($componentName, $enabledComponents)) { - // component is already enabled + if (in_array($componentName, $enabledComponents, TRUE)) { + // Component is already enabled return TRUE; } @@ -346,20 +346,13 @@ class CRM_Core_BAO_ConfigSetting { * @return bool */ public static function disableComponent($componentName) { - $config = CRM_Core_Config::singleton(); - if (!in_array($componentName, $config->enableComponents) || - !array_key_exists($componentName, CRM_Core_Component::getComponents()) - ) { - // Post-condition is satisfied. + $enabledComponents = Civi::settings()->get('enable_components'); + if (!in_array($componentName, $enabledComponents, TRUE)) { + // Component is already disabled. return TRUE; } - // get enabled-components from DB and add to the list - $enabledComponents = Civi::settings()->get('enable_components'); - $enabledComponents = array_diff($enabledComponents, [$componentName]); - - self::setEnabledComponents($enabledComponents); - + self::setEnabledComponents(array_diff($enabledComponents, [$componentName])); return TRUE; } @@ -369,8 +362,7 @@ class CRM_Core_BAO_ConfigSetting { * @param array $enabledComponents */ public static function setEnabledComponents($enabledComponents) { - // The on_change trigger on this setting will trigger a cache flush - Civi::settings()->set('enable_components', $enabledComponents); + Civi::settings()->set('enable_components', array_values($enabledComponents)); } /** diff --git a/CRM/Upgrade/Incremental/php/FiveFortySeven.php b/CRM/Upgrade/Incremental/php/FiveFortySeven.php index b28ab38604..d5a8300715 100644 --- a/CRM/Upgrade/Incremental/php/FiveFortySeven.php +++ b/CRM/Upgrade/Incremental/php/FiveFortySeven.php @@ -101,9 +101,11 @@ class CRM_Upgrade_Incremental_php_FiveFortySeven extends CRM_Upgrade_Incremental */ public static function migrateCiviGrant(CRM_Queue_TaskContext $ctx): bool { $civiGrantEnabled = CRM_Core_Component::isEnabled('CiviGrant'); - if ($civiGrantEnabled) { - CRM_Core_BAO_ConfigSetting::disableComponent('CiviGrant'); - } + // This was failing on multi-domain setups. See https://github.com/civicrm/civicrm-core/pull/26043 + // Instead, we'll handle it in FiveSixtyTwo::consolidateComponents. + // if ($civiGrantEnabled) { + // CRM_Core_BAO_ConfigSetting::disableComponent('CiviGrant'); + // } $civiGrantId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Component', 'CiviGrant', 'id', 'name'); if ($civiGrantId) { foreach (['civicrm_menu', 'civicrm_option_value'] as $table) { diff --git a/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php b/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php index 2678ee99de..39d2e0da2f 100644 --- a/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php +++ b/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php @@ -63,6 +63,10 @@ class CRM_Upgrade_Incremental_php_FiveSixtyTwo extends CRM_Upgrade_Incremental_B public static function consolidateComponents($ctx): bool { $final = static::findAllEnabledComponents(); + // Ensure CiviGrant is removed from the setting, as this may have been incomplete in a previous upgrade. + // @see FiveFortySeven::migrateCiviGrant + $final = array_values(array_diff($final, ['CiviGrant'])); + $lowestDomainId = CRM_Core_DAO::singleValueQuery('SELECT min(domain_id) FROM civicrm_setting WHERE name = "enable_components"'); if (!is_numeric($lowestDomainId)) { return TRUE; -- 2.25.1