(REF) Mixins - Move `applyMixins()` logic into `MixinLoader`
authorTim Otten <totten@civicrm.org>
Fri, 3 Dec 2021 06:38:02 +0000 (22:38 -0800)
committerTim Otten <totten@civicrm.org>
Tue, 7 Dec 2021 00:17:05 +0000 (16:17 -0800)
CRM/Extension/MixinLoader.php
CRM/Extension/System.php

index 391eddf141ac8702ba52e8f4861d118dab6ef27d..b2ca1802446a106a77627c038d9f20ca6f233537 100644 (file)
  */
 
 /**
- * The MixinLoader tracks a list of extensions and mixins.
+ * The MixinLoader gets a list of extensions and mixins - then loads them.
  */
 class CRM_Extension_MixinLoader {
 
+  public function run($force = FALSE) {
+    $system = CRM_Extension_System::singleton();
+    $cache = $system->getCache();
+
+    $cachedScan = $force ? NULL : $cache->get('mixinScan');
+    $cachedBootData = $force ? NULL : $cache->get('mixinBoot');
+
+    [$funcFiles, $mixInfos] = $cachedScan ?: (new CRM_Extension_MixinScanner($system->getMapper(), $system->getManager(), TRUE))->build();
+    $bootData = $cachedBootData ?: new CRM_Extension_BootCache();
+
+    $this->loadMixins($bootData, $funcFiles, $mixInfos);
+
+    if ($cachedScan === NULL) {
+      $cache->set('mixinScan', [$funcFiles, $mixInfos], 24 * 60 * 60);
+    }
+    if ($cachedBootData === NULL) {
+      $bootData->lock();
+      $cache->set('mixinBoot', $bootData, 24 * 60 * 60);
+    }
+  }
+
   /**
    * Load all extensions and call their respective function-files.
    *
    * @throws \CRM_Core_Exception
    */
-  public function run(CRM_Extension_BootCache $bootCache, array $liveFuncFiles, array $mixInfos): void {
+  protected function loadMixins(CRM_Extension_BootCache $bootCache, array $liveFuncFiles, array $mixInfos): void {
     // == WIP ==
     //
     //Do mixins run strictly once (during boot)? Or could they run twice? Or incrementally? Some edge-cases:
index ed410333487f8ade1035b383a2f1a56906df30eb..863da23513df301aa9d0fe88495418e2c962182d 100644 (file)
@@ -244,24 +244,8 @@ class CRM_Extension_System {
   }
 
   public function applyMixins($force = FALSE) {
-    $cache = $this->getCache();
-
-    $cachedScan = $force ? NULL : $cache->get('mixinScan');
-    $cachedBootData = $force ? NULL : $cache->get('mixinBoot');
-
-    [$funcFiles, $mixInfos] = $cachedScan ?: (new CRM_Extension_MixinScanner($this->mapper, $this->manager, TRUE))->build();
-    $bootData = $cachedBootData ?: new CRM_Extension_BootCache();
-
     $mixinLoader = new CRM_Extension_MixinLoader();
-    $mixinLoader->run($bootData, $funcFiles, $mixInfos);
-
-    if ($cachedScan === NULL) {
-      $cache->set('mixinScan', [$funcFiles, $mixInfos], 24 * 60 * 60);
-    }
-    if ($cachedBootData === NULL) {
-      $bootData->lock();
-      $cache->set('mixinBoot', $bootData, 24 * 60 * 60);
-    }
+    $mixinLoader->run($force);
   }
 
   /**