<?php
define('PMPROBB_DIR', dirname(__FILE__));
require_once(PMPROBB_DIR . '/includes/functions.php');
require_once(PMPROBB_DIR . '/includes/options.php');
require_once(PMPROBB_DIR . '/includes/options-membership-levels.php');
require_once(PMPROBB_DIR . '/includes/shortcodes.php');
function pmprobb_admin_init() {
if(!empty($_REQUEST['page']) && $_REQUEST['page'] == 'pmpro-membershiplevels' && isset($_REQUEST['edit'])) {
wp_enqueue_script( 'wp-color-picker' );
wp_enqueue_style( 'wp-color-picker' );
}
}
add_action('admin_init', 'pmprobb_admin_init');
add_action( 'template_redirect', 'pmprobbp_check_forum' );
function pmprobbp_check_forum() {
if ( !defined('PMPRO_VERSION') || !class_exists('bbPress') )
return;
global $current_user;
$forum_id = bbp_get_forum_id();
if( ! bbp_is_forum_archive() && ! empty( $forum_id ) && pmpro_bbp_is_forum() ) {
if( ! pmpro_has_membership_access( $forum_id ) ) {
$_SESSION['pmpro_bbp_redirected_from'] = $_SERVER['REQUEST_URI'];
wp_redirect( add_query_arg( 'noaccess', 1, get_post_type_archive_link( 'forum' ) ) );
exit;
}
}
}
function pmpro_bbp_is_forum( $forum_id = NULL ) {
global $post;
if(!$post)
return false;
if(bbp_is_forum($post->ID))
{
if(!empty($forum_id) && $post->ID == $forum_id)
return true;
elseif(empty($forum_id))
return true;
else
return false;
}
elseif(bbp_is_topic($post->ID))
{
if(!empty($forum_id) && $post->post_parent == $forum_id)
return true;
elseif(empty($forum_id))
return true;
else
return false;
}
elseif(bbp_is_reply($post->ID))
{
if(!empty($forum_id) && in_array($forum_id, $post->ancestors))
return true;
elseif(empty($forum_id))
return true;
else
return false;
}
else
return false;
}
function pmpro_bbp_membership_msg()
{
$pmpro_bbp_error_msg = apply_filters('pmpro_bbp_error_msg', 'You do not have the required membership level to access that forum.');
if (bbp_is_forum_archive() && !empty($_REQUEST['noaccess']))
{
echo '<p class="pmpro_bbp_membership_msg">' . $pmpro_bbp_error_msg . '</p>';
}
}
add_action('bbp_template_before_forums_index', 'pmpro_bbp_membership_msg');
function pmprobb_pre_get_posts($query) {
global $wpdb;
if(is_admin() || !$query->is_search || bbp_is_single_topic())
return $query;
$sqlQuery = "SELECT ID FROM $wpdb->posts WHERE post_type LIKE 'forum'";
$all_forums = $wpdb->get_col($sqlQuery);
if(empty($all_forums))
return $query;
$restricted_forum_ids = array();
foreach($all_forums as $forum_id) {
if(!pmpro_has_membership_access($forum_id))
$restricted_forum_ids[] = $forum_id;
}
if(!empty($restricted_forum_ids))
{
$sqlQuery = "SELECT post_id FROM $wpdb->postmeta WHERE meta_key LIKE '_bbp_forum_id' AND meta_value IN(" . implode(', ', $restricted_forum_ids) . ")";
$restricted_topic_ids = $wpdb->get_col($sqlQuery);
$query->set('post__not_in', array_merge($query->get('post__not_in'), $restricted_topic_ids, $restricted_forum_ids));
}
return $query;
}
function pmprobb_plugin_row_meta($links, $file) {
if(strpos($file, 'pmpro-bbpress.php') !== false)
{
$new_links = array(
'<a href="' . esc_url('http:
'<a href="' . esc_url('http:
);
$links = array_merge($links, $new_links);
}
return $links;
}
add_filter('plugin_row_meta', 'pmprobb_plugin_row_meta', 10, 2);
function pmprobb_pmpro_reply_post_class($classes) {
global $reply_id;
$reply_id = bbp_get_reply_id( $reply_id );
$reply_author_id = bbp_get_reply_author_id( $reply_id );
$reply_author_membership_level = pmpro_getMembershipLevelForUser($reply_author_id);
if(!empty($reply_author_membership_level)) {
$classes[] = 'pmpro-level-' . $reply_author_membership_level->id;
}
return $classes;
}
add_filter( 'bbp_get_reply_class', 'pmprobb_pmpro_reply_post_class');
function pmprobb_forum_color_css() {
if(!pmpro_bbp_is_forum())
return;
$options = pmprobb_getOptions();
$rule = array();
if(!empty($options['levels'])) {
foreach($options['levels'] as $level) {
if(!empty($level['color']))
$rules[] = ".topic.pmpro-level-1, .reply.pmpro-level-1 {background-color: " . $level['color'] . " !important; }";
}
}
if(empty($rules))
return false;
?>
<style type="text/css" media="screen">
<?php echo implode("\n", $rules) . "\n";?>
</style>
<?php
}
add_action('wp_head', 'pmprobb_forum_color_css');
function pmprobb_pmpro_member_links_top() {
$options = pmprobb_getOptions();
if(empty($options['member_links']))
return;
$forums = get_posts(array('post_type'=>'forum', 'post_status'=>'publish'));
foreach($forums as $forum) {
if(pmpro_has_membership_access($forum->ID)) {
?>
<li><a href="<?php echo get_permalink($forum->ID);?>"><?php echo $forum->post_title;?></a></li>
<?php
}
}
}
add_filter('pmpro_member_links_top', 'pmprobb_pmpro_member_links_top');
function pmprobb_pmpro_search_filter_post_types($post_types)
{
$options = pmprobb_getOptions();
if(!empty($options['hide_member_forums'])) {
$post_types[] = 'forum';
array_unique($post_types);
}
return $post_types;
}
$options = pmprobb_getOptions();
if(!empty($options['hide_member_forums'])) {
add_filter( 'pre_get_posts', 'pmpro_search_filter' );
add_filter( 'pmpro_search_filter_post_types', 'pmprobb_pmpro_search_filter_post_types' );
}
function pmprobb_pmpro_bbp_error_msg()
{
$options = pmprobb_getOptions();
return $options['error_message'];
}
add_filter('pmpro_bbp_error_msg', 'pmprobb_pmpro_bbp_error_msg');
function pmprobb_pmpro_hide_role($args) {
$options = pmprobb_getOptions();
if(!empty($options['hide_forum_roles']))
$args['show_role'] = false;
return $args;
}
add_filter ('bbp_before_get_reply_author_link_parse_args', 'pmprobb_pmpro_hide_role' );
function pmprobb_pmpro_bbp_template_before_user_profile()
{
$options = pmprobb_getOptions();
if(empty($options['show_membership_levels']))
return;
$profile_user = new stdClass();
$profile_user->membership_level = pmpro_getMembershipLevelForUser(bbp_get_user_id( 0, true, false ));
if(!empty($profile_user->membership_level))
{
?>
<div id="bbp-user-profile" class="bbp-user-profile">
<h2 class="entry-title"><?php _e('Membership Level', 'pmpro');?></h2>
<div class="bbp-user-section">
<?php echo $profile_user->membership_level->name; ?>
</div>
</div>
<?php
}
};
add_action( 'bbp_template_before_user_profile', 'pmprobb_pmpro_bbp_template_before_user_profile', 10, 0 );
function pmprobb_pmpro_bbp_theme_after_reply_author_details()
{
$options = pmprobb_getOptions();
if(empty($options['show_membership_levels']))
return;
$displayed_user = bbp_get_reply_author_id(bbp_get_reply_id());
$membership_level = pmpro_getMembershipLevelForUser($displayed_user);
if(!empty($membership_level))
{
echo '<br /><div class="bbp-author-role">' . $membership_level->name . '</div>';
}
}
add_action('bbp_theme_after_reply_author_details', 'pmprobb_pmpro_bbp_theme_after_reply_author_details', 10, 0);