Esempio n. 1
0
 /**
  * Handles Category Level Access *( for specific Categories )*.
  *
  * @package optimizeMember\Categories
  * @since 3.5
  *
  * @param int|str $cat_id Numeric Category ID.
  * @param bool $check_user Test permissions against the current User? Defaults to true.
  * @return null|array Non-empty array ( with details ) if access is denied, else null if access is allowed.
  */
 public static function check_specific_catg_level_access($cat_id = FALSE, $check_user = TRUE)
 {
     do_action("ws_plugin__optimizemember_before_check_specific_catg_level_access", get_defined_vars());
     /**/
     $excluded = apply_filters("ws_plugin__optimizemember_check_specific_catg_level_access_excluded", false, get_defined_vars());
     /**/
     if (!$excluded && is_numeric($cat_id) && ($cat_id = (int) $cat_id) && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
         $cat_uri = c_ws_plugin__optimizemember_utils_urls::parse_uri(get_category_link($cat_id));
         /* Get a full valid URI for this Category. */
         /**/
         if (!c_ws_plugin__optimizemember_systematics_sp::is_wp_systematic_use_specific_page(null, $cat_uri)) {
             $user = is_user_logged_in() && is_object($user = wp_get_current_user()) && !empty($user->ID) ? $user : false;
             /* Current User's object. */
             /**/
             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_redirection_override"] && ($login_redirection_uri = c_ws_plugin__optimizemember_login_redirects::login_redirection_uri($user, "root-returns-false")) && preg_match("/^" . preg_quote($login_redirection_uri, "/") . "\$/", $cat_uri) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level0"))) {
                 return apply_filters("ws_plugin__optimizemember_check_specific_catg_level_access", array("optimizemember_level_req" => 0), get_defined_vars());
             } else {
                 if (!c_ws_plugin__optimizemember_systematics_sp::is_systematic_use_specific_page(null, $cat_uri)) {
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] === "all" && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                             return apply_filters("ws_plugin__optimizemember_check_specific_catg_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] && in_array($cat_id, $catgs = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"])) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                 return apply_filters("ws_plugin__optimizemember_check_specific_catg_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                             } else {
                                 if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"]) {
                                     /* Check Category ancestry. */
                                     foreach (preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"]) as $catg) {
                                         if ($catg && cat_is_ancestor_of($catg, $cat_id) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                             return apply_filters("ws_plugin__optimizemember_check_specific_catg_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ruris"]) {
                             /* URIs configured at this Level? */
                             /**/
                             foreach (preg_split("/[\r\n\t]+/", c_ws_plugin__optimizemember_ruris::fill_ruri_level_access_rc_vars($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ruris"], $user)) as $str) {
                                 if ($str && preg_match("/" . preg_quote($str, "/") . "/", $cat_uri) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                     return apply_filters("ws_plugin__optimizemember_check_specific_catg_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                 }
                             }
                         }
                     }
                 }
             }
             /**/
             do_action("ws_plugin__optimizemember_during_check_specific_catg_level_access", get_defined_vars());
         }
     }
     /**/
     return apply_filters("ws_plugin__optimizemember_check_specific_catg_level_access", null, get_defined_vars());
 }
Esempio n. 2
0
 /**
  * Handles Page Level Access *( for specific Pages )*.
  *
  * @package optimizeMember\Pages
  * @since 3.5
  *
  * @param int|str $page_id Numeric Page ID.
  * @param bool $check_user Test permissions against the current User? Defaults to true.
  * @return null|array Non-empty array ( with details ) if access is denied, else null if access is allowed.
  *
  * @todo Provide more information in the return array ( like MOP Vars ).
  */
 public static function check_specific_page_level_access($page_id = FALSE, $check_user = TRUE)
 {
     do_action("ws_plugin__optimizemember_before_check_specific_page_level_access", get_defined_vars());
     /**/
     $excluded = apply_filters("ws_plugin__optimizemember_check_specific_page_level_access_excluded", false, get_defined_vars());
     /**/
     if (!$excluded && is_numeric($page_id) && ($page_id = (int) $page_id) && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
         $page_uri = c_ws_plugin__optimizemember_utils_urls::parse_uri(get_page_link($page_id));
         /* Get a full valid URI for this Page now. */
         /**/
         if (!c_ws_plugin__optimizemember_systematics_sp::is_wp_systematic_use_specific_page($page_id, $page_uri)) {
             $user = is_user_logged_in() && is_object($user = wp_get_current_user()) && !empty($user->ID) ? $user : false;
             /* Current User's object. */
             /**/
             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_welcome_page"] && $page_id === (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_welcome_page"] && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level0")) && $page_id !== (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
                 return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => 0), get_defined_vars());
             } else {
                 if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_redirection_override"] && ($login_redirection_uri = c_ws_plugin__optimizemember_login_redirects::login_redirection_uri($user, "root-returns-false")) && preg_match("/^" . preg_quote($login_redirection_uri, "/") . "\$/", $page_uri) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level0")) && $page_id !== (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
                     return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => 0), get_defined_vars());
                 } else {
                     if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"] && $page_id === (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"] && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level0")) && $page_id !== (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
                         return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => 0), get_defined_vars());
                     } else {
                         if (!c_ws_plugin__optimizemember_systematics_sp::is_systematic_use_specific_page($page_id, $page_uri)) {
                             for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                                 if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"] === "all" && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                     return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                 } else {
                                     if (strpos($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"], "all-") !== false && in_array("all-pages", preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"])) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                         return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                     } else {
                                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"] && in_array($page_id, preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"])) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                             return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                         }
                                     }
                                 }
                             }
                             /**/
                             if (has_tag("", $page_id)) {
                                 for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                                     if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] === "all" && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                         return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                     } else {
                                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] && has_tag(preg_split("/[\r\n\t;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"]), $page_id) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                             return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                         }
                                     }
                                 }
                             }
                             /**/
                             for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                                 if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ruris"]) {
                                     /* URIs configured at this Level? */
                                     /**/
                                     foreach (preg_split("/[\r\n\t]+/", c_ws_plugin__optimizemember_ruris::fill_ruri_level_access_rc_vars($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ruris"], $user)) as $str) {
                                         if ($str && preg_match("/" . preg_quote($str, "/") . "/", $page_uri) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                             return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                         }
                                     }
                                 }
                             }
                             /**/
                             if (is_array($ccaps_req = get_post_meta($page_id, "optimizemember_ccaps_req", true)) && !empty($ccaps_req)) {
                                 foreach ($ccaps_req as $ccap) {
                                     /* The ``$user`` MUST satisfy ALL Custom Capabilities. */
                                     if (strlen($ccap) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_ccap_" . $ccap))) {
                                         return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_ccap_req" => $ccap), get_defined_vars());
                                     }
                                 }
                             }
                             /**/
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["specific_ids"] && in_array($page_id, preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["specific_ids"])) && (!$check_user || !c_ws_plugin__optimizemember_sp_access::sp_access($page_id, "read-only"))) {
                                 return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", array("optimizemember_sp_req" => $page_id), get_defined_vars());
                             }
                         }
                     }
                 }
             }
             /**/
             do_action("ws_plugin__optimizemember_during_check_specific_page_level_access", get_defined_vars());
         }
     }
     /**/
     return apply_filters("ws_plugin__optimizemember_check_specific_page_level_access", null, get_defined_vars());
 }
Esempio n. 3
0
 /**
  * Handles Tag Level Access *( for specific Tags )*.
  *
  * @package optimizeMember\Tags
  * @since 3.5
  *
  * @param int|str $_tag Numeric Tag ID, Tag Slug, or Tag Name.
  * @param bool $check_user Test permissions against the current User? Defaults to true.
  * @return null|array Non-empty array ( with details ) if access is denied, else null if access is allowed.
  */
 public static function check_specific_ptag_level_access($_tag = FALSE, $check_user = TRUE)
 {
     do_action("ws_plugin__optimizemember_before_check_specific_ptag_level_access", get_defined_vars());
     /**/
     if ($_tag && is_numeric($_tag) && is_object($term = get_term_by("id", $_tag, "post_tag"))) {
         $tag_id = (int) $_tag;
         /* Need ``$tag_id``, ``$tag_slug``, and also the ``$tag_name``. */
         $tag_slug = $term->slug;
         /* Tag slug. */
         $tag_name = $term->name;
         /* Tag name. */
     } else {
         if ($_tag && is_string($_tag) && is_object($term = get_term_by("name", $_tag, "post_tag"))) {
             $tag_name = $_tag;
             /* Need ``$tag_id``, ``$tag_slug``, and also the ``$tag_name``. */
             $tag_id = (int) $term->term_id;
             /* Tag ID. */
             $tag_slug = $term->slug;
             /* Tag slug. */
         } else {
             if ($_tag && is_string($_tag) && is_object($term = get_term_by("slug", $_tag, "post_tag"))) {
                 $tag_slug = $_tag;
                 /* Need ``$tag_id``, ``$tag_slug``, and also the ``$tag_name``. */
                 $tag_id = (int) $term->term_id;
                 /* Tag ID. */
                 $tag_name = $term->name;
                 /* Tag name. */
             }
         }
     }
     /**/
     $excluded = apply_filters("ws_plugin__optimizemember_check_specific_ptag_level_access_excluded", false, get_defined_vars());
     /**/
     if (!$excluded && !empty($tag_id) && !empty($tag_slug) && !empty($tag_name) && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
         $tag_uri = c_ws_plugin__optimizemember_utils_urls::parse_uri(get_tag_link($tag_id));
         /* Get a full valid URI for this Tag. */
         /**/
         if (!c_ws_plugin__optimizemember_systematics_sp::is_wp_systematic_use_specific_page(null, $tag_uri)) {
             $user = is_user_logged_in() && is_object($user = wp_get_current_user()) && !empty($user->ID) ? $user : false;
             /* Current User's object. */
             /**/
             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_redirection_override"] && ($login_redirection_uri = c_ws_plugin__optimizemember_login_redirects::login_redirection_uri($user, "root-returns-false")) && preg_match("/^" . preg_quote($login_redirection_uri, "/") . "\$/", $tag_uri) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level0"))) {
                 return apply_filters("ws_plugin__optimizemember_check_specific_ptag_level_access", array("optimizemember_level_req" => 0), get_defined_vars());
             } else {
                 if (!c_ws_plugin__optimizemember_systematics_sp::is_systematic_use_specific_page(null, $tag_uri)) {
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] === "all" && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                             return apply_filters("ws_plugin__optimizemember_check_specific_ptag_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] && (in_array($tag_name, $tags = preg_split("/[\r\n\t;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"])) || in_array($tag_slug, $tags)) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                 return apply_filters("ws_plugin__optimizemember_check_specific_ptag_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                             }
                         }
                     }
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ruris"]) {
                             /* URIs configured at this Level? */
                             /**/
                             foreach (preg_split("/[\r\n\t]+/", c_ws_plugin__optimizemember_ruris::fill_ruri_level_access_rc_vars($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ruris"], $user)) as $str) {
                                 if ($str && preg_match("/" . preg_quote($str, "/") . "/", $tag_uri) && (!$check_user || !$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                     return apply_filters("ws_plugin__optimizemember_check_specific_ptag_level_access", array("optimizemember_level_req" => $n), get_defined_vars());
                                 }
                             }
                         }
                     }
                 }
             }
             /**/
             do_action("ws_plugin__optimizemember_during_check_specific_ptag_level_access", get_defined_vars());
         }
     }
     /**/
     return apply_filters("ws_plugin__optimizemember_check_specific_ptag_level_access", null, get_defined_vars());
 }
Esempio n. 4
0
 /**
  * Determines if a specific Post/Page ID, or URI, is Systematic in any way.
  *
  * @package optimizeMember\Systematics
  * @since 3.5
  *
  * @param int|str $singular_id Optional. A numeric Post/Page ID in WordPress.
  * @param str $uri Optional. A request URI to test against.
  * @return bool True if Systematic, else false.
  *
  * @todo Test URIs against formulated links for Systematic Pages like the Membership Options Page?
  * 	Don't think this is required though; as it's already handled in other areas, correct?
  */
 public static function is_systematic_use_specific_page($singular_id = FALSE, $uri = FALSE)
 {
     global $bp;
     /* If BuddyPress is installed, we'll need this global reference. */
     /**/
     $singular_id = $singular_id && is_numeric($singular_id) ? (int) $singular_id : false;
     /* Force types. */
     $uri = $uri && is_string($uri) && ($uri = c_ws_plugin__optimizemember_utils_urls::parse_uri($uri)) ? $uri : false;
     /**/
     if (c_ws_plugin__optimizemember_systematics_sp::is_s2_systematic_use_specific_page($singular_id, $uri)) {
         return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
     } else {
         if (c_ws_plugin__optimizemember_systematics_sp::is_wp_systematic_use_specific_page($singular_id, $uri)) {
             return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
         } else {
             if ($uri && c_ws_plugin__optimizemember_utils_conds::bp_is_installed() && preg_match("/\\/(?:" . preg_quote(trim(function_exists("bp_get_signup_slug") ? bp_get_signup_slug() : BP_REGISTER_SLUG, "/"), "/") . "|" . preg_quote(trim(function_exists("bp_get_activate_slug") ? bp_get_activate_slug() : BP_ACTIVATION_SLUG, "/"), "/") . ")(?:\\/|\\?|\$)/", $uri)) {
                 return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
             } else {
                 if ($singular_id && c_ws_plugin__optimizemember_utils_conds::bp_is_installed() && (!empty($bp->pages->register->id) && $singular_id === (int) $bp->pages->register->id || !empty($bp->pages->activate->id) && $singular_id === (int) $bp->pages->activate->id)) {
                     return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
                 } else {
                     if ($singular_id && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_welcome_page"] && $singular_id === (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_welcome_page"]) {
                         return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
                     } else {
                         if ($singular_id && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"] && $singular_id === (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
                             return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
                         } else {
                             if ($singular_id && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"] && $singular_id === (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"]) {
                                 return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
                             } else {
                                 if ($uri && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_redirection_override"] && ($_lro = c_ws_plugin__optimizemember_login_redirects::login_redirection_uri(false, "root-returns-false")) && preg_match("/^" . preg_quote($_lro, "/") . "\$/", $uri)) {
                                     return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", true, get_defined_vars());
                                 } else {
                                     /* Otherwise, we return false ( i.e. it's NOT a Systematic Use Page in any way ). */
                                     return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_specific_page", false, get_defined_vars());
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }