X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=api%2Fv3%2Futils.php;h=14f6daa352ffbea6d20a59df98bc6410040b507a;hb=d75241a408e82529568c540996dc3e35b7207288;hp=d25d43750af3828dacebf2c6d6257a8c3359e031;hpb=c86d4ac2abc50c065f758d484493a357858feb36;p=civicrm-core.git diff --git a/api/v3/utils.php b/api/v3/utils.php index d25d43750a..14f6daa352 100644 --- a/api/v3/utils.php +++ b/api/v3/utils.php @@ -1,7 +1,7 @@ $criteria) { - if (in_array($operator, $acceptedSQLOperators)) { - switch ($operator) { - // unary operators - - case 'IS NULL': - case 'IS NOT NULL': - $dao->whereAdd(sprintf('%s %s', $fieldName, $operator)); - break; - - // ternary operators - - case 'BETWEEN': - case 'NOT BETWEEN': - if (empty($criteria[0]) || empty($criteria[1])) { - throw new exception("invalid criteria for $operator"); - } - $dao->whereAdd(sprintf('%s ' . $operator . ' "%s" AND "%s"', $fieldName, CRM_Core_DAO::escapeString($criteria[0]), CRM_Core_DAO::escapeString($criteria[1]))); - break; - - // n-ary operators - - case 'IN': - case 'NOT IN': - if (empty($criteria)) { - throw new exception("invalid criteria for $operator"); - } - $escapedCriteria = array_map(array('CRM_Core_DAO', 'escapeString'), $criteria); - $dao->whereAdd(sprintf('%s %s ("%s")', $fieldName, $operator, implode('", "', $escapedCriteria))); - break; - - // binary operators - - default: - - $dao->whereAdd(sprintf('%s %s "%s"', $fieldName, $operator, CRM_Core_DAO::escapeString($criteria))); - } - } + $where = CRM_Core_DAO::createSqlFilter($fieldName, $params[$field], 'String'); + if(!empty($where)) { + $dao->whereAdd($where); } } else { @@ -979,7 +948,7 @@ function _civicrm_api3_basic_create($bao_name, &$params, $entity = NULL) { else { $values = array(); _civicrm_api3_object_to_array($bao, $values[$bao->id]); - return civicrm_api3_create_success($values, $params, NULL, 'create', $bao); + return civicrm_api3_create_success($values, $params, $entity, 'create', $bao); } } @@ -1024,7 +993,7 @@ function _civicrm_api3_basic_delete($bao_name, &$params) { if ($bao !== FALSE) { return civicrm_api3_create_success(TRUE); } - return civicrm_api3_create_error('Could not delete entity id ' . $params['id']); + throw new API_Exception('Could not delete entity id ' . $params['id']); } elseif (method_exists($bao_name, 'delete')) { $dao = new $bao_name(); @@ -1036,11 +1005,11 @@ function _civicrm_api3_basic_delete($bao_name, &$params) { } } else { - return civicrm_api3_create_error('Could not delete entity id ' . $params['id']); + throw new API_Exception('Could not delete entity id ' . $params['id']); } } - return civicrm_api3_create_error('no delete method found'); + throw new API_Exception('no delete method found'); } /** @@ -1124,7 +1093,7 @@ function _civicrm_api3_validate_fields($entity, $action, &$params, $errorMode = break; case CRM_Utils_Type::T_MONEY: - if (!CRM_Utils_Rule::money($params[$fieldName])) { + if (!CRM_Utils_Rule::money($params[$fieldName]) && !empty($params[$fieldName])) { throw new Exception($fieldName . " is not a valid amount: " . $params[$fieldName]); } } @@ -1366,6 +1335,7 @@ function _civicrm_api_get_custom_fields($entity, &$params) { foreach ($customfields as $key => $value) { // Regular fields have a 'name' property $value['name'] = 'custom_' . $key; + $value['type'] = _getStandardTypeFromCustomDataType($value['data_type']); $customfields['custom_' . $key] = $value; if (in_array('custom_' . $key, $getoptions)) { $customfields['custom_' . $key]['options'] = CRM_Core_BAO_CustomOption::valuesByID($key); @@ -1374,17 +1344,35 @@ function _civicrm_api_get_custom_fields($entity, &$params) { } return $customfields; } - +/** + * Translate the custom field data_type attribute into a std 'type' + */ +function _getStandardTypeFromCustomDataType($dataType) { + $mapping = array( + 'String' => CRM_Utils_Type::T_STRING, + 'Int' => CRM_Utils_Type::T_INT, + 'Money' => CRM_Utils_Type::T_MONEY, + 'Memo' => CRM_Utils_Type::T_LONGTEXT, + 'Float' => CRM_Utils_Type::T_FLOAT, + 'Date' => CRM_Utils_Type::T_DATE, + 'Boolean' => CRM_Utils_Type::T_BOOLEAN, + 'StateProvince' => CRM_Utils_Type::T_INT, + 'File' => CRM_Utils_Type::T_STRING, + 'Link' => CRM_Utils_Type::T_STRING, + 'ContactReference' => CRM_Utils_Type::T_INT, + 'Country' => CRM_Utils_Type::T_INT, + ); + return $mapping[$dataType]; +} /** * Return array of defaults for the given API (function is a wrapper on getfields) */ function _civicrm_api3_getdefaults($apiRequest) { $defaults = array(); - $result = civicrm_api($apiRequest['entity'], + $result = civicrm_api3($apiRequest['entity'], 'getfields', array( - 'version' => 3, 'action' => $apiRequest['action'], ) ); @@ -1432,10 +1420,9 @@ function _civicrm_api3_swap_out_aliases(&$apiRequest) { } return; } - $result = civicrm_api($apiRequest['entity'], + $result = civicrm_api3($apiRequest['entity'], 'getfields', array( - 'version' => 3, 'action' => $apiRequest['action'], ) );