CRM-16243 - CRM_Extension_Manager::install() - Refresh class-loader incrementally
authorTim Otten <totten@civicrm.org>
Fri, 25 Mar 2016 20:58:02 +0000 (13:58 -0700)
committerJohn Kirk <accounts@civifirst.com>
Mon, 9 Oct 2017 18:27:51 +0000 (18:27 +0000)
This allows an extension's installation logic to use a class defined by one
of the (upstream) requirements.

CRM/Extension/Manager.php

index 3872b268f80d5691a0a08fe3f953f356347ea017..bdddca9211141eed1babbb883dc46688626bb694 100644 (file)
@@ -222,6 +222,11 @@ class CRM_Extension_Manager {
           $typeManager->onPreEnable($info);
           $this->_setExtensionActive($info, 1);
           $typeManager->onPostEnable($info);
+
+          // A full refresh would be preferrable but very slow. This at least allows
+          // later extensions to access classes from earlier extensions.
+          $this->statuses = NULL;
+          $this->mapper->refresh();
           break;
 
         case self::STATUS_UNINSTALLED:
@@ -229,6 +234,11 @@ class CRM_Extension_Manager {
           $typeManager->onPreInstall($info);
           $this->_createExtensionEntry($info);
           $typeManager->onPostInstall($info);
+
+          // A full refresh would be preferrable but very slow. This at least allows
+          // later extensions to access classes from earlier extensions.
+          $this->statuses = NULL;
+          $this->mapper->refresh();
           break;
 
         case self::STATUS_UNKNOWN: