/** * check protection * * @param string $content * @param string $type * @return string $content */ function mgm_content_protection_check($content, $type = 'excerpt') { global $wpdb, $post; // system $system_obj = mgm_get_class('system'); // by pass content protection for excerpt if setting is off // get user $user = wp_get_current_user(); // to disable showing multiple private messages on home page listing(issue#: 384), disabled due to #429 // $show_message = true; // (is_home() && $type == 'content') ? false : true; // filter first $content = mgm_replace_message_tags($content); // filter payment messages $content = mgm_replace_payment_message_tags($content); // no check for admin or if user has access or user logged in if (is_super_admin() || mgm_user_has_access()) { return $content; } //comments protection check if ($system_obj->setting['enable_comments_protection'] == 'Y') { //hook add_filter('comments_template', 'mgm_hide_comments'); } //to honour MORE(<!--more-tag-->) tag: issue#: 671 //case: home page listing,category listing,archives if ($type == 'excerpt' || !is_single() && $type == 'content' && (is_archive() || is_home() || is_search())) { //check the content has more tag: eg: The link: http://magicmediagroup.com/ppp/#more-540 if (preg_match("/\\/#more-" . $post->ID . "/", $content) || preg_match("/<!--more-->/", $content)) { return $content; } // if excerpt display and enable_excerpt_protection is disbled , bypass protection:issue#: 887 if (!bool_from_yn($system_obj->get_setting('enable_excerpt_protection'))) { return $content; } } // for full / or part protection, honor manual private tag setting via post interface or , mgm settings // protection level $protection_level = $system_obj->setting['content_protection']; // no check for post/page set as no access redirect, custom register/login urls if ($post->ID) { // get permalink $permalink = get_permalink($post->ID); // no_access_urls $no_access_urls = array('no_access_redirect_loggedin_users', 'no_access_redirect_loggedout_users'); // init $return = false; // loop foreach ($no_access_urls as $no_access_url) { // get setting $no_access_url_is = $system_obj->setting[$no_access_url]; // match if (!empty($no_access_url_is) && $permalink == trailingslashit($no_access_url_is)) { // set flag $return = true; break; } } // return if ($return) { return $content; } // check urls $custom_pages_url = $system_obj->get_custom_pages_url(); // check foreach ($custom_pages_url as $key => $page_url) { // match if (!empty($page_url) && $permalink == trailingslashit($page_url)) { // set flag $return = true; break; } } // return if ($return) { return $content; } // get post object $post_obj = mgm_get_post($post->ID); } // post_is_purchasable $post_is_purchasable = mgm_post_is_purchasable(); // is post_is_purchasable and expired if ($post_is_purchasable && $user->ID && mgm_is_user_purchased_post_expired($post->ID, $user->ID)) { $protected_message = __('Purchased Post expired, Please re-purchase to access the post', 'mgm'); } else { // message code if ($user->ID) { // logged in user $message_code = $post_is_purchasable ? 'private_text_purchasable' : 'private_text_no_access'; } else { // logged out/guest user $message_code = $post_is_purchasable ? 'private_text_purchasable_login' : 'private_text'; } // protected_message $protected_message = sprintf('<div class="mgm_private_no_access">%s</div>', mgm_private_text_tags(mgm_stripslashes_deep($system_obj->get_template($message_code, array(), true)))); // filter message $protected_message = mgm_replace_message_tags($protected_message); } // return $content; // check switch ($protection_level) { case 'full': // full protection // check redirect condition // Skip content protection if manually protected:(To honour private tags) // Double check as the next line was removed before if (!mgm_is_manually_protected($content)) { // had redirect if (!mgm_check_redirect_condition($system_obj)) { $content = $protected_message; } else { // default $content = mgm_no_access_redirect($system_obj); } } break; case 'partly': // partly protection // Skip content protection if manually protected:(To honour private tags) // Double check as the next line was removed before if (!mgm_is_manually_protected($content)) { // check if custom page is loaded $custompage_loaded = mgm_is_custompage_loaded(); // how many words to allow $allowed_word_limit = (int) $system_obj->get_setting('public_content_words'); $allow_html = bool_from_yn($system_obj->get_setting('content_protection_allow_html')); // apply if only more than 0 if (!$custompage_loaded && $allowed_word_limit > 0) { // #125 iss / issue#: 510 // check redirect condition if (!mgm_check_redirect_condition($system_obj)) { // redirect if set // on type switch ($type) { case 'excerpt': //issue #1059 $content_post = get_post($post->ID); $my_content = $content_post->post_content; if (preg_match("/<!--nextpage-->/", $my_content)) { $content = str_replace('<!--nextpage-->', '', $my_content); } // already parsed by shortcode if (preg_match('#<div class="mgm_private_no_access">(.*?)<\\/div\\>#s', $content, $match)) { // get message only $prev_message = $match[0]; // remove message $content = preg_replace('#<div class="mgm_private_no_access">(.*?)<\\/div\\>#s', '', $content); // get words $content = mgm_words_from_content($content, $allowed_word_limit, $allow_html); // append if ($allowed_word_limit < 50) { $content .= $prev_message; } } else { // not processed // get words $content = mgm_words_from_content($content, $allowed_word_limit, $allow_html); // append if ($allowed_word_limit < 50) { $content .= $protected_message; } } break; case 'content': //issue #1059 $content_post = get_post($post->ID); $my_content = $content_post->post_content; if (preg_match("/<!--nextpage-->/", $my_content)) { $content = str_replace('<!--nextpage-->', '', $my_content); } // already parsed by shortcode // issue #: 450 if (preg_match('#<div class="mgm_private_no_access">(.*?)<\\/div\\>#s', $content, $match)) { // get message only $prev_message = $match[0]; // remove message $content = preg_replace('#<div class="mgm_private_no_access">(.*?)<\\/div\\>#s', '', $content); // get words $content = mgm_words_from_content($content, $allowed_word_limit, $allow_html); // add message $content .= $prev_message; } else { // get words $content = mgm_words_from_content($content, $allowed_word_limit, $allow_html) . $protected_message; } break; } } else { // default $content = mgm_no_access_redirect($system_obj); } } } break; case 'none': // no protection, trim all private tags, honor [private] tags // just check purchasable, other wise trim if (!$post_is_purchasable) { // remove tags $content = str_replace(array('[private]', '[/private]', '[private_or]', '[/private_or]', '[private_and]', '[/private_and]'), '', $content); } break; default: // disable protection $content = str_replace(array('[private]', '[/private]', '[private_or]', '[/private_or]', '[private_and]', '[/private_and]'), '', $content); break; } // issue#: 450 if ($post_is_purchasable && !mgm_is_buynow_form_included($content)) { //issue #1397 if (mgm_is_manually_protected($content) ? false : true) { $return = mgm_parse_post_template($post->ID); } else { //issue #1537 if (is_super_admin() || $user->ID) { $return = mgm_get_post_purchase_button($post->ID, mgm_is_manually_protected($content) ? false : true); } } // get button // replace message tags if any $return = mgm_replace_message_tags($return); // wrap with css class $content .= sprintf('<div class="mgm_private_no_access">%s</div>', $return); } // return return $content; }
/** * check post protected * * @param int $post_id * @return bool */ function mgm_post_is_protected($post_id = false, $post_obj = NULL) { // default $return = false; // get post id if (!$post_id) { $post_id = get_the_ID(); } // mgm post setting object if (!$post_obj) { $post_obj = mgm_get_post($post_id); } // wp post object $post =& get_post($post_id); // access $access_types = $post_obj->get_access_membership_types(); // count $access_types_count = count($access_types); // content $content = $post->post_content; // has tag $has_tag = mgm_is_manually_protected($content); // content protection settings $cp_setting = mgm_get_class('system')->get_setting('content_protection'); // protection $has_cp = (bool) in_array($cp_setting, array('full', 'partly')); // purchasable if ($access_types_count > 0 && ($has_tag || $has_cp)) { // return $return = true; } // return return $return; }