File: /var/www/intranet.kauko.lt/wp-content/plugins/dpProEventCalendar/mailchimp/miniMCAPI.class.php
<?php
/**
This is a subset of the Actual MCAPI and miniMCAPI classes for v1.3 that includes the list related methods and support for PHP4
DOWNLOAD A NEW VERSION IF YOU WANT THE FULL, CORRECT WRAPPER.
**/
if(!class_exists('mailchimpSF_MCAPI')) {
class mailchimpSF_MCAPI {
var $version = "1.3";
var $errorMessage;
var $errorCode;
/**
* Cache the information on the API location on the server
*/
var $apiUrl;
/**
* Default to a 300 second timeout on server calls
*/
var $timeout = 300;
/**
* Default to a 8K chunk size
*/
var $chunkSize = 8192;
/**
* Cache the user api_key so we only have to log in once per client instantiation
*/
var $api_key;
/**
* Cache the user api_key so we only have to log in once per client instantiation
*/
var $secure = false;
/**
* Connect to the MailChimp API for a given list.
*
* @param string $apikey Your MailChimp apikey
* @param string $secure Whether or not this should use a secure connection
*/
function mailchimpSF_MCAPI($apikey, $secure=false) {
$this->secure = $secure;
$this->apiUrl = parse_url("http://api.mailchimp.com/" . $this->version . "/?output=php");
$this->api_key = $apikey;
}
function setTimeout($seconds){
if (is_int($seconds)){
$this->timeout = $seconds;
return true;
}
}
function getTimeout(){
return $this->timeout;
}
function useSecure($val){
if ($val===true){
$this->secure = true;
} else {
$this->secure = false;
}
}
function lists($filters=array (
), $start=0, $limit=25) {
$params = array();
$params["filters"] = $filters;
$params["start"] = $start;
$params["limit"] = $limit;
return $this->callServer("lists", $params);
}
function listMergeVars($id) {
$params = array();
$params["id"] = $id;
return $this->callServer("listMergeVars", $params);
}
function listMergeVarAdd($id, $tag, $name, $options=array (
)) {
$params = array();
$params["id"] = $id;
$params["tag"] = $tag;
$params["name"] = $name;
$params["options"] = $options;
return $this->callServer("listMergeVarAdd", $params);
}
function listMergeVarUpdate($id, $tag, $options) {
$params = array();
$params["id"] = $id;
$params["tag"] = $tag;
$params["options"] = $options;
return $this->callServer("listMergeVarUpdate", $params);
}
function listMergeVarDel($id, $tag) {
$params = array();
$params["id"] = $id;
$params["tag"] = $tag;
return $this->callServer("listMergeVarDel", $params);
}
function listInterestGroupings($id) {
$params = array();
$params["id"] = $id;
return $this->callServer("listInterestGroupings", $params);
}
function listInterestGroupAdd($id, $group_name, $grouping_id=NULL) {
$params = array();
$params["id"] = $id;
$params["group_name"] = $group_name;
$params["grouping_id"] = $grouping_id;
return $this->callServer("listInterestGroupAdd", $params);
}
function listInterestGroupDel($id, $group_name, $grouping_id=NULL) {
$params = array();
$params["id"] = $id;
$params["group_name"] = $group_name;
$params["grouping_id"] = $grouping_id;
return $this->callServer("listInterestGroupDel", $params);
}
function listInterestGroupUpdate($id, $old_name, $new_name, $grouping_id=NULL) {
$params = array();
$params["id"] = $id;
$params["old_name"] = $old_name;
$params["new_name"] = $new_name;
$params["grouping_id"] = $grouping_id;
return $this->callServer("listInterestGroupUpdate", $params);
}
function listInterestGroupingAdd($id, $name, $type, $groups) {
$params = array();
$params["id"] = $id;
$params["name"] = $name;
$params["type"] = $type;
$params["groups"] = $groups;
return $this->callServer("listInterestGroupingAdd", $params);
}
function listInterestGroupingUpdate($grouping_id, $name, $value) {
$params = array();
$params["grouping_id"] = $grouping_id;
$params["name"] = $name;
$params["value"] = $value;
return $this->callServer("listInterestGroupingUpdate", $params);
}
function listInterestGroupingDel($grouping_id) {
$params = array();
$params["grouping_id"] = $grouping_id;
return $this->callServer("listInterestGroupingDel", $params);
}
function listSubscribe($id, $email_address, $merge_vars=NULL, $email_type='html', $double_optin=true, $update_existing=false, $replace_interests=true, $send_welcome=false) {
$params = array();
$params["id"] = $id;
$params["email_address"] = $email_address;
$params["merge_vars"] = $merge_vars;
$params["email_type"] = $email_type;
$params["double_optin"] = $double_optin;
$params["update_existing"] = $update_existing;
$params["replace_interests"] = $replace_interests;
$params["send_welcome"] = $send_welcome;
return $this->callServer("listSubscribe", $params);
}
function listUnsubscribe($id, $email_address, $delete_member=false, $send_goodbye=true, $send_notify=true) {
$params = array();
$params["id"] = $id;
$params["email_address"] = $email_address;
$params["delete_member"] = $delete_member;
$params["send_goodbye"] = $send_goodbye;
$params["send_notify"] = $send_notify;
return $this->callServer("listUnsubscribe", $params);
}
function listUpdateMember($id, $email_address, $merge_vars, $email_type='', $replace_interests=true) {
$params = array();
$params["id"] = $id;
$params["email_address"] = $email_address;
$params["merge_vars"] = $merge_vars;
$params["email_type"] = $email_type;
$params["replace_interests"] = $replace_interests;
return $this->callServer("listUpdateMember", $params);
}
function listBatchSubscribe($id, $batch, $double_optin=true, $update_existing=false, $replace_interests=true) {
$params = array();
$params["id"] = $id;
$params["batch"] = $batch;
$params["double_optin"] = $double_optin;
$params["update_existing"] = $update_existing;
$params["replace_interests"] = $replace_interests;
return $this->callServer("listBatchSubscribe", $params);
}
function listBatchUnsubscribe($id, $emails, $delete_member=false, $send_goodbye=true, $send_notify=false) {
$params = array();
$params["id"] = $id;
$params["emails"] = $emails;
$params["delete_member"] = $delete_member;
$params["send_goodbye"] = $send_goodbye;
$params["send_notify"] = $send_notify;
return $this->callServer("listBatchUnsubscribe", $params);
}
function listMembers($id, $status='subscribed', $since=NULL, $start=0, $limit=100) {
$params = array();
$params["id"] = $id;
$params["status"] = $status;
$params["since"] = $since;
$params["start"] = $start;
$params["limit"] = $limit;
return $this->callServer("listMembers", $params);
}
function listMemberInfo($id, $email_address) {
$params = array();
$params["id"] = $id;
$params["email_address"] = $email_address;
return $this->callServer("listMemberInfo", $params);
}
function listMemberActivity($id, $email_address) {
$params = array();
$params["id"] = $id;
$params["email_address"] = $email_address;
return $this->callServer("listMemberActivity", $params);
}
function getAccountDetails() {
$params = array();
return $this->callServer("getAccountDetails", $params);
}
function listsForEmail($email_address) {
$params = array();
$params["email_address"] = $email_address;
return $this->callServer("listsForEmail", $params);
}
function campaignsForEmail($email_address) {
$params = array();
$params["email_address"] = $email_address;
return $this->callServer("campaignsForEmail", $params);
}
/**
* "Ping" the MailChimp API - a simple method you can call that will return a constant value as long as everything is good. Note
* than unlike most all of our methods, we don't throw an Exception if we are having issues. You will simply receive a different
* string back that will explain our view on what is going on.
*
* @section Helper
* @example xml-rpc_ping.php
*
* @return string returns "Everything's Chimpy!" if everything is chimpy, otherwise returns an error message
*/
function ping() {
$params = array();
return $this->callServer("ping", $params);
}
/**
* Internal function - proxy method for certain XML-RPC calls | DO NOT CALL
* @param mixed Method to call, with any parameters to pass along
* @return mixed the result of the call
*/
function callMethod() {
$params = array();
return $this->callServer("callMethod", $params);
}
/**
* Actually connect to the server and call the requested methods, parsing the result
* You should never have to call this function manually
*/
function callServer($method, $params) {
$dc = "us1";
if (strstr($this->api_key,"-")){
list($key, $dc) = explode("-",$this->api_key,2);
if (!$dc) $dc = "us1";
}
$host = $dc.".".$this->apiUrl["host"];
$params["apikey"] = $this->api_key;
$this->errorMessage = "";
$this->errorCode = "";
$sep_changed = false;
//sigh, apparently some distribs change this to & by default
if (ini_get("arg_separator.output")!="&"){
$sep_changed = true;
$orig_sep = ini_get("arg_separator.output");
ini_set("arg_separator.output", "&");
}
$post_vars = $this->httpBuildQuery($params);
if ($sep_changed){
ini_set("arg_separator.output", $orig_sep);
}
$payload = "POST " . $this->apiUrl["path"] . "?" . $this->apiUrl["query"] . "&method=" . $method . " HTTP/1.0\r\n";
$payload .= "Host: " . $host . "\r\n";
$payload .= "User-Agent: MCAPIwp/" . $this->version ."\r\n";
$payload .= "Content-type: application/x-www-form-urlencoded\r\n";
$payload .= "Content-length: " . strlen($post_vars) . "\r\n";
$payload .= "Connection: close \r\n\r\n";
$payload .= $post_vars;
ob_start();
if ($this->secure){
$sock = @fsockopen("ssl://".$host, 443, $errno, $errstr, 30);
} else {
$sock = @fsockopen($host, 80, $errno, $errstr, 30);
}
if(!$sock) {
$this->errorMessage = "Could not connect (ERR $errno: $errstr)";
$this->errorCode = "-99";
ob_end_clean();
return false;
}
$response = "";
fwrite($sock, $payload);
stream_set_timeout($sock, $this->timeout);
$info = stream_get_meta_data($sock);
while ((!feof($sock)) && (!$info["timed_out"])) {
$response .= fread($sock, $this->chunkSize);
$info = stream_get_meta_data($sock);
}
fclose($sock);
ob_end_clean();
if ($info["timed_out"]) {
$this->errorMessage = "Could not read response (timed out)";
$this->errorCode = -98;
return false;
}
list($headers, $response) = explode("\r\n\r\n", $response, 2);
$headers = explode("\r\n", $headers);
$errored = false;
foreach($headers as $h){
if (substr($h,0,26)==="X-MailChimp-API-Error-Code"){
$errored = true;
$error_code = trim(substr($h,27));
break;
}
}
if (version_compare(PHP_VERSION, '5.3.0', '<')) {
if(ini_get("magic_quotes_runtime")) $response = stripslashes($response);
}
$serial = unserialize($response);
if($response && $serial === false) {
$response = array("error" => "Bad Response. Got This: " . $response, "code" => "-99");
} else {
$response = $serial;
}
if($errored && is_array($response) && isset($response["error"])) {
$this->errorMessage = $response["error"];
$this->errorCode = $response["code"];
return false;
} elseif($errored){
$this->errorMessage = "No error message was found";
$this->errorCode = $error_code;
return false;
}
return $response;
}
/**
* Re-implement http_build_query for systems that do not already have it
*/
function httpBuildQuery($params, $key=null) {
$ret = array();
foreach((array) $params as $name => $val) {
$name = urlencode($name);
if($key !== null) {
$name = $key . "[" . $name . "]";
}
if(is_array($val) || is_object($val)) {
$ret[] = $this->httpBuildQuery($val, $name);
} elseif($val !== null) {
$ret[] = $name . "=" . urlencode($val);
}
}
return implode("&", $ret);
}
}
}
?>