post->ID;
$post_type = $wp_query->get('post_type');
if (bbp_is_topic_super_sticky($post_id)) return true;
$forum_id = private_groups_get_forum_id_from_post_id($post_id, $post_type);
//then call the function that checks if the user can view this forum, and hence this post
if (private_groups_can_user_view_post_id($forum_id))
return true;
}
/**
* Use the given query to determine which forums the user has access to.
*
* returns: an array of post IDs which user has access to.
*/
function private_groups_get_permitted_post_ids($post_query) {
//Init the Array which will hold our list of allowed posts
$allowed_posts = array();
//Loop through all the posts
while ($post_query->have_posts()) :
$post_query->the_post();
//Get the Post ID and post type
$post_id = $post_query->post->ID;
$post_type = $post_query->post->post_type;
//Get the Forum ID based on Post Type (Reply, Topic, Forum)
$forum_id = private_groups_get_forum_id_from_post_id($post_id, $post_type);
//Check if User has permissions to view this Post ID
//by calling the function that checks if the user can view this forum, and hence this post
if (private_groups_can_user_view_post_id($forum_id)) {
//User can view this post - add it to the allowed array
array_push($allowed_posts, $post_id);
}
endwhile;
//Return the list
return $allowed_posts;
}
/*
* Returns the bbPress Forum ID from given Post ID and Post Type
*
* returns: bbPRess Forum ID
*/
function private_groups_get_forum_id_from_post_id($post_id, $post_type) {
$forum_id = 0;
// Check post type
switch ($post_type) {
// Forum
case bbp_get_forum_post_type() :
$forum_id = bbp_get_forum_id($post_id);
break;
// Topic
case bbp_get_topic_post_type() :
$forum_id = bbp_get_topic_forum_id($post_id);
break;
// Reply
case bbp_get_reply_post_type() :
$forum_id = bbp_get_reply_forum_id($post_id);
break;
}
return $forum_id;
}
//enforce permission to ensure users only see permitted posts
function private_group_enforce_permissions() {
global $rpg_settingsf ;
// Bail if not viewing a bbPress item
if (!is_bbpress())
return;
// Bail if not viewing a single item or if user has caps
if (!is_singular() || bbp_is_user_keymaster() || current_user_can('read_hidden_forums'))
return;
if (!private_groups_check_can_user_view_post()) {
if (!is_user_logged_in()) {
if($rpg_settingsf['redirect_page2']) {
$link=$rpg_settingsf['redirect_page2'] ;
header( "Location: $link" );
}
else {
auth_redirect();
}
}
else {
if($rpg_settingsf['redirect_page1']) {
$link=$rpg_settingsf['redirect_page1'] ;
header( "Location: $link" );
}
else {
bbp_set_404();
}
}
}
}
//removes 'private' and protected prefix for forums
function pg_remove_private_title($title) {
global $rpg_settingsg ;
if( $rpg_settingsg['activate_remove_private_prefix']) {
return '%s';
}
else {
Return $title ;
}
}
function pg_remove_protected_title($title) {
global $rpg_settingsg ;
if( $rpg_settingsg['activate_remove_private_prefix']) {
return '%s';
}
else {
Return $title ;
}
}
function custom_freshness_link( $forum_id = 0 ) {
global $rpg_settingsf ;
$forum_id = bbp_get_forum_id( $forum_id );
$active_id = bbp_get_forum_last_active_id( $forum_id );
$link_url = $title = '';
$forum_title= bbp_get_forum_title ($forum_id) ;
if ( empty( $active_id ) )
$active_id = bbp_get_forum_last_reply_id( $forum_id );
if ( empty( $active_id ) )
$active_id = bbp_get_forum_last_topic_id( $forum_id );
if ( bbp_is_topic( $active_id ) ) {
$link_url = bbp_get_forum_last_topic_permalink( $forum_id );
//$link_id added to get post_id and type to allow for later check
$link_id= bbp_get_forum_last_topic_id ($forum_id) ;
$check="topic" ;
$title = bbp_get_forum_last_topic_title( $forum_id );
$forum_id_last_active = bbp_get_topic_forum_id($active_id);
} elseif ( bbp_is_reply( $active_id ) ) {
$link_url = bbp_get_forum_last_reply_url( $forum_id );
//$link-id added to get post-id and type to allow for later check
$link_id = bbp_get_forum_last_reply_id ( $forum_id );
$check="reply" ;
$title = bbp_get_forum_last_reply_title( $forum_id );
$forum_id_last_active = bbp_get_reply_forum_id($active_id);
}
$time_since = bbp_get_forum_last_active_time( $forum_id );
if ( !empty( $time_since ) && !empty( $link_url ) ) {
//ADDITIONAL CODE to original bbp_get_forum_freshness_link function
//test if user can see this post, and post link if they can
$user_id = wp_get_current_user()->ID;
//get the forum id for the post - that's the forum ID against which we check to see if it is in a group - no idea what forum group the stuff above produces, suspect post id of when last changed.
$forum_id_check = private_groups_get_forum_id_from_post_id($link_id, $check);
//now we can check if the user can view this, and if it's not private
if (private_groups_can_user_view_post($user_id,$forum_id_check) && !bbp_is_forum_private($forum_id_last_active)) {
$anchor = '' .esc_html( $time_since ) .'';
}
//if it is private, then check user can view
elseif (private_groups_can_user_view_post($user_id,$forum_id_check) && bbp_is_forum_private($forum_id_last_active) && current_user_can( 'read_private_forums' ) ) {
$anchor = '' .esc_html( $time_since ) .'';
}
//else user cannot see post so...
else {
//set up which link to send them to
if (!is_user_logged_in()) {
if($rpg_settingsf['redirect_page2']) {
$link=$rpg_settingsf['redirect_page2'] ;
}
else {
$link="/wp-login";
}
}
else {
if($rpg_settingsf['redirect_page1']) {
$link=$rpg_settingsf['redirect_page1'] ;
}
else {
$link='/404';
}
}
//now see if there is a freshness message
if ($rpg_settingsf['set_freshness_message']) {
$title=$rpg_settingsf['freshness_message'] ;
//and set up anchor
$anchor = '' .$title. '';
}
else{
$anchor = '' .esc_html( $time_since ) .'';
}
}
}
else
$anchor = esc_html__( 'No Topics', 'bbpress' );
return $anchor;
}
function pg_get_author_link( ) {
$user_id2 = wp_get_current_user()->ID;
// Parse arguments against default values
$r = bbp_parse_args( $args, array(
'post_id' => $post_id,
'link_title' => '',
'type' => 'both',
'size' => 14
), 'pg_get_author_link' );
//confirmed topic
if( bbp_is_topic( $post_id) ) {
$topic=bbp_get_topic_post_type() ;
$forum_id_check = private_groups_get_forum_id_from_post_id($post_id, $topic);
//now we can check if the user can view this
if (!private_groups_can_user_view_post($user_id2,$forum_id_check))
return;
return bbp_get_topic_author_link( $r );
// Confirmed reply
} elseif ( bbp_is_reply( $post_id ) ) {
$reply=bbp_get_reply_post_type() ;
$forum_id_check = private_groups_get_forum_id_from_post_id($post_id, $reply);
//now we can check if the user can view this
if (!private_groups_can_user_view_post($user_id2,$forum_id_check))
return ;
return bbp_get_reply_author_link( $r );
}
// Neither a reply nor a topic, so could be a revision
//if it isn't a topic or reply, not sure so better to just not display the author in this case
//could be revised to look up the post_parent of this post and then churn that round the code above if required return ;
return ;
}
add_filter('bbp_get_author_link', 'pg_get_author_link' ) ;
?>