*/
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');
$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'];
$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;
*
* 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) {
*
* @param integer $profileID
* @param integer $optionsBehaviour 0 = don't resolve, 1 = resolve non-aggressively, 2 = resolve aggressively - ie include country & state
- * @param $params
+ * @param $is_flush
+ *
+ * @internal param $params
*
* @return
*/
'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
//
'tag' => 'tag_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) {
$result = civicrm_api3($entity, 'getfields', array('action' => 'create'));
$entityGetFieldsResult = _civicrm_api3_profile_appendaliases($result['values'], $entity);
foreach ($entityFields as $entityfield => $realName) {
- $profileFields[$profileID][strtolower($entityfield)] = array_merge($profileFields[$profileID][$entityfield], $entityGetFieldsResult[$realName]);
+ $fieldName = strtolower($entityfield);
+ if(!strstr($fieldName, '-')) {
+ if(strtolower($realName) != $fieldName) {
+ // we want to keep the '-' pattern for locations but otherwise
+ // we are going to make the api-standard field the main / preferred name but support the db name
+ // in future naming the fields in the DB to reflect the way the rest of the api / BAO / metadata works would
+ // reduce code
+ $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
+ $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($entityGetFieldsResult[$realName], $profileFields[$profileID][$entityfield]);
+ if(!isset($profileFields[$profileID][$fieldName]['api.aliases'])) {
+ $profileFields[$profileID][$fieldName]['api.aliases'] = array();
+ }
if($optionsBehaviour && !empty($entityGetFieldsResult[$realName]['pseudoconstant'])) {
if($optionsBehaviour > 1 || !in_array($realName, array('state_province_id', 'county_id', 'country_id'))) {
$options = civicrm_api3($entity, 'getoptions', array('field' => $realName));
- $profileFields[$profileID][$entityfield]['options'] = $options['values'];
+ $profileFields[$profileID][$fieldName]['options'] = $options['values'];
}
}
- if($entityfield != strtolower($entityfield)) {
- // we will make the mixed case version (e.g. of 'Primary') an aliase
- if(!isset($profileFields[$profileID][strtolower($entityfield)])) {
- $profileFields[$profileID][strtolower($entityfield)]['api.aliases'] = array();
+ if($entityfield != $fieldName) {
+ if(isset($profileFields[$profileID][$entityfield])) {
+ unset($profileFields[$profileID][$entityfield]);
}
- $profileFields[$profileID][strtolower($entityfield)]['api.aliases'][] = $entityfield;
+ // we will make the mixed case version (e.g. of 'Primary') an alias
+ $profileFields[$profileID][$fieldName]['api.aliases'][] = $entityfield;
}
/**
* putting this on hold -this would cause the api to set the default - but could have unexpected behaviour
*/
}
}
+ 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 = _civicrm_api_get_entity_name_from_camel($field['field_type']);
+ $entity = $field['field_type'];
$contactTypes = civicrm_api3('contact', 'getoptions', array('field' => 'contact_type'));
- $locationFields = array('email' => 'email');
if(in_array($entity, $contactTypes['values'])) {
$entity = 'contact';
}
+ $entity = _civicrm_api_get_entity_name_from_camel($entity);
+ $locationFields = array('email' => 'email');
$fieldName = $field['field_name'];
if(!empty($field['location_type_id'])) {
if($fieldName == 'email') {