forum_id] = $za_vi_settings['fhr'][$id]; else unset($za_vi_settings['fhr'][$f->forum_id]); if(isset($za_vi_settings['fhu'][$id])) $za_vi_settings['fhu'][$f->forum_id] = $za_vi_settings['fhu'][$id]; else unset($za_vi_settings['fhu'][$f->forum_id]); if(isset($za_vi_settings['fehu'][$id])) $za_vi_settings['fehu'][$f->forum_id] = $za_vi_settings['fehu'][$id]; else unset($za_vi_settings['fehu'][$f->forum_id]); } } } function za_vi_topic_has_visibility($id) { global $za_vi_settings; return !empty($za_vi_settings['thr'][$id]) || !empty($za_vi_settings['thu'][$id]) || !empty($za_vi_settings['tehu'][$id]) || !empty($za_vi_settings['tlr'][$id]) || !empty($za_vi_settings['tlu'][$id]) || !empty($za_vi_settings['tehu'][$id]); } function za_vi_reset_topic($id) { global $za_vi_settings; unset($za_vi_settings['thr'][$id]); unset($za_vi_settings['thu'][$id]); unset($za_vi_settings['tehu'][$id]); unset($za_vi_settings['tlr'][$id]); unset($za_vi_settings['tlu'][$id]); unset($za_vi_settings['telu'][$id]); } function za_vi_admin_get_request($variables, $request) { $variables['plugin'] = 'za_vi_configuration_page'; $temp = bb_get_uri('bb-admin/admin-base.php', $variables, BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN); return esc_url(bb_nonce_url($temp, $request)); } function za_vi_explode_user_list($list) { $ret = array(); if(isset($list) && is_string($list)) { $temp = explode(',', $list); foreach($temp as $i => $v) { $v = trim($v); $user = bb_get_user_by_nicename($v); if($user) $ret[] = $user->ID; } } return $ret; } function za_vi_var($list) { global $za_vi_settings; foreach($list as $i) if(!isset($za_vi_settings[$i])) $za_vi_settings[$i] = array(); } function za_vi_initialize() { bb_load_plugin_textdomain(ZA_VI_ID, dirname(__FILE__) . '/languages'); global $za_vi_settings, $za_vi_hidden_forums_list, $za_vi_hidden_topics_list, $za_vi_locked_forums_count, $za_vi_hidden_topics_count, $za_vi_current_user_role, $bb_views, $bb_current_user, $forum_id, $page; $za_vi_settings = bb_get_option('za_visibility'); if(empty($za_vi_settings)) $za_vi_settings = array(); // super users and roles za_vi_var(array('su', 'sr', 'fhr', 'fhu', 'fehu', 'flr', 'flu', 'felu', 'thr', 'thu', 'tehu', 'tlr', 'tlu', 'telu', 'fp', 'tp', 'flm', 'tlm', 'tlm')); $id = (!empty($bb_current_user)) ? intval($bb_current_user->ID) : 0; $za_vi_hidden_forums_list = array(); $za_vi_hidden_topics_list = array(); $za_vi_hidden_topics_count = array(); // check blocked if($id == 0) $za_vi_current_user_role = 'inactive'; else { if(!isset($bb_current_user->capabilities) || !is_array($bb_current_user->capabilities) || empty($bb_current_user->capabilities)) { $za_vi_current_user_role = 'inactive'; } else { $caps = array_keys($bb_current_user->capabilities); $za_vi_current_user_role = $caps[0]; } } // Do not filter for super users if(!in_array($id, $za_vi_settings['su'])) { // Do not filter for super roles if(!in_array($za_vi_current_user_role, $za_vi_settings['sr'])) { foreach($za_vi_settings['fhr'] as $key => $value) // forum hide role if(in_array($za_vi_current_user_role, $value)) $za_vi_hidden_forums_list[] = $key; if($id != 0 && !empty($za_vi_settings['fhu'])) // forum hide user { foreach($za_vi_settings['fhu'] as $key => $value) if(in_array($id, $value)) $za_vi_hidden_forums_list[] = $key; $za_vi_hidden_forums_list = array_unique($za_vi_hidden_forums_list); } $ehu_count = count($za_vi_settings['fehu']); $i = 0; if($id != 0 && $ehu_count > 0 && !empty($za_vi_hidden_forums_list)) // forum hide user exception { foreach($za_vi_hidden_forums_list as $key => $value) { if(isset($za_vi_settings['fehu'][$value]) && in_array($id, $za_vi_settings['fehu'][$value])) { unset($za_vi_hidden_forums_list[$key]); if(++$i == $ehu_count) break; } } } foreach($za_vi_settings['thr'] as $key => $value) // topic hide role if(in_array($za_vi_current_user_role, $value)) $za_vi_hidden_topics_list[] = $key; if($id != 0 && !empty($za_vi_settings['thu'])) // topic hide user { foreach($za_vi_settings['thu'] as $key => $value) if(in_array($id, $value)) $za_vi_hidden_topics_list[] = $key; $za_vi_hidden_topics_list = array_unique($za_vi_hidden_topics_list); } $ehu_count = count($za_vi_settings['tehu']); $i = 0; if($id != 0 && $ehu_count > 0 && !empty($za_vi_hidden_topics_list)) // topic hide user exception { foreach($za_vi_hidden_topics_list as $key => $value) { if(isset($za_vi_settings['tehu'][$value]) && in_array($id, $za_vi_settings['tehu'][$value])) { unset($za_vi_hidden_topics_list[$key]); if(++$i == $ehu_count) break; } } } $temp = array(); // count hidden topics (per forum) if(!empty($za_vi_hidden_topics_list)) { foreach($za_vi_hidden_topics_list as $v) { $topic = get_topic($v); if($topic) { $forum = $topic->forum_id; if(!isset($za_vi_hidden_topics_count[$forum])) $za_vi_hidden_topics_count[$forum] = 1; else ++$za_vi_hidden_topics_count[$forum]; } } add_filter('forum_topics', 'za_vi_forum_count', 10, 2); add_filter('forum_posts', 'za_vi_forum_count', 10, 2); } // count locked forums foreach($za_vi_settings['flr'] as $key => $value) if(in_array($za_vi_current_user_role, $value)) $temp[] = $key; if($id != 0 && !empty($za_vi_settings['flu'])) { foreach($za_vi_settings['fhu'] as $key => $value) if(in_array($id, $value)) $temp[] = $key; $za_vi_locked_forums_count = count(array_unique($temp)); } if(!empty($za_vi_settings['flr']) || !empty($za_vi_settings['flu']) || !empty($za_vi_settings['tlr']) || !empty($za_vi_settings['tlu'])) { add_action('bb_forum.php', 'za_vi_template_hook'); // site.com/forum/forum-name add_action('bb_topic.php', 'za_vi_template_hook'); // site.com/topic/topic-name add_action('bb_front-page.php', 'za_vi_template_hook'); // site.com/ } } } if(!empty($za_vi_hidden_forums_list) || !empty($za_vi_hidden_topics_list)) { if(is_forum()) { $page = bb_get_uri_page(); bb_repermalink(); if(!empty($forum_id) && isset($za_vi_hidden_forums_list[$forum_id])) { nocache_headers(); bb_safe_redirect(bb_get_option('uri')); exit; } } //$za_vi_hidden_forums_count = count($za_vi_hidden_forums_list); //$za_vi_hidden_topics_count = count($za_vi_hidden_topics_list); $za_vi_hidden_forums_list = implode(',', $za_vi_hidden_forums_list); $za_vi_hidden_topics_list = implode(',', $za_vi_hidden_topics_list); $filters = array('get_thread','get_thread_post_ids', 'get_latest_posts','get_latest_topics','get_latest_forum_posts', 'get_recent_user_replies','get_recent_user_threads','get_user_favorites', 'get_sticky_topics','get_tagged_topics','get_tagged_topic_posts', 'bb_recent_search','bb_relevant_search','bb_get_first_post','bb_is_first' ); // bb_includes/functions.bb-forums.php:143 // erroneous filter if(!is_topic()) { add_filter('get_forum_where','za_vi_simple_filter_fixed', 20); add_filter('get_forums_where','za_vi_simple_filter', 20); } else add_filter('get_topic_where','za_vi_filter', 20); foreach($filters as $filter) add_filter($filter.'_where','za_vi_filter', 20); foreach($bb_views as $key=>$value) add_action('bb_view_' . $key . '_where', 'za_vi_filter'); add_filter('sort_tag_heat_map', 'za_vi_filter_tags', 1); } if($bb_current_user && $bb_current_user->has_cap('administrate')) { if(!empty($za_vi_settings['fp'])) add_filter('get_forum_name', 'za_vi_label_forum', 11, 2); if(!empty($za_vi_settings['tp'])) add_filter('topic_title', 'za_vi_label_topic', 11, 2); //add_action('pre_edit_form', 'za_vi_label_topic_stop'); add_filter('bb_topic_admin', 'za_vi_topic_admin', 10, 1); add_action('bb_admin_menu_generator', 'za_vi_configuration_page_add'); add_action('za_vi_configuration_page_pre_head', 'za_vi_configuration_page_process'); } } add_action('bb_init', 'za_vi_initialize'); function za_vi_filter($where = '') { global $za_vi_hidden_forums_list, $za_vi_hidden_topics_list; $prefix = ''; if($za_vi_hidden_forums_list == '' && $za_vi_hidden_topics_list == '') return $where; if(strpos($where,' t.')) $prefix = 't.'; elseif(strpos($where, ' p.')) $prefix = 'p.'; $ret = $where . (empty($where) ? ' WHERE ' : ' AND '); if($za_vi_hidden_forums_list != '') $ret .= "{$prefix}forum_id NOT IN ($za_vi_hidden_forums_list) "; if($za_vi_hidden_topics_list != '') { if($za_vi_hidden_forums_list != '') $ret .= 'AND '; $ret .= "{$prefix}topic_id NOT IN ($za_vi_hidden_topics_list) "; } return $ret; } function za_vi_simple_filter($where='') { global $za_vi_hidden_forums_list; $prefix = ''; // CHECK if($za_vi_hidden_forums_list == '') return $where; if(strpos($where,' t.')) $prefix = 't.'; elseif(strpos($where," p.")) $prefix = 'p.'; return $where . (empty($where) ? ' WHERE ' : ' AND ') . "{$prefix}forum_id NOT IN ($za_vi_hidden_forums_list)"; } function za_vi_simple_filter_fixed($where='') { global $za_vi_hidden_forums_list; //if(strpos($where,' t.')) $prefix = 't.'; //elseif(strpos($where," p.")) $prefix = 'p.'; if($za_vi_hidden_forums_list == '') return $where; //return "$where AND {$prefix}forum_id NOT IN ($za_vi_hidden_forums_list)";// AND {$prefix}topic_id NOT IN ($za_vi_hidden_topics_list) "; return "AND forum_id NOT IN ($za_vi_hidden_forums_list)"; } function za_vi_get_label($label, $forum_id, $topic_id) { global $za_vi_settings; if($label == '' || ($forum_id == '' && $topic_id == '')) return ''; if(stripos($label, '%status%') !== FALSE) { $replace = ''; if($forum_id != '') { if(!empty($za_vi_settings['fhr'][$forum_id])) $replace .= '+HR'; if(!empty($za_vi_settings['fhu'][$forum_id])) $replace .= '+HU'; if(!empty($za_vi_settings['fehu'][$forum_id])) $replace .= '-HU'; if(!empty($za_vi_settings['flr'][$forum_id])) $replace .= '+LR'; if(!empty($za_vi_settings['flu'][$forum_id])) $replace .= '+LU'; if(!empty($za_vi_settings['felu'][$forum_id])) $replace .= '-LU'; } if($topic_id != '') { if(!empty($za_vi_settings['thr'][$topic_id])) $replace .= '+gr'; if(!empty($za_vi_settings['thu'][$topic_id])) $replace .= '+hu'; if(!empty($za_vi_settings['tehu'][$topic_id])) $replace .= '-hu'; if(!empty($za_vi_settings['tlr'][$topic_id])) $replace .= '+lr'; if(!empty($za_vi_settings['tlu'][$topic_id])) $replace .= '+lu'; if(!empty($za_vi_settings['telu'][$topic_id])) $replace .= '-lu'; } if($replace != '') $label = str_ireplace('%status%', $replace, $label); } /*$hr = $topic_id != '' ? $za_vi_settings['thr'][$topic_id] : $za_vi_settings['fhr'][$forum_id]; $lr = $topic_id != '' ? $za_vi_settings['tlr'][$topic_id] : $za_vi_settings['flr'][$forum_id]; if(stripos($label, '%hide_roles%') !== FALSE) { $label = str_ireplace('%hide_roles%', !empty($hr) ? implode(',', $hr) : '', $label); } if(stripos($label, '%lock_roles%') !== FALSE) { $label = str_ireplace('%lock_roles%', !empty($lr) ? implode(',', $lr) : '', $label); }*/ if(!empty($label)) $label .= ' '; return $label; } function za_vi_label_forum($title, $id) { global $za_vi_settings; if(!isset($_GET['action']) && (za_vi_forum_has_visibility($id))) return za_vi_get_label($za_vi_settings['fp'], $id, '') . $title; else return $title; } function za_vi_label_topic($title, $id) { global $topic, $za_vi_settings; if($id == $topic->topic_id) $forum_id = $topic->forum_id; else { $get_topic = get_topic($id); $forum_id = $get_topic->forum_id; } if(za_vi_topic_has_visibility($id)) return za_vi_get_label($za_vi_settings['tp'], $forum_id, $id) . $title; else return $title; } function za_vi_label_topic_stop() { remove_filter('topic_title', 'za_vi_label_topic', 11); } function za_vi_hide_link($args = '') { global $za_vi_settings; $defaults = array('id' => 0, 'before' => '[', 'after' => ']'); extract(wp_parse_args($args, $defaults), EXTR_SKIP); $id = (int)$id; $topic = get_topic(get_topic_id($id)); if(!$topic || !bb_current_user_can('stick_topic', $topic->topic_id)) return; $uri = za_vi_admin_get_request(array('id' => $topic->topic_id), 'za-vi-update'); /* Translators: `Status' of a forum topic */ $ret = __('Modify Hide/Lock Status', ZA_VI_ID); return "$before$ret$after"; } function za_vi_topic_admin($parts) { $parts['hide'] = za_vi_hide_link(); return $parts; } function za_vi_user_has_caps($allcaps, $caps, $args) { global $za_vi_settings, $za_vi_current_user_role, $za_vi_locked_forums_count; $message = ''; if($caps[1] == 'write_posts' && $args[0] == 'write_post') { $denied = 'write_posts'; $rl = $za_vi_settings['tlr'][$args[2]]; $ul = $za_vi_settings['tlu'][$args[2]]; $uel = $za_vi_settings['telu'][$args[2]]; if(!empty($za_vi_settings['tlm'])) $message = $za_vi_settings['tlm']; } elseif($caps[1] == 'write_topics' && $args[0] == 'write_topic') { $denied = 'write_topics'; if($args[2] == 0) { if($za_vi_locked_forums_count == get_total_forums()) $no_forums = true; } else { $rl = $za_vi_settings['flr'][$args[2]]; $ul = $za_vi_settings['flu'][$args[2]]; $uel = $za_vi_settings['felu'][$args[2]]; if(!empty($za_vi_settings['flm']) && !(bb_is_tag() || bb_is_front())) $message = $za_vi_settings['flm']; } } elseif($caps[1] == 'edit_tags' && $args[0] == 'edit_tag_by_on') { $denied = 'edit_tags'; $rl = $za_vi_settings['tlr'][$args[3]]; $ul = $za_vi_settings['tlu'][$args[3]]; $uel = $za_vi_settings['telu'][$args[2]]; if(!empty($za_vi_settings['tlm'])) $message = $za_vi_settings['tlm']; } if(isset($denied) && (isset($no_forums) || (isset($rl) && in_array($za_vi_current_user_role, $rl)) || (isset($uel) && !in_array($args[1], $uel)) || (isset($ul) && in_array($args[1], $ul)))) { if($message != '') echo $message; $allcaps[$denied] = 0; } return $allcaps; } function za_vi_template_hook($args) { add_filter('user_has_cap', 'za_vi_user_has_caps', 10, 3); } function za_vi_filter_tags(&$tags) { global $bbdb, $za_vi_hidden_forums_list, $za_vi_hidden_topics_list; $min = min($tags) - 1; $query = "SELECT name,count FROM $bbdb->terms AS t INNER JOIN $bbdb->term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN $bbdb->term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id INNER JOIN $bbdb->topics as tp ON object_id=topic_id WHERE tt.taxonomy='bb_topic_tag' AND tt.count >= $min AND ("; $have_t = $za_vi_hidden_topics_list != ''; if($za_vi_hidden_forums_list != '') { $query .= "forum_id IN($za_vi_hidden_forums_list)"; if($have_t) $query .= ' OR '; } if($have_t) $query .= " topic_id IN($za_vi_hidden_topics_list)"; $query .= ')'; $results = $bbdb->get_results($query); if(empty($results) || !is_array($results)) return; foreach($results as $result) { if(isset($tags[$result->name])) { $tags[$result->name] -= $result->count; if($tags[$result->name] < 1) unset($tags[$result->name]); } } unset($results); } function za_vi_configuration_page() { global $za_vi_settings, $wp_roles; $roles = $wp_roles->get_names(); ?>

' . $forum->forum_name . ''); $subforums = bb_get_forums($id); if($subforums !== FALSE) { $fc = count($subforums); $if = ''; if($fc == 1) { $el = reset($subforums); $if = '$el->forum_name"; } else { $i = 0; foreach($subforums as $f) { $if .= '$f->forum_name"; if($i++ != $fc - 1) $if .= ', '; }// print_r($subforums); } echo '

'; $n = _n('This forum has one subforum: %s. Its hide rules will be reset.', 'This forum has %u subforums: %s. Their hide rules will be reset.', $fc); if($fc == 1) printf($n, $if); else printf($n, $fc, $if); } } else { /* Translators: The second `%s' is replaced by a username */ printf(__('Modify the visibility and lock status of the topic %s started by %s on forum %s.', ZA_VI_ID), '' . get_topic_title($id) . '', '' . $topic->topic_poster_name . '', '' . bb_get_forum(get_forum_id($topic->forum_id))->forum_name . ''); } echo "

\n"; if(!$is_forum) { $froles = $za_vi_settings['fhr'][$topic->forum_id]; if(isset($froles)) { echo "\t\t

", __('This topic is hidden by parent forum.', ZA_VI_ID), "

\n"; } } ?>
$v) { ?> \n"; } ?>

user_login; } } bb_option_form_element('za_vi_hidden_users', array( 'title' => __('Users Hide Rules', ZA_VI_ID), 'value' => empty($hidden_users_names) ? '' : implode(', ', $hidden_users_names), 'note' => $is_forum ? __('Specify the users for whom this forum is hidden. You must input a comma separated list of usernames.', ZA_VI_ID) : __('Specify the users for whom this topic is hidden. You must input a comma separated list of usernames.', ZA_VI_ID))); $hu = $is_forum ? $za_vi_settings['fehu'][$id] : $za_vi_settings['tehu'][$id]; $hidden_users_names = array(); if(isset($hu)) { foreach($hu as $v) { $user = bb_get_user($v); if($user) $hidden_users_names[] = $user->user_login; } } bb_option_form_element('za_vi_ex_hidden_users', array( 'title' => __('Users Hide Rules Exceptions', ZA_VI_ID), 'value' => empty($hidden_users_names) ? '' : implode(', ', $hidden_users_names), 'note' => __('Specify the users that are not affected by above hide rules. You must input a comma separated list of usernames.', ZA_VI_ID))); ?>
$v) { ?> \n"; } ?>

user_login; } } bb_option_form_element('za_vi_locked_users', array( /* Translators: The rules that prevent users to modify locked resources */ 'title' => __('Users Lock Rules', ZA_VI_ID), 'value' => empty($locked_users_names) ? '' : implode(', ', $locked_users_names), 'note' => $is_forum ? __('Specify the users for whom this forum is locked. You must input a comma separated list of usernames.', ZA_VI_ID) : __('Specify the users for whom this topic is locked. You must input a comma separated list of usernames.', ZA_VI_ID))); $bu = $is_forum ? $za_vi_settings['felu'][$id] : $za_vi_settings['telu'][$id]; $locked_users_names = array(); if(isset($bu)) { foreach($bu as $v) { $user = bb_get_user($v); if($user) $locked_users_names[] = $user->user_login; } } bb_option_form_element('za_vi_ex_locked_users', array( /* Translators: The rules that prevent users to modify locked resources */ 'title' => __('Users Lock Rules Exceptions', ZA_VI_ID), 'value' => empty($locked_users_names) ? '' : implode(', ', $locked_users_names), 'note' => __('Specify the users thare are not affected by above lock rules. You must input a comma separated list of usernames.', ZA_VI_ID))); ?>

forum_id) . "\" title=\"$vas\">$forum->forum_name"; $fs = '$ms"; $tr_class = ' class="alt"'; $fr = ''; if(in_array($forum->forum_id, $hforums)) { $fr = ' | $rs"; $tr_class = ''; } echo "\n"; } ?>
$forum->forum_id$fl$forum->forum_desc$fs$fr

', __('This is a list of those topics that are affected by hide/lock own rules. You can handle the visibility of a topic through the link that you can find in administration menu at the bottom of its page.', ZA_VI_ID), '

'; ?> topic_id) . "\" title=\"$vas\">$topic->topic_title"; $ts = '$ms"; $tr = '$rs"; echo "\n "; } } else echo '

', __('There are no hidden/locked topics. You can handle the visibility of a topic through the administration menu at the bottom of the topic page.', ZA_VI_ID), '

'; ?>

$topic->topic_id$tl$topic->topic_poster_name$ts | $tr

", __('Super users and users that have super roles are not affected by hide/lock rules.', ZA_VI_ID), "

\n"; $super_users_names = array(); foreach($za_vi_settings['su'] as $v) { $user = bb_get_user($v); if($user) $super_users_names[] = $user->user_login; } bb_option_form_element('za_vi_super_users', array( 'title' => __('Super Users', ZA_VI_ID), 'value' => implode(', ', $super_users_names), 'note' => __('Specify the super users. You must input a comma separated list of usernames.', ZA_VI_ID))); ?>
$v) { ?> \n"; } ?>

", __('You can specify a prefix that will be appended to hidden/locked forums/topics titles. %status% will be substituted by a brief string that synthetize the presence of visibility rules ("+hr" = hide rules, "+hu" = hide users, "-hu" = hide users exceptions, "+lr" = lock rules, "+lu" = lock users, "-lu" = lock users exceptions) and parent forum rules, if any, (same syntax but with capital letters.)', ZA_VI_ID), "

\n"; bb_option_form_element('za_vi_forum_prefix', array( 'title' => /* Translators: the string used as a prefix of the title of those forums that are hidden/locked */ __('Forum Name Prefix', ZA_VI_ID), 'value' => $za_vi_settings['fp'])); bb_option_form_element('za_vi_topic_prefix', array( 'title' => /* Translators: the string used as a prefix of the title of those posts that are hidden/locked */ __('Topic Title Prefix', ZA_VI_ID), 'value' => $za_vi_settings['tp'])); $action_value = 'update-za-vi-settings'; ?>
", __('You can specify three replacement messages that will be shown in place of the "new topic", "new post" and "add tag" forms.', ZA_VI_ID), "

\n"; bb_option_form_element('za_vi_forum_message', array( 'title' => __('Topic', ZA_VI_ID), 'value' => $za_vi_settings['flm'], 'note' => __('Replacement message for "New Topic" form', ZA_VI_ID))); bb_option_form_element('za_vi_topic_message', array( 'title' => __('Post', ZA_VI_ID), 'value' => $za_vi_settings['tlm'], 'note' => __('Replacement message for "New Post" form', ZA_VI_ID))); bb_option_form_element('za_vi_tag_message', array( 'title' => __('Tag', ZA_VI_ID), 'value' => $za_vi_settings['tlm'], 'note' => __('Replacement message for "Add Tag" form', ZA_VI_ID))); echo "\t
"; } // id ?>
"; ?>
get_names(); $changed = FALSE; if('post' == strtolower($_SERVER['REQUEST_METHOD'])) { bb_check_admin_referer('options-za-vi-update'); $goback = remove_query_arg(array('za-visibility-updated', 'za-zero-forums'), wp_get_referer()); if($_POST['action'] == 'update-za-vi-settings') { if(isset($_POST['za_vi_forum_prefix'])) { $value = stripslashes_deep(trim($_POST['za_vi_forum_prefix'])); $za_vi_settings['fp'] = $value; } if(isset($_POST['za_vi_topic_prefix'])) { $value = stripslashes_deep(trim($_POST['za_vi_topic_prefix'])); $za_vi_settings['tp'] = $value; } if(isset($_POST['za_vi_forum_message'])) { $value = stripslashes_deep(trim($_POST['za_vi_forum_message'])); $za_vi_settings['flm'] = $value; } if(isset($_POST['za_vi_topic_message'])) { $value = stripslashes_deep(trim($_POST['za_vi_topic_message'])); $za_vi_settings['tlm'] = $value; } if(isset($_POST['za_vi_tag_message'])) { $value = stripslashes_deep(trim($_POST['za_vi_tag_message'])); $za_vi_settings['tlm'] = $value; } $new_super_roles = array(); foreach($roles as $i => $v) { if(isset($_POST["za_vi_super_role_$i"]) && $_POST["za_vi_super_role_$i"] == 'on') $new_super_roles[] = $i; } $za_vi_settings['sr'] = $new_super_roles; $za_vi_settings['su'] = za_vi_explode_user_list($_POST['za_vi_super_users']); bb_update_option('za_visibility', $za_vi_settings); $goback = add_query_arg('za-visibility-updated', 'true', $goback); bb_safe_redirect($goback); exit; } else { $is_forum = $_POST['action'] == 'update-za-vi-forum-settings'; if(isset($_POST['entity_id'])) $id = absint($_POST['entity_id']); if(!isset($id) || !is_numeric($id)) { wp_redirect(bb_get_uri(null, null, BB_URI_CONTEXT_HEADER)); exit; } if($is_forum) { $forum = get_forum($id); if(!$forum) bb_die(__('There is a problem with that forum, pardner.', ZA_VI_ID)); } else { $topic = get_topic($id); if(!$topic) bb_die(__('There is a problem with that topic, pardner.', ZA_VI_ID)); } $new_hide_roles = array(); $new_lock_roles = array(); foreach($roles as $i => $v) { if($_POST["za_vi_hide_$i"] == 'on') $new_hide_roles[] = $i; if($_POST["za_vi_lock_$i"] == 'on') $new_lock_roles[] = $i; } // Save new hide roles if(!empty($new_hide_roles)) { $za_vi_settings[$is_forum ? 'fhr' : 'thr'][$id] = $new_hide_roles; } else unset($za_vi_settings[$is_forum ? 'fhr' : 'thr'][$id]); // Save new hide users $list1 = za_vi_explode_user_list($_POST['za_vi_hidden_users']); if(!empty($list1)) $za_vi_settings[$is_forum ? 'fhu' : 'thu'][$id] = $list1; else unset($za_vi_settings[$is_forum ? 'fhu' : 'thu'][$id]); // Save new hide exception users $list2 = za_vi_explode_user_list($_POST['za_vi_ex_hidden_users']); if(!empty($list2)) $za_vi_settings[$is_forum ? 'fehu' : 'tehu'][$id] = $list2; else unset($za_vi_settings[$is_forum ? 'fehu' : 'tehu'][$id]); if($is_forum) { za_vi_reset_subforums($id); //$subforums = bb_get_forums($id); /*if($subforums !== FALSE) { foreach($subforums as $f) { if(isset($za_vi_settings['fhr'][$id])) $za_vi_settings['fhr'][$f->forum_id] = $za_vi_settings['fhr'][$id]; else unset($za_vi_settings['fhr'][$f->forum_id]); if(isset($za_vi_settings['fhu'][$id])) $za_vi_settings['fhu'][$f->forum_id] = $za_vi_settings['fhu'][$id]; else unset($za_vi_settings['fhu'][$f->forum_id]); if(isset($za_vi_settings['fehu'][$id])) $za_vi_settings['fehu'][$f->forum_id] = $za_vi_settings['fehu'][$id]; else unset($za_vi_settings['fehu'][$f->forum_id]); } }*/ } // Save new lock roles if(!empty($new_lock_roles)) { $za_vi_settings[$is_forum ? 'flr' : 'tlr'][$id] = $new_lock_roles; } else unset($za_vi_settings[$is_forum ? 'flr' : 'tlr'][$id]); // Save new lock users $list = za_vi_explode_user_list($_POST['za_vi_locked_users']); if(!empty($list)) $za_vi_settings[$is_forum ? 'flu' : 'tlu'][$id] = $list; else unset($za_vi_settings[$is_forum ? 'flu' : 'tlu'][$id]); // Save new lock exception users $list = za_vi_explode_user_list($_POST['za_vi_ex_locked_users']); if(!empty($list)) $za_vi_settings[$is_forum ? 'felu' : 'telu'][$id] = $list; else unset($za_vi_settings[$is_forum ? 'felu' : 'telu'][$id]); if($is_forum) { if(!za_vi_forum_has_visibility($id)) { za_vi_reset_forum($id); $goback = add_query_arg('za-forum-reset', 'true', $goback); } else { // zero forums aren't allowed if(get_total_forums() == 1 && (!empty($za_vi_settings['fhu'][$id]) || !empty($za_vi_settings['fhr'][$id]))) { unset($za_vi_settings['fhu'][$id]); unset($za_vi_settings['fhr'][$id]); $goback = add_query_arg('za-zero-forums', 'true', $goback); } else $goback = add_query_arg('za-visibility-updated', 'true', $goback); } } else { if(!za_vi_topic_has_visibility($id)) { za_vi_reset_topic($id); $goback = add_query_arg('za-topic-reset', 'true', $goback); } else $goback = add_query_arg('za-visibility-updated', 'true', $goback); } bb_update_option('za_visibility', $za_vi_settings); bb_safe_redirect($goback); exit; } } if(!empty($_GET['za-visibility-updated'])) bb_admin_notice('' . __('Settings saved.', ZA_VI_ID) . ''); elseif(!empty($_GET['za-zero-forums'])) bb_admin_notice(__('You have only one forum and you can\'t hide it. bbPress assumes that there is at least one forum and it spawns an error when there are no forums to display. In order to avoid this problem the hide rules that you have specified have not been registered.', ZA_VI_ID) . '', 'error'); elseif(!empty($_GET['za-forum-reset'])) bb_admin_notice('' . __('Forum hide/lock status erased.', ZA_VI_ID) . ''); elseif(!empty($_GET['za-topic-reset'])) bb_admin_notice('' . __('Topic hide/lock status erased.', ZA_VI_ID) . ''); elseif(isset($_GET['id']) || isset($_GET['fid'])) { bb_check_admin_referer('za-vi-update'); $goback = remove_query_arg(array('za-visibility-updated', 'za-forum-reset', 'za-topic-reset', 'za-zero-forums', 'id', 'fid', 'action'), wp_get_referer()); global $bb_current_user; if(isset($_GET['id'])) $id = absint($_GET['id']); else $id = absint($_GET['fid']); if(!isset($id) || !is_numeric($id) || !isset($bb_current_user) || !$bb_current_user->has_cap('administrate')) { wp_redirect(bb_get_uri(null, null, BB_URI_CONTEXT_HEADER)); exit; } //bb_check_admin_referer('manage-topic_' . $id); $is_reset = (bool)(isset($_GET['action']) && strtolower($_GET['action']) == 'reset'); if(isset($_GET['id'])) { $topic = get_topic($id); if(!$topic) bb_die(__('There is a problem with that topic, pardner.', ZA_VI_ID)); if($is_reset) { za_vi_reset_topic($id); bb_update_option('za_visibility', $za_vi_settings); $goback = add_query_arg('za-topic-reset', 'true', $goback); bb_safe_redirect($goback); exit; } } else { $forum = get_forum($id); if(!$forum) bb_die(__('There is a problem with that forum, pardner.', ZA_VI_ID)); if($is_reset) { za_vi_reset_forum($id); bb_update_option('za_visibility', $za_vi_settings); $goback = add_query_arg('za-forum-reset', 'true', $goback); bb_safe_redirect($goback); exit; } } } global $bb_admin_body_class; $bb_admin_body_class = ' bb-admin-settings'; } ?>