Example #1
0
 /**
  * Filter all WordPress queries.
  *
  * optimizeMember 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 optimizeMember\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, optimizeMember 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__optimizemember_querys::$current_wp_query =& $wp_query;
     /**/
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__optimizemember_before_query_level_access", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     c_ws_plugin__optimizemember_querys::_query_level_access_sys($wp_query);
     /* Systematics. */
     /**/
     remove_filter("comment_feed_where", "c_ws_plugin__optimizemember_querys::_query_level_access_coms", 100, 2);
     remove_filter("wp_get_nav_menu_items", "c_ws_plugin__optimizemember_querys::_query_level_access_navs", 100);
     /**/
     if (is_object($wpdb) && is_object($wp_query) && (($o = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["filter_wp_query"]) || $force)) {
         if (!is_admin() || c_ws_plugin__optimizemember_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__optimizemember_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__optimizemember_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__optimizemember_utilities::callers())) {
                         add_filter("wp_get_nav_menu_items", "c_ws_plugin__optimizemember_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__"]["optimizemember"]["o"]["login_welcome_page"])) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_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__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), array($_lwp))));
                     }
                     /**/
                     if (!$user && ($_dep = (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"])) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_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__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), array($_dep))));
                     }
                     /**/
                     if (is_array($_ccaps = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_ccaps($user)) && !empty($_ccaps)) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_ccaps)));
                         $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_ccaps)));
                     }
                     /**/
                     if (is_array($_drips = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_dripped_content($user)) && !empty($_drips)) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_drips)));
                         $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_drips)));
                     }
                     /**/
                     if (is_array($_sps = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_sp()) && !empty($_sps)) {
                         $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_sps)));
                         $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_sps)));
                     }
                     unset($_lwp, $_dep, $_ccaps, $_sps, $_drips);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                             $wp_query->set("category__in", array());
                             /* Include no other Categories. */
                             $wp_query->set("category__not_in", $_catgs = c_ws_plugin__optimizemember_utils_gets::get_all_category_ids());
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_catgs))));
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             break;
                             /* All Categories will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                                 foreach ($_catgs = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"]) as $_catg) {
                                     $_catgs = array_merge($_catgs, c_ws_plugin__optimizemember_utils_gets::get_all_child_category_ids($_catg));
                                 }
                                 /**/
                                 $wp_query->set("category__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("category__in")), $_catgs)));
                                 $wp_query->set("category__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_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__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_catgs))));
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             }
                         }
                     }
                     unset($_catgs, $_catg, $_singulars);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                             $wp_query->set("tag__in", array());
                             /* Include no other Tags. */
                             $wp_query->set("tag__not_in", $_tags = c_ws_plugin__optimizemember_utils_gets::get_all_tag_ids());
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_tags))));
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             break;
                             /* ALL Tags will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                                 $_tags = c_ws_plugin__optimizemember_utils_gets::get_tags_converted_to_ids($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"]);
                                 /**/
                                 $wp_query->set("tag__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("tag__in")), $_tags)));
                                 $wp_query->set("tag__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_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__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_tags))));
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars)));
                             }
                         }
                     }
                     unset($_tags, $_tag, $_singulars);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_posts = c_ws_plugin__optimizemember_utils_gets::get_all_post_ids())));
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_posts)));
                             break;
                             /* ALL Posts will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                                 foreach ($_posts = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["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__optimizemember_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__optimizemember_utils_arrays::force_integers($_posts));
                                 /**/
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_posts)));
                                 $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_posts)));
                             }
                         }
                     }
                     unset($_posts, $_p, $_m, $_p_of_type);
                     /**/
                     for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                             $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_pages = c_ws_plugin__optimizemember_utils_gets::get_all_page_ids())));
                             $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_pages)));
                             break;
                             /* ALL Pages will be locked down. */
                         } else {
                             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) {
                                 $_pages = c_ws_plugin__optimizemember_utils_arrays::force_integers(preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"]));
                                 /**/
                                 $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_pages)));
                                 $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_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__optimizemember_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__optimizemember_after_query_level_access", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     $initial_query = false;
     /* No longer. */
     /**/
     return;
     /* For uniformity. */
 }
Example #2
0
 /**
  *
  * Shortcode parsing method for Membership page listings
  * @param array $atts
  * @return string|void
  */
 function membership_page_listings($atts)
 {
     extract(shortcode_atts(array('style' => '', 'columns' => 1, 'product' => 0, 'category' => 0, 'subcategory' => 0, 'comments' => 0, 'drip_content' => 0, 'resize_thumb_height' => 0, 'show_children' => '', 'order' => '', 'hide_description' => 'N'), $atts));
     $product = intval($product);
     $category = intval($category);
     $subcategory = intval($subcategory);
     $parentId = 0;
     $page_id = defined('OP_PAGEBUILDER_ID') ? OP_PAGEBUILDER_ID : $post->ID;
     $title_font = op_asset_font_style($atts);
     if (!empty($title_font)) {
         $title_style = "style='" . $title_font . "'";
     } else {
         $title_style = '';
     }
     $content_font = op_asset_font_style($atts, 'content_font_');
     if (!empty($content_font)) {
         $content_style = "style='" . $content_font . "'";
     } else {
         $content_style = '';
     }
     // which children should we take?
     if (!empty($show_children)) {
         $parentId = $page_id;
     } else {
         if (!empty($product) && empty($category) && empty($subcategory)) {
             $parentId = $product;
         } else {
             if (!empty($product) && !empty($category) && empty($subcategory)) {
                 $parentId = $category;
             } else {
                 if (!empty($product) && !empty($category) && !empty($subcategory)) {
                     $parentId = $subcategory;
                 }
             }
         }
     }
     if (!empty($order)) {
         $temp = explode('|', $order);
         $order_column = $temp[0];
         $order_direction = $temp[1];
     } else {
         $order_column = 'post_title';
         $order_direction = 'asc';
     }
     $args = array('posts_per_page' => -1, 'sort_column' => $order_column, 'sort_order' => $order_direction, 'parent' => $parentId, 'hierarchical' => 0, 'post_status' => 'publish');
     $pages = get_pages($args);
     if ($order_column == 'post_title') {
         if ($order_direction == 'asc') {
             usort($pages, array("OptimizePress_LiveEditor_Assets", "sortNaturalAsc"));
         } else {
             usort($pages, array("OptimizePress_LiveEditor_Assets", "sortNaturalDesc"));
         }
     }
     if (!empty($resize_thumb_height)) {
         $img_class = ' thumb_resize ';
     } else {
         $img_class = '';
     }
     if (empty($pages) || $parentId == 0) {
         if (is_admin()) {
             return __('No child membership pages found! Note: Pages will only show in this once they are Published in Wordpress. Draft pages will not show', OP_SN);
         }
     }
     $html = '';
     switch ($columns) {
         case 1:
             $class = 'page-listing one-col';
             break;
         case 2:
             $class = 'page-listing two-col';
             break;
         case 3:
             $class = 'page-listing three-col';
             break;
         case 4:
             $class = 'page-listing four-col';
             break;
     }
     foreach ($pages as $page) {
         /*if (defined("WS_PLUGIN__OPTIMIZEMEMBER_VERSION")) {
               if (!is_permitted_by_optimizemember($page->ID, "page")) {
                   continue;
               }
           }*/
         // drip content
         $dripContentHtml = '';
         if (defined("WS_PLUGIN__OPTIMIZEMEMBER_VERSION")) {
             global $current_user;
             $hideContent = false;
             if (isset($GLOBALS['WS_PLUGIN__']['optimizemember']['o']['filter_wp_query']) && 'all' === $GLOBALS['WS_PLUGIN__']['optimizemember']['o']['filter_wp_query'][0]) {
                 $hideContent = true;
             }
             if (!is_permitted_by_optimizemember($page->ID, "page") && true === $hideContent) {
                 continue;
             }
             $unavailableContent = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_dripped_content($current_user);
             // getting content drip days setting
             $drip_days = get_post_meta($page->ID, "optimizemember_drip_days", true);
             if ($drip_days) {
                 // if hide links is disabled in OPM general settings, content by this ID is not available to current user and show drip content timer is checked on
                 // membership page listings element
                 if (false === $hideContent && in_array($page->ID, $unavailableContent) && !empty($drip_content) && !current_user_can('level_10')) {
                     //if ($array = is_page_protected_by_optimizemember($page->ID)) { // is it protected?
                     $time = optimizemember_paid_registration_time();
                     if (!empty($time) && $time > strtotime("-" . $drip_days . " days")) {
                         $daysTo = intval(($time + $drip_days * 86400 - time()) / 86400);
                         if (0 === $daysTo) {
                             $dripContentHtml = '<p class="pagelisting-drip-content">' . __('Less than a day left to be able to access this content', OP_SN) . '</p>';
                         } else {
                             $dripContentHtml = '<p class="pagelisting-drip-content">' . sprintf(_n('%d day left to be able to access this content', '%d days left to be able to access this content', $daysTo, OP_SN), $daysTo) . '</p>';
                         }
                     }
                     //}
                 }
                 // if hide links is enabled in OPM general settings, content by this ID is not available to current user and show drip content timer is disabled on
                 // membership page listings element - hide content completely
                 if (true === $hideContent && in_array($page->ID, $unavailableContent) && !current_user_can('level_10')) {
                     continue;
                 }
                 // if user is not logged in
                 if (true === $hideContent && !is_user_logged_in()) {
                     continue;
                 }
             }
         }
         $meta = get_post_meta($page->ID);
         if (!empty($meta['_' . OP_SN . '_page_thumbnail'])) {
             $image = $meta['_' . OP_SN . '_page_thumbnail'][0];
             $alt = $page->post_title;
         }
         if (!empty($comments)) {
             $comments = wp_count_comments($page->ID);
             $commentCount = $comments->approved;
             $commentHtml = '<p class="pagelisting-comment">' . sprintf(__('%d comments', OP_SN), $commentCount) . '</p>';
         } else {
             $commentHtml = '';
         }
         $meta = $meta['_' . OP_SN . '_membership'][0];
         $meta = unserialize(unserialize($meta));
         $html .= '<div class="' . $class . '">';
         $html .= '
             <a href="' . get_permalink($page->ID) . '" class="pagelisting-style-' . $style . ' border">
                 <div class="thumb">';
         if ($image != '') {
             $html .= '<img src="' . $image . '" alt="' . $alt . '" class="scale-with-grid ' . $img_class . '" />';
         } else {
             $html .= '<img src="' . OP_IMG . 'default-page-listings.png" alt="' . $alt . '" class="scale-with-grid ' . $img_class . '" />';
         }
         $html .= '</div>
                 <div class="content">
                     <h3 ' . $title_style . '>' . $page->post_title . '</h3>' . $commentHtml . $dripContentHtml;
         if ($hide_description !== 'Y') {
             $description = stripslashes(base64_decode($meta['description']));
             if (strlen($description) > 140) {
                 $html .= '<p ' . $content_style . '>' . substr($description, 0, 140) . '...</p>';
             } else {
                 $html .= '<p ' . $content_style . '>' . $description . '</p>';
             }
         }
         $html .= '</div>
             </a>
         ';
         $html .= '</div>';
     }
     $html .= '<script type="text/javascript">(function($){function resizeWindow(){if($(window).width()>=767)$(".container").each(function(){var e=0;var t=$(this).find("[class*=\'pagelisting-style-\']");t.css({height:"auto"});t.each(function(){var t=$(this).height();if(t>e)e=t});t.height(e)})}$(document).ready(function(){$(window).bind("resize",resizeWindow);$(window).bind("load",resizeWindow)})})(opjq);</script>' . "\n";
     return $html;
 }
Example #3
0
 /**
  * wp_list_pages filter for excluding protected pages
  * @param array $exclude
  * @return array
  */
 public static function excludePages($exclude)
 {
     if (is_array($_drips = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_dripped_content($user)) && !empty($_drips)) {
         $exclude = array_merge($exclude, $_drips);
     }
     return $exclude;
 }