$domainID = NULL
) {
+ $overrideGroup = array();
if (NULL !== ($override = self::getOverride($group, $name, NULL))) {
- return $override;
+ if (isset($name)) {
+ return $override;
+ }
+ else {
+ $overrideGroup = $override;
+ }
}
if (empty($domainID)) {
$domainID = CRM_Core_Config::domainID();
}
$cacheKey = self::inCache($group, $name, $componentID, $contactID, TRUE, $domainID);
+
+ if ($group && !isset($name) && $cacheKey) {
+ // check value against the cache, and unset key if values are different
+ $valueDifference = array_diff($overrideGroup, self::$_cache[$cacheKey]);
+ if (!empty($valueDifference)) {
+ $cacheKey = '';
+ }
+ }
+
if (!$cacheKey) {
$dao = self::dao($group, NULL, $componentID, $contactID, $domainID);
$dao->find();
}
$dao->free();
+ if (!isset($name)) {
+ // merge db and override group values
+ // When no $name is present, the getItem() function should return an array
+ // consisting of the sum of all override settings + all settings present in
+ // the database for the given $group (with the overrides taking precedence,
+ // and applying even if the setting is not defined in the database).
+ //
+ $values = array_merge($values, $overrideGroup);
+ }
+
$cacheKey = self::setCache($values, $group, $componentID, $contactID, $domainID);
}
return $name ? CRM_Utils_Array::value($name, self::$_cache[$cacheKey], $defaultValue) : self::$_cache[$cacheKey];
if ($group && $name && isset($civicrm_setting[$group][$name])) {
return $civicrm_setting[$group][$name];
}
+ elseif ($group && !isset($name) && isset($civicrm_setting[$group])) {
+ return $civicrm_setting[$group];
+ }
else {
return $default;
}
$civicrm_setting[CRM_Core_BAO_Setting::DIRECTORY_PREFERENCES_NAME]['imageUploadDir'] = '/test/override';
$value = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::DIRECTORY_PREFERENCES_NAME, 'imageUploadDir');
$this->assertEquals('/test/override', $value);
+
+ // CRM-14974 test suite
+ $civicrm_setting['Test Preferences']['overrideSetting'] = '/test/override';
+ $values = CRM_Core_BAO_Setting::getItem('Test Preferences');
+ $this->assertEquals('/test/override', $values['overrideSetting']);
+ CRM_Core_BAO_Setting::setItem('/test/database', 'Test Preferences', 'databaseSetting');
+ $values = CRM_Core_BAO_Setting::getItem('Test Preferences');
+ $this->assertEquals('/test/override', $values['overrideSetting']);
+ $this->assertEquals('/test/database', $values['databaseSetting']);
+ $civicrm_setting['Test Preferences']['databaseSetting'] = '/test/dataride';
+ $values = CRM_Core_BAO_Setting::getItem('Test Preferences');
+ $this->assertEquals('/test/override', $values['overrideSetting']);
+ $this->assertEquals('/test/dataride', $values['databaseSetting']);
+ // CRM-14974 tear down
+ unset($civicrm_setting['Test Preferences']);
+ $query = "DELETE FROM civicrm_setting WHERE group_name = 'Test Preferences';";
+ CRM_Core_DAO::executeQuery($query);
}
/**