is_role($role)) return false; if(bb_is_forum()) { global $forum; $id = $forum->forum_id; if(!empty($za_vi_settings['fhr'][$id]) && in_array($role, $za_vi_settings['fhr'][$id])) return true; $parent = get_forum_parent($id); return ($parent && !empty($za_vi_settings['fhr'][$parent])) ? in_array($role, $za_vi_settings['fhr'][$parent]) : false; } elseif(bb_is_topic()) { global $topic; $id = $topic->topic_id; $forum_id = $topic->forum_id; if(!empty($za_vi_settings['fhr'][$forum_id]) && in_array($role, $za_vi_settings['fhr'][$forum_id])) return true; return !empty($za_vi_settings['thr'][$id]) ? in_array($role, $za_vi_settings['thr'][$id]) : false; } elseif(bb_is_profile()) { global $user; $id = $user->ID; if(!empty($za_vi_settings['phr'][$id])) return in_array($role, $za_vi_settings['phr'][$id]); } else return false; return false; } // Public function function za_forum_is_hidden($id = 0, $role = '') { $id = get_forum_id($id); if($id == 0) return null; return za_vi_forum_has_visibility($id); } // Public function function za_topic_is_hidden($id = 0, $role = '') { $id = get_topic_id($id); if($id == 0) return null; return za_vi_topic_has_visibility($id); } // Public function function za_profile_is_hidden($id = 0, $role = '') { $id = bb_get_user_id($id); if($id == 0) return null; return za_vi_profile_has_visibility($id); } // Public function function za_forum_is_locked($id = 0) { $id = get_forum_id($id); return za_entity_check_visibility($id, 'f', 'l'); } // Public function function za_topic_is_locked($id = 0) { $id = get_topic_id($id); return za_entity_check_visibility($id, 't', 'l'); } // type = f, t, p // rule = h, l function za_entity_check_visibility($id, $entity_type, $rule_type = 'h') { global $za_vi_settings, $za_vi_current_user_role, $bb_current_user; $uid = (!empty($bb_current_user)) ? intval($bb_current_user->ID) : 0; if($entity_type != 'p') if($id == 0) return null; $rl = $za_vi_settings[$entity_type . $rule_type . 'r'][$id]; $ul = $za_vi_settings[$entity_type . $rule_type . 'u'][$id]; $uel = $za_vi_settings[$entity_type . 'e' . $rule_type . 'u'][$id]; if($uid != 0) { if(isset($uel) && in_array($uid, $uel)) return false; if(isset($ul) && in_array($uid, $ul)) return true; } if(isset($rl) && in_array($za_vi_current_user_role, $rl)) return true; return false; } function za_vi_profile_hidden_error() { global $za_vi_settings; bb_die(empty($za_vi_settings['phm']) ? __('User not found.') : $za_vi_settings['phm'], '', 404); exit; } function za_vi_affected_topics_count() { global $za_vi_settings; $ret = 0; if(!empty($za_vi_settings['thr'])) $ret += count($za_vi_settings['thr']); if(!empty($za_vi_settings['thu'])) $ret += count($za_vi_settings['thu']); if(!empty($za_vi_settings['tehu'])) $ret += count($za_vi_settings['tehu']); if(!empty($za_vi_settings['tlr'])) $ret += count($za_vi_settings['tlr']); if(!empty($za_vi_settings['tlu'])) $ret += count($za_vi_settings['tlu']); if(!empty($za_vi_settings['telu'])) $ret += count($za_vi_settings['telu']); return $ret; } function za_vi_forum_count($count, $forum_id) { global $za_vi_hidden_topics_count; $id = get_forum_id($forum_id); if(isset($za_vi_hidden_topics_count[$id])) return $count - $za_vi_hidden_topics_count[$id]; else return $count; } function za_vi_forum_has_visibility($id, $only_hide = false) { global $za_vi_settings; $ret = !empty($za_vi_settings['fhr'][$id]) || !empty($za_vi_settings['fhu'][$id]) || !empty($za_vi_settings['fehu'][$id]); if($only_hide) return $ret; else return $ret || !empty($za_vi_settings['flr'][$id]) || !empty($za_vi_settings['flu'][$id]) || !empty($za_vi_settings['felu'][$id]); } function za_vi_topic_has_visibility($id, $only_hide = false) { global $za_vi_settings; $ret = !empty($za_vi_settings['thr'][$id]) || !empty($za_vi_settings['thu'][$id]) || !empty($za_vi_settings['tehu'][$id]); if($only_hide) return $ret; else return $ret || !empty($za_vi_settings['tlr'][$id]) || !empty($za_vi_settings['tlu'][$id]) || !empty($za_vi_settings['telu'][$id]); } function za_vi_profile_has_visibility($id) { global $za_vi_settings; return !empty($za_vi_settings['phr'][$id]) || !empty($za_vi_settings['phu'][$id]) || !empty($za_vi_settings['pehu'][$id]); } function za_vi_reset_forum($id) { global $za_vi_settings; unset($za_vi_settings['fhr'][$id]); unset($za_vi_settings['fhu'][$id]); unset($za_vi_settings['fehu'][$id]); unset($za_vi_settings['flr'][$id]); unset($za_vi_settings['flu'][$id]); unset($za_vi_settings['felu'][$id]); za_vi_reset_subforums($id); } function za_vi_reset_subforums($id) { global $za_vi_settings; $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]); } } } 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_reset_profile($id) { global $za_vi_settings; unset($za_vi_settings['phr'][$id]); unset($za_vi_settings['phu'][$id]); unset($za_vi_settings['pehu'][$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_hidden_forums, $za_vi_hidden_topics, $za_vi_locked_forums_count, $za_vi_hidden_topics_count, $za_vi_current_user_role; global $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', // forums 'thr', 'thu', 'tehu', 'tlr', 'tlu', 'telu', // topics 'phr', 'phu', 'pehu' // profiles )); if(!isset($za_vi_settings['fp'])) $za_vi_settings['fp'] = ''; if(!isset($za_vi_settings['tp'])) $za_vi_settings['tp'] = ''; if(!isset($za_vi_settings['flm'])) $za_vi_settings['flm'] = ''; if(!isset($za_vi_settings['tlm'])) $za_vi_settings['tlm'] = ''; //if(!isset($za_vi_settings['glm'])) $za_vi_settings['glm'] = ''; if(!isset($za_vi_settings['phm'])) $za_vi_settings['phm'] = ''; $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_forums = array(); $za_vi_hidden_topics = array(); $za_vi_hidden_topics_count = array(); // check if user is 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'])) { // forum hide role foreach($za_vi_settings['fhr'] as $key => $value) if(in_array($za_vi_current_user_role, $value)) $za_vi_hidden_forums_list[] = $key; // forum hide user if($id != 0 && !empty($za_vi_settings['fhu'])) { 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; // forum hide user exception if($id != 0 && $ehu_count > 0 && !empty($za_vi_hidden_forums_list)) { 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; } } } // topic hide role foreach($za_vi_settings['thr'] as $key => $value) if(in_array($za_vi_current_user_role, $value)) $za_vi_hidden_topics_list[] = $key; // topic hide user if($id != 0 && !empty($za_vi_settings['thu'])) { 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; // topic hide user exception if($id != 0 && $ehu_count > 0 && !empty($za_vi_hidden_topics_list)) { 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; } } } if(bb_is_profile()) add_action('bb_profile.php', 'za_vi_profile_hook'); $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['felu']) || !empty($za_vi_settings['tlr']) || !empty($za_vi_settings['tlu']) || !empty($za_vi_settings['telu'])) { add_action('bb_forum.php', 'za_vi_forum_template_hook'); add_action('bb_topic.php', 'za_vi_topic_template_hook'); add_action('bb_front-page.php', 'za_vi_template_hook'); } } } if(!empty($za_vi_hidden_forums_list) || !empty($za_vi_hidden_topics_list)) { if(bb_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 = $za_vi_hidden_forums_list; $za_vi_hidden_topics = $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_profile.php', 'za_vi_admin_profile_hook'); } } add_action('bb_init', 'za_vi_initialize'); function za_vi_admin_profile_hook($keys) { add_filter('get_profile_info_keys', za_vi_profile_info_key_filter); } function za_vi_profile_hook($keys) { global $user; if(za_entity_check_visibility(za_vi_profile_has_visibility($user->ID) ? $user->ID : 0, 'p')) za_vi_profile_hidden_error(); return $keys; } function za_vi_profile_info_key_filter($keys) { $id = bb_get_user_id(); echo '
'; return $keys; } 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); } 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 = get_topic_id((int)$id); $topic = get_topic($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 = za_vi_topic_has_visibility($id) ? __('Modify Hide/Lock Status', ZA_VI_ID) : __('Add Hide/Lock Rule', ZA_VI_ID); return "$before$ret$after"; } function za_vi_topic_admin($parts) { $parts['hide'] = za_vi_hide_link(); return $parts; } // CHECK: return real caps 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['glm'])) // $message = $za_vi_settings['glm']; } 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_forum_template_hook($args) { za_vi_template_hook($args); } function za_vi_topic_template_hook($args) { za_vi_template_hook($args); } 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_replacement_message_field($title, $flm, $tlm/*, $glm*/) { ?> "; } function za_vi_configuration_page() { global $za_vi_settings, $wp_roles; $roles = $wp_roles->get_names(); $hidden_suffix = __('[hidden]', ZA_VI_ID); ?> get_names(); $changed = FALSE; $goback = remove_query_arg(array('za-visibility-updated', 'za-forum-reset', 'za-topic-reset', 'za-allprofiles-reset', 'za-profile-reset', 'za-zero-forums', 'id', 'fid', 'pid', 'action'), wp_get_referer()); 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', // 'za-forum-reset', 'za-zero-forums'), wp_get_referer()); if($_POST['action'] == 'update-za-vi-settings') { if(isset($_POST['za_vi_profile_message'])) { $value = stripslashes_deep(trim($_POST['za_vi_profile_message'])); $za_vi_settings['phm'] = $value; } 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['glm'] = $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 { if($_POST['action'] == 'update-za-vi-forum-settings') $entity = 0; elseif($_POST['action'] == 'update-za-vi-topic-settings') $entity = 1; elseif($_POST['action'] == 'update-za-vi-allprofiles-settings') $entity = 2; else $entity = 3; 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($entity == 0) { $forum = get_forum($id); if(!$forum) bb_die(__('There is a problem with that forum, pardner.', ZA_VI_ID)); } elseif($entity == 1) { $topic = get_topic($id); if(!$topic) bb_die(__('There is a problem with that topic, pardner.', ZA_VI_ID)); } elseif($entity == 2) { if($id != 0) { $user = bb_get_user($id); if(!$user) bb_die(__('There is a problem with that user, pardner.', ZA_VI_ID)); } } $has_lock = $entity == 0 || $entity == 1; $new_hide_roles = array(); if($has_lock) $new_lock_roles = array(); foreach($roles as $i => $v) { if($_POST["za_vi_hide_$i"] == 'on') $new_hide_roles[] = $i; if($has_lock && $_POST["za_vi_lock_$i"] == 'on') $new_lock_roles[] = $i; } if($entity == 0) $p = 'f'; elseif($entity == 1) $p = 't'; else $p = 'p'; // Single profile rules can be empty if($user) $za_vi_settings[$p . 'hr'][$id] = $new_hide_roles; else { // Save new hide roles if(!empty($new_hide_roles)) $za_vi_settings[$p . 'hr'][$id] = $new_hide_roles; else unset($za_vi_settings[$p . 'hr'][$id]); } // Save new hide users $list1 = za_vi_explode_user_list($_POST['za_vi_hidden_users']); if($user) $za_vi_settings[$p . 'hu'][$id] = $list1; else { if(!empty($list1)) $za_vi_settings[$p . 'hu'][$id] = $list1; else unset($za_vi_settings[$p . 'hu'][$id]); } // Save new hide exception users $list2 = za_vi_explode_user_list($_POST['za_vi_ex_hidden_users']); if($user) $za_vi_settings[$p . 'ehu'][$id] = $list2; else { if(!empty($list2)) $za_vi_settings[$p . 'ehu'][$id] = $list2; else unset($za_vi_settings[$p . 'ehu'][$id]); } if($entity == 0) { 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($has_lock) { if(!empty($new_lock_roles)) { $za_vi_settings[$p . 'lr'][$id] = $new_lock_roles; } else unset($za_vi_settings[$p . 'lr'][$id]); // Save new lock users $list = za_vi_explode_user_list($_POST['za_vi_locked_users']); if(!empty($list)) $za_vi_settings[$p . 'lu'][$id] = $list; else unset($za_vi_settings[$p . 'lu'][$id]); // Save new lock exception users $list = za_vi_explode_user_list($_POST['za_vi_ex_locked_users']); if(!empty($list)) $za_vi_settings[$p . 'elu'][$id] = $list; else unset($za_vi_settings[$p . 'elu'][$id]); } if($entity == 0) { if(!za_vi_forum_has_visibility($id)) { za_vi_reset_forum($id); $goback = add_query_arg('za-forum-reset', 'true', $goback); } else { $num_forum = get_total_forums(); // zero forums aren't allowed if($num_forum == 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); } elseif(!empty($za_vi_settings['fhr']) && count($za_vi_settings['fhr']) == $num_forum) { foreach($za_vi_settings['fhr'] as $i => $v) { // check } } else $goback = add_query_arg('za-visibility-updated', 'true', $goback); } } elseif($entity == 1) { 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); } else { if(!za_vi_profile_has_visibility($id)) { $goback = add_query_arg($id == 0 ? 'za-allprofiles-reset' : 'za-profile-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(!empty($_GET['za-allprofiles-reset'])) bb_admin_notice('' . __('All profiles hide status erased.', ZA_VI_ID) . ''); elseif(!empty($_GET['za-profile-erase'])) bb_admin_notice('' . __('Profile hide status erased.', ZA_VI_ID) . ''); elseif(!empty($_GET['za-profile-reset'])) bb_admin_notice('' . __('The profile hide status has been reset. Take note that a profile with no hide rules is still a valid entry because single profile rules override global rules. If you want to delete these rules eliminate the profile from the plugin main settings panel.', ZA_VI_ID) . ''); elseif(isset($_GET['id']) || isset($_GET['fid']) || isset($_GET['pid'])) { bb_check_admin_referer('za-vi-update'); global $bb_current_user; if(isset($_GET['id'])) $id = absint($_GET['id']); elseif(isset($_GET['fid'])) $id = absint($_GET['fid']); else $id = absint($_GET['pid']); 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; } } elseif(isset($_GET['fid'])) { $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; } } elseif(isset($_GET['pid'])) { if($id != 0) { $user = bb_get_user($id); if(!$user) bb_die(__('There is a problem with that user, pardner.', ZA_VI_ID)); } if($is_reset) { za_vi_reset_profile($id); bb_update_option('za_visibility', $za_vi_settings); $goback = add_query_arg($id == 0 ? 'za-allprofiles-reset' : 'za-profile-erase', 'true', $goback); bb_safe_redirect($goback); exit; } } } global $bb_admin_body_class; $bb_admin_body_class = ' bb-admin-settings'; } ?>