X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=api%2Fv3%2FProfile.php;h=d57751b1924dc5c67163cea2d982e38a916aa04f;hb=e2c0856b24630f71827582e867228d09db210d02;hp=d49d7945858eb1ed671e9426958c3ae82113d321;hpb=29fbb90ad76ec8cc66f4ddac430eadc7d8074e1c;p=civicrm-core.git diff --git a/api/v3/Profile.php b/api/v3/Profile.php index d49d794585..d57751b192 100644 --- a/api/v3/Profile.php +++ b/api/v3/Profile.php @@ -155,7 +155,6 @@ function _civicrm_api3_profile_get_spec(&$params) { */ function civicrm_api3_profile_submit($params) { $profileID = _civicrm_api3_profile_getProfileID($params['profile_id']); - if (!CRM_Core_DAO::getFieldValue('CRM_Core_DAO_UFGroup', $profileID, 'is_active')) { //@todo declare pseudoconstant & let api do this throw new API_Exception('Invalid value for profile_id'); @@ -198,6 +197,10 @@ function civicrm_api3_profile_submit($params) { $entity = strtolower(CRM_Utils_Array::value('entity', $field)); if($entity && !in_array($entity, array_merge($contactEntities, $locationEntities))) { $contactParams['api.' . $entity . '.create'][$fieldName] = $value; + //@todo we are not currently declaring this option + if(isset($params['batch_id']) && strtolower($entity) == 'contribution') { + $contactParams['api.' . $entity . '.create']['batch_id'] = $params['batch_id']; + } if(isset($params[$entity . '_id'])) { //todo possibly declare $entity_id in getfields ? $contactParams['api.' . $entity . '.create']['id'] = $params[$entity . '_id']; @@ -207,6 +210,19 @@ function civicrm_api3_profile_submit($params) { $contactParams[_civicrm_api3_profile_translate_fieldnames_for_bao($fieldName)] = $value; } } + if(isset($contactParams['api.contribution.create']) && isset($contactParams['api.membership.create'])) { + $contactParams['api.membership_payment.create'] = array( + 'contribution_id' => '$value.api.contribution.create.id', + 'membership_id' => '$value.api.membership.create.id' + ); + } + + if(isset($contactParams['api.contribution.create']) && isset($contactParams['api.participant.create'])) { + $contactParams['api.participant_payment.create'] = array( + 'contribution_id' => '$value.api.contribution.create.id', + 'participant_id' => '$value.api.participant.create.id' + ); + } $contactParams['contact_id'] = CRM_Utils_Array::value('contact_id', $params); $contactParams['profile_id'] = $profileID; @@ -370,6 +386,10 @@ function civicrm_api3_profile_apply($params) { * * Note that that since the existing code for deriving a blank profile is not easily accessible our * interim solution is just to return an empty array + * + * @param $params + * + * @return array */ function _civicrm_api3_profile_getbillingpseudoprofile(&$params) { @@ -490,9 +510,15 @@ function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour = 'help_pre' => CRM_Utils_Array::value('help_pre', $field), 'help_post' => CRM_Utils_Array::value('help_post', $field), 'entity' => $entity, + 'weight' => CRM_Utils_Array::value('weight', $field), ), $aliasArray); - $realFieldName = $field['field_name']; + $ufFieldTaleFieldName = $field['field_name']; + if(isset($entity[$ufFieldTaleFieldName]['name'])) { + // in the case where we are dealing with an alias we map back to a name + // this will be tested by 'membership_type_id' field + $ufFieldTaleFieldName = $entity[$ufFieldTaleFieldName]['name']; + } //see function notes // as we build up a list of these we should be able to determine a generic approach // @@ -505,13 +531,14 @@ function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour = 'soft_credit' => 'soft_credit_to', 'group' => 'group_id', 'tag' => 'tag_id', + 'soft_credit_type' => 'soft_credit_type_id', ); - if(array_key_exists($realFieldName, $hardCodedEntityFields)) { - $realFieldName = $hardCodedEntityFields[$realFieldName]; + if(array_key_exists($ufFieldTaleFieldName, $hardCodedEntityFields)) { + $ufFieldTaleFieldName = $hardCodedEntityFields[$ufFieldTaleFieldName]; } - $entities[$entity][$fieldName] = $realFieldName; + $entities[$entity][$fieldName] = $ufFieldTaleFieldName; } foreach ($entities as $entity => $entityFields) { @@ -528,12 +555,18 @@ function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour = $fieldName = strtolower($realName); } if(isset($entityGetFieldsResult[$realName]['uniqueName'])) { - // we won't alias the field name on here are we are using uniqueNames for the possibility of needing to differentiate - // which entity 'status_id' belongs to + // we won't alias the field name on here are we are using uniqueNames for the possibility of needing to differentiate + // which entity 'status_id' belongs to $fieldName = $entityGetFieldsResult[$realName]['uniqueName']; } + else{ + if(isset($entityGetFieldsResult[$realName]['name'])) { + // this will sort out membership_type_id vs membership_type + $fieldName = $entityGetFieldsResult[$realName]['name']; + } + } } - $profileFields[$profileID][$fieldName] = array_merge($profileFields[$profileID][$entityfield], $entityGetFieldsResult[$realName]); + $profileFields[$profileID][$fieldName] = array_merge($entityGetFieldsResult[$realName], $profileFields[$profileID][$entityfield]); if(!isset($profileFields[$profileID][$fieldName]['api.aliases'])) { $profileFields[$profileID][$fieldName]['api.aliases'] = array(); } @@ -560,13 +593,21 @@ function _civicrm_api3_buildprofile_submitfields($profileID, $optionsBehaviour = */ } } + uasort($profileFields[$profileID], "_civicrm_api3_order_by_weight"); return $profileFields[$profileID]; } +function _civicrm_api3_order_by_weight($a, $b) { + return CRM_Utils_Array::value('weight', $b) < CRM_Utils_Array::value('weight', $a) ? TRUE : FALSE; +} + /** * Here we map the profile fields as stored in the uf_field table to their 'real entity' * we also return the profile fieldname * + * @param $field + * + * @return array */ function _civicrm_api3_map_profile_fields_to_entity(&$field) { $entity = $field['field_type']; @@ -622,6 +663,7 @@ function _civicrm_api3_map_profile_fields_to_entity(&$field) { 'check_number' => 'contribution', 'contribution_status_id' => 'contribution', 'soft_credit' => 'contribution', + 'soft_credit_type' => 'contribution_soft', 'group' => 'group_contact', 'tag' => 'entity_tag', );