3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2016 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
29 * This api exposes CiviCRM GroupContact records.
31 * This api is for adding/removing contacts from a group,
32 * or fetching a list of groups for a contact.
34 * Important note: This api does not fetch smart groups for a contact.
35 * To fetch all contacts in a smart group, use the Contact api
36 * passing a contact_id and group_id.
38 * To create/delete groups, use the group api instead.
40 * @package CiviCRM_APIv3
44 * Fetch a list of groups for a contact, or contacts for a group.
46 * @Note: this only applies to static groups, not smart groups.
47 * To fetch all contacts in a smart group, use the Contact api
48 * passing a contact_id and group_id.
50 * If no status mentioned in params, by default 'added' will be used
51 * to fetch the records
53 * @param array $params
54 * Name value pair of contact information.
57 * list of groups, given contact subsribed to
59 function civicrm_api3_group_contact_get($params) {
61 if (empty($params['contact_id'])) {
62 if (empty($params['status'])) {
64 $params['status'] = 'Added';
66 //ie. id passed in so we have to return something
67 return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__
), $params);
69 $status = CRM_Utils_Array
::value('status', $params, 'Added');
71 $groupId = CRM_Utils_Array
::value('group_id', $params);
72 $values = CRM_Contact_BAO_GroupContact
::getContactGroup($params['contact_id'], $status, NULL, FALSE, TRUE, FALSE, TRUE, $groupId);
73 return civicrm_api3_create_success($values, $params, 'GroupContact');
77 * Adjust metadata for Create action.
79 * @param array $params
81 function _civicrm_api3_group_contact_create_spec(&$params) {
82 $params['contact_id']['api.required'] = 1;
83 $params['group_id']['api.required'] = 1;
87 * Add contact(s) to group(s).
89 * This api has a legacy/nonstandard signature.
90 * On success, the return array will be structured as follows:
97 * "not_added" => integer,
99 * "total_count" => integer
104 * On failure, the return array will be structured as follows:
108 * 'error_message' = string,
109 * 'error_data' = mixed or undefined
113 * @param array $params
115 * - "contact_id" (required): First contact to add, or array of Contact IDs
116 * - "group_id" (required): First group to add contact(s) to, or array of Group IDs
117 * - "status" (optional): "Added" (default), "Pending" or "Removed"
118 * Legacy input parameters (will be deprecated):
119 * - "contact_id.1" etc. (optional): Additional contact_id to add to group(s)
120 * - "group_id.1" etc. (optional): Additional groups to add contact(s) to
123 * Information about operation results
125 function civicrm_api3_group_contact_create($params) {
126 // Nonstandard bao - doesn't accept ID as a param, so convert id to group_id + contact_id
127 if (!empty($params['id'])) {
128 $getParams = array('id' => $params['id']);
129 $info = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__
), $getParams);
130 if (!empty($info['values'][$params['id']])) {
131 $params['group_id'] = $info['values'][$params['id']]['group_id'];
132 $params['contact_id'] = $info['values'][$params['id']]['contact_id'];
135 $action = CRM_Utils_Array
::value('status', $params, 'Added');
136 return _civicrm_api3_group_contact_common($params, $action);
140 * Delete group contact record.
142 * @param array $params
148 function civicrm_api3_group_contact_delete($params) {
149 $groupContact = civicrm_api3('GroupContact', 'get', $params);
150 if ($groupContact['count'] == 0) {
151 throw new API_Exception('Cannot Delete GroupContact');
153 $params['status'] = CRM_Utils_Array
::value('status', $params, empty($params['skip_undelete']) ?
'Removed' : 'Deleted');
154 // "Deleted" isn't a real option so skip the api wrapper to avoid pseudoconstant validation
155 return civicrm_api3_group_contact_create($params);
161 * @param array $params
163 function _civicrm_api3_group_contact_delete_spec(&$params) {
164 // set as not required no either/or std yet
165 $params['id']['api.required'] = 0;
169 * Get pending group contacts.
171 * @param array $params
176 function civicrm_api3_group_contact_pending($params) {
177 $params['status'] = 'Pending';
178 return civicrm_api('GroupContact', 'Create', $params);
182 * Group contact helper function.
184 * @todo behaviour is highly non-standard - need to figure out how to make this 'behave'
185 * & at the very least return IDs & details of the groups created / changed
187 * @param array $params
192 function _civicrm_api3_group_contact_common($params, $op = 'Added') {
194 $contactIDs = array();
197 // CRM-16959: Handle multiple Contact IDs and Group IDs in legacy format
198 // (contact_id.1, contact_id.2) or as an array
199 foreach ($params as $n => $v) {
200 if (substr($n, 0, 10) == 'contact_id') {
202 foreach ($v as $arr_v) {
203 $contactIDs[] = $arr_v;
210 elseif (substr($n, 0, 8) == 'group_id') {
212 foreach ($v as $arr_v) {
213 $groupIDs[] = $arr_v;
222 $method = CRM_Utils_Array
::value('method', $params, 'API');
223 $status = CRM_Utils_Array
::value('status', $params, $op);
224 $tracking = CRM_Utils_Array
::value('tracking', $params);
226 if ($op == 'Added' ||
$op == 'Pending') {
227 $extraReturnValues = array(
232 foreach ($groupIDs as $groupID) {
233 list($tc, $a, $na) = CRM_Contact_BAO_GroupContact
::addContactsToGroup($contactIDs,
239 $extraReturnValues['total_count'] +
= $tc;
240 $extraReturnValues['added'] +
= $a;
241 $extraReturnValues['not_added'] +
= $na;
245 $extraReturnValues = array(
250 foreach ($groupIDs as $groupID) {
251 list($tc, $r, $nr) = CRM_Contact_BAO_GroupContact
::removeContactsFromGroup($contactIDs, $groupID, $method, $status, $tracking);
252 $extraReturnValues['total_count'] +
= $tc;
253 $extraReturnValues['removed'] +
= $r;
254 $extraReturnValues['not_removed'] +
= $nr;
257 // can't pass this by reference
259 return civicrm_api3_create_success(1, $params, 'GroupContact', 'create', $dao, $extraReturnValues);
263 * Update group contact status.
265 * @deprecated - this should be part of create but need to know we aren't missing something
267 * @param array $params
270 * @throws \API_Exception
272 function civicrm_api3_group_contact_update_status($params) {
274 civicrm_api3_verify_mandatory($params, NULL, array('contact_id', 'group_id'));
276 CRM_Contact_BAO_GroupContact
::addContactsToGroup(
277 array($params['contact_id']),
279 CRM_Utils_Array
::value('method', $params, 'API'),
281 CRM_Utils_Array
::value('tracking', $params)
288 * Deprecated function notices.
290 * @deprecated api notice
292 * Array of deprecated actions
294 function _civicrm_api3_group_contact_deprecation() {
296 'delete' => 'GroupContact "delete" action is deprecated in favor of "create".',
297 'pending' => 'GroupContact "pending" action is deprecated in favor of "create".',
298 'update_status' => 'GroupContact "update_status" action is deprecated in favor of "create".',