示例#1
0
 /**
  * Retrieves a unique array of all Singular IDs that require Specific Post/Page Access.
  *
  * @package s2Member\Utilities
  * @since 111101
  *
  * @param bool $exclude_conflicts Optional. Defaults to false. If true, return ONLY those which are NOT in conflict with any other Restriction Types.
  * 	The ``$exclude_conflicts`` argument should be used whenever we introduce a list of option values to a site owner. Helping them avoid mishaps.
  * 	Please note, the ``$exclude_conflicts`` argument implements a resource-intensive processing routine.
  * @return array Unique array of all Singular IDs *(as integers)* that require Specific Post/Page Access.
  */
 public static function get_all_singular_ids_with_sp($exclude_conflicts = FALSE)
 {
     if (is_array($singular_ids = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["specific_ids"] && is_array($singular_ids = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["specific_ids"])) ? $singular_ids : array())) {
         $singular_ids = c_ws_plugin__s2member_utils_arrays::force_integers($singular_ids);
     }
     if (!empty($singular_ids) && is_array($singular_ids) && $exclude_conflicts) {
         $x_ids = array($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"], $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_options_page"], $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["file_download_limit_exceeded_page"]);
         $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_all_singular_ids_with_ccaps());
         for ($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++) {
             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"] === "all") {
                 $catgs = c_ws_plugin__s2member_utils_gets::get_all_category_ids();
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($catgs));
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             foreach ($catgs = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"]) as $catg) {
                 $catgs = array_merge($catgs, c_ws_plugin__s2member_utils_gets::get_all_child_category_ids($catg));
             }
             $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($catgs));
             unset($catgs, $catg);
         }
         for ($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++) {
             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_ptags"] === "all") {
                 $tags = c_ws_plugin__s2member_utils_gets::get_all_tag_ids();
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($tags));
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             $tags = c_ws_plugin__s2member_utils_gets::get_tags_converted_to_ids($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_ptags"]);
             $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($tags));
             unset($tags);
         }
         for ($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++) {
             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_posts"] === "all") {
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_all_post_ids());
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             foreach ($posts = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_posts"]) as $p) {
                 if (strpos($p, "all-") === 0 && preg_match("/^all-(.+)\$/", $p, $m)) {
                     if ((is_array($p_of_type = c_ws_plugin__s2member_utils_gets::get_all_post_ids($m[1])) || substr($m[1], -1) === "s" && is_array($_p_of_type = c_ws_plugin__s2member_utils_gets::get_all_post_ids(substr($m[1], 0, -1)))) && !empty($p_of_type)) {
                         $x_ids = array_merge($x_ids, $p_of_type);
                     }
                 }
             }
             $x_ids = array_merge($x_ids, $posts);
             unset($posts, $p, $m, $p_of_type);
         }
         for ($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++) {
             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"] === "all") {
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_all_page_ids());
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             $pages = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"]);
             $x_ids = array_merge($x_ids, $pages);
             unset($pages);
         }
         $x_ids = array_unique(c_ws_plugin__s2member_utils_arrays::force_integers($x_ids));
         $singular_ids = array_diff($singular_ids, $x_ids);
     }
     return !empty($singular_ids) && is_array($singular_ids) ? array_unique($singular_ids) : array();
 }
示例#2
0
 /**
  * Retrieves a unique array of all Singular IDs that require Specific Post/Page Access.
  *
  * @package s2Member\Utilities
  * @since 111101
  *
  * @param bool $exclude_conflicts Optional. Defaults to false. If true, return ONLY those which are NOT in conflict with any other Restriction Types.
  *   The ``$exclude_conflicts`` argument should be used whenever we introduce a list of option values to a site owner. Helping them avoid mishaps.
  *   Please note, the ``$exclude_conflicts`` argument implements a resource-intensive processing routine.
  *
  * @return array Unique array of all Singular IDs *(as integers)* that require Specific Post/Page Access.
  */
 public static function get_all_singular_ids_with_sp($exclude_conflicts = FALSE)
 {
     if (is_array($singular_ids = $GLOBALS['WS_PLUGIN__']['s2member']['o']['specific_ids'] && is_array($singular_ids = preg_split('/[' . "\r\n\t" . '\\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['specific_ids'])) ? $singular_ids : array())) {
         $singular_ids = c_ws_plugin__s2member_utils_arrays::force_integers($singular_ids);
     }
     if (!empty($singular_ids) && is_array($singular_ids) && $exclude_conflicts) {
         $x_ids = array($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page'], $GLOBALS['WS_PLUGIN__']['s2member']['o']['membership_options_page'], $GLOBALS['WS_PLUGIN__']['s2member']['o']['file_download_limit_exceeded_page']);
         $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_all_singular_ids_with_ccaps());
         for ($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
             if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_catgs'] === 'all') {
                 $catgs = c_ws_plugin__s2member_utils_gets::get_all_category_ids();
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($catgs));
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             foreach ($catgs = preg_split('/[' . "\r\n\t" . '\\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_catgs']) as $catg) {
                 $catgs = array_merge($catgs, c_ws_plugin__s2member_utils_gets::get_all_child_category_ids($catg));
             }
             $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($catgs));
             unset($catgs, $catg);
             // Just a little housekeeping here.
         }
         for ($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
             if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_ptags'] === 'all') {
                 $tags = c_ws_plugin__s2member_utils_gets::get_all_tag_ids();
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($tags));
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             $tags = c_ws_plugin__s2member_utils_gets::get_tags_converted_to_ids($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_ptags']);
             $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($tags));
             unset($tags);
             // Just a little housekeeping here.
         }
         for ($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
             if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_posts'] === 'all') {
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_all_post_ids());
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             foreach ($posts = preg_split('/[' . "\r\n\t" . '\\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_posts']) as $p) {
                 if (strpos($p, 'all-') === 0 && preg_match('/^all-(.+)$/', $p, $m)) {
                     if ((is_array($p_of_type = c_ws_plugin__s2member_utils_gets::get_all_post_ids($m[1])) || substr($m[1], -1) === 's' && is_array($_p_of_type = c_ws_plugin__s2member_utils_gets::get_all_post_ids(substr($m[1], 0, -1)))) && !empty($p_of_type)) {
                         $x_ids = array_merge($x_ids, $p_of_type);
                     }
                 }
             }
             // Merge all Posts of this Post Type.
             $x_ids = array_merge($x_ids, $posts);
             // Merge together.
             unset($posts, $p, $m, $p_of_type);
             // Just a little housekeeping here.
         }
         for ($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
             if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages'] === 'all') {
                 $x_ids = array_merge($x_ids, c_ws_plugin__s2member_utils_gets::get_all_page_ids());
                 continue;
                 // Continue. The `all` specification is absolute. There's nothing more.
             }
             $pages = preg_split('/[' . "\r\n\t" . '\\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages']);
             $x_ids = array_merge($x_ids, $pages);
             // Merge.
             unset($pages);
             // Just a little housekeeping here.
         }
         $x_ids = array_unique(c_ws_plugin__s2member_utils_arrays::force_integers($x_ids));
         $singular_ids = array_diff($singular_ids, $x_ids);
     }
     return !empty($singular_ids) && is_array($singular_ids) ? array_unique($singular_ids) : array();
 }
 /**
  * Filter all WordPress® queries.
  *
  * s2Member respects the query var: `suppress_filters`. 
  * If you need to make a query without it being Filtered, use  ``$wp_query->set ("suppress_filters", true);``.
  *
  * @package s2Member\Queries
  * @since 3.5
  *
  * @attaches-to ``add_action("pre_get_posts");``
  *
  * @param obj $wp_query Expects ``$wp_query`` by reference, from the Filter.
  * @param bool $force Optional. Defaults to false. If true, we bypass all standard conditions.
  * 	However, s2Member will NEVER bypass `supress_filters`.
  * @return null
  *
  * @todo For improved reliability, modify other query vars associated with exclusions/inclusions. Like `tag_slug__in`?
  * 	See: {@link http://codex.wordpress.org/Class_Reference/WP_Query#Parameters WP_Query#Parameters}
  * @todo Make it possible to force filtering, even when used in combination with Query Conditionals and ``get_posts()``, which auto-supresses.
  * 	Or, perhaps strengthen the existing ``$force`` parameter in this regard.
  */
 public static function query_level_access(&$wp_query = FALSE, $force = FALSE)
 {
     global $wpdb;
     /* Need this global DB object reference here. */
     static $initial_query = true;
     /* Tracks the initial query. */
     c_ws_plugin__s2member_querys::$current_wp_query =& $wp_query;
     /**/
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__s2member_before_query_level_access", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     c_ws_plugin__s2member_querys::_query_level_access_sys($wp_query);
     /* Systematics. */
     /**/
     remove_filter("comment_feed_where", "c_ws_plugin__s2member_querys::_query_level_access_coms", 100, 2);
     remove_filter("wp_get_nav_menu_items", "c_ws_plugin__s2member_querys::_query_level_access_navs", 100);
     /**/
     if (is_object($wpdb) && is_object($wp_query) && (($o = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["filter_wp_query"]) || $force)) {
         if (!is_admin() || c_ws_plugin__s2member_querys::_is_admin_ajax_search($wp_query)) {
             $suppressing_filters = $wp_query->get("suppress_filters");
             /* Filter suppression on? */
             if (!$suppressing_filters && $force || !$suppressing_filters && in_array("all", $o) && !($initial_query && $wp_query->is_singular()) || !$suppressing_filters && (in_array("all", $o) || in_array("searches", $o)) && $wp_query->is_search() || !$suppressing_filters && (in_array("all", $o) || in_array("feeds", $o)) && $wp_query->is_feed() && !$wp_query->is_comment_feed() || !$suppressing_filters && (in_array("all", $o) || in_array("comment-feeds", $o)) && $wp_query->is_feed() && $wp_query->is_comment_feed() || $suppressing_filters !== "n/a" && (in_array("all", $o) || in_array("nav-menus", $o)) && in_array("wp_get_nav_menu_items", $callers = isset($callers) ? $callers : c_ws_plugin__s2member_utilities::callers())) {
                 if (!$suppressing_filters && (in_array("all", $o) || in_array("comment-feeds", $o)) && $wp_query->is_feed() && $wp_query->is_comment_feed()) {
                     add_filter("comment_feed_where", "c_ws_plugin__s2member_querys::_query_level_access_coms", 100, 2);
                 }
                 /**/
                 if ($suppressing_filters !== "n/a" && (in_array("all", $o) || in_array("nav-menus", $o))) {
                     /* Suppression irrelevant here. */
                     if (in_array("wp_get_nav_menu_items", $callers = isset($callers) ? $callers : c_ws_plugin__s2member_utilities::callers())) {
                         add_filter("wp_get_nav_menu_items", "c_ws_plugin__s2member_querys::_query_level_access_navs", 100);
                     }
                 }
                 /**/
                 if (is_user_logged_in() && is_object($user = wp_get_current_user()) && !empty($user->ID) && ($user_id = $user->ID) || !($user = false)) {
                     if (!$user && ($_lwp = (int) $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"])) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), array($_lwp))));
                         $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), array($_lwp))));
                     }
                     /**/
                     if (!$user && ($_dep = (int) $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["file_download_limit_exceeded_page"])) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), array($_dep))));
                         $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), array($_dep))));
                     }
                     /**/
                     if (is_array($_ccaps = c_ws_plugin__s2member_utils_gets::get_unavailable_singular_ids_with_ccaps($user)) && !empty($_ccaps)) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_ccaps)));
                         $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_ccaps)));
                     }
                     /**/
                     if (is_array($_sps = c_ws_plugin__s2member_utils_gets::get_unavailable_singular_ids_with_sp()) && !empty($_sps)) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_sps)));
                         $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_sps)));
                     }
                     unset($_lwp, $_dep, $_ccaps, $_sps);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"] === "all" && (!$user || !current_user_can("access_s2member_level" . $n))) {
                             $wp_query->set("category__in", array());
                             /* Include no other Categories. */
                             $wp_query->set("category__not_in", $_catgs = c_ws_plugin__s2member_utils_gets::get_all_category_ids());
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($_catgs))));
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             break;
                             /* All Categories will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"] && (!$user || !current_user_can("access_s2member_level" . $n))) {
                                 foreach ($_catgs = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_catgs"]) as $_catg) {
                                     $_catgs = array_merge($_catgs, c_ws_plugin__s2member_utils_gets::get_all_child_category_ids($_catg));
                                 }
                                 /**/
                                 $wp_query->set("category__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("category__in")), $_catgs)));
                                 $wp_query->set("category__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("category__not_in")), $_catgs)));
                                 $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($_catgs))));
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             }
                         }
                     }
                     unset($_catgs, $_catg, $_singulars);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_ptags"] === "all" && (!$user || !current_user_can("access_s2member_level" . $n))) {
                             $wp_query->set("tag__in", array());
                             /* Include no other Tags. */
                             $wp_query->set("tag__not_in", $_tags = c_ws_plugin__s2member_utils_gets::get_all_tag_ids());
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($_tags))));
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             break;
                             /* ALL Tags will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_ptags"] && (!$user || !current_user_can("access_s2member_level" . $n))) {
                                 $_tags = c_ws_plugin__s2member_utils_gets::get_tags_converted_to_ids($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_ptags"]);
                                 /**/
                                 $wp_query->set("tag__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("tag__in")), $_tags)));
                                 $wp_query->set("tag__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("tag__not_in")), $_tags)));
                                 $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($_tags))));
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             }
                         }
                     }
                     unset($_tags, $_tag, $_singulars);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_posts"] === "all" && (!$user || !current_user_can("access_s2member_level" . $n))) {
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_posts = c_ws_plugin__s2member_utils_gets::get_all_post_ids())));
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_posts)));
                             break;
                             /* ALL Posts will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_posts"] && (!$user || !current_user_can("access_s2member_level" . $n))) {
                                 foreach ($_posts = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_posts"]) as $_p) {
                                     if (strpos($_p, "all-") === 0 && preg_match("/^all-(.+)\$/", $_p, $_m)) {
                                         if (is_array($_p_of_type = c_ws_plugin__s2member_utils_gets::get_all_post_ids($_m[1])) && !empty($_p_of_type)) {
                                             $_posts = array_merge($_posts, $_p_of_type);
                                         }
                                     }
                                 }
                                 /**/
                                 $_posts = array_unique(c_ws_plugin__s2member_utils_arrays::force_integers($_posts));
                                 /**/
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_posts)));
                                 $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_posts)));
                             }
                         }
                     }
                     unset($_posts, $_p, $_m, $_p_of_type);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"] === "all" && (!$user || !current_user_can("access_s2member_level" . $n))) {
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_pages = c_ws_plugin__s2member_utils_gets::get_all_page_ids())));
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_pages)));
                             break;
                             /* ALL Pages will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"] && (!$user || !current_user_can("access_s2member_level" . $n))) {
                                 $_pages = c_ws_plugin__s2member_utils_arrays::force_integers(preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"]));
                                 /**/
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_pages)));
                                 $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__s2member_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_pages)));
                             }
                         }
                     }
                     unset($_pages);
                 }
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__s2member_during_query_level_access", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
             }
         }
     }
     /**/
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__s2member_after_query_level_access", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     $initial_query = false;
     /* No longer. */
     /**/
     return;
     /* For uniformity. */
 }
示例#4
0
 /**
  * Filters WordPress Page queries that use wp_list_pages()
  *
  * @package s2Member\Queries
  * @since 130617
  *
  * @attaches-to ``add_filter("wp_list_pages_excludes");``
  *
  * @return array The array of ``$excludes``.
  */
 public static function _query_level_access_list_pages($excludes = array())
 {
     // Here we need to exclude any Page not available to the current user.
     for ($n = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n >= 0; $n--) {
         if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"] === "all" && !current_user_can("access_s2member_level" . $n)) {
             $excludes = array_merge($excludes, c_ws_plugin__s2member_utils_arrays::force_integers(c_ws_plugin__s2member_utils_gets::get_all_page_ids()));
         } else {
             if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"] && !current_user_can("access_s2member_level" . $n)) {
                 $excludes = array_merge($excludes, c_ws_plugin__s2member_utils_arrays::force_integers(preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_pages"])));
             }
         }
     }
     return $excludes;
 }
示例#5
0
 /**
  * Filters WordPress Page queries that use wp_list_pages()
  *
  * @package s2Member\Queries
  * @since 130617
  *
  * @attaches-to ``add_filter('wp_list_pages_excludes');``
  *
  * @param array $excludes An array of any existing excludes.
  *
  * @return array The array of ``$excludes``.
  */
 public static function _query_level_access_list_pages($excludes = array())
 {
     for ($n = $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n >= 0; $n--) {
         if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages'] === 'all' && !current_user_can('access_s2member_level' . $n)) {
             $excludes = array_merge($excludes, c_ws_plugin__s2member_utils_arrays::force_integers(c_ws_plugin__s2member_utils_gets::get_all_page_ids()));
         } else {
             if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages'] && !current_user_can('access_s2member_level' . $n)) {
                 $excludes = array_merge($excludes, c_ws_plugin__s2member_utils_arrays::force_integers(preg_split('/[' . "\r\n\t" . '\\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages'])));
             }
         }
     }
     return $excludes;
 }
示例#6
0
 /**
  * Filters WordPress Page queries that use wp_list_pages()
  *
  * @package s2Member\Queries
  * @since 130617
  *
  * @attaches-to ``add_filter('wp_list_pages_excludes');``
  *
  * @param array $excludes An array of any existing excludes.
  *
  * @return array The array of ``$excludes``.
  */
 public static function _query_level_access_list_pages($excludes = array())
 {
     if (!$GLOBALS['WS_PLUGIN__']['s2member']['o']['filter_wp_query'] || !in_array('all', $GLOBALS['WS_PLUGIN__']['s2member']['o']['filter_wp_query']) && !in_array('pages', $GLOBALS['WS_PLUGIN__']['s2member']['o']['filter_wp_query'])) {
         return $excludes;
     }
     // Not applicable.
     $systematics = array();
     // Initialize.
     $systematics[] = $GLOBALS['WS_PLUGIN__']['s2member']['o']['file_download_limit_exceeded_page'];
     if (!is_user_logged_in()) {
         $systematics[] = $GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page'];
     }
     $systematics = c_ws_plugin__s2member_utils_arrays::force_integers($systematics);
     // Force integer values here.
     $excludes = array_merge($excludes, $systematics);
     for ($n = $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n >= 0; $n--) {
         if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages'] === 'all' && !current_user_can('access_s2member_level' . $n)) {
             $excludes = array_merge($excludes, c_ws_plugin__s2member_utils_arrays::force_integers(c_ws_plugin__s2member_utils_gets::get_all_page_ids()));
         } else {
             if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages'] && !current_user_can('access_s2member_level' . $n)) {
                 $excludes = array_merge($excludes, c_ws_plugin__s2member_utils_arrays::force_integers(preg_split('/[' . "\r\n\t" . '\\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $n . '_pages'])));
             }
         }
     }
     return apply_filters('_ws_plugin__s2member_query_level_access_list_pages', $excludes, get_defined_vars());
 }