CRM-14931 - Nicer formating of statusBounce errors
[civicrm-core.git] / CRM / Core / PseudoConstant.php
index 30c01bd552927de8e29da5cfd84147ca30b414d7..a93e07f59e0265a9cbc897ee223c4f9e8ab9c925 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.4                                                |
+ | CiviCRM version 4.5                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013                                |
+ | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -43,7 +43,7 @@
  * This provides greater consistency/predictability after flushing.
  *
  * @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
  * $Id$
  *
  */
@@ -205,6 +205,7 @@ class CRM_Core_PseudoConstant {
   /**
    * Low-level option getter, rarely accessed directly.
    * NOTE: Rather than calling this function directly use CRM_*_BAO_*::buildOptions()
+   * @see http://wiki.civicrm.org/confluence/display/CRMDOC/Pseudoconstant+%28option+list%29+Reference
    *
    * @param String $daoName
    * @param String $fieldName
@@ -246,7 +247,7 @@ class CRM_Core_PseudoConstant {
 
       if (!empty($customField->option_group_id)) {
         $options = CRM_Core_OptionGroup::valuesByID($customField->option_group_id,
-          $flip,
+          FALSE,
           $params['grouping'],
           $params['localize'],
           // Note: for custom fields the 'name' column is NULL
@@ -265,10 +266,10 @@ class CRM_Core_PseudoConstant {
         elseif ($customField->data_type === 'Boolean') {
           $options = $context == 'validate' ? array(0, 1) : array(1 => ts('Yes'), 0 => ts('No'));
         }
-        $options = $options && $flip ? array_flip($options) : $options;
       }
-      if ($options !== FALSE) {
-        CRM_Utils_Hook::customFieldOptions($customField->id, $options, FALSE);
+      CRM_Utils_Hook::customFieldOptions($customField->id, $options, FALSE);
+      if ($options && $flip) {
+        $options = array_flip($options);
       }
       $customField->free();
       return $options;
@@ -283,16 +284,17 @@ class CRM_Core_PseudoConstant {
       return FALSE;
     }
 
-    // If the field is an enum, explode the enum definition and return the array.
-    if (isset($fieldSpec['enumValues'])) {
-      // use of a space after the comma is inconsistent in xml
-      $enumStr = str_replace(', ', ',', $fieldSpec['enumValues']);
-      $output = explode(',', $enumStr);
-      return array_combine($output, $output);
-    }
-
     elseif (!empty($fieldSpec['pseudoconstant'])) {
       $pseudoconstant = $fieldSpec['pseudoconstant'];
+
+      // if callback is specified..
+      if(!empty($pseudoconstant['callback'])) {
+        list($className, $fnName) = explode('::', $pseudoconstant['callback']);
+        if (method_exists($className, $fnName)) {
+          return call_user_func(array($className, $fnName));
+        }
+      }
+
       // Merge params with schema defaults
       $params += array(
         'condition' => CRM_Utils_Array::value('condition', $pseudoconstant, array()),
@@ -510,9 +512,10 @@ class CRM_Core_PseudoConstant {
         return NULL;
       }
       // We don't have good mapping so have to do a bit of guesswork from the menu
-      list(, , , $ent) = explode('_', $daoName);
+      list(, $parent, , $child) = explode('_', $daoName);
       $sql = "SELECT path FROM civicrm_menu
-        WHERE page_callback LIKE '%CRM_Admin_Page_$ent%'
+        WHERE page_callback LIKE '%CRM_Admin_Page_$child%' OR page_callback LIKE '%CRM_{$parent}_Page_$child%'
+        ORDER BY page_callback
         LIMIT 1";
       return CRM_Core_Dao::singleValueQuery($sql);
     }
@@ -528,12 +531,16 @@ class CRM_Core_PseudoConstant {
    *
    * Note: any database errors will be trapped by the DAO.
    *
-   * @param array   $var        the associative array we will fill
-   * @param string  $name       the name of the DAO
-   * @param boolean $all        get all objects. default is to get only active ones.
-   * @param string  $retrieve   the field that we are interested in (normally name, differs in some objects)
-   * @param string  $filter     the field that we want to filter the result set with
-   * @param string  $condition  the condition that gets passed to the final query as the WHERE clause
+   * @param array $var the associative array we will fill
+   * @param string $name the name of the DAO
+   * @param boolean $all get all objects. default is to get only active ones.
+   * @param string $retrieve the field that we are interested in (normally name, differs in some objects)
+   * @param string $filter the field that we want to filter the result set with
+   * @param string $condition the condition that gets passed to the final query as the WHERE clause
+   *
+   * @param null $orderby
+   * @param string $key
+   * @param null $force
    *
    * @return void
    * @access public
@@ -592,8 +599,7 @@ class CRM_Core_PseudoConstant {
    * @access public
    * @static
    *
-   * @param boolean $name pseudoconstant to be flushed
-   *
+   * @param bool|string $name pseudoconstant to be flushed
    */
   public static function flush($name = 'cache') {
     if (isset(self::$$name)) {
@@ -611,7 +617,7 @@ class CRM_Core_PseudoConstant {
    *
    * The static array activityType is returned
    *
-   * @param boolean $all - get All Activity  types - default is to get only active ones.
+   * @internal param bool $all - get All Activity  types - default is to get only active ones.
    *
    * @access public
    * @static
@@ -691,10 +697,11 @@ class CRM_Core_PseudoConstant {
    * @access public
    * @static
    *
-   * @param int $id -  Optional id to return
+   * @param bool|int $id -  Optional id to return
    *
-   * @return array - array reference of all State/Provinces.
+   * @param bool $limit
    *
+   * @return array - array reference of all State/Provinces.
    */
   public static function &stateProvince($id = FALSE, $limit = TRUE) {
     if (($id && !CRM_Utils_Array::value($id, self::$stateProvince)) || !self::$stateProvince || !$id) {
@@ -746,7 +753,9 @@ class CRM_Core_PseudoConstant {
    * @access public
    * @static
    *
-   * @param int $id  -     Optional id to return
+   * @param bool|int $id -     Optional id to return
+   *
+   * @param bool $limit
    *
    * @return array - array reference of all State/Province abbreviations.
    */
@@ -812,10 +821,11 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @param int $id - Optional id to return
+   * @param bool|int $id - Optional id to return
    *
-   * @return array - array reference of all countries.
+   * @param bool $applyLimit
    *
+   * @return array - array reference of all countries.
    */
   public static function country($id = FALSE, $applyLimit = TRUE) {
     if (($id && !CRM_Utils_Array::value($id, self::$country)) || !self::$country || !$id) {
@@ -889,8 +899,9 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @return array - array reference of all country ISO codes.
+   * @param bool $id
    *
+   * @return array - array reference of all country ISO codes.
    */
   public static function &countryIsoCode($id = FALSE) {
     if (!self::$countryIsoCode) {
@@ -918,14 +929,13 @@ WHERE  id = %1";
    *
    * Note: any database errors will be trapped by the DAO.
    *
-   * @param string $groupType     type of group(Access/Mailing)
-   * @param boolen $excludeHidden exclude hidden groups.
+   * @param string $groupType type of group(Access/Mailing)
+   * @param bool|\boolen $excludeHidden exclude hidden groups.
    *
    * @access public
    * @static
    *
    * @return array - array reference of all groups.
-   *
    */
   public static function &allGroup($groupType = NULL, $excludeHidden = TRUE) {
     $condition = CRM_Contact_BAO_Group::groupTypeCondition($groupType, $excludeHidden);
@@ -954,8 +964,9 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @return mixed - instance of CRM_Contact_BAO_GroupNesting
+   * @param bool $styledLabels
    *
+   * @return mixed - instance of CRM_Contact_BAO_GroupNesting
    */
   public static function &groupIterator($styledLabels = FALSE) {
     if (!self::$groupIterator) {
@@ -979,14 +990,13 @@ WHERE  id = %1";
    *
    * Note: any database errors will be trapped by the DAO.
    *
-   * @param string $groupType     type of group(Access/Mailing)
-   * @param boolen $excludeHidden exclude hidden groups.
-
+   * @param string $groupType type of group(Access/Mailing)
+   * @param bool|\boolen $excludeHidden exclude hidden groups.
+   *
    * @access public
    * @static
    *
    * @return array - array reference of all groups.
-   *
    */
   public static function group($groupType = NULL, $excludeHidden = TRUE) {
     return CRM_Core_Permission::group($groupType, $excludeHidden);
@@ -1004,8 +1014,11 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @return array - array reference of all groups.
+   * @param bool $onlyPublic
+   * @param null $groupType
+   * @param bool $excludeHidden
    *
+   * @return array - array reference of all groups.
    */
   public static function &staticGroup($onlyPublic = FALSE, $groupType = NULL, $excludeHidden = TRUE) {
     if (!self::$staticGroup) {
@@ -1372,10 +1385,9 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @param int $id -  Optional id to return
+   * @param bool|int $id -  Optional id to return
    *
    * @return array - array reference of all Counties
-   *
    */
   public static function &county($id = FALSE) {
     if (!self::$county) {
@@ -1404,11 +1416,12 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @param boolean $all  - get payment processors     - default is to get only active ones.
+   * @param boolean $all - get payment processors     - default is to get only active ones.
    * @param boolean $test - get test payment processors
    *
-   * @return array - array of all payment processors
+   * @param null $additionalCond
    *
+   * @return array - array of all payment processors
    */
   public static function &paymentProcessor($all = FALSE, $test = FALSE, $additionalCond = NULL) {
     $condition = "is_test = ";
@@ -1438,10 +1451,12 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @param boolean $all  - get payment processors     - default is to get only active ones.
+   * @param boolean $all - get payment processors     - default is to get only active ones.
    *
-   * @return array - array of all payment processor types
+   * @param null $id
+   * @param string $return
    *
+   * @return array - array of all payment processor types
    */
   public static function &paymentProcessorType($all = FALSE, $id = NULL, $return = 'title') {
     $cacheKey = $id . '_' .$return;
@@ -1459,6 +1474,8 @@ WHERE  id = %1";
    *
    * @access public
    *
+   * @param bool $id
+   *
    * @return array - array reference of all World Regions
    * @static
    */
@@ -1489,6 +1506,8 @@ WHERE  id = %1";
    * @access public
    * @static
    *
+   * @param string $column
+   *
    * @return array - array reference of all activity statuses
    */
   public static function &activityStatus($column = 'label') {
@@ -1514,8 +1533,9 @@ WHERE  id = %1";
    * @access public
    * @static
    *
-   * @return array - array reference of all Visibility levels.
+   * @param string $column
    *
+   * @return array - array reference of all Visibility levels.
    */
   public static function &visibility($column = 'label') {
     if (!isset(self::$visibility)) {
@@ -1529,6 +1549,12 @@ WHERE  id = %1";
     return self::$visibility[$column];
   }
 
+  /**
+   * @param $countryID
+   * @param string $field
+   *
+   * @return array
+   */
   public static function &stateProvinceForCountry($countryID, $field = 'name') {
     static $_cache = NULL;
 
@@ -1578,6 +1604,11 @@ ORDER BY name";
     return $result;
   }
 
+  /**
+   * @param $stateID
+   *
+   * @return array
+   */
   public static function &countyForState($stateID) {
     if (is_array($stateID)) {
       $states = implode(", ", $stateID);
@@ -1666,8 +1697,9 @@ WHERE  id = %1
    *
    * @param $filter - get All Email Greetings - default is to get only active ones.
    *
-   * @return array - array reference of all greetings.
+   * @param string $columnName
    *
+   * @return array - array reference of all greetings.
    */
   public static function greeting($filter, $columnName = 'label') {
     $index = $filter['greeting_type'] . '_' . $columnName;
@@ -1777,8 +1809,10 @@ WHERE  id = %1
    *
    * @param boolean $optionGroupName - get All  Option Group values- default is to get only active ones.
    *
-   * @return array - array reference of all Option Group Name
+   * @param null $id
+   * @param null $condition
    *
+   * @return array - array reference of all Option Group Name
    */
   public static function accountOptionValues($optionGroupName, $id = null, $condition = null) {
     $cacheKey = $optionGroupName . '_' . $condition;