Пример #1
0
 /**
  * Handles Category Level Access *( for current page )*.
  *
  * @package optimizeMember\Categories
  * @since 3.5
  *
  * @return null Or exits script execution after redirection.
  */
 public static function check_catg_level_access()
 {
     global $post;
     /* ``get_the_ID()`` is NOT available outside The Loop. */
     /**/
     do_action("ws_plugin__optimizemember_before_check_catg_level_access", get_defined_vars());
     /**/
     $excluded = apply_filters("ws_plugin__optimizemember_check_catg_level_access_excluded", false, get_defined_vars());
     /**/
     if (!$excluded && is_category() && ($cat_id = get_query_var("cat")) && ($cat_id = (int) $cat_id) && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
         if (!c_ws_plugin__optimizemember_systematics::is_wp_systematic_use_page()) {
             $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, "/") . "\$/", $_SERVER["REQUEST_URI"]) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level0"))) {
                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("catg", $cat_id, "level", 0, $_SERVER["REQUEST_URI"], "sys") . exit;
             } else {
                 if (!c_ws_plugin__optimizemember_systematics::is_systematic_use_page()) {
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] === "all" && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                             c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("catg", $cat_id, "level", $n, $_SERVER["REQUEST_URI"]) . exit;
                         } 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"])) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("catg", $cat_id, "level", $n, $_SERVER["REQUEST_URI"]) . exit;
                             } 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) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                             c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("catg", $cat_id, "level", $n, $_SERVER["REQUEST_URI"]) . exit;
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     /**/
                     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, "/") . "/", $_SERVER["REQUEST_URI"]) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                     c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("catg", $cat_id, "level", $n, $_SERVER["REQUEST_URI"], "ruri") . exit;
                                 }
                             }
                         }
                     }
                 }
             }
             /**/
             do_action("ws_plugin__optimizemember_during_check_catg_level_access", get_defined_vars());
         }
     }
     /**/
     do_action("ws_plugin__optimizemember_after_check_catg_level_access", get_defined_vars());
     /**/
     return;
     /* For uniformity. */
 }
Пример #2
0
 /**
  * Forces SSL on specific Posts/Pages, or any page for that matter.
  *
  * Triggered by Custom Field: `optimizemember_force_ssl = yes|port#`
  *
  * Triggered by: `?s2-ssl` or `?s2-ssl=yes|port#`.
  *
  * @package optimizeMember\SSL
  * @since 3.5
  *
  * @attaches-to ``add_action("init");``
  * @also-attaches-to ``add_action("wp");``
  *
  * @return null Possibly exiting script execution after redirection to SSL variation.
  */
 public static function check_force_ssl()
 {
     static $forced = false;
     /* Only force SSL once. */
     global $post;
     /* We need this global reference to ``$post``. */
     /**/
     do_action("ws_plugin__optimizemember_before_check_force_ssl", get_defined_vars());
     /**/
     if (!$forced) {
         /* Only force SSL here once. We definitely do NOT need to run this particular routine more than ONE time. */
         if (!c_ws_plugin__optimizemember_systematics::is_wp_systematic_use_page()) {
             $s2_ssl_gv = apply_filters("ws_plugin__optimizemember_check_force_ssl_get_var_name", "s2-ssl", get_defined_vars());
             $_g_s2_ssl = isset($_GET[$s2_ssl_gv]) && (!strlen($_GET[$s2_ssl_gv]) || !preg_match("/^(0|no|off|false)\$/i", $_GET[$s2_ssl_gv])) ? !strlen($_GET[$s2_ssl_gv]) ? true : $_GET[$s2_ssl_gv] : false;
             $force_ssl = apply_filters("ws_plugin__optimizemember_check_force_ssl", $_g_s2_ssl, get_defined_vars());
             /**/
             if ($force_ssl || did_action("wp") && is_singular() && is_object($post) && ($force_ssl = get_post_meta($post->ID, "optimizemember_force_ssl", true))) {
                 if (!preg_match("/^(0|no|off|false)\$/i", (string) $force_ssl) && ($forced = true)) {
                     /* Make sure it's NOT a negative variation. */
                     c_ws_plugin__optimizemember_ssl_in::force_ssl(get_defined_vars());
                 }
             }
             /* Call inner routine now. */
         }
     }
     /**/
     do_action("ws_plugin__optimizemember_after_check_force_ssl", get_defined_vars());
     /**/
     return;
     /* Return for uniformity. */
 }
Пример #3
0
 /**
  * Defines no-cache constants for various WordPress plugins.
  *
  * This is compatible with Quick Cache, W3 Total Cache, and also with WP Super Cache.
  * Quick Cache uses: ``QUICK_CACHE_ALLOWED``, and other plugins use: ``DONOTCACHEPAGE``.
  * W3 Total Cache is also known to be compatible with ``DONOTCACHEOBJECT`` and ``DONOTCACHEDB``.
  *
  * Disallow caching if the ``$no_cache`` parameter is passed in as ``true``, by other routines.
  * In addition, always disallow caching for logged in users, and GET requests with: `/?s2member` Systematics.
  * For clarity on optimizeMember Systematics, see: {@link optimizeMember\Systematics\c_ws_plugin__optimizemember_systematics::is_s2_systematic_use_page()}.
  *
  * However, this routine will ALWAYS obey the `?qcAC` query string parameter.
  * 	This Quick Cache parameter explicitly allows caching to occur.
  *
  * @package optimizeMember\No_Cache
  * @since 3.5
  *
  * @also-called-by Other routines within optimizeMember.
  *
  * @param bool $no_cache Optional. Defaults to false. If true, force no-cache if at all possible.
  * @return bool This function will always return `true`.
  */
 public static function no_cache_constants($no_cache = FALSE)
 {
     static $once;
     /* We only need to set these constants once. */
     /**/
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__optimizemember_before_no_cache_constants", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     if (!$once && empty($_GET["qcAC"]) && ($no_cache || is_user_logged_in() || c_ws_plugin__optimizemember_systematics::is_s2_systematic_use_page())) {
         /**
          * No-cache DB queries for plugins.
          *
          * @package optimizeMember\No_Cache
          * @since 111115
          *
          * @var bool
          */
         if (!defined("DONOTCACHEDB")) {
             define("DONOTCACHEDB", true);
         }
         /**
          * No-cache Page for plugins.
          *
          * @package optimizeMember\No_Cache
          * @since 3.5
          *
          * @var bool
          */
         if (!defined("DONOTCACHEPAGE")) {
             define("DONOTCACHEPAGE", true);
         }
         /**
          * No-cache Objects for plugins.
          *
          * @package optimizeMember\No_Cache
          * @since 111115
          *
          * @var bool
          */
         if (!defined("DONOTCACHEOBJECT")) {
             define("DONOTCACHEOBJECT", true);
         }
         /**
          * No-cache anything for Quick Cache plugin.
          *
          * @package optimizeMember\No_Cache
          * @since 3.5
          *
          * @var bool
          */
         if (!defined("QUICK_CACHE_ALLOWED")) {
             define("QUICK_CACHE_ALLOWED", false);
         }
         /**/
         $once = true;
         /* Only need to set these constants one time. */
         /**/
         c_ws_plugin__optimizemember_no_cache::$headers = true;
         /**/
         do_action("ws_plugin__optimizemember_during_no_cache_constants", get_defined_vars());
     }
     /**/
     do_action("ws_plugin__optimizemember_after_no_cache_constants", get_defined_vars());
     /**/
     return true;
     /* Always return true. */
 }
Пример #4
0
 /**
  * Handles Post Level Access permissions *( for current Post )*.
  *
  * @package optimizeMember\Posts
  * @since 3.5
  *
  * @return null Or exits script execution after redirection.
  */
 public static function check_post_level_access()
 {
     global $post;
     /* ``get_the_ID()`` unavailable outside The Loop. */
     /**/
     do_action("ws_plugin__optimizemember_before_check_post_level_access", get_defined_vars());
     /**/
     $excluded = apply_filters("ws_plugin__optimizemember_check_post_level_access_excluded", false, get_defined_vars());
     /**/
     if (!$excluded && is_single() && is_object($post) && !empty($post->ID) && ($post_id = (int) $post->ID) && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"]) {
         if (!c_ws_plugin__optimizemember_systematics::is_wp_systematic_use_page()) {
             $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, "/") . "\$/", $_SERVER["REQUEST_URI"]) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level0"))) {
                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", 0, $_SERVER["REQUEST_URI"], "sys") . exit;
             } else {
                 if (!c_ws_plugin__optimizemember_systematics::is_systematic_use_page()) {
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"] === "all" && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                             c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"]) . exit;
                         } else {
                             if (strpos($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"], "all-") !== false && in_array("all-" . $post->post_type . "s", preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"])) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"]) . exit;
                             } else {
                                 if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"] && in_array($post_id, preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"])) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                     c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"]) . exit;
                                 }
                             }
                         }
                     }
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] === "all" && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                             c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"], "catg") . exit;
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] && (in_category($catgs = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"]), $post_id) || c_ws_plugin__optimizemember_utils_conds::in_descendant_category($catgs, $post_id)) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"], "catg") . exit;
                             }
                         }
                     }
                     /**/
                     if (has_tag()) {
                         for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] === "all" && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"], "ptag") . exit;
                             } 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"])) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                     c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"], "ptag") . exit;
                                 }
                             }
                         }
                     }
                     /**/
                     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, "/") . "/", $_SERVER["REQUEST_URI"]) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && (!$user || !$user->has_cap("access_optimizemember_level" . $n))) {
                                     c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "level", $n, $_SERVER["REQUEST_URI"], "ruri") . exit;
                                 }
                             }
                         }
                     }
                     /**/
                     if (is_array($ccaps_req = get_post_meta($post_id, "optimizemember_ccaps_req", true)) && !empty($ccaps_req) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true)) {
                         foreach ($ccaps_req as $ccap) {
                             /* The ``$user`` MUST satisfy ALL Custom Capability requirements. Stored as an array of Custom Capabilities. */
                             if (strlen($ccap) && (!$user || !$user->has_cap("access_optimizemember_ccap_" . $ccap))) {
                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "ccap", $ccap, $_SERVER["REQUEST_URI"], "ccap") . exit;
                             }
                         }
                     }
                     /**/
                     /**/
                     $dripDays = get_post_meta($page_id, "optimizemember_drip_days", true);
                     if (!empty($dripDays) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true)) {
                         $dripUrl = get_post_meta($page_id, "optimizemember_drip_redirect_url", true);
                         $time = optimizemember_paid_registration_time('level' . OPTIMIZEMEMBER_CURRENT_USER_ACCESS_LEVEL);
                         if ($time && $time >= ($_days_ago = strtotime("-{$dripDays} days")) && !current_user_can('manage_options')) {
                             if (!empty($dripUrl)) {
                                 wp_redirect($dripUrl);
                                 exit;
                             } else {
                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("page", $page_id, "drip_days", $dripDays, $_SERVER["REQUEST_URI"], "drip_days") . exit;
                             }
                         }
                     }
                     /**/
                     if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["specific_ids"] && in_array($post_id, preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["specific_ids"])) && c_ws_plugin__optimizemember_no_cache::no_cache_constants(true) && !c_ws_plugin__optimizemember_sp_access::sp_access($post_id)) {
                         c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("post", $post_id, "sp", $post_id, $_SERVER["REQUEST_URI"], "sp") . exit;
                     }
                 }
             }
             /**/
             do_action("ws_plugin__optimizemember_during_check_post_level_access", get_defined_vars());
         }
     }
     /**/
     do_action("ws_plugin__optimizemember_after_check_post_level_access", get_defined_vars());
     /**/
     return;
     /* For uniformity. */
 }
Пример #5
0
 /**
  * Determines if the current page is Systematic in any way.
  *
  * @package optimizeMember\Systematics
  * @since 3.5
  *
  * @return bool True if Systematic, else false.
  *
  * @note The results of this function are cached staticially.
  * 	Do NOT call upon this until the `wp` Hook is fired.
  */
 public static function is_systematic_use_page()
 {
     static $is_systematic;
     /* For optimization. */
     /**/
     if (isset($is_systematic)) {
         return $is_systematic;
         /* Filters will have already been applied here. */
     } else {
         if (c_ws_plugin__optimizemember_systematics::is_s2_systematic_use_page()) {
             return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", true, get_defined_vars());
         } else {
             if (c_ws_plugin__optimizemember_systematics::is_wp_systematic_use_page()) {
                 return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", true, get_defined_vars());
             } else {
                 if (c_ws_plugin__optimizemember_utils_conds::bp_is_installed() && (bp_is_register_page() || bp_is_activation_page())) {
                     return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", true, get_defined_vars());
                 } else {
                     if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_welcome_page"] && is_page($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_welcome_page"])) {
                         return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", true, get_defined_vars());
                     } else {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"] && is_page($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"])) {
                             return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", true, get_defined_vars());
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"] && is_page($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"])) {
                                 return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", true, get_defined_vars());
                             } else {
                                 if ($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, "/") . "\$/", $_SERVER["REQUEST_URI"])) {
                                     return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", true, get_defined_vars());
                                 } else {
                                     /* Otherwise, we return false ( it's NOT a Systematic Use Page in any way ). */
                                     return $is_systematic = apply_filters("ws_plugin__optimizemember_is_systematic_use_page", false, get_defined_vars());
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }