*/
class SettingsMetadata {
- const ALL = 'all';
-
/**
* WARNING: This interface may change.
*
$cache = \Civi::cache('settings');
$cacheString = 'settingsMetadata_' . $domainID . '_';
- // the caching into 'All' seems to be a duplicate of caching to
- // settingsMetadata__ - I think the reason was to cache all settings as defined & then those altered by a hook
$settingsMetadata = $cache->get($cacheString);
- $cached = is_array($settingsMetadata);
-
- if (!$cached) {
- $settingsMetadata = $cache->get(self::ALL);
- if (empty($settingsMetadata)) {
- global $civicrm_root;
- $metaDataFolders = [$civicrm_root . '/settings'];
- \CRM_Utils_Hook::alterSettingsFolders($metaDataFolders);
- $settingsMetadata = self::loadSettingsMetaDataFolders($metaDataFolders);
- $cache->set(self::ALL, $settingsMetadata);
- }
- }
-
- \CRM_Utils_Hook::alterSettingsMetaData($settingsMetadata, $domainID, NULL);
- if (!$cached) {
+ if (!is_array($settingsMetadata)) {
+ global $civicrm_root;
+ $metaDataFolders = [$civicrm_root . '/settings'];
+ \CRM_Utils_Hook::alterSettingsFolders($metaDataFolders);
+ $settingsMetadata = self::loadSettingsMetaDataFolders($metaDataFolders);
+ \CRM_Utils_Hook::alterSettingsMetaData($settingsMetadata, $domainID, NULL);
$cache->set($cacheString, $settingsMetadata);
}
* @return void
*/
public function setMockSettingsMetaData($extras) {
- Civi::service('settings_manager')->flush();
-
CRM_Utils_Hook::singleton()
->setHook('civicrm_alterSettingsMetaData', function (&$metadata, $domainId, $profile) use ($extras) {
$metadata = array_merge($metadata, $extras);
});
+ Civi::service('settings_manager')->flush();
+
$fields = $this->callAPISuccess('setting', 'getfields', array());
foreach ($extras as $key => $spec) {
$this->assertNotEmpty($spec['title']);
public function testGetFieldsCaching() {
$settingsMetadata = array();
Civi::cache('settings')->set('settingsMetadata_' . \CRM_Core_Config::domainID() . '_', $settingsMetadata);
- Civi::cache('settings')->set(\Civi\Core\SettingsMetadata::ALL, $settingsMetadata);
$result = $this->callAPISuccess('setting', 'getfields', array());
$this->assertArrayNotHasKey('customCSSURL', $result['values']);
$this->quickCleanup(array('civicrm_cache'));