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

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

335 lines 17.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * User utilities.
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\Utilities
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_utils_users"))
21 {
22 /**
23 * User utilities.
24 *
25 * @package s2Member\Utilities
26 * @since 3.5
27 */
28 class c_ws_plugin__s2member_utils_users
29 {
30 /**
31 * Determines the total Users/Members in the database.
32 *
33 * @package s2Member\Utilities
34 * @since 3.5
35 *
36 * @return int Number of Users in the database, total.
37 */
38 public static function users_in_database ()
39 {
40 global $wpdb; /* Global database object reference. */
41 /**/
42 $q1 = mysql_query ("SELECT SQL_CALC_FOUND_ROWS `" . $wpdb->users . "`.`ID` FROM `" . $wpdb->users . "`, `" . $wpdb->usermeta . "` WHERE `" . $wpdb->users . "`.`ID` = `" . $wpdb->usermeta . "`.`user_id` AND `" . $wpdb->usermeta . "`.`meta_key` = '" . esc_sql ($wpdb->prefix . "capabilities") . "' LIMIT 1", $wpdb->dbh);
43 $q2 = mysql_query ("SELECT FOUND_ROWS()", $wpdb->dbh);
44 /**/
45 $users = (int)mysql_result ($q2, 0);
46 /**/
47 mysql_free_result($q2);
48 mysql_free_result($q1);
49 /**/
50 return $users;
51 }
52 /**
53 * Obtains Custom String for an existing Member, referenced by a Subscr. or Transaction ID.
54 *
55 * A second lookup parameter can be provided as well *( optional )*.
56 *
57 * @package s2Member\Utilities
58 * @since 3.5
59 *
60 * @param str $subscr_or_txn_id Either a Paid Subscr. ID, or a Paid Transaction ID.
61 * @param str $os0 Optional. A second lookup parameter, usually the `os0` value for PayPal® integrations.
62 * @return str|bool The Custom String value on success, else false on failure.
63 */
64 public static function get_user_custom_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
65 {
66 global $wpdb; /* Need global DB obj. */
67 /**/
68 if ($subscr_or_txn_id && $os0) /* This case includes some additional routines that can use the $os0 value. */
69 {
70 if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND (`meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' OR `meta_value` = '" . $wpdb->escape ($os0) . "') LIMIT 1"))/**/
71 || ($q = $wpdb->get_row ("SELECT `ID` AS `user_id` FROM `" . $wpdb->users . "` WHERE `ID` = '" . $wpdb->escape ($os0) . "' LIMIT 1")))
72 if (($custom = get_user_option ("s2member_custom", $q->user_id)))
73 return $custom;
74 }
75 else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
76 {
77 if ($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1"))
78 if (($custom = get_user_option ("s2member_custom", $q->user_id)))
79 return $custom;
80 }
81 /**/
82 return false; /* Otherwise, return false. */
83 }
84 /**
85 * Obtains the User ID for an existing Member, referenced by a Subscr. or Transaction ID.
86 *
87 * A second lookup parameter can be provided as well *( optional )*.
88 *
89 * @package s2Member\Utilities
90 * @since 3.5
91 *
92 * @param str $subscr_or_txn_id Either a Paid Subscr. ID, or a Paid Transaction ID.
93 * @param str $os0 Optional. A second lookup parameter, usually the `os0` value for PayPal® integrations.
94 * @return int|bool A WordPress® User ID on success, else false on failure.
95 */
96 public static function get_user_id_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
97 {
98 global $wpdb; /* Need global DB obj. */
99 /**/
100 if ($subscr_or_txn_id && $os0) /* This case includes some additional routines that can use the $os0 value. */
101 {
102 if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND (`meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' OR `meta_value` = '" . $wpdb->escape ($os0) . "') LIMIT 1"))/**/
103 || ($q = $wpdb->get_row ("SELECT `ID` AS `user_id` FROM `" . $wpdb->users . "` WHERE `ID` = '" . $wpdb->escape ($os0) . "' LIMIT 1")))
104 return $q->user_id;
105 }
106 else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
107 {
108 if ($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1"))
109 return $q->user_id;
110 }
111 /**/
112 return false; /* Otherwise, return false. */
113 }
114 /**
115 * Obtains the Email Address for an existing Member, referenced by a Subscr. or Transaction ID.
116 *
117 * A second lookup parameter can be provided as well *( optional )*.
118 *
119 * @package s2Member\Utilities
120 * @since 3.5
121 *
122 * @param str $subscr_or_txn_id Either a Paid Subscr. ID, or a Paid Transaction ID.
123 * @param str $os0 Optional. A second lookup parameter, usually the `os0` value for PayPal® integrations.
124 * @return int|bool A User's Email Address on success, else false on failure.
125 */
126 public static function get_user_email_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
127 {
128 global $wpdb; /* Need global DB obj. */
129 /**/
130 if ($subscr_or_txn_id && $os0) /* This case includes some additional routines that can use the $os0 value. */
131 {
132 if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND (`meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' OR `meta_value` = '" . $wpdb->escape ($os0) . "') LIMIT 1"))/**/
133 || ($q = $wpdb->get_row ("SELECT `ID` AS `user_id` FROM `" . $wpdb->users . "` WHERE `ID` = '" . $wpdb->escape ($os0) . "' LIMIT 1")))
134 if (is_object ($user = new WP_User ($q->user_id)) && $user->ID && ($email = $user->user_email))
135 return $email;
136 }
137 else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
138 {
139 if ($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "s2member_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "s2member_first_payment_txn_id') AND `meta_value` = '" . $wpdb->escape ($subscr_or_txn_id) . "' LIMIT 1"))
140 if (is_object ($user = new WP_User ($q->user_id)) && $user->ID && ($email = $user->user_email))
141 return $email;
142 }
143 /**/
144 return false; /* Otherwise, return false. */
145 }
146 /**
147 * Retrieves IPN signup vars & validates their Subscription ID.
148 *
149 * The ``$user_id`` can be passed in directly; or a lookup can be performed with ``$subscr_id``.
150 *
151 * @package s2Member\Utilities
152 * @since 3.5
153 *
154 * @param int|str $user_id Optional. A numeric WordPress® User ID.
155 * @param str $subscr_id Optional. Can be used instead of passing in a ``$user_id``.
156 * If ``$subscr_id`` is passed in, it has to match the one found inside the resulting IPN Signup Vars collected by this routine.
157 * If neither of these parameters are passed in, the current User is assumed instead, obtained through ``wp_get_current_user()``.
158 * @return array|bool A User's IPN Signup Vars on success, else false on failure.
159 */
160 public static function get_user_ipn_signup_vars ($user_id = FALSE, $subscr_id = FALSE)
161 {
162 if ($user_id || ($subscr_id && ($user_id = c_ws_plugin__s2member_utils_users::get_user_id_with ($subscr_id))) || (!$user_id && !$subscr_id && is_object ($user = wp_get_current_user ()) && ($user_id = $user->ID)))
163 {
164 if (($_subscr_id = get_user_option ("s2member_subscr_id", $user_id)) && (!$subscr_id || $subscr_id === $_subscr_id) && ($subscr_id = $_subscr_id))
165 if (is_array ($ipn_signup_vars = get_user_option ("s2member_ipn_signup_vars", $user_id)))
166 if ($ipn_signup_vars["subscr_id"] === $subscr_id)
167 return $ipn_signup_vars;
168 }
169 /**/
170 return false; /* Otherwise, return false. */
171 }
172 /**
173 * Obtains a User's Paid Subscr. ID *( if available )*; otherwise their WP User ID.
174 *
175 * If ``$user`` IS passed in, this function will return data from a specific ``$user``, or fail if not possible.
176 * If ``$user`` is NOT passed in, check the current User/Member.
177 *
178 * @package s2Member\Utilities
179 * @since 3.5
180 *
181 * @param obj $user Optional. A `WP_User` object.
182 * In order to check the current User, you must call this function with no arguments/parameters.
183 * @return int|str|bool If possible, the User's Paid Subscr. ID, else their WordPress® User ID, else false.
184 */
185 public static function get_user_subscr_or_wp_id ($user = FALSE)
186 {
187 if ((func_num_args () && (!is_object ($user) || !$user->ID)) || (!func_num_args () && !$user && (!is_object ($user = (is_user_logged_in ()) ? wp_get_current_user () : false) || !$user->ID)))
188 {
189 return false; /* The $user was passed in but is NOT an object; or nobody is logged in. */
190 }
191 else /* Else return Paid Subscr. ID ( if available ), otherwise return their WP database User ID. */
192 return ($subscr_id = get_user_option ("s2member_subscr_id", $user->ID)) ? $subscr_id : $user->ID;
193 }
194 /**
195 * Determines whether or not a Username/Email is already in the database.
196 *
197 * Returns the WordPress® User ID if they exist.
198 *
199 * @package s2Member\Utilities
200 * @since 3.5
201 *
202 * @param str $user_login A User's Username.
203 * @param str $user_email A User's Email Address.
204 * @return int|bool If exists, a WordPress® User ID, else false.
205 */
206 public static function user_login_email_exists ($user_login = FALSE, $user_email = FALSE)
207 {
208 global $wpdb; /* Global database object reference. */
209 /**/
210 if ($user_login && $user_email) /* Only if we have both of these. */
211 if (($user_id = $wpdb->get_var ("SELECT `ID` FROM `" . $wpdb->users . "` WHERE `user_login` LIKE '" . esc_sql (like_escape ($user_login)) . "' AND `user_email` LIKE '" . esc_sql (like_escape ($user_email)) . "' LIMIT 1")))
212 return $user_id; /* Return the associated WordPress® ID. */
213 /**/
214 return false; /* Else return false. */
215 }
216 /**
217 * Determines whether or not a Username/Email is already in the database for this Blog.
218 *
219 * Returns the WordPress® User ID if they exist.
220 *
221 * @package s2Member\Utilities
222 * @since 3.5
223 *
224 * @param str $user_login A User's Username.
225 * @param str $user_email A User's Email Address.
226 * @param int|str $blog_id A numeric WordPress® Blog ID.
227 * @return int|bool If exists *( but not on Blog )*, a WordPress® User ID, else false.
228 */
229 public static function ms_user_login_email_exists_but_not_on_blog ($user_login = FALSE, $user_email = FALSE, $blog_id = FALSE)
230 {
231 if ($user_login && $user_email) /* Only if we have both of these. */
232 if (is_multisite () && ($user_id = c_ws_plugin__s2member_utils_users::user_login_email_exists ($user_login, $user_email)) && !is_user_member_of_blog ($user_id, $blog_id))
233 return $user_id;
234 /**/
235 return false; /* Else return false. */
236 }
237 /**
238 * Determines whether or not a Username/Email is already in the database for this Blog.
239 *
240 * This is an alias for: `c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog()`.
241 *
242 * Returns the WordPress® User ID if they exist.
243 *
244 * @package s2Member\Utilities
245 * @since 3.5
246 *
247 * @param str $user_login A User's Username.
248 * @param str $user_email A User's Email Address.
249 * @param int|str $blog_id A numeric WordPress® Blog ID.
250 * @return int|bool If exists *( but not on Blog )*, a WordPress® User ID, else false.
251 */
252 public static function ms_user_login_email_can_join_blog ($user_login = FALSE, $user_email = FALSE, $blog_id = FALSE)
253 {
254 return c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($user_login, $user_email, $blog_id);
255 }
256 /**
257 * Retrieves a field value. Also supports Custom Fields.
258 *
259 * @package s2Member\Utilities
260 * @since 3.5
261 *
262 * @param str $field_id Required. A unique Custom Registration Field ID, that you configured with s2Member.
263 * Or, this could be set to any property that exists on the WP_User object for a particular User;
264 * ( i.e. `id`, `ID`, `user_login`, `user_email`, `first_name`, `last_name`, `display_name`, `ip`, `IP`,
265 * `s2member_registration_ip`, `s2member_custom`, `s2member_subscr_id`, `s2member_subscr_or_wp_id`,
266 * `s2member_subscr_gateway`, `s2member_custom_fields`, `s2member_file_download_access_log`,
267 * `s2member_auto_eot_time`, `s2member_last_payment_time`, `s2member_paid_registration_times`,
268 * `s2member_access_role`, `s2member_access_level`, `s2member_access_label`,
269 * `s2member_access_ccaps`, etc, etc. ).
270 * @param int|str $user_id Optional. Defaults to the current User's ID.
271 * @return mixed The value of the requested field, or false if the field does not exist.
272 *
273 * @todo Create a function that returns extensive details regarding Custom Registration Fields configured with s2Member.
274 * Until then, you can inspect this array: ``json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true)``.
275 */
276 public static function get_user_field ($field_id = FALSE, $user_id = FALSE) /* Very powerful function here. */
277 {
278 global $wpdb; /* Global database object reference. We'll need this to obtain the right database prefix. */
279 /**/
280 $current_user = wp_get_current_user (); /* Current User's object ( used when/if `$user_id` is empty ). */
281 /**/
282 if (is_object ($user = ($user_id) ? new WP_User ($user_id) : $current_user) && ($user_id = $user->ID))
283 {
284 if (isset ($user->$field_id)) /* Immediate User object property? ( most likely ) */
285 return $user->$field_id;
286 /**/
287 else if (isset ($user->data->$field_id)) /* Also try the data object property. */
288 return $user->data->$field_id;
289 /**/
290 else if (isset ($user->{$wpdb->prefix . $field_id})) /* Immediate prefixed? */
291 return $user->{$wpdb->prefix . $field_id};
292 /**/
293 else if (isset ($user->data->{$wpdb->prefix . $field_id})) /* Data prefixed? */
294 return $user->data->{$wpdb->prefix . $field_id};
295 /**/
296 else if (strcasecmp ($field_id, "full_name") === 0) /* First/last full name? */
297 return trim ($user->first_name . " " . $user->last_name);
298 /**/
299 else if (preg_match ("/^(email|user_email)$/i", $field_id)) /* Email address? */
300 return $user->user_email;
301 /**/
302 else if (preg_match ("/^(login|user_login)$/i", $field_id)) /* Username / login? */
303 return $user->user_login;
304 /**/
305 else if (strcasecmp ($field_id, "s2member_access_role") === 0) /* Role name/ID? */
306 return c_ws_plugin__s2member_user_access::user_access_role ($user);
307 /**/
308 else if (strcasecmp ($field_id, "s2member_access_level") === 0) /* Access Level? */
309 return c_ws_plugin__s2member_user_access::user_access_level ($user);
310 /**/
311 else if (strcasecmp ($field_id, "s2member_access_label") === 0) /* Access Label? */
312 return c_ws_plugin__s2member_user_access::user_access_label ($user);
313 /**/
314 else if (strcasecmp ($field_id, "s2member_access_ccaps") === 0) /* Custom Caps? */
315 return c_ws_plugin__s2member_user_access::user_access_ccaps ($user);
316 /**/
317 else if (strcasecmp ($field_id, "ip") === 0 && is_object ($current_user) && $current_user->ID === $user_id)
318 return $_SERVER["REMOTE_ADDR"]; /* The current User's IP address, right now. */
319 /**/
320 else if (strcasecmp ($field_id, "s2member_registration_ip") === 0 || strcasecmp ($field_id, "reg_ip") === 0 || strcasecmp ($field_id, "ip") === 0)
321 return get_user_option ("s2member_registration_ip", $user_id);
322 /**/
323 else if (strcasecmp ($field_id, "s2member_subscr_or_wp_id") === 0)
324 return ($subscr_id = get_user_option ("s2member_subscr_id", $user_id)) ? $subscr_id : $user_id;
325 /**/
326 else if (is_array ($fields = get_user_option ("s2member_custom_fields", $user_id)))
327 if (isset ($fields[preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field_id))]))
328 return $fields[preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field_id))];
329 }
330 /**/
331 return false; /* Default, return false. */
332 }
333 }
334 }
335 ?>