X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=api%2Fv3%2FGeneric.php;h=cef725e0850aea36088db56d168fa94c52dc2348;hb=af3775b322b9e4f11d097067367f0ea7763f5f10;hp=2dda583681138b668bb52df1e732534d3a80eb1a;hpb=1024e1784fb68b8529a77143f5191a60d70837cf;p=civicrm-core.git diff --git a/api/v3/Generic.php b/api/v3/Generic.php index 2dda583681..cef725e085 100644 --- a/api/v3/Generic.php +++ b/api/v3/Generic.php @@ -1,8 +1,38 @@ fields function & then augment * that information by calling the _spec functions that apply to the relevant function * Note that we use 'unique' field names as described in the xml/schema files @@ -10,13 +40,16 @@ * access multiple objects e.g. contact api accesses is_deleted from the activity * table & from the contact table * - * @param array $apiRequest api request as an array. Keys are - * - entity: string - * - action: string - * - version: string - * - function: callback (mixed) - * - params: array, varies - * @return array API success object + * @param array $apiRequest + * Api request as an array. Keys are. + * - entity: string + * - action: string + * - version: string + * - function: callback (mixed) + * - params: array, varies + * + * @return array + * API success object */ function civicrm_api3_generic_getfields($apiRequest) { static $results = array(); @@ -24,20 +57,24 @@ function civicrm_api3_generic_getfields($apiRequest) { $results = array(); // we will also clear pseudoconstants here - should potentially be moved to relevant BAO classes CRM_Core_PseudoConstant::flush(); - if(!empty($apiRequest['params']['fieldname'])){ + if (!empty($apiRequest['params']['fieldname'])) { CRM_Utils_PseudoConstant::flushConstant($apiRequest['params']['fieldname']); } - if(!empty($apiRequest['params']['option_group_id'])){ - $optionGroupName = civicrm_api('option_group', 'getvalue', array('version' => 3, 'id' => $apiRequest['params']['option_group_id'], 'return' => 'name') ); - if(is_string($optionGroupName)){ + if (!empty($apiRequest['params']['option_group_id'])) { + $optionGroupName = civicrm_api('option_group', 'getvalue', array( + 'version' => 3, + 'id' => $apiRequest['params']['option_group_id'], + 'return' => 'name', + )); + if (is_string($optionGroupName)) { CRM_Utils_PseudoConstant::flushConstant(_civicrm_api_get_camel_name($optionGroupName)); } } } - $entity = _civicrm_api_get_camel_name($apiRequest['entity']); - $lcase_entity = _civicrm_api_get_entity_name_from_camel($entity); + $entity = $apiRequest['entity']; + $lowercase_entity = _civicrm_api_get_entity_name_from_camel($entity); $subentity = CRM_Utils_Array::value('contact_type', $apiRequest['params']); - $action = strtolower(CRM_Utils_Array::value('action', $apiRequest['params'])); + $action = CRM_Utils_Array::value('action', $apiRequest['params']); $sequential = empty($apiRequest['params']) ? 0 : 1; $apiOptions = CRM_Utils_Array::value('options', $apiRequest['params'], array()); if (!$action || $action == 'getvalue' || $action == 'getcount') { @@ -54,6 +91,7 @@ function civicrm_api3_generic_getfields($apiRequest) { case 'getfields': $values = _civicrm_api_get_fields($entity, FALSE, $apiRequest['params']); return civicrm_api3_create_success($values, $apiRequest['params'], $entity, 'getfields'); + case 'create': case 'update': case 'replace': @@ -61,22 +99,23 @@ function civicrm_api3_generic_getfields($apiRequest) { case 'get': case 'getsingle': case 'getcount': + case 'getstat': $metadata = _civicrm_api_get_fields($apiRequest['entity'], $unique, $apiRequest['params']); - if (empty($metadata['id'])){ + if (empty($metadata['id'])) { // if id is not set we will set it eg. 'id' from 'case_id', case_id will be an alias - if(!empty($metadata[strtolower($apiRequest['entity']) . '_id'])) { - $metadata['id'] = $metadata[$lcase_entity . '_id']; - unset($metadata[$lcase_entity . '_id']); - $metadata['id']['api.aliases'] = array($lcase_entity . '_id'); + if (!empty($metadata[strtolower($apiRequest['entity']) . '_id'])) { + $metadata['id'] = $metadata[$lowercase_entity . '_id']; + unset($metadata[$lowercase_entity . '_id']); + $metadata['id']['api.aliases'] = array($lowercase_entity . '_id'); } } - else{ + else { // really the preference would be to set the unique name in the xml // question is which is a less risky fix this close to a release - setting in xml for the known failure // (note) or setting for all api where fields is returning 'id' & we want to accept 'note_id' @ the api layer // nb we don't officially accept note_id anyway - rationale here is more about centralising a now-tested // inconsistency - $metadata['id']['api.aliases'] = array($lcase_entity . '_id'); + $metadata['id']['api.aliases'] = array($lowercase_entity . '_id'); } break; @@ -86,7 +125,7 @@ function civicrm_api3_generic_getfields($apiRequest) { 'title' => $entity . ' ID', 'name' => 'id', 'api.required' => 1, - 'api.aliases' => array($lcase_entity . '_id'), + 'api.aliases' => array($lowercase_entity . '_id'), 'type' => CRM_Utils_Type::T_INT, )); break; @@ -103,7 +142,8 @@ function civicrm_api3_generic_getfields($apiRequest) { 'title' => 'Context', ), ); - break; + break; + default: // oddballs are on their own $metadata = array(); @@ -115,11 +155,13 @@ function civicrm_api3_generic_getfields($apiRequest) { list ($apiProvider, $hypApiRequest) = \Civi\Core\Container::singleton()->get('civi_api_kernel')->resolve($hypApiRequest); if (isset($hypApiRequest['function'])) { $helper = '_' . $hypApiRequest['function'] . '_spec'; - } else { + } + else { // not implemented MagicFunctionProvider $helper = NULL; } - } catch (\Civi\API\Exception\NotImplementedException $e) { + } + catch (\Civi\API\Exception\NotImplementedException $e) { $helper = NULL; } if (function_exists($helper)) { @@ -130,6 +172,10 @@ function civicrm_api3_generic_getfields($apiRequest) { $fieldsToResolve = (array) CRM_Utils_Array::value('get_options', $apiOptions, array()); foreach ($metadata as $fieldname => $fieldSpec) { + // Ensure 'name' is set + if (!isset($fieldSpec['name'])) { + $metadata[$fieldname]['name'] = $fieldname; + } _civicrm_api3_generic_get_metadata_options($metadata, $apiRequest, $fieldname, $fieldSpec, $fieldsToResolve); } @@ -138,34 +184,38 @@ function civicrm_api3_generic_getfields($apiRequest) { } /** - * API return function to reformat results as count + * API return function to reformat results as count. * - * @param array $apiRequest api request as an array. Keys are + * @param array $apiRequest + * Api request as an array. Keys are. * * @throws API_Exception - * @return integer count of results + * @return int + * count of results */ function civicrm_api3_generic_getcount($apiRequest) { $apiRequest['params']['options']['is_count'] = TRUE; $result = civicrm_api($apiRequest['entity'], 'get', $apiRequest['params']); - if(is_numeric (CRM_Utils_Array::value('values', $result))) { + if (is_numeric(CRM_Utils_Array::value('values', $result))) { return (int) $result['values']; } - if(!isset($result['count'])) { + if (!isset($result['count'])) { throw new API_Exception(ts('Unexpected result from getcount') . print_r($result, TRUE)); } return $result['count']; } /** - * API return function to reformat results as single result + * API return function to reformat results as single result. * - * @param array $apiRequest api request as an array. Keys are + * @param array $apiRequest + * Api request as an array. Keys are. * - * @return integer count of results + * @return int + * count of results */ function civicrm_api3_generic_getsingle($apiRequest) { - // so the first entity is always result['values'][0] + // So the first entity is always result['values'][0]. $apiRequest['params']['sequential'] = 1; $result = civicrm_api($apiRequest['entity'], 'get', $apiRequest['params']); if ($result['is_error'] !== 0) { @@ -181,11 +231,13 @@ function civicrm_api3_generic_getsingle($apiRequest) { } /** - * API return function to reformat results as single value + * API return function to reformat results as single value. * - * @param array $apiRequest api request as an array. Keys are + * @param array $apiRequest + * Api request as an array. Keys are. * - * @return integer count of results + * @return int + * count of results */ function civicrm_api3_generic_getvalue($apiRequest) { $apiRequest['params']['sequential'] = 1; @@ -211,6 +263,8 @@ function civicrm_api3_generic_getvalue($apiRequest) { } /** + * Get count of contact references. + * * @param array $params */ function _civicrm_api3_generic_getrefcount_spec(&$params) { @@ -219,12 +273,14 @@ function _civicrm_api3_generic_getrefcount_spec(&$params) { } /** - * API to determine if a record is in-use + * API to determine if a record is in-use. * - * @param array $apiRequest api request as an array + * @param array $apiRequest + * Api request as an array. * * @throws API_Exception - * @return array API result (int 0 or 1) + * @return array + * API result (int 0 or 1) */ function civicrm_api3_generic_getrefcount($apiRequest) { $entityToClassMap = CRM_Core_DAO_AllCoreTables::daoToClass(); @@ -245,25 +301,29 @@ function civicrm_api3_generic_getrefcount($apiRequest) { } /** - * API wrapper for replace function + * API wrapper for replace function. * - * @param array $apiRequest api request as an array. Keys are + * @param array $apiRequest + * Api request as an array. Keys are. * - * @return integer count of results + * @return int + * count of results */ function civicrm_api3_generic_replace($apiRequest) { return _civicrm_api3_generic_replace($apiRequest['entity'], $apiRequest['params']); } /** - * API wrapper for getoptions function + * API wrapper for getoptions function. * - * @param array $apiRequest api request as an array. + * @param array $apiRequest + * Api request as an array. * - * @return array of results + * @return array + * Array of results */ function civicrm_api3_generic_getoptions($apiRequest) { - // Resolve aliases + // Resolve aliases. $fieldName = _civicrm_api3_api_resolve_alias($apiRequest['entity'], $apiRequest['params']['field']); if (!$fieldName) { return civicrm_api3_create_error("The field '{$apiRequest['params']['field']}' doesn't exist."); @@ -286,6 +346,8 @@ function civicrm_api3_generic_getoptions($apiRequest) { } /** + * Get metadata. + * * Function fills the 'options' array on the metadata returned by getfields if * 1) the param option 'get_options' is defined - e.g. $params['options']['get_options'] => array('custom_1) * (this is passed in as the $fieldsToResolve array) @@ -296,13 +358,17 @@ function civicrm_api3_generic_getoptions($apiRequest) { * * This function is only split out for the purpose of code clarity / comment block documentation * - * @param array $metadata the array of metadata that will form the result of the getfields function - * @param $apiRequest - * @param string $fieldname field currently being processed - * @param array $fieldSpec metadata for that field - * @param array $fieldsToResolve anny field resolutions specifically requested + * @param array $metadata + * The array of metadata that will form the result of the getfields function. + * @param array $apiRequest + * @param string $fieldname + * Field currently being processed. + * @param array $fieldSpec + * Metadata for that field. + * @param array $fieldsToResolve + * Anny field resolutions specifically requested. */ -function _civicrm_api3_generic_get_metadata_options(&$metadata, $apiRequest, $fieldname, $fieldSpec, $fieldsToResolve){ +function _civicrm_api3_generic_get_metadata_options(&$metadata, $apiRequest, $fieldname, $fieldSpec, $fieldsToResolve) { if (empty($fieldSpec['pseudoconstant']) && empty($fieldSpec['option_group_id'])) { return; }