Commit | Line | Data |
---|---|---|
fe43b7c9 CW |
1 | <?php |
2 | ||
3 | /* | |
4 | +--------------------------------------------------------------------+ | |
5 | | CiviCRM version 4.4 | | |
6 | +--------------------------------------------------------------------+ | |
7 | | Copyright CiviCRM LLC (c) 2004-2013 | | |
8 | +--------------------------------------------------------------------+ | |
9 | | This file is a part of CiviCRM. | | |
10 | | | | |
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. | | |
14 | | | | |
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. | | |
19 | | | | |
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 | +--------------------------------------------------------------------+ | |
27 | */ | |
28 | /** | |
29 | * Generic api wrapper used for quicksearch and autocomplete | |
30 | * | |
31 | * @param $apiRequest array | |
32 | * @return mixed | |
33 | */ | |
34 | function civicrm_api3_generic_getList($apiRequest) { | |
35 | $entity = _civicrm_api_get_entity_name_from_camel($apiRequest['entity']); | |
36 | $request = $apiRequest['params']; | |
37 | ||
38 | _civicrm_api3_generic_getList_defaults($entity, $request); | |
39 | ||
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'; | |
43 | $fnName($request); | |
79ae07d9 CW |
44 | |
45 | $request['params']['check_permissions'] = !empty($apiRequest['params']['check_permissions']); | |
fe43b7c9 CW |
46 | $result = civicrm_api3($entity, 'get', $request['params']); |
47 | ||
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); | |
52 | ||
53 | $output = array( | |
54 | // If we have an extra result then this is not the last page | |
55 | 'more_results' => isset($values[10]), | |
56 | 'page_num' => $request['page_num'], | |
57 | ); | |
58 | unset($values[10]); | |
59 | ||
60 | return civicrm_api3_create_success($values, $request['params'], $entity, 'getlist', CRM_Core_DAO::$_nullObject, $output); | |
61 | } | |
62 | ||
63 | /** | |
64 | * Set defaults for api.getlist | |
65 | * | |
66 | * @param $entity string | |
67 | * @param $request array | |
68 | */ | |
69 | function _civicrm_api3_generic_getList_defaults($entity, &$request) { | |
70 | $config = CRM_Core_Config::singleton(); | |
71 | $fields = _civicrm_api_get_fields($entity); | |
72 | $defaults = array( | |
73 | 'page_num' => 1, | |
74 | 'input' => '', | |
75 | 'image_field' => NULL, | |
0724132d | 76 | 'id_field' => $entity == 'option_value' ? 'value' : 'id', |
fe43b7c9 CW |
77 | 'params' => array(), |
78 | ); | |
79 | // Find main field from meta | |
80 | foreach (array('sort_name', 'title', 'label', 'name') as $field) { | |
81 | if (isset($fields[$field])) { | |
82 | $defaults['label_field'] = $defaults['search_field'] = $field; | |
83 | break; | |
84 | } | |
85 | } | |
86 | foreach (array('description') as $field) { | |
87 | if (isset($fields[$field])) { | |
88 | $defaults['description_field'] = $field; | |
89 | break; | |
90 | } | |
91 | } | |
92 | $resultsPerPage = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'search_autocomplete_count', NULL, 10); | |
93 | $request += $defaults; | |
94 | // Default api params | |
95 | $params = array( | |
96 | 'options' => array( | |
97 | // Adding one extra result allows us to see if there are any more | |
98 | 'limit' => $resultsPerPage + 1, | |
99 | // Because sql is zero-based | |
100 | 'offset' => ($request['page_num'] - 1) * $resultsPerPage, | |
101 | 'sort' => $request['label_field'], | |
102 | ), | |
103 | 'sequential' => 1, | |
104 | ); | |
76ec9ca7 | 105 | // When searching e.g. autocomplete |
fe43b7c9 CW |
106 | if ($request['input']) { |
107 | $params[$request['search_field']] = array('LIKE' => ($config->includeWildCardInName ? '%' : '') . $request['input'] . '%'); | |
108 | } | |
76ec9ca7 CW |
109 | // When looking up a field e.g. displaying existing record |
110 | if (!empty($request['id'])) { | |
111 | if (is_string($request['id']) && strpos(',', $request['id'])) { | |
112 | $request['id'] = explode(',', $request['id']); | |
113 | } | |
114 | $params[$request['id_field']] = is_array($request['id']) ? array('IN' => $request['id']) : $request['id']; | |
115 | } | |
fe43b7c9 CW |
116 | $request['params'] += $params; |
117 | } | |
118 | ||
119 | /** | |
120 | * Fallback implementation of getlist_params. May be overridden by individual apis | |
121 | * | |
122 | * @param $request array | |
123 | */ | |
124 | function _civicrm_api3_generic_getlist_params(&$request) { | |
76ec9ca7 | 125 | $fieldsToReturn = array($request['id_field'], $request['label_field']); |
ff88d165 CW |
126 | if (!empty($request['image_field'])) { |
127 | $fieldsToReturn[] = $request['image_field']; | |
128 | } | |
129 | if (!empty($request['description_field'])) { | |
130 | $fieldsToReturn[] = $request['description_field']; | |
131 | } | |
3a9e5e69 | 132 | $request['params']['return'] = $fieldsToReturn; |
fe43b7c9 CW |
133 | } |
134 | ||
135 | /** | |
136 | * Fallback implementation of getlist_output. May be overridden by individual apis | |
137 | * | |
138 | * @param $result array | |
139 | * @param $request array | |
140 | * | |
141 | * @return array | |
142 | */ | |
143 | function _civicrm_api3_generic_getlist_output($result, $request) { | |
144 | $output = array(); | |
145 | if (!empty($result['values'])) { | |
146 | foreach ($result['values'] as $row) { | |
ff88d165 | 147 | $data = array( |
76ec9ca7 | 148 | 'id' => $row[$request['id_field']], |
fe43b7c9 | 149 | 'label' => $row[$request['label_field']], |
fe43b7c9 | 150 | ); |
ff88d165 | 151 | if (!empty($request['description_field'])) { |
88881f79 | 152 | $data['description'] = !empty($row[$request['description_field']]) ? array($row[$request['description_field']]) : NULL; |
ff88d165 CW |
153 | }; |
154 | if (!empty($request['image_field'])) { | |
155 | $data['image'] = isset($row[$request['image_field']]) ? $row[$request['image_field']] : ''; | |
156 | }; | |
157 | $output[] = $data; | |
fe43b7c9 CW |
158 | } |
159 | } | |
160 | return $output; | |
161 | } |