PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/wp-content/plugins/s2member/includes/classes/user-deletions.inc.php

https://gitlab.com/Gashler/sg
PHP | 223 lines | 151 code | 27 blank | 45 comment | 55 complexity | 4741f563dd5ed68f58522e6b6af47999 MD5 | raw file
  1. <?php
  2. /**
  3. * User deletion routines.
  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\User_Deletions
  15. * @since 3.5
  16. */
  17. if(!defined('WPINC')) // MUST have WordPress.
  18. exit ('Do not access this file directly.');
  19. if(!class_exists('c_ws_plugin__s2member_user_deletions'))
  20. {
  21. /**
  22. * User deletion routines.
  23. *
  24. * @package s2Member\User_Deletions
  25. * @since 3.5
  26. */
  27. class c_ws_plugin__s2member_user_deletions
  28. {
  29. /**
  30. * Handles Multisite User removal deletions.
  31. *
  32. * @package s2Member\User_Deletions
  33. * @since 3.5
  34. *
  35. * @attaches-to ``add_action('remove_user_from_blog');``
  36. *
  37. * @param int|string $user_id Numeric WordPress User ID.
  38. * @param int|string $blog_id Numeric WordPress Blog ID.
  39. * @param bool $s2says Optional. Defaults to false. If true, it's definitely OK to process this deletion?
  40. * The ``$s2says`` flag can be used when/if the routine is called directly for whatever reason.
  41. */
  42. public static function handle_ms_user_deletions($user_id = 0, $blog_id = 0, $s2says = FALSE)
  43. {
  44. static $processed = array(); // No duplicate processing.
  45. global $pagenow; // Need this to detect the current admin page.
  46. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  47. do_action('ws_plugin__s2member_before_handle_ms_user_deletions', get_defined_vars());
  48. unset($__refs, $__v);
  49. if($user_id && is_multisite() && empty($processed[$user_id]) && ($s2says || (is_blog_admin() && $pagenow === 'users.php')))
  50. {
  51. $processed[$user_id] = TRUE;
  52. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  53. do_action('ws_plugin__s2member_during_handle_ms_user_deletions_before', get_defined_vars());
  54. unset($__refs, $__v);
  55. c_ws_plugin__s2member_user_deletions::handle_user_deletions($user_id);
  56. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  57. do_action('ws_plugin__s2member_during_handle_ms_user_deletions_after', get_defined_vars());
  58. unset($__refs, $__v);
  59. }
  60. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  61. do_action('ws_plugin__s2member_after_handle_ms_user_deletions', get_defined_vars());
  62. unset($__refs, $__v);
  63. }
  64. /**
  65. * Handles User removals/deletions.
  66. *
  67. * @package s2Member\User_Deletions
  68. * @since 3.5
  69. *
  70. * @attaches-to ``add_action('delete_user');``
  71. * @attaches-to ``add_action('wpmu_delete_user');``
  72. *
  73. * @param int|string $user_id Numeric WordPress User ID.
  74. */
  75. public static function handle_user_deletions($user_id = 0)
  76. {
  77. static $processed = array(); // No duplicate processing.
  78. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  79. do_action('ws_plugin__s2member_before_handle_user_deletions', get_defined_vars());
  80. unset($__refs, $__v);
  81. if($user_id && empty($processed[$user_id]) && ($processed[$user_id] = TRUE))
  82. {
  83. $eot_del_type = // Configure EOT/DEL type (possibly through this global variable).
  84. (!empty($GLOBALS['ws_plugin__s2member_eot_del_type'])) ? // Is the global available for use?
  85. $GLOBALS['ws_plugin__s2member_eot_del_type'] : 'user-removal-deletion'; // Else use default.
  86. $custom = get_user_option('s2member_custom', $user_id);
  87. $subscr_id = get_user_option('s2member_subscr_id', $user_id);
  88. $subscr_baid = get_user_option('s2member_subscr_baid', $user_id);
  89. $subscr_cid = get_user_option('s2member_subscr_cid', $user_id);
  90. $fields = get_user_option('s2member_custom_fields', $user_id);
  91. $user_reg_ip = get_user_option('s2member_registration_ip', $user_id);
  92. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  93. do_action('ws_plugin__s2member_during_handle_user_before_deletions', get_defined_vars());
  94. do_action('ws_plugin__s2member_during_collective_eots', $user_id, get_defined_vars(), $eot_del_type, 'removal-deletion');
  95. unset($__refs, $__v);
  96. delete_user_option($user_id, 's2member_custom');
  97. delete_user_option($user_id, 's2member_subscr_gateway');
  98. delete_user_option($user_id, 's2member_subscr_id');
  99. delete_user_option($user_id, 's2member_subscr_baid');
  100. delete_user_option($user_id, 's2member_subscr_cid');
  101. delete_user_option($user_id, 's2member_custom_fields');
  102. delete_user_option($user_id, 's2member_registration_ip');
  103. delete_user_option($user_id, 's2member_ipn_signup_vars');
  104. delete_user_option($user_id, 's2member_paid_registration_times');
  105. delete_user_option($user_id, 's2member_access_cap_times');
  106. delete_user_option($user_id, 's2member_coupon_codes');
  107. delete_user_option($user_id, 's2member_sp_references');
  108. delete_user_option($user_id, 's2member_last_status_scan');
  109. delete_user_option($user_id, 's2member_first_payment_txn_id');
  110. delete_user_option($user_id, 's2member_last_payment_time');
  111. delete_user_option($user_id, 's2member_auto_eot_time');
  112. delete_user_option($user_id, 's2member_file_download_access_arc');
  113. delete_user_option($user_id, 's2member_file_download_access_log');
  114. delete_user_option($user_id, 's2member_last_auto_eot_time');
  115. delete_user_option($user_id, 's2member_login_counter');
  116. delete_user_option($user_id, 's2member_notes');
  117. if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls'] && is_array($cv = preg_split('/\|/', $custom)))
  118. {
  119. foreach(preg_split("/[\r\n\t]+/", $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_urls']) as $url) // Handle EOT Notifications on user deletion.
  120. if(($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) && ($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)))
  121. 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)))
  122. 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)))
  123. 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)))
  124. if(($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->user_email)), $url)))
  125. if(($url = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user->user_login)), $url)))
  126. if(($url = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_reg_ip)), $url)))
  127. if(($url = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)))
  128. {
  129. if(is_array($fields) && !empty($fields))
  130. foreach($fields as $var => $val /* Custom Registration/Profile Fields. */)
  131. if(!($url = preg_replace('/%%'.preg_quote($var, '/').'%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url)))
  132. break;
  133. if(($url = trim(preg_replace('/%%(.+?)%%/i', '', $url))))
  134. c_ws_plugin__s2member_utils_urls::remote($url);
  135. }
  136. }
  137. if(is_object($user = new WP_User ($user_id)) && $user->ID && $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients'] && is_array($cv = preg_split('/\|/', $custom)))
  138. {
  139. $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status();
  140. c_ws_plugin__s2member_email_configs::email_config_release();
  141. $msg = $sbj = '(s2Member / API Notification Email) - EOT/Deletion';
  142. $msg .= "\n\n"; // Spacing in the message body.
  143. $msg .= 'eot_del_type: %%eot_del_type%%'."\n";
  144. $msg .= 'subscr_id: %%subscr_id%%'."\n";
  145. $msg .= 'subscr_baid: %%subscr_baid%%'."\n";
  146. $msg .= 'subscr_cid: %%subscr_cid%%'."\n";
  147. $msg .= 'user_first_name: %%user_first_name%%'."\n";
  148. $msg .= 'user_last_name: %%user_last_name%%'."\n";
  149. $msg .= 'user_full_name: %%user_full_name%%'."\n";
  150. $msg .= 'user_email: %%user_email%%'."\n";
  151. $msg .= 'user_login: %%user_login%%'."\n";
  152. $msg .= 'user_ip: %%user_ip%%'."\n";
  153. $msg .= 'user_id: %%user_id%%'."\n";
  154. if(is_array($fields) && !empty($fields))
  155. foreach($fields as $var => $val)
  156. $msg .= $var.': %%'.$var.'%%'."\n";
  157. $msg .= 'cv0: %%cv0%%'."\n";
  158. $msg .= 'cv1: %%cv1%%'."\n";
  159. $msg .= 'cv2: %%cv2%%'."\n";
  160. $msg .= 'cv3: %%cv3%%'."\n";
  161. $msg .= 'cv4: %%cv4%%'."\n";
  162. $msg .= 'cv5: %%cv5%%'."\n";
  163. $msg .= 'cv6: %%cv6%%'."\n";
  164. $msg .= 'cv7: %%cv7%%'."\n";
  165. $msg .= 'cv8: %%cv8%%'."\n";
  166. $msg .= 'cv9: %%cv9%%';
  167. if(($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) && ($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)))
  168. 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)))
  169. 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)))
  170. if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(trim($user->first_name.' '.$user->last_name)), $msg)))
  171. if(($msg = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $msg)))
  172. if(($msg = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $msg)))
  173. if(($msg = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_reg_ip), $msg)))
  174. if(($msg = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)))
  175. {
  176. if(is_array($fields) && !empty($fields))
  177. foreach($fields as $var => $val /* Custom Registration/Profile Fields. */)
  178. if(!($msg = preg_replace('/%%'.preg_quote($var, '/').'%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg)))
  179. break;
  180. if($sbj && ($msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)))) // Still have a ``$sbj`` and a ``$msg``?
  181. foreach(c_ws_plugin__s2member_utils_strings::parse_emails($GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_del_notification_recipients']) as $recipient)
  182. 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');
  183. }
  184. if($email_configs_were_on) // Back on?
  185. c_ws_plugin__s2member_email_configs::email_config();
  186. }
  187. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  188. do_action('ws_plugin__s2member_during_handle_user_deletions', get_defined_vars());
  189. unset($__refs, $__v);
  190. }
  191. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
  192. do_action('ws_plugin__s2member_after_handle_user_deletions', get_defined_vars());
  193. unset($__refs, $__v);
  194. }
  195. }
  196. }