Merge pull request #4865 from eileenmcnaughton/my-first-factory
[civicrm-core.git] / CRM / Core / BAO / Setting.php
index e9392503c1d600d847cbc2280f46c7d179d26bfb..7ab3f5778fc666fb345504b5ec225621dd48c87b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.5                                                |
+ | CiviCRM version 4.6                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
@@ -46,7 +46,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
   /**
    * Various predefined settings that have been migrated to the setting table
    */
-  CONST
+  const
     ADDRESS_STANDARDIZATION_PREFERENCES_NAME = 'Address Standardization Preferences',
     CAMPAIGN_PREFERENCES_NAME = 'Campaign Preferences',
     DEVELOPER_PREFERENCES_NAME = 'Developer Preferences',
@@ -66,10 +66,14 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
   /**
    * Checks whether an item is present in the in-memory cache table
    *
-   * @param string $group (required) The group name of the item
-   * @param string $name (required) The name of the setting
-   * @param int $componentID The optional component ID (so components can share the same name space)
-   * @param int $contactID If set, this is a contactID specific setting, else its a global setting
+   * @param string $group
+   *   (required) The group name of the item.
+   * @param string $name
+   *   (required) The name of the setting.
+   * @param int $componentID
+   *   The optional component ID (so components can share the same name space).
+   * @param int $contactID
+   *   If set, this is a contactID specific setting, else its a global setting.
    * @param bool|int $load if true, load from local cache (typically memcache)
    *
    * @param int $domainID
@@ -77,7 +81,6 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * @return boolean true if item is already in cache
    * @static
-   * @access public
    */
   static function inCache(
     $group,
@@ -114,7 +117,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
   * Allow key o be cleared
   * @param string $cacheKey
   */
-  static function flushCache($cacheKey){
+  public static function flushCache($cacheKey) {
     unset(self::$_cache[$cacheKey]);
     $globalCache = CRM_Utils_Cache::singleton();
     $globalCache->delete($cacheKey);
@@ -129,7 +132,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * @return string
    */
-  static function setCache($values,
+  static function setCache(
+    $values,
     $group,
     $componentID = NULL,
     $contactID = NULL,
@@ -158,7 +162,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * @return CRM_Core_DAO_Domain|CRM_Core_DAO_Setting
    */
-  static function dao($group,
+  static function dao(
+    $group,
     $name        = NULL,
     $componentID = NULL,
     $contactID   = NULL,
@@ -197,17 +202,21 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
   /**
    * Retrieve the value of a setting from the DB table
    *
-   * @param string $group (required) The group name of the item
-   * @param string $name (required) The name under which this item is stored
-   * @param int $componentID The optional component ID (so componenets can share the same name space)
-   * @param string $defaultValue The default value to return for this setting if not present in DB
-   * @param int $contactID If set, this is a contactID specific setting, else its a global setting
+   * @param string $group
+   *   (required) The group name of the item.
+   * @param string $name
+   *   (required) The name under which this item is stored.
+   * @param int $componentID
+   *   The optional component ID (so componenets can share the same name space).
+   * @param string $defaultValue
+   *   The default value to return for this setting if not present in DB.
+   * @param int $contactID
+   *   If set, this is a contactID specific setting, else its a global setting.
    *
    * @param int $domainID
    *
    * @return mixed The data if present in the setting table, else null
    * @static
-   * @access public
    */
   static function getItem(
     $group,
@@ -252,16 +261,16 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
   /**
    * Store multiple items in the setting table
    *
-   * @param array $params (required) An api formatted array of keys and values
+   * @param array $params
+   *   (required) An api formatted array of keys and values.
    * @param null $domains
    * @param $settingsToReturn
    *
    * @domains array an array of domains to get settings for. Default is the current domain
    * @return void
    * @static
-   * @access public
    */
-  static function getItems(&$params, $domains = NULL, $settingsToReturn) {
+  public static function getItems(&$params, $domains = NULL, $settingsToReturn) {
     $originalDomain = CRM_Core_Config::domainID();
     if (empty($domains)) {
       $domains[] = $originalDomain;
@@ -274,22 +283,22 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
     $fields = $result = array();
     $fieldsToGet = self::validateSettingsInput(array_flip($settingsToReturn), $fields, FALSE);
     foreach ($domains as $domainID) {
-      if($domainID != CRM_Core_Config::domainID()){
+      if ($domainID != CRM_Core_Config::domainID()) {
         $reloadConfig = TRUE;
         CRM_Core_BAO_Domain::setDomain($domainID);
       }
       $config = CRM_Core_Config::singleton($reloadConfig, $reloadConfig);
       $result[$domainID] = array();
       foreach ($fieldsToGet as $name => $value) {
-        if(!empty($fields['values'][$name]['prefetch'])){
-          if(isset($params['filters']) && isset($params['filters']['prefetch'])
-            && $params['filters']['prefetch'] == 0){
+        if (!empty($fields['values'][$name]['prefetch'])) {
+          if (isset($params['filters']) && isset($params['filters']['prefetch'])
+            && $params['filters']['prefetch'] == 0) {
             // we are filtering out the prefetches from the return array
             // so we will skip
             continue;
           }
           $configKey = CRM_Utils_Array::value('config_key', $fields['values'][$name],  $name);
-          if(isset($config->$configKey)){
+          if (isset($config->$configKey)) {
             $setting = $config->$configKey;
           }
         }
@@ -320,18 +329,22 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * _setItem() is the common logic shared by setItem() and setItems().
    *
-   * @param object $value (required) The value that will be serialized and stored
-   * @param string $group (required) The group name of the item
-   * @param string $name (required) The name of the setting
-   * @param int $componentID The optional component ID (so componenets can share the same name space)
+   * @param object $value
+   *   (required) The value that will be serialized and stored.
+   * @param string $group
+   *   (required) The group name of the item.
+   * @param string $name
+   *   (required) The name of the setting.
+   * @param int $componentID
+   *   The optional component ID (so componenets can share the same name space).
    * @param int $contactID
-   * @param int $createdID An optional ID to assign the creator to. If not set, retrieved from session
+   * @param int $createdID
+   *   An optional ID to assign the creator to. If not set, retrieved from session.
    *
    * @param int $domainID
    *
    * @return void
    * @static
-   * @access public
    */
   static function setItem(
     $value,
@@ -357,7 +370,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * _setItem() is the common logic shared by setItem() and setItems().
    *
-   * @param array $metadata metadata describing this field
+   * @param array $metadata
+   *   Metadata describing this field.
    * @param $value
    * @param $group
    * @param string $name
@@ -439,16 +453,16 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * _setItem() is the common logic shared by setItem() and setItems().
    *
-   * @param array $params (required) An api formatted array of keys and values
+   * @param array $params
+   *   (required) An api formatted array of keys and values.
    * @param null $domains
    *
    * @throws api_Exception
    * @domains array an array of domains to get settings for. Default is the current domain
    * @return array
    * @static
-   * @access public
    */
-  static function setItems(&$params, $domains = NULL) {
+  public static function setItems(&$params, $domains = NULL) {
     $originalDomain = CRM_Core_Config::domainID();
     if (empty($domains)) {
       $domains[] = $originalDomain;
@@ -462,13 +476,13 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
     }
 
     foreach ($domains as $domainID) {
-      if($domainID != CRM_Core_Config::domainID()){
+      if ($domainID != CRM_Core_Config::domainID()) {
         $reloadConfig = TRUE;
         CRM_Core_BAO_Domain::setDomain($domainID);
       }
       $result[$domainID] = array();
       foreach ($fieldsToSet as $name => $value) {
-        if(empty($fields['values'][$name]['config_only'])){
+        if (empty($fields['values'][$name]['config_only'])) {
           CRM_Core_BAO_Setting::_setItem(
             $fields['values'][$name],
             $value,
@@ -480,22 +494,22 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
             $domainID
           );
         }
-        if(!empty($fields['values'][$name]['prefetch'])){
-          if(!empty($fields['values'][$name]['config_key'])){
+        if (!empty($fields['values'][$name]['prefetch'])) {
+          if (!empty($fields['values'][$name]['config_key'])) {
             $name = $fields['values'][$name]['config_key'];
           }
           $config_keys[$name] = $value;
         }
         $result[$domainID][$name] = $value;
       }
-      if($reloadConfig){
+      if ($reloadConfig) {
         CRM_Core_Config::singleton($reloadConfig, $reloadConfig);
       }
 
-      if(!empty($config_keys)){
+      if (!empty($config_keys)) {
         CRM_Core_BAO_ConfigSetting::create($config_keys);
       }
-      if($reloadConfig){
+      if ($reloadConfig) {
         CRM_Core_BAO_Domain::resetDomain();
       }
     }
@@ -508,14 +522,16 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * This function filters on the fields like 'version' & 'debug' that are not settings
    *
-   * @param array $params Parameters as passed into API
-   * @param array $fields empty array to be populated with fields metadata
+   * @param array $params
+   *   Parameters as passed into API.
+   * @param array $fields
+   *   Empty array to be populated with fields metadata.
    * @param bool $createMode
    *
    * @throws api_Exception
    * @return array $fieldstoset name => value array of the fields to be set (with extraneous removed)
    */
-  static function validateSettingsInput($params, &$fields, $createMode = TRUE) {
+  public static function validateSettingsInput($params, &$fields, $createMode = TRUE) {
     $group = CRM_Utils_Array::value('group', $params);
 
     $ignoredParams = array(
@@ -539,7 +555,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
     );
     $settingParams = array_diff_key($params, array_fill_keys($ignoredParams, TRUE));
     $getFieldsParams = array('version' => 3);
-    if (count($settingParams) ==1) {
+    if (count($settingParams) == 1) {
       // ie we are only setting one field - we'll pass it into getfields for efficiency
       list($name) = array_keys($settingParams);
       $getFieldsParams['name'] = $name;
@@ -565,8 +581,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @value mixed value of the setting to be set
    * @fieldSpec array Metadata for given field (drawn from the xml)
    */
-  static function validateSetting(&$value, $fieldSpec) {
-    if($fieldSpec['type'] == 'String' && is_array($value)){
+  public static function validateSetting(&$value, $fieldSpec) {
+    if ($fieldSpec['type'] == 'String' && is_array($value)) {
       $value = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR,$value) . CRM_Core_DAO::VALUE_SEPARATOR;
     }
     if (empty($fieldSpec['validate_callback'])) {
@@ -586,7 +602,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @value mixed value of the setting to be set
    * @fieldSpec array Metadata for given field (drawn from the xml)
    */
-  static function validateBoolSetting(&$value, $fieldSpec) {
+  public static function validateBoolSetting(&$value, $fieldSpec) {
     if (!CRM_Utils_Rule::boolean($value)) {
       throw new api_Exception("Boolean value required for {$fieldSpec['name']}");
     }
@@ -613,7 +629,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * The following params will filter the result. If none are passed all settings will be returns
    *
-   * @param int $componentID id of relevant component
+   * @param int $componentID
+   *   Id of relevant component.
    * @param array $filters
    * @param int $domainID
    * @param null $profile
@@ -646,7 +663,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
       $settingsMetadata = CRM_Core_BAO_Cache::getItem('CiviCRM setting Spec', 'All', $componentID);
       if (empty($settingsMetadata)) {
         global $civicrm_root;
-        $metaDataFolders = array($civicrm_root. '/settings');
+        $metaDataFolders = array($civicrm_root . '/settings');
         CRM_Utils_Hook::alterSettingsFolders($metaDataFolders);
         $settingsMetadata = self::loadSettingsMetaDataFolders($metaDataFolders);
         CRM_Core_BAO_Cache::setItem($settingsMetadata,'CiviCRM setting Spec', 'All', $componentID);
@@ -674,7 +691,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
 
   /**
    * Load the settings files defined in a series of folders
-   * @param array $metaDataFolders list of folder paths
+   * @param array $metaDataFolders
+   *   List of folder paths.
    * @return array
    */
   public static function loadSettingsMetaDataFolders($metaDataFolders) {
@@ -693,7 +711,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
   /**
    * Load up settings metadata from files
    */
-  static function loadSettingsMetadata($metaDataFolder) {
+  public static function loadSettingsMetadata($metaDataFolder) {
     $settingMetaData = array();
     $settingsFiles = CRM_Utils_File::findFiles($metaDataFolder, '*.setting.php');
     foreach ($settingsFiles as $file) {
@@ -708,14 +726,16 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * Filter the settings metadata according to filters passed in. This is a convenience filter
    * and allows selective reverting / filling of settings
    *
-   * @param array $filters Filters to match against data
-   * @param array $settingSpec metadata to filter
+   * @param array $filters
+   *   Filters to match against data.
+   * @param array $settingSpec
+   *   Metadata to filter.
    */
-  static function _filterSettingsSpecification($filters, &$settingSpec) {
+  public static function _filterSettingsSpecification($filters, &$settingSpec) {
     if (empty($filters)) {
       return;
     }
-    else if (array_keys($filters) == array('name')) {
+    elseif (array_keys($filters) == array('name')) {
       $settingSpec = array($filters['name'] => CRM_Utils_Array::value($filters['name'], $settingSpec, ''));
       return;
     }
@@ -736,7 +756,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * Multisites have often been overlooked in upgrade scripts so can be expected to be missing
    * a number of settings
    */
-  static function updateSettingsFromMetaData() {
+  public static function updateSettingsFromMetaData() {
     $apiParams = array(
       'version' => 3,
       'domain_id' => 'all',
@@ -763,25 +783,26 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * Note that where the key name is being changed the 'legacy_key' will give us the old name
    */
-  static function convertConfigToSetting($name, $domainID = NULL) {
+  public static function convertConfigToSetting($name, $domainID = NULL) {
     // we have to force this here in case more than one domain is in play.
     // whenever there is a possibility of more than one domain we must force it
     $config = CRM_Core_Config::singleton();
     if (empty($domainID)) {
-      $domainID= CRM_Core_Config::domainID();
+      $domainID = CRM_Core_Config::domainID();
     }
     $domain = new CRM_Core_DAO_Domain();
     $domain->id = $domainID;
     $domain->find(TRUE);
     if ($domain->config_backend) {
       $values = unserialize($domain->config_backend);
-    } else {
+    }
+    else {
       $values = array();
     }
     $spec = self::getSettingSpecification(NULL, array('name' => $name), $domainID);
     $configKey = CRM_Utils_Array::value('config_key', $spec[$name], CRM_Utils_Array::value('legacy_key', $spec[$name], $name));
     //if the key is set to config_only we don't need to do anything
-    if(empty($spec[$name]['config_only'])){
+    if (empty($spec[$name]['config_only'])) {
       if (!empty($values[$configKey])) {
         civicrm_api('setting', 'create', array('version' => 3, $name => $values[$configKey], 'domain_id' => $domainID));
       }
@@ -810,7 +831,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *
    * @return array
    */
-  static function valueOptions($group,
+  static function valueOptions(
+    $group,
     $name,
     $system              = TRUE,
     $userID              = NULL,
@@ -868,7 +890,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @param int $userID
    * @param string $keyField
    */
-  static function setValueOption($group,
+  static function setValueOption(
+    $group,
     $name,
     $value,
     $system   = TRUE,
@@ -908,7 +931,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @param array $params
    * @param int $domainID
    */
-  static function fixAndStoreDirAndURL(&$params, $domainID = NULL) {
+  public static function fixAndStoreDirAndURL(&$params, $domainID = NULL) {
     if (self::isUpgradeFromPreFourOneAlpha1()) {
       return;
     }
@@ -983,7 +1006,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @param array $params
    * @param $group
    */
-  static function storeDirectoryOrURLPreferences(&$params, $group) {
+  public static function storeDirectoryOrURLPreferences(&$params, $group) {
     foreach ($params as $name => $value) {
       // always try to store relative directory or url from CMS root
       $value = ($group == self::DIRECTORY_PREFERENCES_NAME) ? CRM_Utils_File::relativeDirectory($value) : CRM_Utils_System::relativeURL($value);
@@ -996,7 +1019,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @param array $params
    * @param bool $setInConfig
    */
-  static function retrieveDirectoryAndURLPreferences(&$params, $setInConfig = FALSE) {
+  public static function retrieveDirectoryAndURLPreferences(&$params, $setInConfig = FALSE) {
     if (CRM_Core_Config::isUpgradeMode()) {
       $isJoomla = (defined('CIVICRM_UF') && CIVICRM_UF == 'Joomla') ? TRUE : FALSE;
       // hack to set the resource base url so that js/ css etc is loaded correctly
@@ -1088,7 +1111,7 @@ AND domain_id = %3
    *
    * @return boolean
    */
-  static function isUpgradeFromPreFourOneAlpha1() {
+  public static function isUpgradeFromPreFourOneAlpha1() {
     if (CRM_Core_Config::isUpgradeMode()) {
       $currentVer = CRM_Core_BAO_Domain::version();
       if (version_compare($currentVer, '4.1.alpha1') < 0) {