private static $_contriBatchEntryFields = NULL;
private static $_memberBatchEntryFields = NULL;
+ /**
+ * Create UFField object.
+ *
+ * @param array $params
+ * Array per getfields metadata.
+ *
+ * @return \CRM_Core_BAO_UFField
+ * @throws \API_Exception
+ */
+ public static function create(&$params) {
+ // CRM-14756: kind of a hack-ish fix. If the user gives the id, uf_group_id is retrieved and then set.
+ if (isset($params['id'])) {
+ $groupId = civicrm_api3('UFField', 'getvalue', array(
+ 'return' => 'uf_group_id',
+ 'id' => $params['id'],
+ ));
+ }
+ else {
+ $groupId = CRM_Utils_Array::value('uf_group_id', $params);
+ }
+
+ $field_name = CRM_Utils_Array::value('field_name', $params);
+
+ if (strpos($field_name, 'formatting') !== 0 && !CRM_Core_BAO_UFField::isValidFieldName($field_name)) {
+ throw new API_Exception('The field_name is not valid');
+ }
+
+ if (!(CRM_Utils_Array::value('group_id', $params))) {
+ $params['group_id'] = $groupId;
+ }
+
+ $fieldId = CRM_Utils_Array::value('id', $params);
+ if (!empty($fieldId)) {
+ $UFField = new CRM_Core_BAO_UFField();
+ $UFField->id = $fieldId;
+ if ($UFField->find(TRUE)) {
+ if (!(CRM_Utils_Array::value('group_id', $params))) {
+ // this copied here from previous api function - not sure if required
+ $params['group_id'] = $UFField->uf_group_id;
+ }
+ }
+ else {
+ throw new API_Exception("there is no field for this fieldId");
+ }
+ }
+ $params['uf_group_id'] = $params['group_id'];
+
+ if (CRM_Core_BAO_UFField::duplicateField($params)) {
+ throw new API_Exception("The field was not added. It already exists in this profile.");
+ }
+
+ // @todo fix BAO to be less weird.
+ $field_type = CRM_Utils_Array::value('field_type', $params);
+ $location_type_id = CRM_Utils_Array::value('location_type_id', $params, CRM_Utils_Array::value('website_type_id', $params));
+ $phone_type = CRM_Utils_Array::value('phone_type_id', $params, CRM_Utils_Array::value('phone_type', $params));
+ $params['field_name'] = array($field_type, $field_name, $location_type_id, $phone_type);
+ //@todo why is this even optional? Surely weight should just be 'managed' ??
+ if (CRM_Utils_Array::value('option.autoweight', $params, TRUE)) {
+ $params['weight'] = CRM_Core_BAO_UFField::autoWeight($params);
+ }
+ $ufField = CRM_Core_BAO_UFField::add($params);
+
+ $fieldsType = CRM_Core_BAO_UFGroup::calculateGroupType($groupId, TRUE);
+ CRM_Core_BAO_UFGroup::updateGroupTypes($groupId, $fieldsType);
+
+ civicrm_api3('profile', 'getfields', array('cache_clear' => TRUE));
+ return $ufField;
+ }
+
/**
* Fetch object based on array of properties.
* Newly created $ufFieldArray
*/
function civicrm_api3_uf_field_create($params) {
- // CRM-14756: kind of a hack-ish fix. If the user gives the id, uf_group_id is retrieved and then set.
- if (isset($params['id'])) {
- $groupId = civicrm_api3('UFField', 'getvalue', array(
- 'return' => 'uf_group_id',
- 'id' => $params['id'],
- ));
- }
- else {
- $groupId = CRM_Utils_Array::value('uf_group_id', $params);
- }
-
- $field_name = CRM_Utils_Array::value('field_name', $params);
-
- if (strpos($field_name, 'formatting') !== 0 && !CRM_Core_BAO_UFField::isValidFieldName($field_name)) {
- throw new API_Exception('The field_name is not valid');
- }
-
- if (!(CRM_Utils_Array::value('group_id', $params))) {
- $params['group_id'] = $groupId;
- }
-
- $ufFieldArray = array();
-
- $fieldId = CRM_Utils_Array::value('id', $params);
- if (!empty($fieldId)) {
- $UFField = new CRM_Core_BAO_UFField();
- $UFField->id = $fieldId;
- if ($UFField->find(TRUE)) {
- if (!(CRM_Utils_Array::value('group_id', $params))) {
- // this copied here from previous api function - not sure if required
- $params['group_id'] = $UFField->uf_group_id;
- }
- }
- else {
- throw new API_Exception("there is no field for this fieldId");
- }
- }
- $params['uf_group_id'] = $params['group_id'];
-
- if (CRM_Core_BAO_UFField::duplicateField($params)) {
- throw new API_Exception("The field was not added. It already exists in this profile.");
- }
-
- // @todo fix BAO to be less weird.
- $field_type = CRM_Utils_Array::value('field_type', $params);
- $location_type_id = CRM_Utils_Array::value('location_type_id', $params, CRM_Utils_Array::value('website_type_id', $params));
- $phone_type = CRM_Utils_Array::value('phone_type_id', $params, CRM_Utils_Array::value('phone_type', $params));
- $params['field_name'] = array($field_type, $field_name, $location_type_id, $phone_type);
- //@todo why is this even optional? Surely weight should just be 'managed' ??
- if (CRM_Utils_Array::value('option.autoweight', $params, TRUE)) {
- $params['weight'] = CRM_Core_BAO_UFField::autoWeight($params);
- }
- $ufField = CRM_Core_BAO_UFField::add($params);
-
- $fieldsType = CRM_Core_BAO_UFGroup::calculateGroupType($groupId, TRUE);
- CRM_Core_BAO_UFGroup::updateGroupTypes($groupId, $fieldsType);
-
- _civicrm_api3_object_to_array($ufField, $ufFieldArray[$ufField->id]);
- civicrm_api3('profile', 'getfields', array('cache_clear' => TRUE));
- return civicrm_api3_create_success($ufFieldArray, $params);
+ return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
}
/**