Use new buildOptions in the api CRM-12464
authorColeman Watts <coleman@civicrm.org>
Thu, 9 May 2013 18:56:19 +0000 (11:56 -0700)
committerColeman Watts <coleman@civicrm.org>
Thu, 30 May 2013 05:14:05 +0000 (22:14 -0700)
----------------------------------------
* CRM-12464: Add PseudoConstants to Schema Metadata
  http://issues.civicrm.org/jira/browse/CRM-12464

api/v3/Constant.php
api/v3/Generic.php

index b7987c3b8aebfae567f24ecde26704ecc73e1998..2b3e89fc835587f1b02d415edc9dfdb27a847aa7 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 /**
- * File for CiviCRM APIv3 pseudoconstants
+ * CiviCRM APIv3 pseudoconstants - DEPRECATED
  *
  * @package CiviCRM_APIv3
  * @subpackage API_Constant
@@ -37,8 +37,8 @@
  */
 
 /**
- * Generic file to retrieve all the constants and
- * pseudo constants used in CiviCRM
+ * This api is DEPRECATED as of CiviCRM 4.4.
+ * It's recommended to use the api getoptions action instead
  *
  *  @param  string  Name of a public static method of
  *                  CRM_Core_PseudoContant: one of
index 250a353b0467bc18de8c8fe7bc9f936c603e1783..6ad82b3098c7c84e61fbb7ab72221f056aa5affd 100644 (file)
@@ -204,43 +204,17 @@ function civicrm_api3_generic_replace($apiRequest) {
 /**
  * API wrapper for getoptions function
  *
- * @param array $apiRequest api request as an array. Keys are
+ * @param array $apiRequest api request as an array.
  *
  * @return array of results
  */
 function civicrm_api3_generic_getoptions($apiRequest) {
-  $field = $apiRequest['params']['field'];
-  $getFieldsArray = array(
-    'version' => 3,
-    'action' => 'create',
-    'options' => array('get_options' => $field),
-  );
-  // First try to retrieve the options from getfields
-  $result = civicrm_api($apiRequest['entity'], 'getfields', $getFieldsArray);
-  if (!isset($result['values'][$field]) && isset($result['values'][$field . '_id'])) {
-    $field = $field . '_id';
-  }
-  if (!empty($result['values'][$field]['options'])) {
-    return civicrm_api3_create_success($result['values'][$field]['options']);
-  }
-  // If that didn't work, try the constant api
-  if (substr($field, -3) == '_id') {
-    // Convert foo_id to just plain foo
-    $field = substr($field, 0, -3);
-  }
-  $params = array('name' => _civicrm_api_get_camel_name($field));
-  $entity = strtolower($apiRequest['entity']);
-  if ($entity == 'contribution') {
-    $params['class'] = 'CRM_Contribute_PseudoConstant';
-  }
-  elseif ($entity == 'event' || $entity == 'participant') {
-    $params['class'] = 'CRM_Event_PseudoConstant';
-  }
-  elseif (strpos($entity, 'membership') === 0) {
-    $params['class'] = 'CRM_Member_PseudoConstant';
+  $daoName = _civicrm_api3_get_DAO($apiRequest['entity']);
+  $options = $daoName::buildOptions($apiRequest['params']['field']);
+  if ($options === FALSE) {
+    return civicrm_api3_create_error("The field '{$apiRequest['params']['field']}' either doesn't exist or has no associated option list.");
   }
-  require_once 'api/v3/Constant.php';
-  return civicrm_api3_constant_get($params);
+  return civicrm_api3_create_success($options);
 }
 
 /**