function AutoResponderMailChimp($that, $ar, $wpm_id, $email, $unsub = false)
 {
     $listID = $ar['mcID'][$wpm_id];
     // get the list ID of the Membership Level
     $mcAPI = $ar['mcapi'];
     // get the MailChimp API
     $WishlistAPIQueueInstance = new WishlistAPIQueue();
     $WLM_AUTORESPONDER_MAILCHIMP_INIT = new WLM_AUTORESPONDER_MAILCHIMP_INIT();
     if ($listID) {
         //$listID should not be empty
         list($fName, $lName) = explode(" ", $that->ARSender['name'], 2);
         //split the name into First and Last Name
         $emailAddress = $that->ARSender['email'];
         $data = false;
         if ($unsub) {
             // if the Unsubscribe
             $mcOnRemCan = isset($ar['mcOnRemCan'][$wpm_id]) ? $ar['mcOnRemCan'][$wpm_id] : "";
             if ($mcOnRemCan == "unsub") {
                 //$res = $this->mcListUnsubscribe($mcAPI, $listID, $emailAddress, true);
                 $data = array("apikey" => $mcAPI, "action" => "unsubscribe", "listID" => $listID, "email" => $emailAddress, "delete_member" => true);
             } elseif ($mcOnRemCan == "move" || $mcOnRemCan == "add") {
                 $gp = $ar['mcRCGp'][$wpm_id];
                 $gping = $ar['mcRCGping'][$wpm_id];
                 $groupings = array();
                 if ($gp != "" && $gping != "") {
                     $groupings = array(array('name' => $gp, 'groups' => $gping));
                 }
                 $replace_interests = $mcOnRemCan == "move" ? true : false;
                 #add name or else this will still fail
                 $merge_vars = array('FNAME' => $fName, 'LNAME' => $lName, 'NAME' => "{$fName} {$lName}", 'GROUPINGS' => $groupings);
                 // populate the merger vars for MailChimp
                 //$res = $this->mcListSubscribe($mcAPI, $listID, $emailAddress, $merge_vars, true, true, $replace_interests);
                 $data = array("apikey" => $mcAPI, "action" => "subscribe", "listID" => $listID, "email" => $emailAddress, "mergevars" => $merge_vars, "optin" => true, "update_existing" => true, "replace_interests" => $replace_interests);
             }
         } else {
             //else Subscribe
             $gp = $ar['mcGp'][$wpm_id];
             $gping = $ar['mcGping'][$wpm_id];
             $groupings = array();
             if ($gp != "") {
                 $groupings = array(array('name' => $gp, 'groups' => $gping));
             }
             $optin = $ar['optin'];
             // get the MailChimp API
             $optin = $optin == 1 ? false : true;
             #add name or else this will still fail
             $merge_vars = array('FNAME' => $fName, 'LNAME' => $lName, 'NAME' => "{$fName} {$lName}", 'GROUPINGS' => $groupings);
             // populate the merger vars for MailChimp
             //$res = $this->mcListSubscribe($mcAPI, $listID, $emailAddress, $merge_vars, $optin, true, false);
             $data = array("apikey" => $mcAPI, "action" => "subscribe", "listID" => $listID, "email" => $emailAddress, "mergevars" => $merge_vars, "optin" => $optin, "update_existing" => 1, "replace_interests" => false);
         }
         if ($data) {
             $qname = "mailchimp_" . time();
             $data = maybe_serialize($data);
             $WishlistAPIQueueInstance->add_queue($qname, $data, "For Queueing");
             $WLM_AUTORESPONDER_MAILCHIMP_INIT->mcProcessQueue();
         }
     }
 }
 function mcProcessQueue($recnum = 10, $tries = 5)
 {
     $WishlistAPIQueueInstance = new WishlistAPIQueue();
     $last_process = get_option("WLM_MailchimpAPI_LastProcess");
     $current_time = time();
     $tries = $tries > 1 ? (int) $tries : 5;
     $error = false;
     //lets process every 10 seconds
     if (!$last_process || $current_time - $last_process > 10) {
         $queues = $WishlistAPIQueueInstance->get_queue("mailchimp", $recnum, $tries, "tries,name");
         foreach ($queues as $queue) {
             $data = maybe_unserialize($queue->value);
             if ($data['action'] == 'subscribe') {
                 $res = $this->mcListSubscribe($data['apikey'], $data['listID'], $data['email'], $data['mergevars'], $data['optin'], $data['update_existing'], $data['replace_interests']);
             } elseif ($data['action'] == 'unsubscribe') {
                 $res = $this->mcListUnsubscribe($data['apikey'], $data['listID'], $data['email'], $data['delete_member']);
             }
             if (isset($res['error'])) {
                 $res['error'] = strip_tags($res['error']);
                 $res['error'] = str_replace(array("\n", "\t", "\r"), '', $res['error']);
                 $d = array('notes' => "{$res['code']}:{$res['error']}", 'tries' => $queue->tries + 1);
                 $WishlistAPIQueueInstance->update_queue($queue->ID, $d);
                 $error = true;
             } else {
                 $WishlistAPIQueueInstance->delete_queue($queue->ID);
                 $error = false;
             }
         }
         //save the last processing time when error has occured on last transaction
         if ($error) {
             $current_time = time();
             if ($last_process) {
                 update_option("WLM_MailchimpAPI_LastProcess", $current_time);
             } else {
                 add_option("WLM_MailchimpAPI_LastProcess", $current_time);
             }
         }
     }
 }
 public function ifscProcessQueue($recnum = 10, $tries = 5)
 {
     global $WishListMemberInstance;
     $txnids = $WishListMemberInstance->GetMembershipLevelsTxnIDs(9);
     $WishlistAPIQueueInstance = new WishlistAPIQueue();
     $last_process = get_option("WLM_InfusionsoftSCAPI_LastProcess");
     $current_time = time();
     $tries = $tries > 1 ? (int) $tries : 5;
     $error = false;
     //lets process every 10 seconds
     if (!$last_process || $current_time - $last_process > 10) {
         $queues = $WishlistAPIQueueInstance->get_queue("infusionsoftsc", $recnum, $tries, "tries,name");
         foreach ($queues as $queue) {
             $data = maybe_unserialize($queue->value);
             if ($data['action'] == 'new') {
                 $res = $this->NewUserTagsHook($data['uid'], $data['data']);
             } elseif ($data['action'] == 'add') {
                 $res = $this->AddUserTagsHook($data['uid'], $data['levels']);
             } elseif ($data['action'] == 'remove') {
                 $res = $this->RemoveUserTagsHook($data['uid'], $data['levels']);
             } elseif ($data['action'] == 'cancel') {
                 $res = $this->CancelUserTagsHook($data['uid'], $data['levels']);
             }
             if (isset($res['errstr'])) {
                 $res['error'] = strip_tags($res['errstr']);
                 $res['error'] = str_replace(array("\n", "\t", "\r"), '', $res['error']);
                 $d = array('notes' => "{$res['errno']}:{$res['error']}", 'tries' => $queue->tries + 1);
                 $WishlistAPIQueueInstance->update_queue($queue->ID, $d);
                 $error = true;
             } else {
                 $WishlistAPIQueueInstance->delete_queue($queue->ID);
                 $error = false;
             }
         }
         //save the last processing time when error has occured on last transaction
         if ($error) {
             $current_time = time();
             if ($last_process) {
                 update_option("WLM_InfusionsoftSCAPI_LastProcess", $current_time);
             } else {
                 add_option("WLM_InfusionsoftSCAPI_LastProcess", $current_time);
             }
         }
     }
 }