PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 260917
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v260917
260917 260913 260909 260829 260814 260805 110710 110731 110812 110815 110912 110913 110915 110926 110927 111002 111003 111011 111017 111029 111105 111206 111216 111220 120213 All 189 releases
← All changes | src/includes/classes/querys.inc.php +27 -33 260805260917 View file →
@@ -52,17 +52,15 @@
52 52 * @param WP_Query $wp_query Expects ``$wp_query``.
53 53 */
54 54 public static function force_query_level_access($wp_query = NULL)
55 55 {
56 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
57 - do_action('ws_plugin__s2member_before_force_query_level_access', get_defined_vars());
58 - unset($__refs, $__v); // Housekeeping.
56 + $_hook = 'ws_plugin__s2member_before_force_query_level_access'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
57 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
59 58
60 59 c_ws_plugin__s2member_querys::query_level_access($wp_query, TRUE);
61 60
62 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
63 - do_action('ws_plugin__s2member_after_force_query_level_access', get_defined_vars());
64 - unset($__refs, $__v); // Housekeeping.
61 + $_hook = 'ws_plugin__s2member_after_force_query_level_access'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
62 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
65 63 }
66 64
67 65 /**
68 66 * Filter all WordPress queries.
@@ -92,11 +90,10 @@
92 90 global $wpdb; // Global DB object reference.
93 91
94 92 c_ws_plugin__s2member_querys::$current_wp_query = &$wp_query;
95 93
96 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
97 - do_action('ws_plugin__s2member_before_query_level_access', get_defined_vars());
98 - unset($__refs, $__v); // Housekeeping.
94 + $_hook = 'ws_plugin__s2member_before_query_level_access'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
95 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
99 96
100 97 if(is_object($wp_query) && !$wp_query->get('___s2_is_bbp_has_replies'))
101 98 // Workaround for bbPress and the `s` key. See: <http://bit.ly/1obLpv4>
102 99 c_ws_plugin__s2member_querys::_query_level_access_sys($wp_query); // Systematics.
@@ -153,11 +150,13 @@
153 150 $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)));
154 151 }
155 152 unset($_lwp, $_dep, $_ccaps, $_sps); // A little housekeeping here. Ditch these temporary variables.
156 153
154 + //260914.2132 Cache each Level capability result only for this query pass; Category/Tag/Post/Page restrictions can otherwise repeat the same `current_user_can()` check, while empty restriction settings still short-circuit without checking it.
155 + $_level_access = array();
157 156 for($n = $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n >= 0; $n--) // Category Level Restrictions.
158 157 {
159 - if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_catgs'] === 'all' && (!$user || !current_user_can('access_s2member_level'.$n)))
158 + if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_catgs'] === 'all' && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
160 159 {
161 160 $wp_query->set('category__in', array()); // Include no other Categories.
162 161 $wp_query->set('category__not_in', ($_catgs = c_ws_plugin__s2member_utils_gets::get_all_category_ids()));
163 162 $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)))));
@@ -163,9 +162,9 @@
163 162 $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)))));
164 163 $wp_query->set('post__in', array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array)$wp_query->get('post__in')), $_singulars)));
165 164 break; // All Categories will be locked down.
166 165 }
167 - else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_catgs'] && (!$user || !current_user_can('access_s2member_level'.$n)))
166 + else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_catgs'] && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
168 167 {
169 168 foreach(($_catgs = preg_split('/['."\r\n\t".'\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_catgs'])) as $_catg)
170 169 $_catgs = array_merge($_catgs, c_ws_plugin__s2member_utils_gets::get_all_child_category_ids($_catg));
171 170
@@ -178,9 +177,9 @@
178 177 unset($_catgs, $_catg, $_singulars); // A little housekeeping here. Ditch these temporary variables.
179 178
180 179 for($n = $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n >= 0; $n--) // Tag Level Restrictions.
181 180 {
182 - if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_ptags'] === 'all' && (!$user || !current_user_can('access_s2member_level'.$n)))
181 + if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_ptags'] === 'all' && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
183 182 {
184 183 $wp_query->set('tag__in', array()); // Include no other Tags.
185 184 $wp_query->set('tag__not_in', ($_tags = c_ws_plugin__s2member_utils_gets::get_all_tag_ids()));
186 185 $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)))));
@@ -186,9 +185,9 @@
186 185 $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)))));
187 186 $wp_query->set('post__in', array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array)$wp_query->get('post__in')), $_singulars)));
188 187 break; // ALL Tags will be locked down.
189 188 }
190 - else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_ptags'] && (!$user || !current_user_can('access_s2member_level'.$n)))
189 + else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_ptags'] && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
191 190 {
192 191 $_tags = c_ws_plugin__s2member_utils_gets::get_tags_converted_to_ids($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_ptags']);
193 192
194 193 $wp_query->set('tag__in', array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array)$wp_query->get('tag__in')), $_tags)));
@@ -200,15 +199,15 @@
200 199 unset($_tags, $_tag, $_singulars); // A little housekeeping here. Ditch these temporary variables.
201 200
202 201 for($n = $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n >= 0; $n--) // Post Level Restrictions.
203 202 {
204 - if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_posts'] === 'all' && (!$user || !current_user_can('access_s2member_level'.$n)))
203 + if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_posts'] === 'all' && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
205 204 {
206 205 $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()))));
207 206 $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)));
208 207 break; // ALL Posts will be locked down.
209 208 }
210 - else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_posts'] && (!$user || !current_user_can('access_s2member_level'.$n)))
209 + else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_posts'] && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
211 210 {
212 211 foreach(($_posts = preg_split('/['."\r\n\t".'\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_posts'])) as $_p)
213 212 {
214 213 if(strpos($_p, 'all-') === 0 && preg_match('/^all-(.+?)$/', $_p, $_m)) // Protecting `all-` of a specific Post Type?
@@ -226,15 +225,15 @@
226 225 unset($_posts, $_p, $_m, $_p_of_type); // A little housekeeping here. Ditch these temporary variables.
227 226
228 227 for($n = $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n >= 0; $n--) // Page Level Restrictions.
229 228 {
230 - if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_pages'] === 'all' && (!$user || !current_user_can('access_s2member_level'.$n)))
229 + if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_pages'] === 'all' && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
231 230 {
232 231 $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()))));
233 232 $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)));
234 233 break; // ALL Pages will be locked down.
235 234 }
236 - else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_pages'] && (!$user || !current_user_can('access_s2member_level'.$n)))
235 + else if($GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_pages'] && (!$user || !(isset($_level_access[$n]) ? $_level_access[$n] : ($_level_access[$n] = (bool)current_user_can('access_s2member_level'.$n)))))
237 236 {
238 237 $_pages = c_ws_plugin__s2member_utils_arrays::force_integers(preg_split('/['."\r\n\t".'\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level'.$n.'_pages']));
239 238
240 239 $wp_query->set('post__in', array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array)$wp_query->get('post__in')), $_pages)));
@@ -240,19 +239,17 @@
240 239 $wp_query->set('post__in', array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array)$wp_query->get('post__in')), $_pages)));
241 240 $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)));
242 241 }
243 242 }
244 - unset($_pages); // A little housekeeping here. Ditch these temporary variables.
243 + unset($_pages, $_level_access); //260914.2132 Keep the per-pass Level capability cache out of the legacy `get_defined_vars()` hook context below.
245 244 }
246 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
247 - do_action('ws_plugin__s2member_during_query_level_access', get_defined_vars());
248 - unset($__refs, $__v); // Housekeeping.
245 + $_hook = 'ws_plugin__s2member_during_query_level_access'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
246 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
249 247 }
250 248 }
251 249 }
252 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
253 - do_action('ws_plugin__s2member_after_query_level_access', get_defined_vars());
254 - unset($__refs, $__v); // Housekeeping.
250 + $_hook = 'ws_plugin__s2member_after_query_level_access'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
251 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
255 252 }
256 253
257 254 /**
258 255 * Always filters Systematics in search results & feeds.
@@ -268,11 +265,10 @@
268 265 public static function _query_level_access_sys($wp_query = NULL)
269 266 {
270 267 global $wpdb; // Global DB object reference.
271 268
272 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
273 - do_action('_ws_plugin__s2member_before_query_level_access_sys', get_defined_vars());
274 - unset($__refs, $__v); // Housekeeping.
269 + $_hook = '_ws_plugin__s2member_before_query_level_access_sys'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
270 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
275 271
276 272 if(is_object($wpdb) && is_object($wp_query) && !($suppressing_filters = $wp_query->get('suppress_filters')))
277 273 if((!is_admin() && ($wp_query->is_search() || $wp_query->is_feed())) || c_ws_plugin__s2member_querys::_is_admin_ajax_search($wp_query))
278 274 {
@@ -281,15 +277,13 @@
281 277
282 278 $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')), $s)));
283 279 $wp_query->set('post__in', array_unique(array_diff(c_ws_plugin__s2member_utils_arrays::force_integers((array)$wp_query->get('post__in')), $s)));
284 280
285 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
286 - do_action('_ws_plugin__s2member_during_query_level_access_sys', get_defined_vars());
287 - unset($__refs, $__v); // Housekeeping.
281 + $_hook = '_ws_plugin__s2member_during_query_level_access_sys'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
282 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
288 283 }
289 - foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
290 - do_action('_ws_plugin__s2member_after_query_level_access_sys', get_defined_vars());
291 - unset($__refs, $__v); // Housekeeping.
284 + $_hook = '_ws_plugin__s2member_after_query_level_access_sys'; if (isset($GLOBALS['wp_filter'][$_hook]) || isset($GLOBALS['wp_filter']['all']))
285 + { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action($_hook, get_defined_vars()); } unset($_hook, $__refs, $__v); //260901 Vars by reference.
292 286 }
293 287
294 288 /**
295 289 * Filters WordPress navigation menu items.