CRM_Core_Config - Bind to the settings of the active domain at the moment of setup.
authorTim Otten <totten@civicrm.org>
Sat, 12 Sep 2015 23:23:58 +0000 (16:23 -0700)
committerTim Otten <totten@civicrm.org>
Thu, 17 Sep 2015 22:49:31 +0000 (15:49 -0700)
I'm not sure this is actually a good behavior, but it's the old behavior,
and there's a unit-test which checks for it.

CRM/Core/BAO/Setting.php
CRM/Core/Config.php
CRM/Core/Config/MagicMerge.php

index 3d80bd02046f049b1df8a561134ad72ba13e43d2..1de904c988668f8eaa83abf81b6af622d51b5fad 100644 (file)
@@ -429,15 +429,12 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @return array
    */
   public static function setItems(&$params, $domains = NULL) {
-    /** @var \Civi\Core\SettingsManager $manager */
-    $manager = \Civi::service('settings_manager');
     $domains = empty($domains) ? array(CRM_Core_Config::domainID()) : $domains;
 
     // FIXME: redundant validation
     // FIXME: this whole thing should just be a loop to call $settings->add() on each domain.
 
-    $reloadConfig = FALSE;
-    $fields = $config_keys = array();
+    $fields = array();
     $fieldsToSet = self::validateSettingsInput($params, $fields);
 
     foreach ($fieldsToSet as $settingField => &$settingValue) {
@@ -445,28 +442,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
     }
 
     foreach ($domains as $domainID) {
-
-      if ($domainID != CRM_Core_Config::domainID()) {
-        $reloadConfig = TRUE;
-        CRM_Core_BAO_Domain::setDomain($domainID);
-      }
-      $result[$domainID] = array();
-      $realSettingsToSet = array(); // need to separate config_backend stuff
-      foreach ($fieldsToSet as $name => $value) {
-        $realSettingsToSet[$name] = $value;
-        $result[$domainID][$name] = $value;
-      }
-      $manager->getBagByDomain($domainID)->add($realSettingsToSet);
-      if ($reloadConfig) {
-        CRM_Core_Config::singleton($reloadConfig, $reloadConfig);
-      }
-
-      if (!empty($config_keys)) {
-        CRM_Core_BAO_ConfigSetting::create($config_keys);
-      }
-      if ($reloadConfig) {
-        CRM_Core_BAO_Domain::resetDomain();
-      }
+      Civi::settings($domainID)->add($fieldsToSet);
+      $result[$domainID] = $fieldsToSet;
     }
 
     return $result;
index d19bc978ad4a3fef07bae06a29d0d052145301c0..ba1f0c5a8660d77a8f717d097a2294ace9a3fbb2 100644 (file)
@@ -106,6 +106,10 @@ class CRM_Core_Config extends CRM_Core_Config_MagicMerge {
 
       CRM_Utils_Hook::config(self::$_singleton);
       self::$_singleton->authenticate();
+
+      // Extreme backward compat: $config binds to active domain at moment of setup.
+      self::$_singleton->getSettings();
+
       Civi::service('settings_manager')->useDefaults();
     }
     return self::$_singleton;
index a1bd9c2a5228c8821306281d149be42bb4ced3a7..927ac69c5dc88ac48a5c6737a51c612ee65f800b 100644 (file)
@@ -54,7 +54,7 @@ class CRM_Core_Config_MagicMerge {
    */
   private $map;
 
-  private $runtime, $locals;
+  private $runtime, $locals, $settings;
 
   public function __construct() {
     $this->map = self::getPropertyMap();
@@ -190,13 +190,13 @@ class CRM_Core_Config_MagicMerge {
 
     switch ($type) {
       case 'setting':
-        return \Civi::settings()->get($name);
+        return $this->getSettings()->get($name);
 
       case 'setting-path':
-        return \Civi::settings()->getPath($name);
+        return $this->getSettings()->getPath($name);
 
       case 'setting-url':
-        return \Civi::settings()->getUrl($name, 'absolute');
+        return $this->getSettings()->getUrl($name, 'absolute');
 
       case 'runtime':
         return $this->getRuntime()->{$name};
@@ -228,15 +228,15 @@ class CRM_Core_Config_MagicMerge {
 
     switch ($type) {
       case 'setting':
-        \Civi::settings()->set($name, $v);
+        $this->getSettings()->set($name, $v);
         return;
 
       case 'setting-path':
-        \Civi::settings()->setPath($name, $v);
+        $this->getSettings()->setPath($name, $v);
         return;
 
       case 'setting-url':
-        \Civi::settings()->setUrl($name, $v);
+        $this->getSettings()->setUrl($name, $v);
         return;
 
       case 'runtime':
@@ -275,7 +275,7 @@ class CRM_Core_Config_MagicMerge {
       case 'setting':
       case 'setting-path':
       case 'setting-url':
-        \Civi::settings()->revert($k);
+        $this->getSettings()->revert($k);
         return;
 
       case 'local':
@@ -306,6 +306,16 @@ class CRM_Core_Config_MagicMerge {
     return $this->runtime;
   }
 
+  /**
+   * @return \Civi\Core\SettingsBag
+   */
+  protected function getSettings() {
+    if ($this->settings === NULL) {
+      $this->settings = Civi::settings();
+    }
+    return $this->settings;
+  }
+
   private function initLocals() {
     if ($this->locals === NULL) {
       $this->locals = array(