/** * 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(); }
/** * Filters ``$cwhere`` query portion. * * @package s2Member\Queries * @since 110912 * * @attaches-to ``add_filter("comment_feed_where");`` * * @param str $cwhere Expects the SQL `WHERE` portion to be passed through by the Filter. * @param obj $wp_query Expects ``$wp_query`` by reference, from the Filter. * @return str The revised ``$cwhere`` string. */ public static function _query_level_access_coms($cwhere = FALSE, &$wp_query = FALSE) { global $wpdb; /* Need this global DB object reference here. */ /**/ if (is_string($cwhere) && is_object($wpdb) && is_object($wp_query) && !$wp_query->get("suppress_filters")) { $x_terms = array_merge((array) $wp_query->get("category__not_in"), (array) $wp_query->get("tag__not_in")); $x_terms = array_unique(c_ws_plugin__s2member_utils_arrays::force_integers($x_terms)); $x_singulars = c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($x_terms); /**/ $cwhere .= " AND `" . $wpdb->comments . "`.`comment_post_ID` NOT IN('" . implode("','", (array) $wp_query->get("post__not_in")) . "')"; $cwhere .= " AND `" . $wpdb->comments . "`.`comment_post_ID` NOT IN('" . implode("','", $x_singulars) . "')"; } remove_filter("comment_feed_where", "c_ws_plugin__s2member_querys::_query_level_access_coms", 100, 2); return apply_filters("_ws_plugin__s2member_query_level_access_coms", $cwhere, get_defined_vars()); }
/** * 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(); }
/** * Filters ``$cwhere`` query portion. * * @package s2Member\Queries * @since 110912 * * @attaches-to ``add_filter('comment_feed_where');`` * * @param string $cwhere Expects the SQL `WHERE` portion to be passed through by the Filter. * @param WP_Query $wp_query Expects ``$wp_query`` by reference, from the Filter. * * @return string The revised ``$cwhere`` string. */ public static function _query_level_access_coms($cwhere = '', &$wp_query = NULL) { global $wpdb; // Global DB object reference. if (is_string($cwhere) && is_object($wpdb) && is_object($wp_query) && !$wp_query->get('suppress_filters')) { $x_terms = array_merge((array) $wp_query->get('category__not_in'), (array) $wp_query->get('tag__not_in')); $x_terms = array_unique(c_ws_plugin__s2member_utils_arrays::force_integers($x_terms)); // Force integer values. $x_singulars = c_ws_plugin__s2member_utils_gets::get_singular_ids_in_terms($x_terms); // Singulars. $cwhere .= " AND `" . $wpdb->comments . "`.`comment_post_ID` NOT IN('" . implode("','", (array) $wp_query->get('post__not_in')) . "')"; $cwhere .= " AND `" . $wpdb->comments . "`.`comment_post_ID` NOT IN('" . implode("','", $x_singulars) . "')"; } remove_filter('comment_feed_where', 'c_ws_plugin__s2member_querys::_query_level_access_coms', 100, 2); return apply_filters('_ws_plugin__s2member_query_level_access_coms', $cwhere, get_defined_vars()); }