/** * Retrieves a unique array of Singular IDs in the database, within specific term IDs. * * Only returns Singular IDs that are within the ``$terms`` passed through this function. * * @package s2Member\Utilities * @since 110912 * * @param array $terms Required. An array of term IDs. * @return array Unique array of all Singular IDs *(as integers)* within the ``$terms`` passed through this function. */ public static function get_singular_ids_in_terms($terms = FALSE) { global $wpdb; // Need this global DB object reference here. if (!empty($terms) && is_array($terms) && is_array($singular_ids = $wpdb->get_col("SELECT `object_id` FROM `" . $wpdb->term_relationships . "` WHERE `term_taxonomy_id` IN (SELECT `term_taxonomy_id` FROM `" . $wpdb->term_taxonomy . "` WHERE `term_id` IN('" . implode("','", $terms) . "'))"))) { $singular_ids = c_ws_plugin__s2member_utils_arrays::force_integers($singular_ids); } return !empty($singular_ids) && is_array($singular_ids) ? array_unique($singular_ids) : array(); }
/** * Forces integer values on each array value *(also supports multi-dimensional arrays)*. * * @package s2Member\Utilities * @since 111101 * * @param array $array An input array. * @return array Returns the ``$array`` after having forced it to set of integer values. */ public static function force_integers($array = FALSE) { $array = (array) $array; foreach ($array as &$value) { if (is_array($value)) { $value = c_ws_plugin__s2member_utils_arrays::force_integers($value); } else { if (!is_integer($value)) { $value = (int) $value; } } } return $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()); }
/** * 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; }
/** * 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; }
/** * 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()); }