static function subscribeOrUnsubsribeToMailchimpList($groupDetails, $contactID, $action) { CRM_Mailchimp_Utils::checkDebug('Start-CRM_Mailchimp_Utils subscribeOrUnsubsribeToMailchimpList $groupDetails', $groupDetails); CRM_Mailchimp_Utils::checkDebug('Start-CRM_Mailchimp_Utils subscribeOrUnsubsribeToMailchimpList $contactID', $contactID); CRM_Mailchimp_Utils::checkDebug('Start-CRM_Mailchimp_Utils subscribeOrUnsubsribeToMailchimpList $action', $action); if (empty($groupDetails) || empty($contactID) || empty($action)) { return NULL; } // We need to get contact's email before subscribing in Mailchimp $contactParams = array('version' => 3, 'id' => $contactID); $contactResult = civicrm_api('Contact', 'get', $contactParams); // This is the primary email address of the contact $email = $contactResult['values'][$contactID]['email']; if (empty($email)) { // Its possible to have contacts in CiviCRM without email address // and add to group offline return; } // Optional merges for the email (FNAME, LNAME) $merge = array('FNAME' => $contactResult['values'][$contactID]['first_name'], 'LNAME' => $contactResult['values'][$contactID]['last_name']); $listID = $groupDetails['list_id']; $grouping_id = $groupDetails['grouping_id']; $group_id = $groupDetails['group_id']; if (!empty($grouping_id) and !empty($group_id)) { $merge_groups[$grouping_id] = array('id' => $groupDetails['grouping_id'], 'groups' => array()); $merge_groups[$grouping_id]['groups'][] = CRM_Mailchimp_Utils::getMCGroupName($listID, $grouping_id, $group_id); // remove the significant array indexes, in case Mailchimp cares. $merge['groupings'] = array_values($merge_groups); } // Send Mailchimp Lists API Call. $list = new Mailchimp_Lists(CRM_Mailchimp_Utils::mailchimp()); switch ($action) { case "subscribe": // http://apidocs.mailchimp.com/api/2.0/lists/subscribe.php try { $result = $list->subscribe($listID, array('email' => $email), $merge, $email_type = 'html', $double_optin = FALSE, $update_existing = FALSE, $replace_interests = TRUE, $send_welcome = FALSE); } catch (Exception $e) { // Don't display if the error is that we're already subscribed. $message = $e->getMessage(); if ($message !== $email . ' is already subscribed to the list.') { CRM_Core_Session::setStatus($message); } } break; case "unsubscribe": // https://apidocs.mailchimp.com/api/2.0/lists/unsubscribe.php try { $result = $list->unsubscribe($listID, array('email' => $email), $delete_member = false, $send_goodbye = false, $send_notify = false); } catch (Exception $e) { CRM_Core_Session::setStatus($e->getMessage()); } break; } CRM_Mailchimp_Utils::checkDebug('End-CRM_Mailchimp_Utils subscribeOrUnsubsribeToMailchimpList $groupDetails', $groupDetails); CRM_Mailchimp_Utils::checkDebug('End-CRM_Mailchimp_Utils subscribeOrUnsubsribeToMailchimpList $contactID', $contactID); CRM_Mailchimp_Utils::checkDebug('End-CRM_Mailchimp_Utils subscribeOrUnsubsribeToMailchimpList $action', $action); }
public function deleteUserNewsletter($id, $email) { try { $sql = "DELETE \n\t\t\t\t\t\tFROM " . $this->_TABLES['public']['UserNewsletter'] . "\n\t\t\t\t\t\tWHERE id = :id"; $req = $this->bdd->prepare($sql); $req->bindValue('id', $id, PDO::PARAM_INT); $req->execute(); } catch (PDOException $e) { error_log($sql); error_log($e->getMessage()); die; } $Mailchimp = new Mailchimp($this->config->mailchimp->config->api_key); $Mailchimp_Lists = new Mailchimp_Lists($Mailchimp); $subscriber = $Mailchimp_Lists->unsubscribe($this->config->mailchimp->list->lid, array('email' => $email), true, true, true); if (!empty($subscriber['complete'])) { error_log("Unsubscribe Mailchimp success"); } else { error_log("Unsubscribe Mailchimp fail"); } }