From ffb92029efb7f890bf9057d1f6671364cfd3a65a Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Wed, 20 Jul 2022 00:32:37 -0700 Subject: [PATCH] Upgrader - Pick initial dispatch policy based on how far we've progressed in upgrade --- CRM/Upgrade/DispatchPolicy.php | 23 +++++++++++++++++++++++ CRM/Upgrade/Form.php | 2 ++ Civi/Core/Container.php | 5 ++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CRM/Upgrade/DispatchPolicy.php b/CRM/Upgrade/DispatchPolicy.php index ebab0683a3..087b70d88d 100644 --- a/CRM/Upgrade/DispatchPolicy.php +++ b/CRM/Upgrade/DispatchPolicy.php @@ -38,6 +38,29 @@ class CRM_Upgrade_DispatchPolicy { /** * Determine the dispatch policy * + * @return array + * @see \Civi\Core\CiviEventDispatcher::setDispatchPolicy() + */ + public static function pick(): ?array { + if (!\CRM_Core_Config::isUpgradeMode()) { + return NULL; + } + + // Have we run CRM_Upgrade_Form::doCoreFinish() for this version? + $codeVer = CRM_Utils_System::version(); + $isCoreCurrent = CRM_Core_DAO::singleValueQuery(' + SELECT count(*) as count + FROM civicrm_log + WHERE entity_table = "civicrm_domain" + AND data LIKE %1 + ', [1 => ['upgrade:%->' . $codeVer, 'String']]); + + return CRM_Upgrade_DispatchPolicy::get($isCoreCurrent < 1 ? 'upgrade.main' : 'upgrade.finish'); + } + + /** + * Read the dispatch policy. + * * @param string $phase * Ex: 'upgrade.main' or 'upgrade.finish'. * @return array diff --git a/CRM/Upgrade/Form.php b/CRM/Upgrade/Form.php index 97024a0d67..051a259164 100644 --- a/CRM/Upgrade/Form.php +++ b/CRM/Upgrade/Form.php @@ -809,6 +809,8 @@ SET version = '$version' list($ignore, $latestVer) = $upgrade->getUpgradeVersions(); // Seems extraneous in context, but we'll preserve old behavior $upgrade->setVersion($latestVer); + // Going forward, any new tasks will run in `upgrade.finish` mode. + // @see \CRM_Upgrade_DispatchPolicy::pick() $config = CRM_Core_Config::singleton(); $config->userSystem->flush(); diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index dc48b49263..f705463b7c 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -604,7 +604,6 @@ class Container { '/^hook_/' => 'not-ready', '/^civi\./' => 'run', ]; - $mainDispatchPolicy = \CRM_Core_Config::isUpgradeMode() ? \CRM_Upgrade_DispatchPolicy::get('upgrade.main') : NULL; $bootServices['dispatcher.boot']->setDispatchPolicy($bootDispatchPolicy); $class = $runtime->userFrameworkClass; @@ -630,7 +629,7 @@ class Container { \CRM_Extension_System::singleton()->getClassLoader()->register(); \CRM_Extension_System::singleton()->getMixinLoader()->run(); \CRM_Utils_Hook::singleton()->commonBuildModuleList('civicrm_boot'); - $bootServices['dispatcher.boot']->setDispatchPolicy($mainDispatchPolicy); + $bootServices['dispatcher.boot']->setDispatchPolicy(\CRM_Core_Config::isUpgradeMode() ? \CRM_Upgrade_DispatchPolicy::pick() : NULL); $runtime->includeCustomPath(); @@ -646,7 +645,7 @@ class Container { } else { - $bootServices['dispatcher.boot']->setDispatchPolicy($mainDispatchPolicy); + $bootServices['dispatcher.boot']->setDispatchPolicy(\CRM_Core_Config::isUpgradeMode() ? \CRM_Upgrade_DispatchPolicy::pick() : NULL); } } -- 2.25.1