X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=api%2Fv3%2FCustomValue.php;h=8c45ece601149687851bd528f7c51107653f3953;hb=a057aee034f0765dff9979703937b45c10dcfec7;hp=27cf82c4c2e8bcef0c2a3063577f900533e0fe20;hpb=648631cd94799e87fe2347487d465b1a7256aa57;p=civicrm-core.git diff --git a/api/v3/CustomValue.php b/api/v3/CustomValue.php index 27cf82c4c2..8c45ece601 100644 --- a/api/v3/CustomValue.php +++ b/api/v3/CustomValue.php @@ -233,3 +233,152 @@ function _civicrm_api3_custom_value_get_spec(&$params) { $params['entity_id']['api.required'] = 1; $params['entity_id']['title'] = 'Entity ID'; } + +/** + * CustomValue.gettree API specification + * + * @param array $spec description of fields supported by this API call + * @return void + */ +function _civicrm_api3_custom_value_gettree_spec(&$spec) { + $spec['entity_id'] = array( + 'title' => 'Entity Id', + 'description' => 'Id of entity', + 'type' => CRM_Utils_Type::T_INT, + 'api.required' => 1, + ); + $entities = civicrm_api3('Entity', 'get'); + $entities = array_diff($entities['values'], $entities['deprecated']); + $spec['entity_type'] = array( + 'title' => 'Entity Type', + 'description' => 'API name of entity type, e.g. "Contact"', + 'type' => CRM_Utils_Type::T_STRING, + 'api.required' => 1, + 'options' => array_combine($entities, $entities), + ); + // Return params for custom group, field & value + foreach (CRM_Core_DAO_CustomGroup::fields() as $field) { + $name = 'custom_group.' . $field['name']; + $spec[$name] = array('name' => $name) + $field; + } + foreach (CRM_Core_DAO_CustomField::fields() as $field) { + $name = 'custom_field.' . $field['name']; + $spec[$name] = array('name' => $name) + $field; + } + $spec['custom_value.id'] = array( + 'title' => 'Custom Value Id', + 'description' => 'Id of record in custom value table', + 'type' => CRM_Utils_Type::T_INT, + ); + $spec['custom_value.data'] = array( + 'title' => 'Custom Value (Raw)', + 'description' => 'Raw value as stored in the database', + 'type' => CRM_Utils_Type::T_STRING, + ); + $spec['custom_value.display'] = array( + 'title' => 'Custom Value (Formatted)', + 'description' => 'Custom value formatted for display', + 'type' => CRM_Utils_Type::T_STRING, + ); +} + +/** + * CustomValue.gettree API + * + * @param array $params + * @return array API result + * @throws API_Exception + */ +function civicrm_api3_custom_value_gettree($params) { + $ret = array(); + $options = _civicrm_api3_get_options_from_params($params); + $toReturn = array( + 'custom_group' => array(), + 'custom_field' => array(), + 'custom_value' => array(), + ); + foreach (array_keys($options['return']) as $r) { + list($type, $field) = explode('.', $r); + if (isset($toReturn[$type])) { + $toReturn[$type][] = $field; + } + } + // We must have a name if not indexing sequentially + if (empty($params['sequential']) && $toReturn['custom_field']) { + $toReturn['custom_field'][] = 'name'; + } + switch ($params['entity_type']) { + case 'Contact': + $ret = array('entityType' => 'contact_type', 'subTypes' => 'contact_sub_type'); + break; + + case 'Activity': + case 'Campaign': + case 'Case': + case 'Contribution': + case 'Event': + case 'Grant': + case 'Membership': + case 'Relationship': + $ret = array('subTypes' => strtolower($params['entity_type']) . '_type_id'); + break; + + case 'Participant': + // todo + } + $treeParams = array( + 'entityType' => $params['entity_type'], + 'subTypes' => array(), + 'subName' => NULL, + ); + // Fetch entity data for custom group type/sub-type + // Also verify access permissions (api3 will throw an exception if permission denied) + if ($ret || !empty($params['check_permissions'])) { + $entityData = civicrm_api3($params['entity_type'], 'getsingle', array( + 'id' => $params['entity_id'], + 'return' => array_merge(array('id'), array_values($ret)), + )); + foreach ($ret as $param => $key) { + if (isset($entityData[$key])) { + $treeParams[$param] = $entityData[$key]; + } + } + } + $tree = CRM_Core_BAO_CustomGroup::getTree($treeParams['entityType'], $toReturn, $params['entity_id'], NULL, $treeParams['subTypes'], $treeParams['subName'], TRUE, NULL, FALSE, CRM_Utils_Array::value('check_permissions', $params, TRUE)); + unset($tree['info']); + $result = array(); + foreach ($tree as $group) { + $result[$group['name']] = array(); + $groupToReturn = $toReturn['custom_group'] ? $toReturn['custom_group'] : array_keys($group); + foreach ($groupToReturn as $item) { + $result[$group['name']][$item] = CRM_Utils_Array::value($item, $group); + } + $result[$group['name']]['fields'] = array(); + foreach ($group['fields'] as $fieldInfo) { + $field = array('value' => NULL); + $fieldToReturn = $toReturn['custom_field'] ? $toReturn['custom_field'] : array_keys($fieldInfo); + foreach ($fieldToReturn as $item) { + $field[$item] = CRM_Utils_Array::value($item, $fieldInfo); + } + unset($field['customValue']); + if (!empty($fieldInfo['customValue'])) { + $field['value'] = CRM_Utils_Array::first($fieldInfo['customValue']); + if (!$toReturn['custom_value'] || in_array('display', $toReturn['custom_value'])) { + $field['value']['display'] = CRM_Core_BAO_CustomField::displayValue($field['value']['data'], $fieldInfo); + } + foreach (array_keys($field['value']) as $key) { + if ($toReturn['custom_value'] && !in_array($key, $toReturn['custom_value'])) { + unset($field['value'][$key]); + } + } + } + if (empty($params['sequential'])) { + $result[$group['name']]['fields'][$fieldInfo['name']] = $field; + } + else { + $result[$group['name']]['fields'][] = $field; + } + } + } + return civicrm_api3_create_success($result, $params, 'CustomValue', 'gettree'); +}