4 +--------------------------------------------------------------------+
5 | CiviCRM version 4.5 |
6 +--------------------------------------------------------------------+
7 | Copyright CiviCRM LLC (c) 2004-2014 |
8 +--------------------------------------------------------------------+
9 | This file is a part of CiviCRM. |
11 | CiviCRM is free software; you can copy, modify, and distribute it |
12 | under the terms of the GNU Affero General Public License |
13 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
15 | CiviCRM is distributed in the hope that it will be useful, but |
16 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. |
20 | You should have received a copy of the GNU Affero General Public |
21 | License and the CiviCRM Licensing Exception along |
22 | with this program; if not, contact CiviCRM LLC |
23 | at info[AT]civicrm[DOT]org. If you have questions about the |
24 | GNU Affero General Public License or the licensing of CiviCRM, |
25 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
26 +--------------------------------------------------------------------+
29 * Generic api wrapper used for quicksearch and autocomplete
31 * @param $apiRequest array
34 function civicrm_api3_generic_getList($apiRequest) {
35 $entity = _civicrm_api_get_entity_name_from_camel($apiRequest['entity']);
36 $request = $apiRequest['params'];
38 _civicrm_api3_generic_getList_defaults($entity, $request);
40 // Hey api, would you like to format the search params?
41 $fnName = "_civicrm_api3_{$entity}_getlist_params";
42 $fnName = function_exists($fnName) ?
$fnName : '_civicrm_api3_generic_getlist_params';
45 $request['params']['check_permissions'] = !empty($apiRequest['params']['check_permissions']);
46 $result = civicrm_api3($entity, 'get', $request['params']);
48 // Hey api, would you like to format the output?
49 $fnName = "_civicrm_api3_{$entity}_getlist_output";
50 $fnName = function_exists($fnName) ?
$fnName : '_civicrm_api3_generic_getlist_output';
51 $values = $fnName($result, $request);
53 $output = array('page_num' => $request['page_num']);
55 // Limit is set for searching but not fetching by id
56 if (!empty($request['params']['options']['limit'])) {
57 // If we have an extra result then this is not the last page
58 $last = $request['params']['options']['limit'] - 1;
59 $output['more_results'] = isset($values[$last]);
60 unset($values[$last]);
63 return civicrm_api3_create_success($values, $request['params'], $entity, 'getlist', CRM_Core_DAO
::$_nullObject, $output);
67 * Set defaults for api.getlist
69 * @param $entity string
70 * @param $request array
72 function _civicrm_api3_generic_getList_defaults($entity, &$request) {
73 $config = CRM_Core_Config
::singleton();
74 $fields = _civicrm_api_get_fields($entity);
78 'image_field' => NULL,
79 'id_field' => $entity == 'option_value' ?
'value' : 'id',
80 'description_field' => array(),
84 // Find main field from meta
85 foreach (array('sort_name', 'title', 'label', 'name', 'subject') as $field) {
86 if (isset($fields[$field])) {
87 $defaults['label_field'] = $defaults['search_field'] = $field;
91 // Find fields to be used for the description
92 foreach (array('description') as $field) {
93 if (isset($fields[$field])) {
94 $defaults['description_field'][] = $field;
97 $resultsPerPage = CRM_Core_BAO_Setting
::getItem(CRM_Core_BAO_Setting
::SYSTEM_PREFERENCES_NAME
, 'search_autocomplete_count', NULL, 10);
98 $request +
= $defaults;
102 // Adding one extra result allows us to see if there are any more
103 'limit' => $resultsPerPage +
1,
104 // Because sql is zero-based
105 'offset' => ($request['page_num'] - 1) * $resultsPerPage,
106 'sort' => $request['label_field'],
110 // When searching e.g. autocomplete
111 if ($request['input']) {
112 $params[$request['search_field']] = array('LIKE' => ($config->includeWildCardInName ?
'%' : '') . $request['input'] . '%');
114 // When looking up a field e.g. displaying existing record
115 if (!empty($request['id'])) {
116 if (is_string($request['id']) && strpos($request['id'], ',')) {
117 $request['id'] = explode(',', trim($request['id'], ', '));
119 // Don't run into search limits when prefilling selection
120 $params['options']['limit'] = NULL;
121 unset($params['options']['offset'], $request['params']['options']['limit'], $request['params']['options']['offset']);
122 $params[$request['id_field']] = is_array($request['id']) ?
array('IN' => $request['id']) : $request['id'];
124 $request['params'] +
= $params;
128 * Fallback implementation of getlist_params. May be overridden by individual apis
130 * @param $request array
132 function _civicrm_api3_generic_getlist_params(&$request) {
133 $fieldsToReturn = array($request['id_field'], $request['label_field']);
134 if (!empty($request['image_field'])) {
135 $fieldsToReturn[] = $request['image_field'];
137 if (!empty($request['description_field'])) {
138 $fieldsToReturn = array_merge($fieldsToReturn, (array) $request['description_field']);
140 $request['params']['return'] = array_unique(array_merge($fieldsToReturn, $request['extra']));
144 * Fallback implementation of getlist_output. May be overridden by individual apis
146 * @param $result array
147 * @param $request array
151 function _civicrm_api3_generic_getlist_output($result, $request) {
153 if (!empty($result['values'])) {
154 foreach ($result['values'] as $row) {
156 'id' => $row[$request['id_field']],
157 'label' => $row[$request['label_field']],
159 if (!empty($request['description_field'])) {
160 $data['description'] = array();
161 foreach ((array) $request['description_field'] as $field) {
162 if (!empty($row[$field])) {
163 $data['description'][] = $row[$field];
167 if (!empty($request['image_field'])) {
168 $data['image'] = isset($row[$request['image_field']]) ?
$row[$request['image_field']] : '';
170 foreach ($request['extra'] as $field) {
171 $data['extra'][$field] = isset($row[$field]) ?
$row[$field] : NULL;