Merge pull request #5983 from relldoesphp/CRM-16544
[civicrm-core.git] / CRM / Core / OptionGroup.php
index 961d7aa9427690f5095ba383bc1d28e4b3f0aae7..7770090bd2bd7a72af7db7dd5be9af361664e53b 100644 (file)
@@ -3,7 +3,7 @@
  +--------------------------------------------------------------------+
  | CiviCRM version 4.6                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2014                                |
+ | Copyright CiviCRM LLC (c) 2004-2015                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
  | GNU Affero General Public License or the licensing of CiviCRM,     |
  | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
  +--------------------------------------------------------------------+
-*/
+ */
 
 /**
  *
  * @package CRM
- * @copyright CiviCRM LLC (c) 2004-2014
+ * @copyright CiviCRM LLC (c) 2004-2015
  * $Id$
  *
  */
@@ -36,10 +36,9 @@ class CRM_Core_OptionGroup {
   static $_values = array();
   static $_cache = array();
 
-  /*
+  /**
    * $_domainIDGroups array maintains the list of option groups for whom
    * domainID is to be considered.
-   *
    */
   static $_domainIDGroups = array(
     'from_email_address',
@@ -55,7 +54,7 @@ class CRM_Core_OptionGroup {
    *
    * @return array
    */
-  static function &valuesCommon(
+  public static function &valuesCommon(
     $dao, $flip = FALSE, $grouping = FALSE,
     $localize = FALSE, $valueColumnName = 'label'
   ) {
@@ -92,22 +91,31 @@ class CRM_Core_OptionGroup {
    * (radio, select, checkbox etc). OptionGroups for most cases have the
    * 'label' in the label colum and the 'id' or 'name' in the value column
    *
-   * @param $name       string  name of the option group
-   * @param $flip       boolean results are return in id => label format if false
+   * @param string $name
+   *   name of the option group.
+   * @param bool $flip
+   *   results are return in id => label format if false.
    *                            if true, the results are reversed
-   * @param $grouping   boolean if true, return the value in 'grouping' column
-   * @param $localize   boolean if true, localize the results before returning
-   * @param $condition  string  add another condition to the sql query
-   * @param $labelColumnName string the column to use for 'label'
-   * @param $onlyActive boolean return only the action option values
-   * @param $fresh      boolean ignore cache entries and go back to DB
-   * @param $keyColumnName string the column to use for 'key'
+   * @param bool $grouping
+   *   if true, return the value in 'grouping' column.
+   * @param bool $localize
+   *   if true, localize the results before returning.
+   * @param string $condition
+   *   add another condition to the sql query.
+   * @param string $labelColumnName
+   *   the column to use for 'label'.
+   * @param bool $onlyActive
+   *   return only the action option values.
+   * @param bool $fresh
+   *   ignore cache entries and go back to DB.
+   * @param string $keyColumnName
+   *   the column to use for 'key'.
    *
-   * @return array      the values as specified by the above params
-   * @static
+   * @return array
+   *   the values as specified by the above params
    * @void
    */
-  static function &values(
+  public static function &values(
     $name, $flip = FALSE, $grouping = FALSE,
     $localize = FALSE, $condition = NULL,
     $labelColumnName = 'label', $onlyActive = TRUE, $fresh = FALSE, $keyColumnName = 'value'
@@ -190,23 +198,27 @@ WHERE  v.option_group_id = g.id
   }
 
   /**
-   * This function retrieves all the values for the specific option group by id
+   * This function retrieves all the values for the specific option group by id.
    * this is primarily used to create various html based form elements
    * (radio, select, checkbox etc). OptionGroups for most cases have the
    * 'label' in the label colum and the 'id' or 'name' in the value column
    *
-   * @param $id         integer id of the option group
-   * @param $flip       boolean results are return in id => label format if false
-   *                            if true, the results are reversed
-   * @param $grouping   boolean if true, return the value in 'grouping' column
-   * @param $localize   boolean if true, localize the results before returning
-   * @param $labelColumnName string the column to use for 'label'
-   *
+   * @param int $id
+   *   id of the option group.
+   * @param bool $flip
+   *   results are return in id => label format if false.
+   *   if true, the results are reversed
+   * @param bool $grouping
+   *   if true, return the value in 'grouping' column.
+   * @param bool $localize
+   *   if true, localize the results before returning.
+   * @param string $labelColumnName
+   *   the column to use for 'label'.
    * @param bool $onlyActive
    * @param bool $fresh
    *
-   * @return array      the values as specified by the above params
-   * @static
+   * @return array
+   *   Array of values as specified by the above params
    * @void
    */
   public static function &valuesByID($id, $flip = FALSE, $grouping = FALSE, $localize = FALSE, $labelColumnName = 'label', $onlyActive = TRUE, $fresh = FALSE) {
@@ -246,23 +258,23 @@ WHERE  v.option_group_id = g.id
    * is assigned a new fieldname by id or id's by title
    * (each within a specificied option_group)
    *
-   * @param  array   $params   Reference array of values submitted by the form. Based on
-   *                           $flip, creates new elements in $params for each field in
-   *                           the $names array.
-   *                           If $flip = false, adds     root field name     => title
-   *                           If $flip = true, adds      actual field name   => id
+   * @param array $params
+   *   Reference array of values submitted by the form. Based on.
+   *   $flip, creates new elements in $params for each field in
+   *   the $names array.
+   *   If $flip = false, adds root field name => title
+   *   If $flip = true, adds actual field name => id
    *
-   * @param  array   $names    Reference array of fieldnames we want transformed.
-   *                           Array key = 'postName' (field name submitted by form in $params).
-   *                           Array value = array(
-     'newName' => $newName, 'groupName' => $groupName).
+   * @param array $names
+   *   Reference array of fieldnames we want transformed.
+   *   Array key = 'postName' (field name submitted by form in $params).
+   *   Array value = array('newName' => $newName, 'groupName' => $groupName).
    *
    *
-   * @param  boolean $flip
+   * @param bool $flip
    *
    * @return void
    *
-   * @static
    */
   public static function lookupValues(&$params, &$names, $flip = FALSE) {
     foreach ($names as $postName => $value) {
@@ -289,14 +301,14 @@ WHERE  v.option_group_id = g.id
           }
 
           if ($flip) {
-            $p        = array(1 => array($postValue, 'String'));
+            $p = array(1 => array($postValue, 'String'));
             $lookupBy = 'v.label= %1';
-            $select   = "v.value";
+            $select = "v.value";
           }
           else {
-            $p        = array(1 => array($postValue, 'Integer'));
+            $p = array(1 => array($postValue, 'Integer'));
             $lookupBy = 'v.value = %1';
-            $select   = "v.label";
+            $select = "v.label";
           }
 
           $p[2] = array($value['groupName'], 'String');
@@ -342,7 +354,8 @@ WHERE  v.option_group_id = g.id
     if ($onlyActiveValue) {
       $query .= " AND  v.is_active = 1 ";
     }
-    $p = array(1 => array($groupName, 'String'),
+    $p = array(
+      1 => array($groupName, 'String'),
       2 => array($value, 'Integer'),
     );
     $dao = CRM_Core_DAO::executeQuery($query, $p);
@@ -361,10 +374,11 @@ WHERE  v.option_group_id = g.id
    *
    * @return null
    */
-  static function getValue($groupName,
+  public static function getValue(
+    $groupName,
     $label,
     $labelField = 'label',
-    $labelType  = 'String',
+    $labelType = 'String',
     $valueField = 'value'
   ) {
     if (empty($label)) {
@@ -382,7 +396,8 @@ WHERE  v.option_group_id = g.id
   AND  v.$labelField     = %2
 ";
 
-    $p = array(1 => array($groupName, 'String'),
+    $p = array(
+      1 => array($groupName, 'String'),
       2 => array($label, $labelType),
     );
     $dao = CRM_Core_DAO::executeQuery($query, $p);
@@ -397,11 +412,12 @@ WHERE  v.option_group_id = g.id
   /**
    * Get option_value.value from default option_value row for an option group
    *
-   * @param string $groupName the name of the option group
+   * @param string $groupName
+   *   The name of the option group.
    *
-   * @static
    *
-   * @return string   the value from the row where is_default = true
+   * @return string
+   *   the value from the row where is_default = true
    */
   public static function getDefaultValue($groupName) {
     if (empty($groupName)) {
@@ -426,12 +442,14 @@ WHERE  v.option_group_id = g.id
   }
 
   /**
-   * Creates a new option group with the passed in values
+   * Creates a new option group with the passed in values.
    * @TODO: Should update the group if it already exists intelligently, so multi-lingual is
    * not messed up. Currently deletes the old group
    *
-   * @param string $groupName the name of the option group - make sure there is no conflict
-   * @param array $values the associative array that has information on the option values
+   * @param string $groupName
+   *   The name of the option group - make sure there is no conflict.
+   * @param array $values
+   *   The associative array that has information on the option values.
    *                          the keys of this array are:
    *                          string 'title'       (required)
    *                          string 'value'       (required)
@@ -440,21 +458,23 @@ WHERE  v.option_group_id = g.id
    *                          int    'weight'      (optional) - the order in which the value are displayed
    *                          bool   'is_default'  (optional) - is this the default one to display when rendered in form
    *                          bool   'is_active'   (optional) - should this element be rendered
-   * @param int $defaultID (reference) - the option value ID of the default element (if set) is returned else 'null'
-   * @param null $groupTitle the optional label of the option group else set to group name
+   * @param int $defaultID
+   *   (reference) - the option value ID of the default element (if set) is returned else 'null'.
+   * @param null $groupTitle
+   *   The optional label of the option group else set to group name.
    *
-   * @static
    *
-   * @return int   the option group ID
+   * @return int
+   *   the option group ID
    */
   public static function createAssoc($groupName, &$values, &$defaultID, $groupTitle = NULL) {
     self::deleteAssoc($groupName);
     if (!empty($values)) {
-      $group              = new CRM_Core_DAO_OptionGroup();
-      $group->name        = $groupName;
-      $group->title       = empty($groupTitle) ? $groupName : $groupTitle;
+      $group = new CRM_Core_DAO_OptionGroup();
+      $group->name = $groupName;
+      $group->title = empty($groupTitle) ? $groupName : $groupTitle;
       $group->is_reserved = 1;
-      $group->is_active   = 1;
+      $group->is_active = 1;
       $group->save();
 
       foreach ($values as $v) {
@@ -558,7 +578,8 @@ SELECT v.label
  WHERE g.id = v.option_group_id
    AND g.name  = %1
    AND v.value = %2";
-    $params = array(1 => array($groupName, 'String'),
+    $params = array(
+      1 => array($groupName, 'String'),
       2 => array($value, 'String'),
     );
     return CRM_Core_DAO::singleValueQuery($query, $params);
@@ -570,11 +591,14 @@ SELECT v.label
    * @param string $field
    * @param string $fieldType
    * @param bool $active
+   * @param bool $localize
+   *   if true, localize the results before returning.
    *
    * @return array
    */
-  static function getRowValues($groupName, $fieldValue, $field = 'name',
-    $fieldType = 'String', $active = TRUE
+  public static function getRowValues(
+    $groupName, $fieldValue, $field = 'name',
+    $fieldType = 'String', $active = TRUE, $localize = FALSE
   ) {
     $query = "
 SELECT v.id, v.label, v.value, v.name, v.weight, v.description
@@ -590,7 +614,8 @@ WHERE  v.option_group_id = g.id
       $query .= " AND  v.is_active = 1";
     }
 
-    $p = array(1 => array($groupName, 'String'),
+    $p = array(
+      1 => array($groupName, 'String'),
       2 => array($fieldValue, $fieldType),
     );
     $dao = CRM_Core_DAO::executeQuery($query, $p);
@@ -598,27 +623,39 @@ WHERE  v.option_group_id = g.id
 
     if ($dao->fetch()) {
       foreach (array(
-        'id', 'name', 'value', 'label', 'weight', 'description') as $fld) {
+                 'id',
+                 'name',
+                 'value',
+                 'label',
+                 'weight',
+                 'description',
+               ) as $fld) {
         $row[$fld] = $dao->$fld;
       }
     }
+
+    if ($localize) {
+      foreach (array('label', 'description') as $f) {
+        $row[$f] = ts($row[$f]);
+      }
+    }
+
     return $row;
   }
 
-  /*
-   * Wrapper for calling values with fresh set to true to empty the given value
+  /**
+   * Wrapper for calling values with fresh set to true to empty the given value.
    *
    * Since there appears to be some inconsistency
    * (@todo remove inconsistency) around the pseudoconstant operations
    * (for example CRM_Contribution_Pseudoconstant::paymentInstrument doesn't specify isActive
    * which is part of the cache key
    * will do a couple of variations & aspire to someone cleaning it up later
-   */
-  /**
-   * @param $name
+   *
+   * @param string $name
    * @param array $params
    */
-  public static function flush($name, $params = array()){
+  public static function flush($name, $params = array()) {
     $defaults = array(
       'flip' => FALSE,
       'grouping' => FALSE,
@@ -655,4 +692,5 @@ WHERE  v.option_group_id = g.id
     self::$_cache = array();
     CRM_Utils_Cache::singleton()->flush();
   }
+
 }