/** * Look up an array of CiviCRM groups linked to Maichimp groupings. * * * * @param $groupIDs mixed array of CiviCRM group Ids to fetch data for; or empty to return ALL mapped groups. * @param $mc_list_id mixed Fetch for a specific Mailchimp list only, or null. * @param $membership_only bool. Only fetch mapped membership groups (i.e. NOT linked to a MC grouping). * @return array keyed by CiviCRM group id whose values are arrays of details * including: * // Details about Mailchimp * 'list_id' * 'list_name' * 'category_id' * 'category_name' * 'interest_id' * 'interest_name' * // Details from CiviCRM * 'civigroup_title' * 'civigroup_uses_cache' * 'is_mc_update_grouping' bool: is the subscriber allowed to update this * via MC interface? * // Deprecated DO NOT USE from Mailchimp. * 'grouping_id' * 'grouping_name' * 'group_id' * 'group_name' */ public static function getGroupsToSync($groupIDs = array(), $mc_list_id = null, $membership_only = FALSE) { $params = $groups = $temp = array(); $groupIDs = array_filter(array_map('intval', $groupIDs)); if (!empty($groupIDs)) { $groupIDs = implode(',', $groupIDs); $whereClause = "entity_id IN ({$groupIDs})"; } else { $whereClause = "1 = 1"; } $whereClause .= " AND mc_list_id IS NOT NULL AND mc_list_id <> ''"; if ($mc_list_id) { // just want results for a particular MC list. $whereClause .= " AND mc_list_id = %1 "; $params[1] = array($mc_list_id, 'String'); } if ($membership_only) { $whereClause .= " AND (mc_grouping_id IS NULL OR mc_grouping_id = '')"; } $query = "\n SELECT entity_id, mc_list_id, mc_grouping_id, mc_group_id, is_mc_update_grouping, cg.title as civigroup_title, cg.saved_search_id, cg.children\n FROM civicrm_value_mailchimp_settings mcs\n INNER JOIN civicrm_group cg ON mcs.entity_id = cg.id\n WHERE {$whereClause}"; $dao = CRM_Core_DAO::executeQuery($query, $params); while ($dao->fetch()) { $list_name = CRM_Mailchimp_Utils::getMCListName($dao->mc_list_id); $interest_name = CRM_Mailchimp_Utils::getMCInterestName($dao->mc_list_id, $dao->mc_grouping_id, $dao->mc_group_id); $category_name = CRM_Mailchimp_Utils::getMCCategoryName($dao->mc_list_id, $dao->mc_grouping_id); $groups[$dao->entity_id] = array('list_id' => $dao->mc_list_id, 'list_name' => $list_name, 'category_id' => $dao->mc_grouping_id, 'category_name' => $category_name, 'interest_id' => $dao->mc_group_id, 'interest_name' => $interest_name, 'is_mc_update_grouping' => $dao->is_mc_update_grouping, 'civigroup_title' => $dao->civigroup_title, 'civigroup_uses_cache' => (bool) ($dao->saved_search_id > 0 || (bool) $dao->children), 'grouping_id' => $dao->mc_grouping_id, 'grouping_name' => $category_name, 'group_id' => $dao->mc_group_id, 'group_name' => $interest_name); } CRM_Mailchimp_Utils::checkDebug('End-CRM_Mailchimp_Utils getGroupsToSync $groups', $groups); return $groups; }