CRM-17957 - Extension classloader - Reset whenever the mapper resets
authorTim Otten <totten@civicrm.org>
Tue, 9 Feb 2016 23:52:48 +0000 (15:52 -0800)
committerTim Otten <totten@civicrm.org>
Mon, 15 Feb 2016 22:23:50 +0000 (14:23 -0800)
CRM/Extension/ClassLoader.php
CRM/Extension/Mapper.php

index 7097d8d3715487622c1a7b5ce829c8c3b57702ae..2485cae3cb20978c46f7d7df5d4027294fbde47f 100644 (file)
@@ -68,10 +68,7 @@ class CRM_Extension_ClassLoader {
   }
 
   public function __destruct() {
-    if ($this->loader) {
-      $this->loader->unregister();
-      $this->loader = NULL;
-    }
+    $this->unregister();
   }
 
   /**
@@ -80,12 +77,11 @@ class CRM_Extension_ClassLoader {
    */
   public function register() {
     // In pre-installation environments, don't bother with caching.
-    if (!defined('CIVICRM_TEMPLATE_COMPILEDIR') || !defined('CIVICRM_DSN') || \CRM_Utils_System::isInUpgradeMode()) {
+    if (!defined('CIVICRM_TEMPLATE_COMPILEDIR') || !defined('CIVICRM_DSN') || defined('CIVICRM_TEST') || \CRM_Utils_System::isInUpgradeMode()) {
       return $this->buildClassLoader()->register();
     }
 
-    $envId = \CRM_Core_Config_Runtime::getId();
-    $file = CIVICRM_TEMPLATE_COMPILEDIR . "/CachedExtLoader.{$envId}.php";
+    $file = $this->getCacheFile();
     if (file_exists($file)) {
       $loader = require $file;
     }
@@ -129,4 +125,29 @@ class CRM_Extension_ClassLoader {
     return $loader;
   }
 
+  public function unregister() {
+    if ($this->loader) {
+      $this->loader->unregister();
+      $this->loader = NULL;
+    }
+  }
+
+  public function refresh() {
+    $this->unregister();
+    $file = $this->getCacheFile();
+    if (file_exists($file)) {
+      unlink($file);
+    }
+    $this->register();
+  }
+
+  /**
+   * @return string
+   */
+  protected function getCacheFile() {
+    $envId = \CRM_Core_Config_Runtime::getId();
+    $file = CIVICRM_TEMPLATE_COMPILEDIR . "/CachedExtLoader.{$envId}.php";
+    return $file;
+  }
+
 }
index 9c99b8a7627a89db415b83d1349e297292f1f165..b08c6f636cab61716c453bff620dbd65a2f3bb96 100644 (file)
@@ -415,6 +415,8 @@ class CRM_Extension_Mapper {
     if ($this->cache) {
       $this->cache->delete($this->cacheKey . '/moduleFiles');
     }
+    // FIXME: How can code so code wrong be so right?
+    CRM_Extension_System::singleton()->getClassLoader()->refresh();
   }
 
 }