PluginProbe
Ebook Store / 6.25
Ebook Store v6.25
6.25 6.24 6.23 6.22 6.21 6.20 trunk
ebook-store / includes / mailchimp / Mailchimp.php

Mailchimp.php in Ebook Store 6.25, at includes/mailchimp/Mailchimp.php

264 lines 11.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 require_once 'Mailchimp/Folders.php';
4 require_once 'Mailchimp/Templates.php';
5 require_once 'Mailchimp/Users.php';
6 require_once 'Mailchimp/Helper.php';
7 require_once 'Mailchimp/Mobile.php';
8 require_once 'Mailchimp/Conversations.php';
9 require_once 'Mailchimp/Ecomm.php';
10 require_once 'Mailchimp/Neapolitan.php';
11 require_once 'Mailchimp/Lists.php';
12 require_once 'Mailchimp/Campaigns.php';
13 require_once 'Mailchimp/Vip.php';
14 require_once 'Mailchimp/Reports.php';
15 require_once 'Mailchimp/Gallery.php';
16 require_once 'Mailchimp/Goal.php';
17 require_once 'Mailchimp/Exceptions.php';
18
19 class Mailchimp {
20
21 public $apikey;
22 public $ch;
23 public $root = 'https://api.mailchimp.com/2.0';
24 public $debug = false;
25
26 public static $error_map = array(
27 "ValidationError" => "Mailchimp_ValidationError",
28 "ServerError_MethodUnknown" => "Mailchimp_ServerError_MethodUnknown",
29 "ServerError_InvalidParameters" => "Mailchimp_ServerError_InvalidParameters",
30 "Unknown_Exception" => "Mailchimp_Unknown_Exception",
31 "Request_TimedOut" => "Mailchimp_Request_TimedOut",
32 "Zend_Uri_Exception" => "Mailchimp_Zend_Uri_Exception",
33 "PDOException" => "Mailchimp_PDOException",
34 "Avesta_Db_Exception" => "Mailchimp_Avesta_Db_Exception",
35 "XML_RPC2_Exception" => "Mailchimp_XML_RPC2_Exception",
36 "XML_RPC2_FaultException" => "Mailchimp_XML_RPC2_FaultException",
37 "Too_Many_Connections" => "Mailchimp_Too_Many_Connections",
38 "Parse_Exception" => "Mailchimp_Parse_Exception",
39 "User_Unknown" => "Mailchimp_User_Unknown",
40 "User_Disabled" => "Mailchimp_User_Disabled",
41 "User_DoesNotExist" => "Mailchimp_User_DoesNotExist",
42 "User_NotApproved" => "Mailchimp_User_NotApproved",
43 "Invalid_ApiKey" => "Mailchimp_Invalid_ApiKey",
44 "User_UnderMaintenance" => "Mailchimp_User_UnderMaintenance",
45 "Invalid_AppKey" => "Mailchimp_Invalid_AppKey",
46 "Invalid_IP" => "Mailchimp_Invalid_IP",
47 "User_DoesExist" => "Mailchimp_User_DoesExist",
48 "User_InvalidRole" => "Mailchimp_User_InvalidRole",
49 "User_InvalidAction" => "Mailchimp_User_InvalidAction",
50 "User_MissingEmail" => "Mailchimp_User_MissingEmail",
51 "User_CannotSendCampaign" => "Mailchimp_User_CannotSendCampaign",
52 "User_MissingModuleOutbox" => "Mailchimp_User_MissingModuleOutbox",
53 "User_ModuleAlreadyPurchased" => "Mailchimp_User_ModuleAlreadyPurchased",
54 "User_ModuleNotPurchased" => "Mailchimp_User_ModuleNotPurchased",
55 "User_NotEnoughCredit" => "Mailchimp_User_NotEnoughCredit",
56 "MC_InvalidPayment" => "Mailchimp_MC_InvalidPayment",
57 "List_DoesNotExist" => "Mailchimp_List_DoesNotExist",
58 "List_InvalidInterestFieldType" => "Mailchimp_List_InvalidInterestFieldType",
59 "List_InvalidOption" => "Mailchimp_List_InvalidOption",
60 "List_InvalidUnsubMember" => "Mailchimp_List_InvalidUnsubMember",
61 "List_InvalidBounceMember" => "Mailchimp_List_InvalidBounceMember",
62 "List_AlreadySubscribed" => "Mailchimp_List_AlreadySubscribed",
63 "List_NotSubscribed" => "Mailchimp_List_NotSubscribed",
64 "List_InvalidImport" => "Mailchimp_List_InvalidImport",
65 "MC_PastedList_Duplicate" => "Mailchimp_MC_PastedList_Duplicate",
66 "MC_PastedList_InvalidImport" => "Mailchimp_MC_PastedList_InvalidImport",
67 "Email_AlreadySubscribed" => "Mailchimp_Email_AlreadySubscribed",
68 "Email_AlreadyUnsubscribed" => "Mailchimp_Email_AlreadyUnsubscribed",
69 "Email_NotExists" => "Mailchimp_Email_NotExists",
70 "Email_NotSubscribed" => "Mailchimp_Email_NotSubscribed",
71 "List_MergeFieldRequired" => "Mailchimp_List_MergeFieldRequired",
72 "List_CannotRemoveEmailMerge" => "Mailchimp_List_CannotRemoveEmailMerge",
73 "List_Merge_InvalidMergeID" => "Mailchimp_List_Merge_InvalidMergeID",
74 "List_TooManyMergeFields" => "Mailchimp_List_TooManyMergeFields",
75 "List_InvalidMergeField" => "Mailchimp_List_InvalidMergeField",
76 "List_InvalidInterestGroup" => "Mailchimp_List_InvalidInterestGroup",
77 "List_TooManyInterestGroups" => "Mailchimp_List_TooManyInterestGroups",
78 "Campaign_DoesNotExist" => "Mailchimp_Campaign_DoesNotExist",
79 "Campaign_StatsNotAvailable" => "Mailchimp_Campaign_StatsNotAvailable",
80 "Campaign_InvalidAbsplit" => "Mailchimp_Campaign_InvalidAbsplit",
81 "Campaign_InvalidContent" => "Mailchimp_Campaign_InvalidContent",
82 "Campaign_InvalidOption" => "Mailchimp_Campaign_InvalidOption",
83 "Campaign_InvalidStatus" => "Mailchimp_Campaign_InvalidStatus",
84 "Campaign_NotSaved" => "Mailchimp_Campaign_NotSaved",
85 "Campaign_InvalidSegment" => "Mailchimp_Campaign_InvalidSegment",
86 "Campaign_InvalidRss" => "Mailchimp_Campaign_InvalidRss",
87 "Campaign_InvalidAuto" => "Mailchimp_Campaign_InvalidAuto",
88 "MC_ContentImport_InvalidArchive" => "Mailchimp_MC_ContentImport_InvalidArchive",
89 "Campaign_BounceMissing" => "Mailchimp_Campaign_BounceMissing",
90 "Campaign_InvalidTemplate" => "Mailchimp_Campaign_InvalidTemplate",
91 "Invalid_EcommOrder" => "Mailchimp_Invalid_EcommOrder",
92 "Absplit_UnknownError" => "Mailchimp_Absplit_UnknownError",
93 "Absplit_UnknownSplitTest" => "Mailchimp_Absplit_UnknownSplitTest",
94 "Absplit_UnknownTestType" => "Mailchimp_Absplit_UnknownTestType",
95 "Absplit_UnknownWaitUnit" => "Mailchimp_Absplit_UnknownWaitUnit",
96 "Absplit_UnknownWinnerType" => "Mailchimp_Absplit_UnknownWinnerType",
97 "Absplit_WinnerNotSelected" => "Mailchimp_Absplit_WinnerNotSelected",
98 "Invalid_Analytics" => "Mailchimp_Invalid_Analytics",
99 "Invalid_DateTime" => "Mailchimp_Invalid_DateTime",
100 "Invalid_Email" => "Mailchimp_Invalid_Email",
101 "Invalid_SendType" => "Mailchimp_Invalid_SendType",
102 "Invalid_Template" => "Mailchimp_Invalid_Template",
103 "Invalid_TrackingOptions" => "Mailchimp_Invalid_TrackingOptions",
104 "Invalid_Options" => "Mailchimp_Invalid_Options",
105 "Invalid_Folder" => "Mailchimp_Invalid_Folder",
106 "Invalid_URL" => "Mailchimp_Invalid_URL",
107 "Module_Unknown" => "Mailchimp_Module_Unknown",
108 "MonthlyPlan_Unknown" => "Mailchimp_MonthlyPlan_Unknown",
109 "Order_TypeUnknown" => "Mailchimp_Order_TypeUnknown",
110 "Invalid_PagingLimit" => "Mailchimp_Invalid_PagingLimit",
111 "Invalid_PagingStart" => "Mailchimp_Invalid_PagingStart",
112 "Max_Size_Reached" => "Mailchimp_Max_Size_Reached",
113 "MC_SearchException" => "Mailchimp_MC_SearchException",
114 "Goal_SaveFailed" => "Mailchimp_Goal_SaveFailed",
115 "Conversation_DoesNotExist" => "Mailchimp_Conversation_DoesNotExist",
116 "Conversation_ReplySaveFailed" => "Mailchimp_Conversation_ReplySaveFailed",
117 "File_Not_Found_Exception" => "Mailchimp_File_Not_Found_Exception",
118 "Folder_Not_Found_Exception" => "Mailchimp_Folder_Not_Found_Exception",
119 "Folder_Exists_Exception" => "Mailchimp_Folder_Exists_Exception"
120 );
121
122 public function __construct($apikey=null, $opts=array()) {
123 if (!$apikey) {
124 $apikey = getenv('MAILCHIMP_APIKEY');
125 }
126
127 if (!$apikey) {
128 $apikey = $this->readConfigs();
129 }
130
131 if (!$apikey) {
132 throw new Mailchimp_Error('You must provide a MailChimp API key');
133 }
134
135 $this->apikey = $apikey;
136 $dc = "us1";
137
138 if (strstr($this->apikey, "-")){
139 list($key, $dc) = explode("-", $this->apikey, 2);
140 if (!$dc) {
141 $dc = "us1";
142 }
143 }
144
145 $this->root = str_replace('https://api', 'https://' . $dc . '.api', $this->root);
146 $this->root = rtrim($this->root, '/') . '/';
147
148 if (!isset($opts['timeout']) || !is_int($opts['timeout'])){
149 $opts['timeout'] = 600;
150 }
151 if (isset($opts['debug'])){
152 $this->debug = true;
153 }
154
155
156 $this->ch = curl_init();
157
158 if (isset($opts['CURLOPT_FOLLOWLOCATION']) && $opts['CURLOPT_FOLLOWLOCATION'] === true) {
159 curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
160 }
161
162 curl_setopt($this->ch, CURLOPT_USERAGENT, 'MailChimp-PHP/2.0.6');
163 curl_setopt($this->ch, CURLOPT_POST, true);
164 curl_setopt($this->ch, CURLOPT_HEADER, false);
165 curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
166 curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, 30);
167 curl_setopt($this->ch, CURLOPT_TIMEOUT, $opts['timeout']);
168
169
170 $this->folders = new Mailchimp_Folders($this);
171 $this->templates = new Mailchimp_Templates($this);
172 $this->users = new Mailchimp_Users($this);
173 $this->helper = new Mailchimp_Helper($this);
174 $this->mobile = new Mailchimp_Mobile($this);
175 $this->conversations = new Mailchimp_Conversations($this);
176 $this->ecomm = new Mailchimp_Ecomm($this);
177 $this->neapolitan = new Mailchimp_Neapolitan($this);
178 $this->lists = new Mailchimp_Lists($this);
179 $this->campaigns = new Mailchimp_Campaigns($this);
180 $this->vip = new Mailchimp_Vip($this);
181 $this->reports = new Mailchimp_Reports($this);
182 $this->gallery = new Mailchimp_Gallery($this);
183 $this->goal = new Mailchimp_Goal($this);
184 }
185
186 public function __destruct() {
187 if(is_resource($this->ch)) {
188 curl_close($this->ch);
189 }
190 }
191
192 public function call($url, $params) {
193 $params['apikey'] = $this->apikey;
194
195 $params = json_encode($params);
196 $ch = $this->ch;
197
198 curl_setopt($ch, CURLOPT_URL, $this->root . $url . '.json');
199 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
200 curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
201 curl_setopt($ch, CURLOPT_VERBOSE, $this->debug);
202
203 $start = microtime(true);
204 $this->log('Call to ' . $this->root . $url . '.json: ' . $params);
205 if($this->debug) {
206 $curl_buffer = fopen('php://memory', 'w+');
207 curl_setopt($ch, CURLOPT_STDERR, $curl_buffer);
208 }
209
210 $response_body = curl_exec($ch);
211
212 $info = curl_getinfo($ch);
213 $time = microtime(true) - $start;
214 if($this->debug) {
215 rewind($curl_buffer);
216 $this->log(stream_get_contents($curl_buffer));
217 fclose($curl_buffer);
218 }
219 $this->log('Completed in ' . number_format($time * 1000, 2) . 'ms');
220 $this->log('Got response: ' . $response_body);
221
222 if(curl_error($ch)) {
223 throw new Mailchimp_HttpError("API call to $url failed: " . curl_error($ch));
224 }
225 $result = json_decode($response_body, true);
226
227 if(floor($info['http_code'] / 100) >= 4) {
228 throw $this->castError($result);
229 }
230
231 return $result;
232 }
233
234 public function readConfigs() {
235 $paths = array('~/.mailchimp.key', '/etc/mailchimp.key');
236 foreach($paths as $path) {
237 if(file_exists($path)) {
238 $apikey = trim(file_get_contents($path));
239 if ($apikey) {
240 return $apikey;
241 }
242 }
243 }
244 return false;
245 }
246
247 public function castError($result) {
248 if ($result['status'] !== 'error' || !$result['name']) {
249 throw new Mailchimp_Error('We received an unexpected error: ' . json_encode($result));
250 }
251
252 $class = (isset(self::$error_map[$result['name']])) ? self::$error_map[$result['name']] : 'Mailchimp_Error';
253 return new $class($result['error'], $result['code']);
254 }
255
256 public function log($msg) {
257 if ($this->debug) {
258 error_log($msg);
259 }
260 }
261 }
262
263
264