From c09b5c5b673cebb7f0470debe0b6df8fbc7c93f8 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Wed, 21 Apr 2021 09:43:56 -0700 Subject: [PATCH] Extensions - Setup during "enable" and "uninstall" This is an analog/follow-up to https://github.com/civicrm/civicrm-core/pull/20091 Why is this necessary? Recall that a typical admin will go through this lifecycle: 1. Enable extension $x 2. Disable extension $x 3. Either: * (a) Re-enable extension $x * (b) Uninstall extension $x Step `#2` disables the classloader for purposes of regular page-loading. However, when you get to step `#3a` or `#3b`, then you need the classloader again. --- CRM/Extension/Manager/Module.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CRM/Extension/Manager/Module.php b/CRM/Extension/Manager/Module.php index b66f633c31..f4ce5ceb78 100644 --- a/CRM/Extension/Manager/Module.php +++ b/CRM/Extension/Manager/Module.php @@ -29,7 +29,7 @@ class CRM_Extension_Manager_Module extends CRM_Extension_Manager_Base { * @param CRM_Extension_Info $info */ public function onPreInstall(CRM_Extension_Info $info) { - CRM_Extension_System::singleton()->getClassLoader()->installExtension($info, dirname($this->mapper->keyToPath($info->key))); + $this->registerClassloader($info); $this->callHook($info, 'install'); $this->callHook($info, 'enable'); } @@ -71,6 +71,7 @@ class CRM_Extension_Manager_Module extends CRM_Extension_Manager_Base { * @return bool */ public function onPreUninstall(CRM_Extension_Info $info) { + $this->registerClassloader($info); $this->callHook($info, 'uninstall'); return TRUE; } @@ -92,7 +93,15 @@ class CRM_Extension_Manager_Module extends CRM_Extension_Manager_Base { * @param CRM_Extension_Info $info */ public function onPreEnable(CRM_Extension_Info $info) { + $this->registerClassloader($info); $this->callHook($info, 'enable'); } + /** + * @param CRM_Extension_Info $info + */ + private function registerClassloader($info) { + CRM_Extension_System::singleton()->getClassLoader()->installExtension($info, dirname($this->mapper->keyToPath($info->key))); + } + } -- 2.25.1