PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 111206
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v111206
260917 260913 260909 260829 260814 260805 110710 110731 110812 110815 110912 110913 110915 110926 110927 111002 111003 111011 111017 111029 111105 111206 111216 111220 120213 All 189 releases
s2member / includes / classes / list-servers.inc.php

list-servers.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 111206, at includes/classes/list-servers.inc.php

375 lines 29.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * List Server integrations.
4 *
5 * Copyright: © 2009-2011
6 * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7 * ( coded in the USA )
8 *
9 * Released under the terms of the GNU General Public License.
10 * You should have received a copy of the GNU General Public License,
11 * along with this software. In the main directory, see: /licensing/
12 * If not, see: {@link http://www.gnu.org/licenses/}.
13 *
14 * @package s2Member\List_Servers
15 * @since 3.5
16 */
17 if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
18 exit("Do not access this file directly.");
19 /**/
20 if (!class_exists ("c_ws_plugin__s2member_list_servers"))
21 {
22 /**
23 * List Server integrations.
24 *
25 * @package s2Member\List_Servers
26 * @since 3.5
27 */
28 class c_ws_plugin__s2member_list_servers
29 {
30 /**
31 * Determines whether or not any List Servers have been integrated.
32 *
33 * @package s2Member\List_Servers
34 * @since 3.5
35 *
36 * @return bool True if List Servers have been integrated, else false.
37 */
38 public static function list_servers_integrated ()
39 {
40 do_action ("ws_plugin__s2member_before_list_servers_integrated", get_defined_vars ());
41 /**/
42 for ($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++) /* Go through each Level; looking for a configured list. */
43 if (!empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_mailchimp_list_ids"]) || !empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_aweber_list_ids"]))
44 return apply_filters ("ws_plugin__s2member_list_servers_integrated", true, get_defined_vars ());
45 /**/
46 return apply_filters ("ws_plugin__s2member_list_servers_integrated", false, get_defined_vars ());
47 }
48 /**
49 * Processes List Server integrations for s2Member.
50 *
51 * @package s2Member\List_Servers
52 * @since 3.5
53 *
54 * @param str $role A WordPress Role ID/Name, such as `subscriber`, or `s2member_level1`.
55 * @param int|str $level A numeric s2Member Access Level number.
56 * @param str $login Username for the User.
57 * @param str $pass Plain Text Password for the User.
58 * @param str $email Email Address for the User.
59 * @param str $fname First Name for the User.
60 * @param str $lname Last Name for the User.
61 * @param str $ip IP Address for the User.
62 * @param bool $opt_in Defaults to false; must be set to true. Indicates the User IS opting in.
63 * @param bool $double_opt_in Defaults to true. If false, no email confirmation is required. Use at your own risk.
64 * @param int|str $user_id A WordPress User ID, numeric string or integer.
65 * @return bool True if at least one List Server is processed successfully, else false.
66 *
67 * @todo Integrate {@link https://labs.aweber.com/docs/php-library-walkthrough AWeber's API}.
68 * @todo Add a separate option for mail debugging; or consolidate?
69 * @todo Integrate AWeber® API ( much like the MailChimp® API ).
70 */
71 public static function process_list_servers ($role = FALSE, $level = FALSE, $login = FALSE, $pass = FALSE, $email = FALSE, $fname = FALSE, $lname = FALSE, $ip = FALSE, $opt_in = FALSE, $double_opt_in = TRUE, $user_id = FALSE)
72 {
73 global $current_site, $current_blog; /* For Multisite support. */
74 /**/
75 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
76 do_action ("ws_plugin__s2member_before_process_list_servers", get_defined_vars ());
77 unset ($__refs, $__v); /* Unset defined __refs, __v. */
78 /**/
79 if (c_ws_plugin__s2member_list_servers::list_servers_integrated () && ($args = func_get_args ()) && $role && is_string ($role) && is_numeric ($level) && $login && is_string ($login) && is_string ($pass = (string)$pass) && $email && is_string ($email) && is_email ($email) && is_string ($fname = (string)$fname) && is_string ($lname = (string)$lname) && is_string ($ip = (string)$ip) && is_bool ($opt_in = (bool)$opt_in) && $opt_in && is_bool ($double_opt_in = (bool)$double_opt_in) && $user_id && is_numeric ($user_id) && is_object ($user = new WP_User ($user_id)) && !empty ($user->ID))
80 {
81 $ccaps = implode (",", c_ws_plugin__s2member_user_access::user_access_ccaps ($user)); /* Get Custom Capabilities. */
82 /**/
83 $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status (); /* s2Member Filters enabled? */
84 c_ws_plugin__s2member_email_configs::email_config_release (); /* Release s2Member Filters before we begin this routine. */
85 /**/
86 if (!empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"]) && !empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"]))
87 {
88 if (!class_exists ("NC_MCAPI")) /* Include the MailChimp® API Class here. */
89 include_once dirname (dirname (__FILE__)) . "/_xtnls/mailchimp/nc-mcapi.inc.php"; /* MailChimp® API ( no-conflict version ). */
90 /**/
91 $mcapi = new NC_MCAPI ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"], true); /* MailChimp® API ( no-conflict ). */
92 /**/
93 foreach (preg_split ("/[\r\n\t;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"]) as $mailchimp_list)
94 {
95 $mailchimp = array ("function" => __FUNCTION__, "func_get_args" => $args, "api_method" => "listSubscribe");
96 /**/
97 if (($mailchimp["list"] = trim ($mailchimp_list))) /* Trim this up. NO trailing white space. */
98 {
99 if (strpos ($mailchimp["list"], "::") !== false) /* Also contains Interest Groups? */
100 {
101 list ($mailchimp["list_id"], $mailchimp["interest_groups_title"], $mailchimp["interest_groups"]) = preg_split ("/\:\:/", $mailchimp["list"], 3);
102 /**/
103 if (($mailchimp["interest_groups_title"] = trim ($mailchimp["interest_groups_title"]))) /* This is a title configured by the list master. */
104 if (($mailchimp["interest_groups"] = (trim ($mailchimp["interest_groups"])) ? preg_split ("/\|/", trim ($mailchimp["interest_groups"])) : false))
105 $mailchimp["interest_groups"] = array ("GROUPINGS" => array (array ("name" => $mailchimp["interest_groups_title"], "groups" => implode (",", $mailchimp["interest_groups"]))));
106 /**/
107 if (empty ($mailchimp["list_id"])) /* Need to double-check this. If empty, skip over this entry. */
108 continue; /* Continue to next List, if there is one. */
109 }
110 else /* Else, it's just a List ID. */
111 $mailchimp["list_id"] = $mailchimp["list"];
112 /**/
113 $mailchimp["merge_array"] = array ("MERGE1" => $fname, "MERGE2" => $lname, "OPTIN_IP" => $ip, "OPTIN_TIME" => date ("Y-m-d H:i:s"));
114 $mailchimp["merge_array"] = ($mailchimp["interest_groups"]) ? array_merge ($mailchimp["merge_array"], $mailchimp["interest_groups"]) : $mailchimp["merge_array"];
115 $mailchimp["merge_array"] = apply_filters ( /* Deprecated. */"ws_plugin__s2member_mailchimp_array", $mailchimp["merge_array"], get_defined_vars ());
116 /* Filter: `ws_plugin__s2member_mailchimp_array` deprecated in v110523. Please use Filter: `ws_plugin__s2member_mailchimp_merge_array`. */
117 /**/
118 if ($mailchimp["api_response"] = $mcapi->{$mailchimp["api_method"]}($mailchimp["list_id"], $email, /* See: `http://apidocs.mailchimp.com/` for full details. */
119 ($mailchimp["api_merge_array"] = apply_filters ("ws_plugin__s2member_mailchimp_merge_array", $mailchimp["merge_array"], get_defined_vars ())), /* Configured merge array above. */
120 ($mailchimp["api_email_type"] = apply_filters ("ws_plugin__s2member_mailchimp_email_type", "html", get_defined_vars ())), /* Type of email to receive ( i.e. html,text,mobile ).*/
121 ($mailchimp["api_double_optin"] = apply_filters ("ws_plugin__s2member_mailchimp_double_optin", $double_opt_in, get_defined_vars ())), /* Abuse of this may cause account suspension. */
122 ($mailchimp["api_update_existing"] = apply_filters ("ws_plugin__s2member_mailchimp_update_existing", false, get_defined_vars ())), /* Existing subscribers should be updated with this? */
123 ($mailchimp["api_replace_interests"] = apply_filters ("ws_plugin__s2member_mailchimp_replace_interests", true, get_defined_vars ())), /* Replace interest groups? ( only if provided ) */
124 ($mailchimp["api_send_welcome"] = apply_filters ("ws_plugin__s2member_mailchimp_send_welcome", false, get_defined_vars ())))) /* See documentation. This is a weird option. */
125 $mailchimp["api_success"] = $success = true; /* Flag indicating that we DO have a successful processing of a new List; affects the function's overall return value. */
126 $mailchimp["api_properties"] = $mcapi; /* Include API instance too; as it contains some additional information after each method is processed ( need this in the logs ). */
127 /**/
128 $logv = c_ws_plugin__s2member_utilities::ver_details ();
129 $logm = c_ws_plugin__s2member_utilities::mem_details ();
130 $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"];
131 $log4 = (is_multisite () && !is_main_site ()) ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4;
132 $log2 = (is_multisite () && !is_main_site ()) ? "mailchimp-api-4-" . trim (preg_replace ("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "mailchimp-api.log";
133 /**/
134 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"])
135 if (is_dir ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
136 if (is_writable ($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files ())
137 file_put_contents ($logs_dir . "/" . $log2, $logv . "\n" . $logm . "\n" . $log4 . "\n" . var_export ($mailchimp, true) . "\n\n", FILE_APPEND);
138 }
139 }
140 }
141 /**/
142 if (!empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"]))
143 {
144 foreach (preg_split ("/[\r\n\t\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"]) as $aweber_list)
145 {
146 $aweber = array ("function" => __FUNCTION__, "func_get_args" => $args, "wp_mail_method" => "listSubscribe");
147 /**/
148 if (($aweber["list_id"] = trim ($aweber_list))) /* Trim this up. NO trailing white space. */
149 {
150 $aweber["bcc"] = apply_filters ("ws_plugin__s2member_aweber_bcc", false, get_defined_vars ());
151 $aweber["pass_inclusion"] = (apply_filters ("ws_plugin__s2member_aweber_pass_inclusion", false, get_defined_vars ()) && $pass) ? "\nPass: " . $pass : false;
152 $buyer = ($fname || $lname) ? trim ($fname . " " . $lname) : /* Must have. AWeber's PayPal Email Parser chokes on an empty value. */ ucwords (preg_replace ("/^(.+?)@.+/", "$1", $email));
153 /**/
154 if ($aweber["wp_mail_response"] = wp_mail ($aweber["list_id"] . "@aweber.com", /* AWeber® List ID converts to email address @aweber.com. */
155 ($aweber["wp_mail_sbj"] = apply_filters ("ws_plugin__s2member_aweber_sbj", "s2Member Subscription Request", get_defined_vars ())), /* These Filters make it possible to customize these emails. */
156 ($aweber["wp_mail_msg"] = apply_filters ("ws_plugin__s2member_aweber_msg", "s2Member Subscription Request\ns2Member w/ PayPal Email ID\nAd Tracking: s2Member-" . ((is_multisite () && !is_main_site ()) ? $current_blog->domain . $current_blog->path : $_SERVER["HTTP_HOST"]) . "\nEMail Address: " . $email . "\nBuyer: " . $buyer . "\nFull Name: " . trim ($fname . " " . $lname) . "\nFirst Name: " . $fname . "\nLast Name: " . $lname . "\nIP Address: " . $ip . "\nUser ID: " . $user_id . "\nLogin: " . $login . $aweber["pass_inclusion"] . "\nRole: " . $role . "\nLevel: " . $level . "\nCCaps: " . $ccaps . "\n - end.", get_defined_vars ())),/**/
157 ($aweber["wp_mail_headers"] = "From: \"" . preg_replace ("/\"/", "", trim ($fname . " " . $lname)) . "\" <" . $email . ">" . (($aweber["bcc"]) ? "\r\nBcc: " . $aweber["bcc"] : "") . "\r\nContent-Type: text/plain; charset=utf-8")))
158 $aweber["wp_mail_success"] = $success = true; /* Flag indicating that we DO have a successful processing of a new List; affects the function's overall return value. */
159 /**/
160 $logv = c_ws_plugin__s2member_utilities::ver_details ();
161 $logm = c_ws_plugin__s2member_utilities::mem_details ();
162 $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"];
163 $log4 = (is_multisite () && !is_main_site ()) ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4;
164 $log2 = (is_multisite () && !is_main_site ()) ? "aweber-api-4-" . trim (preg_replace ("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "aweber-api.log";
165 /**/
166 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"])
167 if (is_dir ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
168 if (is_writable ($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files ())
169 file_put_contents ($logs_dir . "/" . $log2, $logv . "\n" . $logm . "\n" . $log4 . "\n" . var_export ($aweber, true) . "\n\n", FILE_APPEND);
170 }
171 }
172 }
173 /**/
174 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
175 do_action ("ws_plugin__s2member_during_process_list_servers", get_defined_vars ());
176 unset ($__refs, $__v); /* Unset defined __refs, __v. */
177 /**/
178 if ($email_configs_were_on) /* Back on? */
179 c_ws_plugin__s2member_email_configs::email_config ();
180 }
181 /**/
182 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
183 do_action ("ws_plugin__s2member_after_process_list_servers", get_defined_vars ());
184 unset ($__refs, $__v); /* Unset defined __refs, __v. */
185 /**/
186 return apply_filters ("ws_plugin__s2member_process_list_servers", (isset ($success) && $success), get_defined_vars ());
187 }
188 /**
189 * Processes List Server removals for s2Member.
190 *
191 * @package s2Member\List_Servers
192 * @since 3.5
193 *
194 * @param str $role A WordPress Role ID/Name, such as `subscriber`, or `s2member_level1`.
195 * @param int|str $level A numeric s2Member Access Level number.
196 * @param str $login Username for the User.
197 * @param str $pass Plain Text Password for the User.
198 * @param str $email Email address for the User.
199 * @param str $fname First Name for the User.
200 * @param str $lname Last Name for the User.
201 * @param str $ip IP Address for the User.
202 * @param bool $opt_out Defaults to false; must be set to true. Indicates the User IS opting out.
203 * @param int|str $user_id A WordPress User ID, numeric string or integer.
204 * @return bool True if at least one List Server is processed successfully, else false.
205 *
206 * @todo Integrate {@link https://labs.aweber.com/docs/php-library-walkthrough AWeber's API}.
207 * @todo Add a separate option for mail debugging; or consolidate?
208 * @todo Integrate AWeber® API ( much like the MailChimp® API ).
209 */
210 public static function process_list_server_removals ($role = FALSE, $level = FALSE, $login = FALSE, $pass = FALSE, $email = FALSE, $fname = FALSE, $lname = FALSE, $ip = FALSE, $opt_out = FALSE, $user_id = FALSE)
211 {
212 global $current_site, $current_blog; /* For Multisite support. */
213 /**/
214 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
215 do_action ("ws_plugin__s2member_before_process_list_server_removals", get_defined_vars ());
216 unset ($__refs, $__v); /* Unset defined __refs, __v. */
217 /**/
218 if (c_ws_plugin__s2member_list_servers::list_servers_integrated () && ($args = func_get_args ()) && $role && is_string ($role) && is_numeric ($level) && $login && is_string ($login) && is_string ($pass = (string)$pass) && $email && is_string ($email) && is_email ($email) && is_string ($fname = (string)$fname) && is_string ($lname = (string)$lname) && is_string ($ip = (string)$ip) && is_bool ($opt_out = (bool)$opt_out) && $opt_out && $user_id && is_numeric ($user_id) && is_object ($user = new WP_User ($user_id)) && !empty ($user->ID))
219 {
220 $ccaps = implode (",", c_ws_plugin__s2member_user_access::user_access_ccaps ($user)); /* Get Custom Capabilities. */
221 /**/
222 $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status (); /* s2Member Filters enabled? */
223 c_ws_plugin__s2member_email_configs::email_config_release (); /* Release s2Member Filters before we begin this routine. */
224 /**/
225 if (!empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"]) && !empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"]))
226 {
227 if (!class_exists ("NC_MCAPI")) /* Include the MailChimp® API Class here. */
228 include_once dirname (dirname (__FILE__)) . "/_xtnls/mailchimp/nc-mcapi.inc.php"; /* MailChimp® API ( no-conflict version ). */
229 /**/
230 $mcapi = new NC_MCAPI ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"], true); /* MailChimp® API ( no-conflict ). */
231 /**/
232 foreach (preg_split ("/[\r\n\t;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"]) as $mailchimp_list)
233 {
234 $mailchimp = array ("function" => __FUNCTION__, "func_get_args" => $args, "api_removal_method" => "listUnsubscribe");
235 /**/
236 if (($mailchimp["list_id"] = trim (preg_replace ("/\:\:.*$/", "", $mailchimp_list)))) /* Trim & strip groups. */
237 {
238 if ($mailchimp["api_removal_response"] = $mcapi->{$mailchimp["api_removal_method"]}($mailchimp["list_id"], $email, /* See: `http://apidocs.mailchimp.com/`. */
239 ($mailchimp["api_removal_delete_member"] = apply_filters ("ws_plugin__s2member_mailchimp_removal_delete_member", false, get_defined_vars ())), /* Completely delete? */
240 ($mailchimp["api_removal_send_goodbye"] = apply_filters ("ws_plugin__s2member_mailchimp_removal_send_goodbye", false, get_defined_vars ())), /* Send goodbye letter? */
241 ($mailchimp["api_removal_send_notify"] = apply_filters ("ws_plugin__s2member_mailchimp_removal_send_notify", false, get_defined_vars ())))) /* Send notification? */
242 $mailchimp["api_removal_success"] = $removal_success = true; /* Flag indicating that we DO have a successful removal; affects the function's overall return value. */
243 $mailchimp["api_removal_properties"] = $mcapi; /* Include API instance too; as it contains some additional information after each method is processed ( need this in the logs ). */
244 /**/
245 $logv = c_ws_plugin__s2member_utilities::ver_details ();
246 $logm = c_ws_plugin__s2member_utilities::mem_details ();
247 $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"];
248 $log4 = (is_multisite () && !is_main_site ()) ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4;
249 $log2 = (is_multisite () && !is_main_site ()) ? "mailchimp-api-4-" . trim (preg_replace ("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "mailchimp-api.log";
250 /**/
251 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"])
252 if (is_dir ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
253 if (is_writable ($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files ())
254 file_put_contents ($logs_dir . "/" . $log2, $logv . "\n" . $logm . "\n" . $log4 . "\n" . var_export ($mailchimp, true) . "\n\n", FILE_APPEND);
255 }
256 }
257 }
258 /**/
259 if (!empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"]))
260 {
261 foreach (preg_split ("/[\r\n\t\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"]) as $aweber_list)
262 {
263 $aweber = array ("function" => __FUNCTION__, "func_get_args" => $args, "wp_mail_removal_method" => "listUnsubscribe");
264 /**/
265 if (($aweber["list_id"] = trim ($aweber_list))) /* Trim this up. NO trailing white space. */
266 {
267 $aweber["removal_bcc"] = apply_filters ("ws_plugin__s2member_aweber_removal_bcc", false, get_defined_vars ());
268 /**/
269 c_ws_plugin__s2member_email_configs::email_config (); /* Email configs MUST be ON for removal requests.
270 The `From:` address MUST match AWeber account. See: <http://www.aweber.com/faq/questions/62/Can+I+Unsubscribe+People+Via+Email%3F>. */
271 /**/
272 if ($aweber["wp_mail_removal_response"] = wp_mail ($aweber["list_id"] . "@aweber.com", /* AWeber® List ID converts to email address @aweber.com. */
273 ($aweber["wp_mail_removal_sbj"] = apply_filters ("ws_plugin__s2member_aweber_removal_sbj", "REMOVE#" . $email . "#s2Member#" . $aweber["list_id"], get_defined_vars ())), /* Bug fix. AWeber® does not like dots ( possibly other chars ) in the Ad Tracking field. Now using just: `s2Member`. */
274 ($aweber["wp_mail_removal_msg"] = "REMOVE"), ($aweber["wp_mail_removal_headers"] = "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">" . (($aweber["removal_bcc"]) ? "\r\nBcc: " . $aweber["removal_bcc"] : "") . "\r\nContent-Type: text/plain; charset=utf-8")))
275 $aweber["wp_mail_removal_success"] = $removal_success = true; /* Flag indicating that we DO have a successful removal; affects the function's overall return value. */
276 /**/
277 c_ws_plugin__s2member_email_configs::email_config_release (); /* Release. */
278 /**/
279 $logv = c_ws_plugin__s2member_utilities::ver_details ();
280 $logm = c_ws_plugin__s2member_utilities::mem_details ();
281 $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"];
282 $log4 = (is_multisite () && !is_main_site ()) ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4;
283 $log2 = (is_multisite () && !is_main_site ()) ? "aweber-api-4-" . trim (preg_replace ("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "aweber-api.log";
284 /**/
285 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"])
286 if (is_dir ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
287 if (is_writable ($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files ())
288 file_put_contents ($logs_dir . "/" . $log2, $logv . "\n" . $logm . "\n" . $log4 . "\n" . var_export ($aweber, true) . "\n\n", FILE_APPEND);
289 }
290 }
291 }
292 /**/
293 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
294 do_action ("ws_plugin__s2member_during_process_list_server_removals", get_defined_vars ());
295 unset ($__refs, $__v); /* Unset defined __refs, __v. */
296 /**/
297 if ($email_configs_were_on) /* Back on? */
298 c_ws_plugin__s2member_email_configs::email_config ();
299 }
300 /**/
301 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
302 do_action ("ws_plugin__s2member_after_process_list_server_removals", get_defined_vars ());
303 unset ($__refs, $__v); /* Unset defined __refs, __v. */
304 /**/
305 return apply_filters ("ws_plugin__s2member_process_list_server_removals", (isset ($removal_success) && $removal_success), get_defined_vars ());
306 }
307 /**
308 * Listens to Collective EOT/MOD Events processed internally by s2Member.
309 *
310 * This is only applicable when ``["custom_reg_auto_opt_outs"]`` contains related Event(s).
311 *
312 * @package s2Member\List_Servers
313 * @since 3.5
314 *
315 * @attaches-to ``add_action("ws_plugin__s2member_during_collective_mods");``
316 * @attaches-to ``add_action("ws_plugin__s2member_during_collective_eots");``
317 *
318 * @param int|str $user_id Required. A WordPress® User ID, numeric string or integer.
319 * @param array $vars Required. An array of defined variables passed by the calling Hook.
320 * @param str $event Required. A specific event that triggered this call from the Action Hook.
321 * @param str $event_spec Required. A specific event specification *( a broader classification )*.
322 * @param str $mod_new_role Required if ``$event_spec === "modification"`` ( but can be empty ). Role the User is being modified to.
323 * @param str $mod_new_user Optional. If ``$event_spec === "modification"``, the new User object with current details.
324 * @param str $mod_old_user Optional. If ``$event_spec === "modification"``, the old/previous User obj with old details.
325 * @return null This function does not have a return value.
326 */
327 public static function auto_process_list_server_removals ($user_id = FALSE, $vars = FALSE, $event = FALSE, $event_spec = FALSE, $mod_new_role = FALSE, $mod_new_user = FALSE, $mod_old_user = FALSE)
328 {
329 global $current_site, $current_blog; /* For Multisite support. */
330 static $auto_processed = array (); /* Process ONE time for each User. */
331 /**/
332 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
333 do_action ("ws_plugin__s2member_before_auto_process_list_server_removals", get_defined_vars ());
334 unset ($__refs, $__v); /* Unset defined __refs, __v. */
335 /**/
336 $custom_reg_auto_op_outs = c_ws_plugin__s2member_utils_strings::wrap_deep ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_auto_opt_outs"], "/^", "$/i");
337 /**/
338 if (c_ws_plugin__s2member_list_servers::list_servers_integrated () && $user_id && is_numeric ($user_id) && !in_array ($user_id, $auto_processed) && is_array ($vars) && is_string ($event = (string)$event) && is_string ($event_spec = (string)$event_spec) && (c_ws_plugin__s2member_utils_arrays::in_regex_array ($event, $custom_reg_auto_op_outs) || c_ws_plugin__s2member_utils_arrays::in_regex_array ($event_spec, $custom_reg_auto_op_outs)) && is_object ($user = $_user = new WP_User ($user_id)) && !empty ($user->ID))
339 {
340 $mod_new_role = ($event_spec === "modification" && $mod_new_role && is_string ($mod_new_role)) ? $mod_new_role : /* Might be empty ( i.e. they now have NO Role ). */ false;
341 $mod_new_user = ($event_spec === "modification" && $mod_new_user && is_object ($mod_new_user) && !empty ($mod_new_user->ID) && $mod_new_user->ID === $_user->ID) ? $mod_new_user : false;
342 $mod_old_user = ($event_spec === "modification" && $mod_old_user && is_object ($mod_old_user) && !empty ($mod_old_user->ID) && $mod_old_user->ID === $_user->ID) ? $mod_old_user : false;
343 /**/
344 $user = ($event_spec === "modification" && $mod_old_user) ? $mod_old_user : $_user; /* Now, should we switch over to the old/previous User object ``$mod_old_user`` here? Or, should we use the one pulled by this routine with the User's ID? */
345 /**/
346 if (($event_spec !== "modification" || ($event_spec === "modification" && /* Might be empty ( i.e. they now have NO Role ). */ (string)$mod_new_role !== c_ws_plugin__s2member_user_access::user_access_role ($user) && strtotime ($user->user_registered) < strtotime ("-10 seconds") && ($event !== "user-role-change" || ($event === "user-role-change" && !empty ($vars["_p"]["ws_plugin__s2member_custom_reg_auto_opt_out_transitions"]))))) && ($auto_processed[$user->ID] = true))
347 {
348 $removed = c_ws_plugin__s2member_list_servers::process_list_server_removals (c_ws_plugin__s2member_user_access::user_access_role ($user), c_ws_plugin__s2member_user_access::user_access_level ($user), $user->user_login, false, $user->user_email, $user->first_name, $user->last_name, false, true, $user->ID);
349 /**/
350 if ($event_spec === "modification" && $mod_new_role && ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_auto_opt_out_transitions"] === "2" || ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_auto_opt_out_transitions"] === "1" && $removed)) /* Transitoning User/Member to different list(s)? */)
351 {
352 $user = ($event_spec === "modification" && $mod_new_user) ? $mod_new_user : $_user; /* Now, should we switch over to a new/current User object ``$mod_new_user`` here? ( which may contain newly updated details ). Or, should we simply use the User object pulled by this routine with the User's ID? */
353 /**/
354 $transitioned = c_ws_plugin__s2member_list_servers::process_list_servers ($mod_new_role, c_ws_plugin__s2member_user_access::user_access_role_to_level ($mod_new_role), $user->user_login, false, $user->user_email, $user->first_name, $user->last_name, false, true, (($removed) ? false : true), $user->ID);
355 /**/
356 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
357 do_action ("ws_plugin__s2member_during_auto_process_list_server_removal_transitions", get_defined_vars ());
358 unset ($__refs, $__v); /* Unset defined __refs, __v. */
359 }
360 /**/
361 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
362 do_action ("ws_plugin__s2member_during_auto_process_list_server_removals", get_defined_vars ());
363 unset ($__refs, $__v); /* Unset defined __refs, __v. */
364 }
365 }
366 /**/
367 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
368 do_action ("ws_plugin__s2member_after_auto_process_list_server_removals", get_defined_vars ());
369 unset ($__refs, $__v); /* Unset defined __refs, __v. */
370 /**/
371 return; /* Return for uniformity. */
372 }
373 }
374 }
375 ?>