PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 261011
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v261011
261011 261001 260927 260917 260913 260909 260829 260814 260805 110710 110731 110812 110815 110912 110913 110915 110926 110927 111002 111003 111011 111017 111029 111105 111206 All 192 releases
s2member / src / includes / classes / user-deletions.inc.php

user-deletions.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 261011, at src/includes/classes/user-deletions.inc.php

241 lines 13.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // @codingStandardsIgnoreFile
3 /**
4 * User deletion routines.
5 *
6 * Copyright: © 2009-2011
7 * {@link http://websharks-inc.com/ WebSharks, Inc.}
8 * (coded in the USA)
9 *
10 * Released under the terms of the GNU General Public License.
11 * You should have received a copy of the GNU General Public License,
12 * along with this software. In the main directory, see: /licensing/
13 * If not, see: {@link http://www.gnu.org/licenses/}.
14 *
15 * @package s2Member\User_Deletions
16 * @since 3.5
17 */
18 if(!defined('WPINC')) // MUST have WordPress.
19 exit ('Do not access this file directly.');
20
21 if(!class_exists('c_ws_plugin__s2member_user_deletions'))
22 {
23 /**
24 * User deletion routines.
25 *
26 * @package s2Member\User_Deletions
27 * @since 3.5
28 */
29 class c_ws_plugin__s2member_user_deletions
30 {
31 /**
32 * Handles Multisite User removal deletions.
33 *
34 * @package s2Member\User_Deletions
35 * @since 3.5
36 *
37 * @attaches-to ``add_action('remove_user_from_blog');``
38 *
39 * @param int|string $user_id Numeric WordPress User ID.
40 * @param int|string $blog_id Numeric WordPress Blog ID.
41 * @param bool $s2says Optional. Defaults to false. If true, it's definitely OK to process this deletion?
42 * The ``$s2says`` flag can be used when/if the routine is called directly for whatever reason.
43 * @param array|null $eot_access_before Optional access snapshot when removal has already cleared site roles.
44 */
45 public static function handle_ms_user_deletions($user_id = 0, $blog_id = 0, $s2says = FALSE, $eot_access_before = NULL)
46 {
47 static $processed = array(); // No duplicate processing.
48 global $pagenow; // Need this to detect the current admin page.
49
50 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
51 do_action('ws_plugin__s2member_before_handle_ms_user_deletions', get_defined_vars());
52 unset($__refs, $__v);
53
54 if($user_id && is_multisite() && empty($processed[$user_id]) && ($s2says || (is_blog_admin() && $pagenow === 'users.php')))
55 {
56 $processed[$user_id] = TRUE;
57
58 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
59 do_action('ws_plugin__s2member_during_handle_ms_user_deletions_before', get_defined_vars());
60 unset($__refs, $__v);
61
62 c_ws_plugin__s2member_user_deletions::handle_user_deletions($user_id, $eot_access_before);
63
64 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
65 do_action('ws_plugin__s2member_during_handle_ms_user_deletions_after', get_defined_vars());
66 unset($__refs, $__v);
67 }
68 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
69 do_action('ws_plugin__s2member_after_handle_ms_user_deletions', get_defined_vars());
70 unset($__refs, $__v);
71 }
72
73 /**
74 * Handles User removals/deletions.
75 *
76 * @package s2Member\User_Deletions
77 * @since 3.5
78 *
79 * @attaches-to ``add_action('delete_user');``
80 * @attaches-to ``add_action('wpmu_delete_user');``
81 *
82 * @param int|string $user_id Numeric WordPress User ID.
83 * @param array|null $eot_access_before Optional access snapshot captured before site membership removal.
84 */
85 public static function handle_user_deletions($user_id = 0, $eot_access_before = NULL)
86 {
87 static $processed = array(); // No duplicate processing.
88
89 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
90 do_action('ws_plugin__s2member_before_handle_user_deletions', get_defined_vars());
91 unset($__refs, $__v);
92
93 if($user_id && empty($processed[$user_id]) && ($processed[$user_id] = TRUE))
94 {
95 $eot_del_type = // Configure EOT/DEL type (possibly through this global variable).
96 (!empty($GLOBALS['ws_plugin__s2member_eot_del_type'])) ? // Is the global available for use?
97 $GLOBALS['ws_plugin__s2member_eot_del_type'] : 'user-removal-deletion'; // Else use default.
98
99 //261007.2015 Direct multisite removal can run after site roles are gone; use its captured access when supplied.
100 if(!is_array($eot_access_before))
101 $eot_access_before = c_ws_plugin__s2member_eot::access_snapshot(new WP_User($user_id));
102 $eot_notification_context = c_ws_plugin__s2member_eot::access_context($eot_access_before);
103
104 $custom = get_user_option('s2member_custom', $user_id);
105 $subscr_id = get_user_option('s2member_subscr_id', $user_id);
106 $subscr_baid = get_user_option('s2member_subscr_baid', $user_id);
107 $subscr_cid = get_user_option('s2member_subscr_cid', $user_id);
108 $fields = get_user_option('s2member_custom_fields', $user_id);
109 $user_reg_ip = get_user_option('s2member_registration_ip', $user_id);
110
111 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
112 do_action('ws_plugin__s2member_during_handle_user_before_deletions', get_defined_vars());
113 do_action('ws_plugin__s2member_during_collective_eots', $user_id, get_defined_vars(), $eot_del_type, 'removal-deletion');
114 unset($__refs, $__v);
115
116 delete_user_option($user_id, 's2member_custom');
117 delete_user_option($user_id, 's2member_subscr_gateway');
118 delete_user_option($user_id, 's2member_subscr_id');
119 delete_user_option($user_id, 's2member_subscr_baid');
120 delete_user_option($user_id, 's2member_subscr_cid');
121
122 delete_user_option($user_id, 's2member_custom_fields');
123 delete_user_option($user_id, 's2member_registration_ip');
124
125 delete_user_option($user_id, 's2member_ipn_signup_vars');
126 delete_user_option($user_id, 's2member_paid_registration_times');
127 delete_user_option($user_id, 's2member_access_cap_times');
128 delete_user_option($user_id, 's2member_coupon_codes');
129 delete_user_option($user_id, 's2member_coupon_uses');
130 delete_user_option($user_id, 's2member_sp_references');
131
132 delete_user_option($user_id, 's2member_last_status_scan');
133 delete_user_option($user_id, 's2member_last_reminder_scan');
134 delete_user_option($user_id, 's2member_first_payment_txn_id');
135 delete_user_option($user_id, 's2member_last_payment_time');
136 delete_user_option($user_id, 's2member_auto_eot_time');
137 delete_user_option($user_id, 's2member_auto_eot_details');
138 delete_user_option($user_id, 's2member_reminders_enable');
139 delete_user_option($user_id, 's2member_eot_reminder_state');
140
141 delete_user_option($user_id, 's2member_file_download_access_arc');
142 delete_user_option($user_id, 's2member_file_download_access_log');
143
144 delete_user_option($user_id, 's2member_last_auto_eot_time');
145 delete_user_option($user_id, 's2member_last_auto_eot_details');
146 delete_user_option($user_id, 's2member_last_auto_eot_processed_time');
147 delete_user_option($user_id, 's2member_eot_pending_deletion');
148 delete_user_option($user_id, 's2member_login_counter');
149 delete_user_option($user_id, 's2member_notes');
150
151 if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'])
152 {
153 foreach(preg_split("/[\r\n\t]+/", $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications on user deletion.
154
155 if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs(c_ws_plugin__s2member_eot::notification_fill($url, $eot_notification_context, TRUE), $custom, true)) && ($url = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($eot_del_type)), $url)) && ($url = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_id)), $url)))
156 if(($url = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_baid)), $url)) && ($url = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($subscr_cid)), $url)))
157 if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->first_name)), $url)) && ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->last_name)), $url)))
158 if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(trim($user->first_name.' '.$user->last_name))), $url)))
159 if(($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->user_email)), $url)))
160 if(($url = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->user_login)), $url)))
161 if(($url = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_reg_ip)), $url)))
162 if(($url = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)))
163 {
164 if(is_array($fields) && !empty($fields))
165 foreach($fields as $var => $val /* Custom Registration/Profile Fields. */)
166 if(!($url = preg_replace('/%%'.preg_quote($var, '/').'%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url)))
167 break;
168
169 if(($url = trim(preg_replace('/%%(.+?)%%/i', '', $url))))
170 c_ws_plugin__s2member_utils_urls::remote($url);
171 }
172 }
173 if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'])
174 {
175 $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status();
176 c_ws_plugin__s2member_email_configs::email_config_release();
177
178 $msg = $sbj = '(s2Member / API Notification Email) - EOT/Deletion';
179 $msg .= "\n\n"; // Spacing in the message body.
180
181 $msg .= 'eot_del_type: %%eot_del_type%%'."\n";
182 $msg .= 'subscr_id: %%subscr_id%%'."\n";
183 $msg .= 'subscr_baid: %%subscr_baid%%'."\n";
184 $msg .= 'subscr_cid: %%subscr_cid%%'."\n";
185 $msg .= 'user_first_name: %%user_first_name%%'."\n";
186 $msg .= 'user_last_name: %%user_last_name%%'."\n";
187 $msg .= 'user_full_name: %%user_full_name%%'."\n";
188 $msg .= 'user_email: %%user_email%%'."\n";
189 $msg .= 'user_login: %%user_login%%'."\n";
190 $msg .= 'user_ip: %%user_ip%%'."\n";
191 $msg .= 'user_id: %%user_id%%'."\n";
192 $msg .= c_ws_plugin__s2member_eot::notification_email_fields($eot_notification_context);
193
194 if(is_array($fields) && !empty($fields))
195 foreach($fields as $var => $val)
196 $msg .= $var.': %%'.$var.'%%'."\n";
197
198 $msg .= 'cv0: %%cv0%%'."\n";
199 $msg .= 'cv1: %%cv1%%'."\n";
200 $msg .= 'cv2: %%cv2%%'."\n";
201 $msg .= 'cv3: %%cv3%%'."\n";
202 $msg .= 'cv4: %%cv4%%'."\n";
203 $msg .= 'cv5: %%cv5%%'."\n";
204 $msg .= 'cv6: %%cv6%%'."\n";
205 $msg .= 'cv7: %%cv7%%'."\n";
206 $msg .= 'cv8: %%cv8%%'."\n";
207 $msg .= 'cv9: %%cv9%%';
208
209 if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)) && ($msg = preg_replace('/%%eot_del_type%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($eot_del_type), $msg)) && ($msg = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_id), $msg)))
210 if(($msg = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_baid), $msg)) && ($msg = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($subscr_cid), $msg)))
211 if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) && ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)))
212 if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
213 if(($msg = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $msg)))
214 if(($msg = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $msg)))
215 if(($msg = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $msg)))
216 if(($msg = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)))
217 {
218 if(is_array($fields) && !empty($fields))
219 foreach($fields as $var => $val /* Custom Registration/Profile Fields. */)
220 if(!($msg = preg_replace('/%%'.preg_quote($var, '/').'%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg)))
221 break;
222
223 if($sbj && ($msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)))) // Still have a ``$sbj`` and a ``$msg``?
224
225 foreach(c_ws_plugin__s2member_utils_strings::parse_emails($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients']) as $recipient)
226 wp_mail($recipient, apply_filters('ws_plugin__s2member_eot_del_notification_email_sbj', $sbj, get_defined_vars()), apply_filters('ws_plugin__s2member_eot_del_notification_email_msg', $msg, get_defined_vars()), 'Content-Type: text/plain; charset=UTF-8');
227 }
228 if($email_configs_were_on) // Back on?
229 c_ws_plugin__s2member_email_configs::email_config();
230 }
231 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
232 do_action('ws_plugin__s2member_during_handle_user_deletions', get_defined_vars());
233 unset($__refs, $__v);
234 }
235 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
236 do_action('ws_plugin__s2member_after_handle_user_deletions', get_defined_vars());
237 unset($__refs, $__v);
238 }
239 }
240 }
241