| 1 |
<?php |
| 2 |
/** |
| 3 |
* s2Member's Category protection routines *( for specific Categories )*. |
| 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\Categories |
| 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_catgs_sp")) |
| 21 |
{ |
| 22 |
/** |
| 23 |
* s2Member's Category protection routines *( for specific Categories )*. |
| 24 |
* |
| 25 |
* @package s2Member\Categories |
| 26 |
* @since 3.5 |
| 27 |
*/ |
| 28 |
class c_ws_plugin__s2member_catgs_sp |
| 29 |
{ |
| 30 |
/** |
| 31 |
* Handles Category Level Access *( for specific Categories )*. |
| 32 |
* |
| 33 |
* @package s2Member\Categories |
| 34 |
* @since 3.5 |
| 35 |
* |
| 36 |
* @param int|str $cat_id Numeric Category ID. |
| 37 |
* @param bool $check_user Test permissions against the current User? Defaults to true. |
| 38 |
* @return null|array Non-empty array ( with details ) if access is denied, else null if access is allowed. |
| 39 |
*/ |
| 40 |
public static function check_specific_catg_level_access ($cat_id = FALSE, $check_user = TRUE) |
| 41 |
{ |
| 42 |
do_action ("ws_plugin__s2member_before_check_specific_catg_level_access", get_defined_vars ()); |
| 43 |
/**/ |
| 44 |
$excluded = apply_filters ("ws_plugin__s2member_check_specific_catg_level_access_excluded", false, get_defined_vars ()); |
| 45 |
/**/ |
| 46 |
if (!$excluded && $cat_id && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_options_page"]) /* Check? */ |
| 47 |
{ |
| 48 |
$cat_uri = c_ws_plugin__s2member_utils_urls::parse_uri (get_category_link ($cat_id)); |
| 49 |
/**/ |
| 50 |
$user = (is_user_logged_in ()) ? wp_get_current_user () : false; /* Get the current User's object. */ |
| 51 |
/**/ |
| 52 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_override"] && ($login_redirection_uri = c_ws_plugin__s2member_login_redirects::login_redirection_uri ($user, "root-returns-false")) && preg_match ("/^" . preg_quote ($login_redirection_uri, "/") . "$/", $cat_uri) && (!$check_user || !$user || !current_user_can ("access_s2member_level0"))) |
| 53 |
return apply_filters ("ws_plugin__s2member_check_specific_catg_level_access", array ("s2member_level_req" => 0), get_defined_vars ()); |
| 54 |
/**/ |
| 55 |
else if (!c_ws_plugin__s2member_systematics_sp::is_systematic_use_specific_page (null, $cat_uri)) /* Never restrict Systematics. However, there is 1 exception ^. */ |
| 56 |
{ |
| 57 |
for ($n = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n >= 0; $n--) /* Category Level restrictions. Go through each Level. We also check nested Categories. */ |
| 58 |
{ |
| 59 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"] === "all" && (!$check_user || !$user || !current_user_can ("access_s2member_level" . $n))) |
| 60 |
return apply_filters ("ws_plugin__s2member_check_specific_catg_level_access", array ("s2member_level_req" => $n), get_defined_vars ()); |
| 61 |
/**/ |
| 62 |
else if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"] && in_array ($cat_id, ($catgs = preg_split ("/[\r\n\t\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"]))) && (!$check_user || !$user || !current_user_can ("access_s2member_level" . $n))) |
| 63 |
return apply_filters ("ws_plugin__s2member_check_specific_catg_level_access", array ("s2member_level_req" => $n), get_defined_vars ()); |
| 64 |
/**/ |
| 65 |
else if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"]) /* Check Category ancestry. */ |
| 66 |
foreach (preg_split ("/[\r\n\t\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"]) as $catg) |
| 67 |
if ($catg && cat_is_ancestor_of ($catg, $cat_id) && (!$check_user || !$user || !current_user_can ("access_s2member_level" . $n))) |
| 68 |
return apply_filters ("ws_plugin__s2member_check_specific_catg_level_access", array ("s2member_level_req" => $n), get_defined_vars ()); |
| 69 |
} |
| 70 |
/**/ |
| 71 |
for ($n = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n >= 0; $n--) /* URIs. Go through each Level. */ |
| 72 |
{ |
| 73 |
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_ruris"]) |
| 74 |
foreach (preg_split ("/[\r\n\t]+/", c_ws_plugin__s2member_ruris::fill_ruri_level_access_rc_vars ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_ruris"], $user)) as $str) |
| 75 |
if ($str && preg_match ("/" . preg_quote ($str, "/") . "/", $cat_uri) && (!$check_user || !$user || !current_user_can ("access_s2member_level" . $n))) |
| 76 |
return apply_filters ("ws_plugin__s2member_check_specific_catg_level_access", array ("s2member_level_req" => $n), get_defined_vars ()); |
| 77 |
} |
| 78 |
} |
| 79 |
/**/ |
| 80 |
do_action ("ws_plugin__s2member_during_check_specific_catg_level_access", get_defined_vars ()); |
| 81 |
} |
| 82 |
/**/ |
| 83 |
return apply_filters ("ws_plugin__s2member_check_specific_catg_level_access", null, get_defined_vars ()); |
| 84 |
} |
| 85 |
} |
| 86 |
} |
| 87 |
?> |