}
// Report deprecations.
$deprecated = _civicrm_api3_deprecation_check($entity, $result);
- // The "setvalue" action is deprecated but still in use, so report it only on "getactions".
- if (!is_string($deprecated) && $action == 'getactions') {
+ // Always report "setvalue" action as deprecated.
+ if (!is_string($deprecated) && ($action == 'getactions' || $action == 'setvalue')) {
$deprecated = ((array) $deprecated) + array('setvalue' => 'The "setvalue" action is deprecated. Use "create" with an id instead.');
}
// Always report "update" action as deprecated.
* @param string $daoName
* @param bool $return
*
- * @daoName string DAO to check params agains
+ * @daoName string DAO to check params against
*
* @return bool
* Should the missing fields be returned as an array (core error created as default)
return civicrm_api3_create_error('Entity not created (' . $fct_name . ')');
}
elseif (is_a($bao, 'CRM_Core_Error')) {
- //some wierd circular thing means the error takes itself as an argument
+ //some weird circular thing means the error takes itself as an argument
$msg = $bao->getMessages($bao);
// the api deals with entities on a one-by-one basis. However, the contribution bao pushes entities
// onto the error object - presumably because the contribution import is not handling multiple errors correctly
CRM_Core_DAO::$_nullObject,
$entity_id,
$groupID,
- $subType,
- $subName
+ NULL,
+ $subName,
+ TRUE,
+ NULL,
+ TRUE
);
$groupTree = CRM_Core_BAO_CustomGroup::formatGroupTree($groupTree, 1, CRM_Core_DAO::$_nullObject);
$customValues = array();
}
$d = new $dao();
$fields = $d->fields();
+
+ // Set html attributes for text fields
+ foreach ($fields as $name => &$field) {
+ if (isset($field['html'])) {
+ $field['html'] += (array) $d::makeAttribute($field);
+ }
+ }
+
// replace uniqueNames by the normal names as the key
if (empty($unique)) {
foreach ($fields as $name => &$field) {
* @throws Exception
*/
function _civicrm_api3_validate_string(&$params, &$fieldName, &$fieldInfo, $entity) {
- list($fieldValue, $op) = _civicrm_api3_field_value_check($params, $fieldName);
+ list($fieldValue, $op) = _civicrm_api3_field_value_check($params, $fieldName, 'String');
if (strpos($op, 'NULL') !== FALSE || strpos($op, 'EMPTY') !== FALSE || CRM_Utils_System::isNull($fieldValue)) {
return;
}
* fieldName or FALSE if the field does not exist
*/
function _civicrm_api3_api_resolve_alias($entity, $fieldName, $action = 'create') {
+ if (!$fieldName) {
+ return FALSE;
+ }
if (strpos($fieldName, 'custom_') === 0 && is_numeric($fieldName[7])) {
return $fieldName;
}
* Get the actual field value.
*
* In some case $params[$fieldName] holds Array value in this format Array([operator] => [value])
- * So this function returns the actual field value
+ * So this function returns the actual field value.
*
* @param array $params
* @param string $fieldName
+ * @param string $type
*
* @return mixed
*/
-function _civicrm_api3_field_value_check(&$params, $fieldName) {
+function _civicrm_api3_field_value_check(&$params, $fieldName, $type = NULL) {
$fieldValue = CRM_Utils_Array::value($fieldName, $params);
$op = NULL;
- if (!empty($fieldValue) && is_array($fieldValue) && array_search(key($fieldValue), CRM_Core_DAO::acceptedSQLOperators())) {
+ if (!empty($fieldValue) && is_array($fieldValue) &&
+ (array_search(key($fieldValue), CRM_Core_DAO::acceptedSQLOperators()) ||
+ $type == 'String' && strstr(key($fieldValue), 'EMPTY'))
+ ) {
$op = key($fieldValue);
$fieldValue = CRM_Utils_Array::value($op, $fieldValue);
}
return array($fieldValue, $op);
}
+
+/**
+ * A generic "get" API based on simple array data. This is comparable to
+ * _civicrm_api3_basic_get but does not use DAO/BAO. This is useful for
+ * small/mid-size data loaded from external JSON or XML documents.
+ *
+ * @param array $params
+ * API parameters.
+ * @param array $records
+ * List of all records.
+ * @param string $idCol
+ * The property which defines the ID of a record
+ * @param array $fields
+ * List of filterable fields.
+ * @return array
+ */
+function _civicrm_api3_basic_array_get($entity, $params, $records, $idCol, $fields) {
+ $options = _civicrm_api3_get_options_from_params($params, TRUE, $entity, 'get');
+ // TODO // $sort = CRM_Utils_Array::value('sort', $options, NULL);
+ $offset = CRM_Utils_Array::value('offset', $options);
+ $limit = CRM_Utils_Array::value('limit', $options);
+
+ $matches = array();
+
+ $currentOffset = 0;
+ foreach ($records as $record) {
+ if ($idCol != 'id') {
+ $record['id'] = $record[$idCol];
+ }
+ $match = TRUE;
+ foreach ($params as $k => $v) {
+ if ($k == 'id') {
+ $k = $idCol;
+ }
+ if (in_array($k, $fields) && $record[$k] != $v) {
+ $match = FALSE;
+ break;
+ }
+ }
+ if ($match) {
+ if ($currentOffset >= $offset) {
+ $matches[$record[$idCol]] = $record;
+ }
+ if ($limit && count($matches) >= $limit) {
+ break;
+ }
+ $currentOffset++;
+ }
+ }
+
+ $return = CRM_Utils_Array::value('return', $options, array());
+ if (!empty($return)) {
+ $return['id'] = 1;
+ $matches = CRM_Utils_Array::filterColumns($matches, array_keys($return));
+ }
+
+ return civicrm_api3_create_success($matches, $params);
+}