From fe43b7c9beb21d776fb203b44e58e82370be031b Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sun, 9 Feb 2014 13:41:40 -0800 Subject: [PATCH] Add api generic getlist --- api/v3/Generic/Getlist.php | 143 +++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 api/v3/Generic/Getlist.php diff --git a/api/v3/Generic/Getlist.php b/api/v3/Generic/Getlist.php new file mode 100644 index 0000000000..d5a65b84ff --- /dev/null +++ b/api/v3/Generic/Getlist.php @@ -0,0 +1,143 @@ + isset($values[10]), + 'page_num' => $request['page_num'], + ); + unset($values[10]); + + return civicrm_api3_create_success($values, $request['params'], $entity, 'getlist', CRM_Core_DAO::$_nullObject, $output); +} + +/** + * Set defaults for api.getlist + * + * @param $entity string + * @param $request array + */ +function _civicrm_api3_generic_getList_defaults($entity, &$request) { + $config = CRM_Core_Config::singleton(); + $fields = _civicrm_api_get_fields($entity); + $defaults = array( + 'page_num' => 1, + 'input' => '', + 'image_field' => NULL, + 'key_field' => 'id', + 'params' => array(), + ); + // Find main field from meta + foreach (array('sort_name', 'title', 'label', 'name') as $field) { + if (isset($fields[$field])) { + $defaults['label_field'] = $defaults['search_field'] = $field; + break; + } + } + foreach (array('description') as $field) { + if (isset($fields[$field])) { + $defaults['description_field'] = $field; + break; + } + } + $resultsPerPage = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'search_autocomplete_count', NULL, 10); + $request += $defaults; + // Default api params + $params = array( + 'options' => array( + // Adding one extra result allows us to see if there are any more + 'limit' => $resultsPerPage + 1, + // Because sql is zero-based + 'offset' => ($request['page_num'] - 1) * $resultsPerPage, + 'sort' => $request['label_field'], + ), + 'sequential' => 1, + ); + if ($request['input']) { + $params[$request['search_field']] = array('LIKE' => ($config->includeWildCardInName ? '%' : '') . $request['input'] . '%'); + } + $request['params'] += $params; +} + +/** + * Fallback implementation of getlist_params. May be overridden by individual apis + * + * @param $request array + */ +function _civicrm_api3_generic_getlist_params(&$request) { + $fieldsToReturn = array($request['key_field'], $request['label_field']); + $request['image_field'] && $fieldsToReturn[] = $request['image_field']; + $request['description_field'] && $fieldsToReturn[] = $request['description_field']; + $request['params']['options']['return'] = $fieldsToReturn; +} + +/** + * Fallback implementation of getlist_output. May be overridden by individual apis + * + * @param $result array + * @param $request array + * + * @return array + */ +function _civicrm_api3_generic_getlist_output($result, $request) { + $output = array(); + if (!empty($result['values'])) { + foreach ($result['values'] as $row) { + $output[] = array( + 'key' => $row[$request['key_field']], + 'label' => $row[$request['label_field']], + 'description' => isset($request['description_field']) && isset($row[$request['description_field']]) ? $row[$request['description_field']] : NULL, + 'image' => isset($request['image_field']) && isset($row[$request['image_field']]) ? $row[$request['image_field']] : NULL, + ); + } + } + return $output; +} -- 2.25.1