| 1 |
<?php |
| 2 |
/** |
| 3 |
* User securities. |
| 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_Securities |
| 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_user_securities")) |
| 21 |
{ |
| 22 |
/** |
| 23 |
* User securities. |
| 24 |
* |
| 25 |
* @package s2Member\User_Securities |
| 26 |
* @since 3.5 |
| 27 |
*/ |
| 28 |
class c_ws_plugin__s2member_user_securities |
| 29 |
{ |
| 30 |
/** |
| 31 |
* Initializes Filter for `user_has_cap`. |
| 32 |
* |
| 33 |
* It's very important that this is NOT attached before WordPress® creates `$current_user` via `$wp->init()`. |
| 34 |
* This prevents crashes when other plugins attempt to call upon `current_user_can()` before WordPress is initialized. |
| 35 |
* For instance, some plugins attempt to use `current_user_can()` on the `plugins_loaded` Hook, which they should not do. |
| 36 |
* |
| 37 |
* @package s2Member\User_Securities |
| 38 |
* @since 3.5 |
| 39 |
* |
| 40 |
* @attaches-to: ``add_action("init");`` |
| 41 |
* |
| 42 |
* @return null |
| 43 |
*/ |
| 44 |
public static function initialize () /* Initializes the Filter for `user_has_cap`. */ |
| 45 |
{ |
| 46 |
add_filter ("user_has_cap", "c_ws_plugin__s2member_user_securities::user_capabilities", 10, 3); |
| 47 |
} |
| 48 |
/** |
| 49 |
* Alters `WP_User->has_cap()` in special cases for Administrators. |
| 50 |
* |
| 51 |
* @package s2Member\User_Securities |
| 52 |
* @since 110815 |
| 53 |
* |
| 54 |
* @attaches-to: ``add_filter("user_has_cap");`` |
| 55 |
* |
| 56 |
* @param array $capabilities Expects an array of Capabilities passed in by the Filter. |
| 57 |
* This array contains all of the Capabilities that the User has *( i.e. ``$user->allcaps`` )*. |
| 58 |
* @param array $caps_map An array of Capabilities mapped out by the ``map_meta_cap`` function. |
| 59 |
* @param array $args Array of arguments originally passed through the ``has_cap()`` function. |
| 60 |
* However, WordPress® modifies this array of arguments in the following way. |
| 61 |
* Argument `[0]` is the Capability test string itself *( this is normal )*. |
| 62 |
* Argument `[1]` is added by WordPress®; it's the ID of the User. |
| 63 |
* Other arguments starting from array index `[2]` are normal. |
| 64 |
* @return array An array of Capabilities. |
| 65 |
*/ |
| 66 |
public static function user_capabilities ($capabilities = FALSE, $caps_map = FALSE, $args = FALSE) |
| 67 |
{ |
| 68 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); |
| 69 |
do_action ("ws_plugin__s2member_before_user_capabilities", get_defined_vars ()); |
| 70 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */ |
| 71 |
/**/ |
| 72 |
if (!is_multisite () && !empty ($capabilities["administrator"]) && !empty ($args[0]) && preg_match ("/^access_s2member_ccap_/i", $args[0]) && apply_filters ("ws_plugin__s2member_admins_have_all_ccaps", true, get_defined_vars ())) |
| 73 |
$capabilities = array_merge ((array)$capabilities, array ($args[0] => 1)); |
| 74 |
/**/ |
| 75 |
else if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && (is_super_admin () || !empty ($capabilities["administrator"])) && !empty ($args[0]) && ($args[0] === "edit_user" || $args[0] === "edit_users")) |
| 76 |
if ($args[0] === "edit_users" || ($args[0] === "edit_user" && !empty ($args[2]) && ((!empty ($args[1]) && (int)$args[1] === (int)$args[2]) || is_user_member_of_blog ($args[2])))) |
| 77 |
$capabilities = array_merge ((array)$capabilities, array ("edit_users" => 1)); |
| 78 |
/**/ |
| 79 |
return apply_filters ("ws_plugin__s2member_user_capabilities", $capabilities, get_defined_vars ()); |
| 80 |
} |
| 81 |
/** |
| 82 |
* Alters this Filter inside `/wp-admin/user-edit.php`. |
| 83 |
* |
| 84 |
* @package s2Member\User_Securities |
| 85 |
* @since 3.5 |
| 86 |
* |
| 87 |
* @attaches-to: ``add_filter("enable_edit_any_user_configuration");`` |
| 88 |
* |
| 89 |
* @param bool $allow Expects boolean value passed through by the Filter. |
| 90 |
* @return bool True if the current User is allowed to edit any User, else existing value. |
| 91 |
*/ |
| 92 |
public static function ms_allow_edits ($allow = FALSE) |
| 93 |
{ |
| 94 |
global $user_id; /* Available inside `/wp-admin/user-edit.php`. */ |
| 95 |
/**/ |
| 96 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); |
| 97 |
do_action ("ws_plugin__s2member_before_ms_allow_edits", get_defined_vars ()); |
| 98 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */ |
| 99 |
/**/ |
| 100 |
if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm ()) |
| 101 |
if (is_super_admin () || (current_user_can ("administrator") && $user_id && is_user_member_of_blog ($user_id))) |
| 102 |
$allow = true; /* Yes, allow Administrators to edit User Profiles. */ |
| 103 |
/**/ |
| 104 |
return apply_filters ("ws_plugin__s2member_ms_allow_edits", $allow, get_defined_vars ()); |
| 105 |
} |
| 106 |
/** |
| 107 |
* Hides Password fields for Demo Users; and deals with Password fields on Multisite Blog Farms. |
| 108 |
* |
| 109 |
* Demo accounts *( where the Username MUST be "demo" )*, will NOT be allowed to change their Password. |
| 110 |
* Any other restrictions you need to impose must be done through custom programming, using s2Member's Conditionals. |
| 111 |
* See `s2Member -> API Scripting`. |
| 112 |
* |
| 113 |
* @package s2Member\User_Securities |
| 114 |
* @since 3.5 |
| 115 |
* |
| 116 |
* @attaches-to: ``add_filter("show_password_fields");`` |
| 117 |
* |
| 118 |
* @param bool $show Expects boolean value passed through by the Filter. |
| 119 |
* @param obj $user Expects a `WP_User` object passed through by the Filter. |
| 120 |
* @return bool False if the Password is locked for this User, else existing value. |
| 121 |
*/ |
| 122 |
public static function hide_password_fields ($show = TRUE, $user = FALSE) |
| 123 |
{ |
| 124 |
eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); |
| 125 |
do_action ("ws_plugin__s2member_before_hide_password_fields", get_defined_vars ()); |
| 126 |
unset ($__refs, $__v); /* Unset defined __refs, __v. */ |
| 127 |
/**/ |
| 128 |
if ($show && is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm ()) |
| 129 |
if (!is_super_admin () && is_object ($user) && !empty ($user->ID) && is_object ($current_user = wp_get_current_user ()) && !empty ($current_user->ID)) |
| 130 |
if ($user->ID !== $current_user->ID) |
| 131 |
$show = false; |
| 132 |
/**/ |
| 133 |
if ($show && is_object ($user) && !empty ($user->ID) && $user->user_login === "demo") |
| 134 |
$show = false; /* Lock Password on Demos. */ |
| 135 |
/**/ |
| 136 |
return apply_filters ("ws_plugin__s2member_hide_password_fields", $show, get_defined_vars ()); |
| 137 |
} |
| 138 |
} |
| 139 |
} |
| 140 |
?> |