Private Forums
path . 'bb-login.php';
if ($_SERVER['PHP_SELF'] != $login_page) {
$priv_forums = forum_access_get_option('forum_access_private_forums');
if ( !bb_current_user() && !empty($priv_forums)) {
add_action( 'bb_forum.php_pre_db', 'forum_access_forum_init' );
add_action( 'bb_topic.php_pre_db', 'forum_access_topic_init' );
add_action( 'bb_tag-single.php', 'forum_access_tag_single_init' );
if (bb_get_option('forum_access_private_forums_option') == 'SHOW_PRIVATE') {
add_filter( 'get_forum_name', 'forum_access_add_private_name_to_forums', 10,2);
add_filter( 'get_topic_title', 'forum_access_add_private_name_to_topics', 10,2);
} else {
add_action( 'bb_head', 'forum_access_head_init' );
add_filter( 'get_forums','forum_access_filter_forums');
}
$forum_access_failure_msg = forum_access_format_error(bb_get_option('forum_access_failure_msg'));
}
}
}
function forum_access_process_post() {
if(isset($_POST['submit'])) {
if ('priv_forum_update' == $_POST['action']) {
//Private Forums Update
$priv_forums = (isset($_POST['priv_forum'])) ? $_POST['priv_forum'] : array();
bb_update_option('forum_access_private_forums',$priv_forums);
//Error Message Update
$err_msg = $_POST['failure_msg'];
bb_update_option('forum_access_failure_msg',$err_msg);
//Privacy Option Update
bb_update_option('forum_access_private_forums_option',$_POST['priv_forum_option']);
if ('SHOW_PRIVATE'== bb_get_option('forum_access_private_forums_option')) {
$text = empty($_POST['priv_forum_private_text']) ? 'private' : $_POST['priv_forum_private_text'];
bb_update_option('forum_access_private_text',$text);
}
}
}
}
function forum_access_format_error($err_msg){
global $bb;
if(empty($err_msg)) $err_msg = "This %s requires access to private forum. \r\nPlease login to access it.";
$err_msg = trim($err_msg);
$err_msg = strip_tags ( $err_msg );
$order = array("\r\n", "\n", "\r");
$replace = '
';
$err_msg = str_replace($order, $replace, $err_msg);
$replace = 'login';
$err_msg = str_replace('login', $replace, $err_msg);
return $err_msg;
}
function forum_access_head_init() {
global $forum_access_failure_msg, $forums, $topics, $super_stickies, $stickies, $topic, $topic_id;
$topics = forum_access_filter_topics($topics);
$stickies = forum_access_filter_topics($stickies);
$super_stickies = forum_access_filter_topics($super_stickies);
}
function forum_access_forum_init($forum_id) {
global $forum_access_failure_msg;
$priv_forums = forum_access_get_option('forum_access_private_forums');
if(array_key_exists($forum_id,$priv_forums)) {
bb_die(__(sprintf($forum_access_failure_msg, 'forum')));
}
}
function forum_access_topic_init($topic_id) {
global $topic, $forum_access_failure_msg;
$priv_forums = forum_access_get_option('forum_access_private_forums');
if(array_key_exists($topic->forum_id,$priv_forums)) {
bb_die(__(sprintf($forum_access_failure_msg, 'topic')));
}
}
function forum_access_tag_single_init($tag_id) {
global $topics, $forum_access_failure_msg;
$topics = forum_access_filter_topics($topics);
if (empty($topics)) {
bb_die(__(sprintf($forum_access_failure_msg, 'tag')));
}
}
function forum_access_filter_forums($forums) {
$new_forums = array();
if ($forums) {
$priv_forums = forum_access_get_option('forum_access_private_forums');
foreach($forums as $forum) {
if(!array_key_exists($forum->forum_id,$priv_forums)) {
$new_forums[] = $forum;
} else {
//$new_forums[] = $forum;
}
}
return $new_forums ;
}
return $forums;
}
function forum_access_add_private_name_to_forums($text, $id) {
$priv_forums = forum_access_get_option('forum_access_private_forums');
if(array_key_exists($id,$priv_forums)) {
return '[' . bb_get_option('forum_access_private_text') . '] ' . $text;
} else {
return $text;
}
}
function forum_access_add_private_name_to_topics($text, $id) {
$topic = get_topic( $id );
$id = $topic->forum_id;
$priv_forums = forum_access_get_option('forum_access_private_forums');
if(array_key_exists($id,$priv_forums)) {
return '[' . bb_get_option('forum_access_private_text') . '] ' . $text;
} else {
return $text;
}
}
function forum_access_filter_topics($topics) {
$new_topics = array();
if ($topics) {
$priv_forums = forum_access_get_option('forum_access_private_forums');
foreach($topics as $topic) {
if(!array_key_exists($topic->forum_id,$priv_forums)) {
$new_topics[] = $topic;
}
}
return $new_topics ;
}
return $topics;
}
?>