2931 lines
114 KiB
PHP
2931 lines
114 KiB
PHP
<?php
|
|
include("wpf_define.php");
|
|
include_once('bbcode.php');
|
|
|
|
if(!class_exists('mingleforum')) {
|
|
class mingleforum{
|
|
|
|
var $db_version = 2; //MANAGES DB VERSION
|
|
|
|
function mingleforum()
|
|
{
|
|
$this->options = $this->get_forum_admin_ops();
|
|
$this->get_set_ads_options();
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
add_filter("init", array(&$this, "flush_wp_rewrite_rules"));
|
|
add_filter("rewrite_rules_array", array(&$this, "set_seo_friendly_rules"));
|
|
}
|
|
add_action("admin_menu", array(&$this,"add_admin_pages"));
|
|
add_action("admin_head", array(&$this, "admin_header"));
|
|
add_action("wp_head", array(&$this, "setup_header"));
|
|
add_action("plugins_loaded", array(&$this, "wpf_load_widget"));
|
|
add_action("wp_footer", array(&$this, "wpf_footer"));
|
|
add_filter('wpseo_whitelist_permalink_vars', array($this, 'yoast_seo_whitelist_vars'));
|
|
if($this->options['wp_posts_to_forum'])
|
|
{
|
|
add_action("add_meta_boxes", array(&$this, "send_wp_posts_to_forum"));
|
|
add_action("publish_post", array(&$this, "saving_posts"));
|
|
}
|
|
//Ads filter hooks
|
|
add_filter('mf_ad_above_forum', array(&$this, 'mf_ad_above_forum'));
|
|
add_filter('mf_ad_below_forum', array(&$this, 'mf_ad_below_forum'));
|
|
add_filter('mf_ad_above_branding', array(&$this, 'mf_ad_above_branding'));
|
|
add_filter('mf_ad_above_info_center', array(&$this, 'mf_ad_above_info_center'));
|
|
add_filter('mf_ad_above_quick_reply', array(&$this, 'mf_ad_above_quick_reply'));
|
|
add_filter('mf_ad_above_breadcrumbs', array(&$this, 'mf_ad_above_breadcrumbs'));
|
|
add_filter('mf_ad_below_first_post', array(&$this, 'mf_ad_below_first_post'));
|
|
$this->init();
|
|
}
|
|
|
|
// !Member variables
|
|
var $showing = false;
|
|
|
|
var $page_id = "";
|
|
var $reg_link = "";
|
|
var $profile_link = "";
|
|
var $logout_link = "";
|
|
var $home_url = "";
|
|
var $forum_link = "";
|
|
var $group_link = "";
|
|
var $thread_link = "";
|
|
var $add_topic_link = "";
|
|
|
|
// DB tables
|
|
var $t_forums = "";
|
|
var $t_threads = "";
|
|
var $t_posts = "";
|
|
var $t_usergroups = "";
|
|
var $t_usergroup2user = "";
|
|
var $o = "";
|
|
|
|
var $current_group = "";
|
|
var $current_forum = "";
|
|
var $current_thread = "";
|
|
var $notify_msg = "";
|
|
var $current_view = "";
|
|
var $opt = array();
|
|
var $base_url = "";
|
|
var $skin_url = "";
|
|
var $curr_page = "";
|
|
var $last_visit = "";
|
|
var $user_options = array();
|
|
var $options = array();
|
|
var $ads_options = array();
|
|
|
|
// Initialize varables
|
|
function init(){
|
|
global $table_prefix;
|
|
|
|
$this->page_id = $this->get_pageid();
|
|
$this->profile_link = site_url()."/wp-admin/profile.php";
|
|
|
|
$this->t_forums = $table_prefix."forum_forums";
|
|
$this->t_threads = $table_prefix."forum_threads";
|
|
$this->t_posts = $table_prefix."forum_posts";
|
|
$this->t_usergroups = $table_prefix."forum_usergroups";//! check this later
|
|
$this->t_usergroup2user = $table_prefix."forum_usergroup2user"; //x testing
|
|
|
|
$this->current_forum = false;
|
|
$this->current_group = false;
|
|
$this->current_thread = false;
|
|
|
|
$this->curr_page = 0;
|
|
|
|
$this->user_options = array('allow_profile' => true,
|
|
'signature' => ""
|
|
);
|
|
// Get the options
|
|
$this->opt = get_option('mingleforum_options');
|
|
$this->skin_url = SKINURL.$this->opt['forum_skin'];
|
|
}
|
|
|
|
function get_set_ads_options() {
|
|
$this->ads_options = array( 'mf_ad_above_forum_on' => false,
|
|
'mf_ad_above_forum' => '',
|
|
'mf_ad_below_forum_on' => false,
|
|
'mf_ad_below_forum' => '',
|
|
'mf_ad_above_branding_on' => false,
|
|
'mf_ad_above_branding' => '',
|
|
'mf_ad_above_info_center_on' => false,
|
|
'mf_ad_above_info_center' => '',
|
|
'mf_ad_above_quick_reply_on' => false,
|
|
'mf_ad_above_quick_reply' => '',
|
|
'mf_ad_above_breadcrumbs_on' => false,
|
|
'mf_ad_above_breadcrumbs' => '',
|
|
'mf_ad_below_first_post_on' => false,
|
|
'mf_ad_below_first_post' => '',
|
|
'mf_ad_custom_css' => ''
|
|
);
|
|
$initOps = get_option('mingleforum_ads_options');
|
|
if (!empty($initOps)){
|
|
foreach ($initOps as $key => $option)
|
|
$this->ads_options[$key] = $option;
|
|
}
|
|
update_option('mingleforum_ads_options', $this->ads_options);
|
|
}
|
|
|
|
function get_forum_admin_ops() {
|
|
$this->options = array( 'wp_posts_to_forum' => false,
|
|
'forum_posts_per_page' => 10,
|
|
'forum_threads_per_page' => 20,
|
|
'forum_require_registration' => true,
|
|
'forum_show_login_form' => true,
|
|
'forum_date_format' => get_option('date_format'),
|
|
'forum_use_gravatar' => true,
|
|
'forum_show_bio' => true,
|
|
'forum_skin' => "Default",
|
|
'forum_use_rss' => true,
|
|
'forum_use_seo_friendly_urls' => false,
|
|
'forum_allow_image_uploads' => false,
|
|
'notify_admin_on_new_posts' => false,
|
|
'set_sort' => "DESC",
|
|
'forum_use_spam' => false,
|
|
'forum_use_bbcode' => true,
|
|
'forum_captcha' => true,
|
|
'hot_topic' => 15,
|
|
'veryhot_topic' => 25,
|
|
'forum_display_name' => 'user_login',
|
|
'level_one' => 25,
|
|
'level_two' => 50,
|
|
'level_three' => 100,
|
|
'level_newb_name' => __("Newbie", "mingleforum"),
|
|
'level_one_name' => __("Beginner", "mingleforum"),
|
|
'level_two_name' => __("Advanced", "mingleforum"),
|
|
'level_three_name' => __("Pro", "mingleforum"),
|
|
'forum_db_version' => 0,
|
|
'forum_disabled_cats' => array(),
|
|
'allow_user_replies_locked_cats' => false,
|
|
'forum_posting_time_limit' => 300,
|
|
'forum_hide_branding' => false,
|
|
'forum_last_posts' => 0
|
|
);
|
|
$initOps = get_option('mingleforum_options');
|
|
//Don't overwrite current opitions but allow the flexibility to add more options
|
|
if (!empty($initOps)){
|
|
foreach ($initOps as $key => $option)
|
|
$this->options[$key] = $option;
|
|
}
|
|
update_option('mingleforum_options', $this->options);
|
|
return $this->options;
|
|
}
|
|
|
|
// Add admin pages
|
|
function add_admin_pages(){
|
|
include_once("fs-admin/fs-admin.php");
|
|
$wpfa = new mingleforumadmin();
|
|
|
|
add_menu_page(__("Mingle Forum - Options", "mingleforum"), "Mingle Forum", "administrator", "mingle-forum", array(&$wpfa, "options"), WPFURL."images/logo.png");
|
|
add_submenu_page("mingle-forum", __("Mingle Forum - Options", "mingleforum"), __("Options", "mingleforum"), "administrator", 'mingle-forum', array(&$wpfa, "options"));
|
|
add_submenu_page('mingle-forum', __('Ads', 'mingleforum'), __('Ads', 'mingleforum'), "administrator", 'mfads', array(&$wpfa, "ads"));
|
|
add_submenu_page("mingle-forum", __("Skins", "mingleforum"), __("Skins", "mingleforum"), "administrator", 'mfskins', array(&$wpfa, "skins"));
|
|
add_submenu_page("mingle-forum", __("Forum Structure - Categories & Forums", "mingleforum"), __("Forum Structure", "mingleforum"), "administrator", 'mfstructure', array(&$wpfa, "structure"));
|
|
add_submenu_page("mingle-forum", __("Moderators", "mingleforum"), __("Moderators", "mingleforum"), "administrator", 'mfmods', array(&$wpfa, "moderators"));
|
|
add_submenu_page("mingle-forum", __("User Groups", "mingleforum"), __("User Groups", "mingleforum"), "administrator", 'mfgroups', array(&$wpfa, "usergroups"));
|
|
add_submenu_page("mingle-forum", __("About", "mingleforum"), __("About", "mingleforum"), "administrator", 'mfabout', array(&$wpfa, "about"));
|
|
}
|
|
|
|
function admin_header(){
|
|
wp_enqueue_style('mingle-forum', plugins_url('wpf_admin.css', __FILE__));
|
|
wp_enqueue_script('mingle-forum', plugins_url('js/script.js', __FILE__), array('jquery'));
|
|
}
|
|
|
|
function wpf_load_widget() {
|
|
wp_register_sidebar_widget("MFWidget", __("Forums Latest Activity", "mingleforum"), array(&$this, "widget"));
|
|
wp_register_widget_control("MFWidget", __("Forums Latest Activity", "mingleforum"), array(&$this, "widget_wpf_control"));
|
|
}
|
|
|
|
function widget($args) {
|
|
global $wpdb;
|
|
$toShow = 0;
|
|
$unique = array();
|
|
$this->setup_links();
|
|
$this->get_forum_admin_ops();
|
|
$widget_option = get_option("wpf_widget");
|
|
$posts = $wpdb->get_results("SELECT * FROM $this->t_posts ORDER BY `date` DESC LIMIT 50");
|
|
echo $args['before_widget'];
|
|
echo $args['before_title'] . $widget_option["wpf_title"] . $args['after_title'];
|
|
echo "<ul>";
|
|
foreach($posts as $post) {
|
|
if(!in_array($post->parent_id, $unique) && $toShow < $widget_option["wpf_num"])
|
|
{
|
|
//$user = get_userdata($post->author_id);
|
|
if($this->have_access($this->forum_get_group_from_post($post->parent_id)) && $this->have_access($this->forum_get_forum_from_post($post->parent_id)))
|
|
echo "<li><a href='".$this->get_paged_threadlink($post->parent_id, '#postid-'.$post->id)."'>".$this->output_filter($post->subject)."</a><br/>".__("by:", "mingleforum")." ".$this->profile_link($post->author_id)."<br /><small>".$this->format_date($post->date)."</small></li>";
|
|
$unique[] = $post->parent_id;
|
|
$toShow += 1;
|
|
}
|
|
}
|
|
echo "</ul>";
|
|
echo $args['after_widget'];
|
|
}
|
|
|
|
function latest_activity($num = 5, $ul = true){
|
|
global $wpdb;
|
|
$toShow = 0;
|
|
$unique = array();
|
|
$posts = $wpdb->get_results("SELECT * FROM $this->t_posts ORDER BY `date` DESC LIMIT 50");
|
|
if($ul) echo "<ul class='forumtwo'>";
|
|
foreach($posts as $post){
|
|
if(!in_array($post->parent_id, $unique) && $toShow < $num)
|
|
{
|
|
//$user = get_userdata($post->author_id);
|
|
if($this->have_access($this->forum_get_group_from_post($post->parent_id)) && $this->have_access($this->forum_get_forum_from_post($post->parent_id)))
|
|
echo "<li class='forum'><a href='".$this->get_paged_threadlink($post->parent_id, '#postid-'.$post->id)."'>".$this->output_filter($post->subject)."</a><br />".__("by:", "mingleforum")." ".$this->profile_link($post->author_id)."<br/><small>".$this->format_date($post->date)."</small></li>";
|
|
$unique[] = $post->parent_id;
|
|
$toShow += 1;
|
|
}
|
|
}
|
|
if($ul)echo "</ul>";
|
|
}
|
|
|
|
function widget_wpf_control(){
|
|
if (isset($_POST["wpf_submit"])) {
|
|
$name = strip_tags(stripslashes($_POST["wpf_title"]));
|
|
$num = strip_tags(stripslashes($_POST["wpf_num"]));
|
|
$widget_option["wpf_title"] = $name;
|
|
$widget_option["wpf_num"] = $num;
|
|
update_option("wpf_widget", $widget_option);
|
|
}
|
|
$widget_option = get_option("wpf_widget");
|
|
echo "<p><label for='wpf_title'>".__("Title to display in the sidebar:", "mingleforum")."
|
|
<input style='width: 250px;' id='wpf_title' name='wpf_title' type='text' class='wpf-input' value='{$widget_option['wpf_title']}' /></label></p>";
|
|
echo "<p><label for='wpf_num'>".__("How many items would you like to display?", "mingleforum");
|
|
echo "<select name='wpf_num'>";
|
|
for($i = 1; $i < 21; ++$i){
|
|
if($widget_option["wpf_num"] == $i)
|
|
$selected = "selected = 'selected'";
|
|
else
|
|
$selected = "";
|
|
echo "<option value='$i' $selected>$i</option>";
|
|
}
|
|
echo "</select>";
|
|
echo "</label></p>
|
|
<input type='hidden' id='wpf_submit' name='wpf_submit' value='1' />";
|
|
}
|
|
|
|
//Fix SEO by Yoast conflict
|
|
public function yoast_seo_whitelist_vars($vars) {
|
|
$my_vars = array('vforum', 'g', 'viewforum', 'f', 'viewtopic', 't', 'mingleforumaction', 'topic', 'user_id', 'quote', 'thread', 'id', 'action', 'forum', 'markallread', 'getNewForumID', 'delete_topic', 'remove_post', 'forumsubs', 'threadsubs', 'sticky', 'closed', 'move_topic');
|
|
return array_merge($vars, $my_vars);
|
|
}
|
|
|
|
function wpf_footer(){
|
|
if(is_page($this->get_pageid()))
|
|
{
|
|
?>
|
|
<script type="text/javascript" >
|
|
<?php echo "var skinurl = '$this->skin_url';";?>
|
|
fold();
|
|
function notify(){
|
|
|
|
var answer = confirm ('<?php echo addslashes($this->notify_msg);?>');
|
|
if (!answer)
|
|
return false;
|
|
else
|
|
return true;
|
|
}
|
|
</script>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
function setup_links(){
|
|
global $wp_rewrite;
|
|
if($wp_rewrite->using_permalinks())
|
|
$delim = "?";
|
|
else
|
|
$delim = "&";
|
|
$perm = get_permalink($this->page_id);
|
|
$this->forum_link = $perm.$delim."mingleforumaction=viewforum&f=";
|
|
$this->group_link = $perm.$delim."mingleforumaction=vforum&g=";
|
|
$this->thread_link = $perm.$delim."mingleforumaction=viewtopic&t=";
|
|
$this->add_topic_link = $perm.$delim."mingleforumaction=addtopic&forum=$this->current_forum";
|
|
$this->post_reply_link = $perm.$delim."mingleforumaction=postreply&thread=$this->current_thread";
|
|
$this->base_url = $perm.$delim."mingleforumaction=";
|
|
$this->reg_link = wp_login_url()."?action=register";
|
|
|
|
//END MINGLE REG LINK
|
|
$this->topic_feed_url = WPFURL."feed.php?topic=";
|
|
$this->global_feed_url = WPFURL."feed.php?topic=all";
|
|
$this->home_url = $perm;
|
|
$this->logout_link = wp_logout_url(get_permalink($this->get_pageid()));
|
|
}
|
|
|
|
function setup_linksdk($perm){
|
|
global $wp_rewrite;
|
|
if($wp_rewrite->using_permalinks())
|
|
$delim = "?";
|
|
else
|
|
$delim = "&";
|
|
$this->forum_link = $perm.$delim."mingleforumaction=viewforum&f=";
|
|
$this->group_link = $perm.$delim."mingleforumaction=vforum&g=";
|
|
$this->thread_link = $perm.$delim."mingleforumaction=viewtopic&t=";
|
|
$this->add_topic_link = $perm.$delim."mingleforumaction=addtopic&forum=$this->current_forum";
|
|
$this->post_reply_link = $perm.$delim."mingleforumaction=postreply&thread=$this->current_thread";
|
|
$this->base_url = $perm.$delim."mingleforumaction=";
|
|
$this->reg_link = wp_login_url()."?action=register";
|
|
|
|
//END MINGLE REG LINK
|
|
$this->topic_feed_url = WPFURL."feed.php?topic=";
|
|
$this->global_feed_url = WPFURL."feed.php?topic=all";
|
|
$this->home_url = $perm;
|
|
$this->logout_link = wp_logout_url(get_permalink($this->get_pageid()));
|
|
}
|
|
|
|
function get_addtopic_link(){
|
|
return $this->add_topic_link.".$this->curr_page";
|
|
}
|
|
|
|
function get_post_reply_link(){
|
|
return $this->post_reply_link.".$this->curr_page";
|
|
}
|
|
|
|
function get_forumlink($id, $page = ''){
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($this->forum_get_parent($id))."-group".$this->forum_get_parent($id));
|
|
$forum = $this->get_seo_friendly_title($this->get_forumname($id)."-forum".$id).$page;
|
|
return rtrim($this->home_url, '/').'/'.$group.'/'.$forum;
|
|
}
|
|
else
|
|
if($page == '')
|
|
return $this->forum_link.$id.".$this->curr_page";
|
|
else
|
|
return $this->forum_link.$id.$page;
|
|
}
|
|
|
|
function get_grouplink($id){
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($id)."-group".$id);
|
|
return rtrim($this->home_url, '/').'/'.$group;
|
|
}
|
|
else
|
|
return $this->group_link.$id.".$this->curr_page";
|
|
}
|
|
|
|
function get_threadlink($id, $page = ''){
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($this->forum_get_parent($this->forum_get_forum_from_post($id)))."-group".$this->forum_get_parent($this->forum_get_forum_from_post($id)));
|
|
$forum = $this->get_seo_friendly_title($this->get_forumname($this->forum_get_forum_from_post($id))."-forum".$this->forum_get_forum_from_post($id));
|
|
$thread = $this->get_seo_friendly_title($this->get_subject($id)."-thread".$id);
|
|
return rtrim($this->home_url, '/').'/'.$group.'/'.$forum.'/'.$thread.$page;
|
|
}
|
|
else
|
|
return $this->thread_link.$id.$page;
|
|
}
|
|
|
|
function get_paged_threadlink($id, $postid = ''){
|
|
global $wpdb;
|
|
$wpdb->query("SELECT * FROM {$this->t_posts} WHERE parent_id = {$id}");
|
|
$num = ceil($wpdb->num_rows / $this->options['forum_posts_per_page']) - 1;
|
|
if($num < 0)
|
|
$num = 0;
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($this->forum_get_parent($this->forum_get_forum_from_post($id)))."-group".$this->forum_get_parent($this->forum_get_forum_from_post($id)));
|
|
$forum = $this->get_seo_friendly_title($this->get_forumname($this->forum_get_forum_from_post($id))."-forum".$this->forum_get_forum_from_post($id));
|
|
$thread = $this->get_seo_friendly_title($this->get_subject($id)."-thread".$id);
|
|
return rtrim($this->home_url, '/').'/'.$group.'/'.$forum.'/'.$thread.".".$num.$postid;
|
|
}
|
|
else
|
|
return $this->thread_link.$id.".".$num.$postid;
|
|
}
|
|
|
|
function get_pageid(){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_content LIKE '%[mingleforum]%' AND post_status = 'publish' AND post_type = 'page'");
|
|
}
|
|
|
|
function get_forums($id = 0){
|
|
global $wpdb;
|
|
$forums = $wpdb->get_results("SELECT * FROM $this->t_forums WHERE parent_id = $id ORDER BY SORT ".SORT_ORDER);
|
|
return $forums;
|
|
}
|
|
|
|
function get_threads($id = ''){
|
|
global $wpdb;
|
|
$start = $this->curr_page*$this->opt['forum_threads_per_page'];
|
|
$end = $this->opt['forum_threads_per_page'];
|
|
$limit = "$start, $end";
|
|
if($id){
|
|
$threads = $wpdb->get_results("SELECT * FROM $this->t_threads WHERE parent_id = $id AND status='open' ORDER BY last_post ".SORT_ORDER." LIMIT $limit");
|
|
return $threads;
|
|
}
|
|
else
|
|
return $wpdb->get_results("SELECT * FROM $this->t_threads ORDER BY `date` ".SORT_ORDER);
|
|
}
|
|
|
|
function get_sticky_threads($id){
|
|
global $wpdb;
|
|
if($id){
|
|
$threads = $wpdb->get_results("SELECT * FROM $this->t_threads WHERE parent_id = $id AND status='sticky' ORDER BY last_post ".SORT_ORDER);
|
|
return $threads;
|
|
}
|
|
}
|
|
|
|
function get_posts($thread_id){
|
|
global $wpdb;
|
|
$start = $this->curr_page*$this->opt['forum_posts_per_page'];
|
|
$end = $this->opt['forum_posts_per_page'];
|
|
$limit = "$start, $end";
|
|
if($thread_id){
|
|
$posts = $wpdb->get_results("SELECT * FROM $this->t_posts WHERE parent_id = $thread_id ORDER BY `date` ASC LIMIT $limit");
|
|
return $posts;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function get_groupname($id){
|
|
global $wpdb;
|
|
return $this->output_filter($wpdb->get_var("SELECT name FROM $this->t_forums WHERE id = $id"));
|
|
}
|
|
|
|
function get_forumname($id){
|
|
global $wpdb;
|
|
return $this->output_filter($wpdb->get_var("SELECT name FROM $this->t_forums WHERE id = $id"));
|
|
}
|
|
|
|
function get_threadname($id){
|
|
global $wpdb;
|
|
return $this->output_filter($wpdb->get_var("SELECT subject FROM $this->t_threads WHERE id = $id"));
|
|
}
|
|
|
|
function get_postname($id){
|
|
global $wpdb;
|
|
return $this->output_filter($wpdb->get_var("SELECT subject FROM $this->t_posts WHERE id = $id"));
|
|
}
|
|
|
|
function get_group_description($id){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT description FROM $this->t_forums WHERE id = $id");
|
|
}
|
|
|
|
function get_forum_description($id){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT description FROM $this->t_forums WHERE id = $id");
|
|
}
|
|
|
|
function current_group(){
|
|
return $this->current_group;
|
|
}
|
|
|
|
function current_forum(){
|
|
return $this->current_forum;
|
|
}
|
|
|
|
function current_thread(){
|
|
return $this->current_thread;
|
|
}
|
|
|
|
function check_parms($parm){
|
|
$regexp = "/^([+-]?((([0-9]+(\.)?)|([0-9]*\.[0-9]+))([eE][+-]?[0-9]+)?))$/";
|
|
if (!preg_match($regexp, $parm)){
|
|
wp_die("Bad request, please re-enter.");
|
|
}
|
|
$p = explode(".", $parm);
|
|
if(count($p) > 1)
|
|
$this->curr_page = $p[1];
|
|
else
|
|
$this->curr_page = 0;
|
|
return $p[0];
|
|
}
|
|
|
|
function before_go()
|
|
{
|
|
$this->setup_links();
|
|
|
|
if(isset($_GET['markallread']) && $_GET['markallread'] == "true")
|
|
$this->markallread();
|
|
|
|
if(isset($_GET['mingleforumaction']))
|
|
$action = $_GET['mingleforumaction'];
|
|
else
|
|
$action = false;
|
|
if (!isset($_GET['getNewForumID']) && !isset($_GET['delete_topic']) && !isset($_GET['remove_post']) && !isset($_GET['forumsubs']) && !isset($_GET['threadsubs']) && !isset($_GET['sticky']) && !isset($_GET['closed']))
|
|
{
|
|
if ($action != false)
|
|
{
|
|
if ($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
switch($action)
|
|
{
|
|
case 'vforum':
|
|
$whereto = $this->get_grouplink($this->check_parms($_GET['g']));
|
|
break;
|
|
case 'viewforum':
|
|
$whereto = $this->get_forumlink($this->check_parms($_GET['f']));
|
|
break;
|
|
case 'viewtopic':
|
|
$whereto = $this->get_threadlink($this->check_parms($_GET['t']));
|
|
break;
|
|
}
|
|
if (!empty($whereto))
|
|
{
|
|
header("HTTP/1.1 301 Moved Permanently");
|
|
if($this->curr_page > 0)
|
|
header("Location: ".$whereto.".".$this->curr_page);
|
|
else
|
|
header("Location: ".$whereto);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function go() {
|
|
global $user_ID;
|
|
get_currentuserinfo();
|
|
|
|
$this->o = "";
|
|
|
|
if($user_ID){
|
|
if(get_user_meta($user_ID, 'wpf_useroptions', true) == ''){
|
|
update_user_meta($user_ID, 'wpf_useroptions', $this->user_options);
|
|
}
|
|
}
|
|
|
|
if(isset($_GET['mingleforumaction']))
|
|
$action = $_GET['mingleforumaction'];
|
|
else
|
|
$action = false;
|
|
if ($action == false)
|
|
{
|
|
if ($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$uri = $this->get_seo_friendly_query();
|
|
if (!empty($uri) && $uri['action'] && $uri['id'])
|
|
{
|
|
switch($uri['action'])
|
|
{
|
|
case 'group':
|
|
$action = 'vforum';
|
|
$_GET['g'] = $uri['id'];
|
|
break;
|
|
case 'forum':
|
|
$action = 'viewforum';
|
|
$_GET['f'] = $uri['id'];
|
|
break;
|
|
case 'thread':
|
|
$action = 'viewtopic';
|
|
$_GET['t'] = $uri['id'];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($action){
|
|
switch($action){
|
|
case 'viewforum':
|
|
$this->current_view = FORUM;
|
|
$this->showforum($this->check_parms($_GET['f']));
|
|
break;
|
|
case 'viewtopic':
|
|
$this->current_view = THREAD;
|
|
$this->showthread($this->check_parms($_GET['t']));
|
|
break;
|
|
case 'addtopic':
|
|
include(WPFPATH.'wpf-thread.php');
|
|
break;
|
|
case 'postreply':
|
|
if($this->is_closed($_GET['thread'])){
|
|
wp_die(__("An unknown error has occured. Please try again.", "mingleforum"));
|
|
}else{
|
|
$this->current_thread = $this->check_parms($_GET['thread']);
|
|
include(WPFPATH.'wpf-post.php');
|
|
}
|
|
break;
|
|
case 'shownew':
|
|
$this->show_new();
|
|
break;
|
|
case 'editpost':
|
|
include(WPFPATH.'wpf-post.php');
|
|
break;
|
|
case 'profile':
|
|
$this->view_profile();
|
|
break;
|
|
case 'search':
|
|
$this->search_results();
|
|
break;
|
|
case 'editprofile':
|
|
include(WPFPATH.'wpf-edit-profile.php');
|
|
break;
|
|
case 'vforum':
|
|
$this->vforum($this->check_parms($_GET['g']));
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
$this->current_view = MAIN;
|
|
$this->mydefault();
|
|
}
|
|
if(!$this->options['forum_hide_branding'])
|
|
{
|
|
$this->o .= apply_filters('mf_ad_above_branding', ''); //Adsense Area -- Above Branding
|
|
}
|
|
$above_forum_ad = apply_filters('mf_ad_above_forum', ''); //Adsense Area -- Above Forum
|
|
$below_forum_ad = apply_filters('mf_ad_below_forum', ''); //Adsense Area -- Below Forum
|
|
return $above_forum_ad."<div id='wpf-wrapper'>".$this->o."</div>".$below_forum_ad;
|
|
}
|
|
|
|
function get_version(){
|
|
$plugin_data = implode('', file(ABSPATH."wp-content/plugins/".WPFPLUGIN."/wpf-main.php"));
|
|
$version = '';
|
|
if (preg_match("|Version:(.*)|i", $plugin_data, $version))
|
|
$version = $version[1];
|
|
return $version;
|
|
}
|
|
|
|
function get_userdata($user_id, $data){
|
|
$user = get_userdata($user_id);
|
|
if(!$user)
|
|
return __("Guest", "mingleforum");
|
|
return $user->$data;
|
|
}
|
|
|
|
function get_lastpost($thread_id){
|
|
global $wpdb;
|
|
$post = $wpdb->get_row("select `date`, author_id, id from $this->t_posts where parent_id = $thread_id order by `date` DESC limit 1");
|
|
if (!empty($post)) {
|
|
$link = $this->get_paged_threadlink($thread_id);
|
|
return __("by", "mingleforum")." ".$this->profile_link($post->author_id)."<br />".__("on", "mingleforum")." <a href='".$link."'>".date_i18n($this->opt['forum_date_format'], strtotime($post->date))."</a>";
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function get_lastpost_all(){
|
|
global $wpdb;
|
|
$post = $wpdb->get_row("select `date`, author_id, id from $this->t_posts order by `date` DESC limit 1");
|
|
return __("Latest Post by", "mingleforum")." ".$this->profile_link($post->author_id)."<br />".__("on", "mingleforum")." ".date_i18n($this->opt['forum_date_format'], strtotime($post->date));
|
|
}
|
|
|
|
function showsubforum($forum_id) {
|
|
global $user_ID;
|
|
$out = $alt = '';
|
|
$frs = $this->get_forums($forum_id);
|
|
foreach($frs as $f){
|
|
if ($this->have_access($f->id)){
|
|
$alt = ($alt=="alt even")?"odd":"alt even";
|
|
$out .= "<tr class='$alt'>";
|
|
$image = "off.gif";
|
|
if($user_ID){
|
|
$lpif = $this->last_poster_in_forum($f->id, true);
|
|
$last_posterid = $this->last_posterid($f->id);
|
|
if($last_posterid != $user_ID){
|
|
$lp = strtotime($lpif); // date
|
|
$lv = strtotime($this->last_visit());
|
|
if($lv < $lp)
|
|
$image = "on.gif";
|
|
}
|
|
}
|
|
$out .= "
|
|
<td class='wpf-alt forumIcon' width='6%' align='center'><img alt='' src='$this->skin_url/images/$image' /></td>
|
|
<td valign='top'><strong><a href='".$this->get_forumlink($f->id)."'>"
|
|
.$this->output_filter($f->name)."</a></strong><br />"
|
|
.$this->output_filter($f->description);
|
|
if($f->description != "") $out .= "<br />";
|
|
$out .= $this->get_sub_forums($f->id);
|
|
$out .= $this->get_forum_moderators($f->id)
|
|
."</td>";
|
|
$out .= "<td nowrap='nowrap' width='11%' align='left' class='wpf-alt'><small>".__("Topics: ", "mingleforum").$this->num_threads($f->id)."<br />".__("Posts: ", "mingleforum").$this->num_posts_forum($f->id)."</small></td>";
|
|
$out .= "<td width='28%' ><small>".$this->last_poster_in_forum($f->id)."</small></td>";
|
|
$out .= "</tr>";
|
|
}
|
|
}
|
|
return $out;
|
|
}
|
|
|
|
function showforum($forum_id){
|
|
global $user_ID;
|
|
if(isset($_GET['delete_topic']))
|
|
$this->remove_topic($forum_id);
|
|
if(isset($_GET['move_topic']))
|
|
$this->move_topic($forum_id);
|
|
if(!empty($forum_id)){
|
|
$out = "";
|
|
$del = "";
|
|
$threads = $this->get_threads($forum_id);
|
|
$sticky_threads = $this->get_sticky_threads($forum_id);
|
|
$this->current_group = $this->forum_get_group_id($forum_id);
|
|
$this->current_forum = $forum_id;
|
|
$this->forum_subscribe();
|
|
if($this->is_forum_subscribed())
|
|
$this->notify_msg = __("Remove this Forum from your email notifications?", "mingleforum");
|
|
else
|
|
$this->notify_msg = __("This will notify you of all new Topics created in this Forum. Are you sure that is what you want to do?", "mingleforum");
|
|
$this->header();
|
|
if(isset($_GET['getNewForumID'])){
|
|
$out .= $this->getNewForumID();
|
|
}else{
|
|
if(!$this->have_access($this->current_group) || !$this->have_access($this->current_forum)){
|
|
wp_die(__("Sorry, but you don't have access to this forum", "mingleforum"));
|
|
}
|
|
|
|
$subforums = $this->showsubforum($this->current_forum);
|
|
if (!empty($subforums)) {
|
|
$out .= "<div class='wpf'><table width='100%' class='wpf-table forumsList'>
|
|
<tr><th colspan='4'>".__("Subforums", "mingleforum")."</th></tr>";
|
|
$out .= $subforums;
|
|
$out .= "</table></div><br class='clear'/>";
|
|
}
|
|
|
|
$out .= "<table cellpadding='0' cellspacing='0'>
|
|
<tr class='pop_menus'>
|
|
<td width='100%'>".$this->thread_pageing($forum_id)."</td>
|
|
<td>".$this->forum_menu()."</td>
|
|
</tr>
|
|
</table>";
|
|
$out .= "<div class='wpf'><table class='wpf-table' id='topicTable'>
|
|
<tr>
|
|
<th width='7%' class='forumIcon'>".__("Status", "mingleforum")."</th>
|
|
<th>".__("Topic Title", "mingleforum")."</th>
|
|
<th width='11%' nowrap='nowrap'>".__("Started by", "mingleforum")."</th>
|
|
<th width='4%'>".__("Replies", "mingleforum")."</th>
|
|
<th width='4%'>".__("Views", "mingleforum")."</th>
|
|
<th width='22%'>".__("Last post", "mingleforum")."</th>
|
|
</tr>";
|
|
/***************************************************************************************/
|
|
if($sticky_threads){
|
|
$out .= "<tr><th class='wpf-bright' colspan='6'>".__("Sticky Topics", "mingleforum")."</th></tr>";
|
|
foreach($sticky_threads as $thread){
|
|
if($this->is_moderator($user_ID, $this->current_forum)){
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
$strCommands = "<a href='".$this->forum_link.$this->current_forum."&getNewForumID&topic=$thread->id'>".__("Move Topic", "mingleforum")."</a> | <a href='".$this->forum_link.$this->current_forum."&delete_topic&topic=$thread->id' onclick='return wpf_confirm();'>".__("Delete Topic", "mingleforum")."</a>";
|
|
else
|
|
$strCommands = "<a href='".$this->get_forumlink($this->current_forum)."&getNewForumID&topic=$thread->id'>".__("Move Topic", "mingleforum")."</a> | <a href='".$this->get_forumlink($this->current_forum)."&delete_topic&topic=$thread->id' onclick='return wpf_confirm();'>".__("Delete Topic", "mingleforum")."</a>";
|
|
$del = "<small><br />($strCommands)</small>";
|
|
}
|
|
$image = "";
|
|
if($user_ID){
|
|
$poster_id = $this->last_posterid_thread($thread->id); // date and author_id
|
|
if($user_ID != $poster_id){
|
|
$lp = strtotime($this->last_poster_in_thread($thread->id)); // date
|
|
$lv = strtotime($this->last_visit());
|
|
if($lp > $lv)
|
|
$image = "<img src='$this->skin_url/images/new.gif' alt='".__("New posts since last visit", "mingleforum")."'>";
|
|
}
|
|
}
|
|
$sticky_img = "<img alt='' src='$this->skin_url/images/topic/normal_post_sticky.gif'/>";
|
|
$out .= "<tr>
|
|
<td class='forumIcon' align='center'>$sticky_img</td>
|
|
<td class='wpf-alt sticky'><span class='topicTitle'><a href='"
|
|
.$this->get_threadlink($thread->id)."'>"
|
|
.$this->output_filter($thread->subject)."</a> $image</span> $del
|
|
</td>
|
|
<td>".$this->profile_link($thread->starter)."</td>
|
|
<td class='wpf-alt' align='center'>".( $this->num_posts($thread->id) - 1 )."</td>
|
|
<td class='wpf-alt' align='center'>".$thread->views."</td>
|
|
<td><small>".$this->get_lastpost($thread->id)."</small></td>
|
|
</tr>";
|
|
}
|
|
/********************************************************************************************************/
|
|
$out .= "<tr><th class='wpf-bright forumTopics' colspan='6'>".__("Forum Topics", "mingleforum")."</th></tr>";
|
|
}
|
|
$alt = "alt even";
|
|
foreach($threads as $thread){
|
|
$alt = ($alt=="alt even")?"odd":"alt even";
|
|
if($user_ID){
|
|
$image = "";
|
|
$poster_id = $this->last_posterid_thread($thread->id); // date and author_id
|
|
if($user_ID != $poster_id){
|
|
$lp = strtotime($this->last_poster_in_thread($thread->id)); // date
|
|
$lv = strtotime($this->last_visit());
|
|
if($lp > $lv)
|
|
$image = "<img src='$this->skin_url/images/new.gif' alt='".__("New posts since last visit", "mingleforum")."'>";
|
|
}
|
|
}
|
|
if($this->is_moderator($user_ID, $this->current_forum)){
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
$strCommands = "<a href='".$this->forum_link.$this->current_forum."&getNewForumID&topic=$thread->id'>".__("Move Topic", "mingleforum")."</a> | <a href='".$this->forum_link.$this->current_forum."&delete_topic&topic=$thread->id' onclick='return wpf_confirm();'>".__("Delete Topic", "mingleforum")."</a>";
|
|
else
|
|
$strCommands = "<a href='".$this->get_forumlink($this->current_forum)."&getNewForumID&topic=$thread->id'>".__("Move Topic", "mingleforum")."</a> | <a href='".$this->get_forumlink($this->current_forum)."&delete_topic&topic=$thread->id' onclick='return wpf_confirm();'>".__("Delete Topic", "mingleforum")."</a>";
|
|
$del = "<small class='adminActions'><br />($strCommands)</small>";
|
|
}
|
|
$out .= "<tr class='$alt'>
|
|
<td class='forumIcon' align='center'>".$this->get_topic_image($thread->id)."</td>
|
|
<td class='wpf-alt'><span class='topicTitle'><a href='"
|
|
.$this->get_threadlink($thread->id)."'>"
|
|
.$this->output_filter($thread->subject)."</a> $image</span> $del
|
|
</td>
|
|
<td>".$this->profile_link($thread->starter)."</td>
|
|
<td class='wpf-alt' align='center'>".( $this->num_posts($thread->id) - 1 )."</td>
|
|
<td class='wpf-alt' align='center'>".$thread->views."</td>
|
|
<td><small>".$this->get_lastpost($thread->id)."</small></td>
|
|
</tr>";
|
|
}
|
|
$out .= "</table></div>";
|
|
$out .= "<table cellpadding='0' cellspacing='0'>
|
|
<tr class='pop_menus'>
|
|
<td width='100%'>".$this->thread_pageing($forum_id)."</td>
|
|
<td>".$this->forum_menu("bottom")."</td>
|
|
</tr>
|
|
</table>";
|
|
}
|
|
$out .= $this->trail("bottom");
|
|
$this->o .= $out;
|
|
$this->footer();
|
|
}
|
|
}
|
|
|
|
function get_subject($id){
|
|
global $wpdb;
|
|
return stripslashes($wpdb->get_var("SELECT subject FROM $this->t_threads WHERE id = $id"));
|
|
}
|
|
|
|
function showthread($thread_id){
|
|
global $wpdb, $user_ID;
|
|
$this->current_group = $this->forum_get_group_from_post($thread_id);
|
|
$this->current_forum = $this->forum_get_forum_from_post($thread_id);
|
|
$this->current_thread = $thread_id;
|
|
if(isset($_GET['remove_post']))
|
|
$this->remove_post();
|
|
if(isset($_GET['sticky']))
|
|
$this->sticky_post();
|
|
$this->thread_subscribe();
|
|
$posts = $this->get_posts($thread_id);
|
|
if($posts){
|
|
if($this->is_thread_subscribed())
|
|
$this->notify_msg = __("Remove this Topic from your email notifications?", "mingleforum");
|
|
else
|
|
$this->notify_msg = __("This will notify you of all responses to this Topic. Are you sure that is what you want to do?", "mingleforum");
|
|
if(!current_user_can('administrator') && !is_super_admin($user_ID) && !$this->is_moderator($user_ID, $this->current_forum))
|
|
$wpdb->query("UPDATE {$this->t_threads} SET views = views+1 WHERE id = {$thread_id}");
|
|
if($this->is_sticky($thread_id))
|
|
$image = "normal_post_sticky.gif";
|
|
else
|
|
$image = $this->get_topic_image_two($thread_id);
|
|
if(!$this->have_access($this->current_group) || !$this->have_access($this->current_forum)){
|
|
wp_die(__("Sorry, but you don't have access to this forum", "mingleforum"));
|
|
}
|
|
$this->header();
|
|
$out = "<table cellpadding='0' cellspacing='0'>
|
|
<tr class='pop_menus'>
|
|
<td width='100%'>".$this->post_pageing($thread_id)."</td>
|
|
<td>".$this->topic_menu()."
|
|
</td>
|
|
</tr>
|
|
</table>";
|
|
if ($this->is_closed())
|
|
$meClosed = " ".__("TOPIC CLOSED", "mingleforum")." ";
|
|
else
|
|
$meClosed = "";
|
|
$out .= "<div class='wpf'>
|
|
<table class='wpf-table' width='100%'>
|
|
<tr>
|
|
<th width='100'><img src='{$this->skin_url}/images/topic/{$image}' align='left'/> ".__("Author", "mingleforum")."</th>
|
|
<th>".$this->get_subject($thread_id).$meClosed."</th>
|
|
</tr>
|
|
</table>";
|
|
$out .= "</div>";
|
|
$class = "";
|
|
$c = 0;
|
|
foreach($posts as $post){
|
|
$class = ($class == "wpf-alt")?"":"wpf-alt";
|
|
$user = get_user_meta($post->author_id, "wpf_useroptions", true);
|
|
$out .= "<table class='wpf-post-table' width='100%' id='postid-{$post->id}'>
|
|
<tr class='{$class}'>
|
|
<td valign='top' width='100'>".
|
|
$this->profile_link($post->author_id);
|
|
$out .= "<div class='wpf-small'>";
|
|
$out .= $this->get_userrole($post->author_id)."<br />";
|
|
$out .= __("Posts:", "mingleforum")." ".$this->get_userposts_num($post->author_id)."<br />";
|
|
if($this->opt["forum_use_gravatar"])
|
|
$out .= $this->get_avatar($post->author_id);
|
|
$out .= "</div>".apply_filters('mf_below_post_avatar', '', $post->author_id, $post->id)."</td>
|
|
<td valign='top'>
|
|
<table width='100%' cellspacing='0' cellpadding='0' class='wpf-meta-table'>
|
|
<tr>
|
|
<td class='wpf-meta' valign='top'>".$this->get_postmeta($post->id, $post->author_id)."</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign='top' class='topic_text'>";
|
|
if(!$c)
|
|
$out .= apply_filters('mf_thread_start', '', $this->current_thread, $this->get_threadlink($post->parent_id));
|
|
$out .= apply_filters('mf_before_reply', '', $post->id).make_clickable(convert_smilies(wpautop($this->autoembed($this->output_filter($post->text))))).apply_filters('mf_after_reply', '', $post->id)."</td>
|
|
</tr>";
|
|
if($user && $user['signature'] && $this->options['forum_show_bio']){
|
|
$out .= "<tr><td class='user_desc'><small>".$this->output_filter(make_clickable(convert_smilies(wpautop($user['signature'], true))))."</small></td></tr>";
|
|
}
|
|
$out .= "</table>
|
|
</td>
|
|
</tr>";
|
|
if(!$c)
|
|
$out .= apply_filters('mf_ad_below_first_post', ''); //Adsense Area -- Below First Post
|
|
$out .= "</table>";
|
|
$c += 1;
|
|
}
|
|
$quick_thread = $this->check_parms($_GET['t']);
|
|
//QUICK REPLY AREA
|
|
if(!in_array($this->current_group, $this->options['forum_disabled_cats']) || is_super_admin() || $this->is_moderator($user_ID, $this->current_forum) || $this->options['allow_user_replies_locked_cats'])
|
|
{
|
|
if(!$this->is_closed() && ($user_ID || !$this->options['forum_require_registration']) && $this->have_access($this->current_forum, 'post') && $this->have_access($this->current_group, 'post')) {
|
|
$parser = new cartpaujBBCodeParser();
|
|
$out .= "<form action='".WPFURL."wpf-insert.php' name='addform' method='post'>
|
|
<table class='wpf-post-table' width='100%' id='wpf-quick-reply'>
|
|
<tr>
|
|
<td>";
|
|
$out .= apply_filters('mf_ad_above_quick_reply', ''); //Adsense Area -- Above Quick Reply Form
|
|
$out .= "<strong>".__("Quick Reply", "mingleforum").": </strong>
|
|
<input type='hidden' name='add_post_subject' value='".__('Re:', 'mingleforum')." ".$this->get_subject(floor($quick_thread))."'/>
|
|
".$parser->get_editor()."
|
|
</td>
|
|
</tr>";
|
|
$out .= $this->get_quick_reply_captcha();
|
|
$out .= "<tr>
|
|
<td>
|
|
<input type='submit' id='quick-reply-submit' name='add_post_submit' value='".__("Submit Quick Reply", "mingleforum")."' />
|
|
<input type='hidden' name='add_post_forumid' value='".floor($quick_thread)."'/>
|
|
<input type='hidden' name='add_topic_plink' value='".get_permalink($this->page_id)."'/>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</form>";
|
|
}
|
|
}
|
|
$out .= "<table cellpadding='0' cellspacing='0'>
|
|
<tr class='pop_menus'>
|
|
<td width='100%'>".$this->post_pageing($thread_id)."</td>
|
|
<td style='height:30px;'>".$this->topic_menu("bottom")."
|
|
</td>
|
|
</tr>
|
|
</table>";
|
|
$out .= $this->trail("bottom");
|
|
$this->o .= $out;
|
|
$this->footer();
|
|
}
|
|
}
|
|
|
|
function get_postmeta($post_id, $author_id){
|
|
global $user_ID;
|
|
$image = "<a href='#postid-$post_id'><img align='left' src='$this->skin_url/images/post/xx.gif' alt='".__("Post", "mingleforum")."' style='padding-right:10px;'/></a>";
|
|
$o = "<table width='100%' cellspacing='0' cellpadding='0' style='margin:0; padding:0; border-collapse:collapse;' border='0'>
|
|
<tr>
|
|
<td colspan='3'>$image <strong>".$this->get_postname($post_id)."</strong><br /><small><strong>".__("on:", "mingleforum")." </strong>".$this->get_postdate($post_id)."</small></td>";
|
|
if(!in_array($this->current_group, $this->options['forum_disabled_cats']) || is_super_admin() || $this->is_moderator($user_ID, $this->current_forum) || $this->options['allow_user_replies_locked_cats'])
|
|
{
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
if(($user_ID || $this->allow_unreg()) && !$this->is_closed() && $this->have_access($this->current_forum, 'post') && $this->have_access($this->current_group, 'post'))
|
|
$o .= "<td nowrap='nowrap'><img src='$this->skin_url/images/buttons/quote.gif' alt='' align='left'><a href='$this->post_reply_link"e=$post_id.$this->curr_page'> ".__("Quote", "mingleforum")."</a></td>";
|
|
if($this->is_moderator($user_ID, $this->current_forum))
|
|
$o .= "<td nowrap='nowrap'><img src='$this->skin_url/images/buttons/delete.gif' alt='' align='left'><a onclick=\"return wpf_confirm();\" href='".$this->thread_link.$this->current_thread."&remove_post&id=$post_id'> ".__("Remove", "mingleforum")."</a></td>";
|
|
if(($this->is_moderator($user_ID, $this->current_forum)) || ($user_ID == $author_id && $user_ID))
|
|
$o .= "<td nowrap='nowrap'><img src='$this->skin_url/images/buttons/modify.gif' alt='' align='left'><a href='".$this->base_url."editpost&id=$post_id&t=$this->current_thread.0'>" .__("Edit", "mingleforum")."</a></td>";
|
|
}
|
|
else
|
|
{
|
|
if(($user_ID || $this->allow_unreg()) && !$this->is_closed() && $this->have_access($this->current_forum, 'post') && $this->have_access($this->current_group, 'post'))
|
|
$o .= "<td nowrap='nowrap'><img src='$this->skin_url/images/buttons/quote.gif' alt='' align='left'><a href='$this->post_reply_link"e=$post_id.$this->curr_page'> ".__("Quote", "mingleforum")."</a></td>";
|
|
if($this->is_moderator($user_ID, $this->current_forum))
|
|
$o .= "<td nowrap='nowrap'><img src='$this->skin_url/images/buttons/delete.gif' alt='' align='left'><a onclick=\"return wpf_confirm();\" href='".$this->get_threadlink($this->current_thread)."&remove_post&id=$post_id'> ".__("Remove", "mingleforum")."</a></td>";
|
|
if(($this->is_moderator($user_ID, $this->current_forum)) || ($user_ID == $author_id && $user_ID))
|
|
$o .= "<td nowrap='nowrap'><img src='$this->skin_url/images/buttons/modify.gif' alt='' align='left'><a href='".$this->base_url."editpost&id=$post_id&t=$this->current_thread.0'>" .__("Edit", "mingleforum")."</a></td>";
|
|
}
|
|
}
|
|
$o .= "</tr>
|
|
</table>";
|
|
return $o;
|
|
}
|
|
|
|
function get_postdate($post){
|
|
global $wpdb;
|
|
return $this->format_date($wpdb->get_var("select `date` from $this->t_posts where id = $post"));
|
|
}
|
|
|
|
function format_date($date){
|
|
if($date)
|
|
return date_i18n($this->opt['forum_date_format'], strtotime($date));
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function wpf_current_time_fixed( $type, $gmt = 0 ) {
|
|
$t = ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * 3600 ) ) );
|
|
switch ( $type ) {
|
|
case 'mysql':
|
|
return $t;
|
|
break;
|
|
case 'timestamp':
|
|
return strtotime($t);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function get_userposts_num($id){
|
|
global $wpdb;
|
|
return $wpdb->get_var("select count(*) from $this->t_posts where author_id = $id");
|
|
}
|
|
|
|
function get_post_owner($id) {
|
|
global $wpdb;
|
|
return $wpdb->get_var($wpdb->prepare("SELECT `author_id` FROM {$this->t_posts} WHERE `id` = %d", $id));
|
|
}
|
|
|
|
function show_last_posts() {
|
|
global $wpdb, $user_ID;
|
|
if ($this->opt['forum_last_posts']) {
|
|
$alt = ($alt == "alt even") ? "odd" : "alt even";
|
|
$posts = $wpdb->get_results("SELECT * FROM `$this->t_threads` ORDER BY `last_post` DESC LIMIT " . $this->opt['forum_last_posts']);
|
|
|
|
$nb_valid = 0;
|
|
foreach ($posts as $thread) {
|
|
if ($this->have_access($thread->parent_id)) {
|
|
$nb_valid++;
|
|
}
|
|
}
|
|
|
|
if ($nb_valid) {
|
|
$this->o .= "<div class='wpf last5'><table width='100%' class='wpf-table forumsList'>";
|
|
$this->o .= "<th colspan='4'>" . __("Latest posts", "mingleforum") . "</tr>";
|
|
|
|
foreach ($posts as $thread) {
|
|
if ($this->have_access($thread->parent_id)) {
|
|
if ($user_ID) {
|
|
$image = "";
|
|
$poster_id = $this->last_posterid_thread($thread->id); // date and author_id
|
|
if ($user_ID != $poster_id) {
|
|
$lp = strtotime($this->last_poster_in_thread($thread->id)); // date
|
|
$lv = strtotime($this->last_visit());
|
|
if ($lp > $lv)
|
|
$image = "<img src='$this->skin_url/images/new.gif' alt='" . __("New posts since last visit", "mingleforum") . "'>";
|
|
}
|
|
}
|
|
|
|
$this->o .= "<tr class='$alt'>
|
|
<td class='forumIcon' align='center'>" . $this->get_topic_image($thread->id) . "</td>
|
|
<td class='wpf-alt'><span class='topicTitle'><a href='"
|
|
. $this->get_paged_threadlink($thread->id) . "'>"
|
|
. $this->output_filter($thread->subject) . "</a> $image</span>
|
|
</td>
|
|
<td nowrap='nowrap' width='11%' align='left' class='wpf-alt'><small>" . __("Replies", "mingleforum") . ": " . ( $this->num_posts($thread->id) - 1 ) . "<br />" . __("Views", "mingleforum") . ": " . $thread->views . "</small></td>
|
|
<td><small>" . $this->get_lastpost($thread->id) . "</small></td>
|
|
</tr>";
|
|
}
|
|
}
|
|
|
|
$this->o .= "</table></div><br class='clear'/>";
|
|
}
|
|
}
|
|
}
|
|
|
|
function mydefault(){
|
|
global $wp_rewrite;
|
|
if($wp_rewrite->using_permalinks())
|
|
$delim = "?";
|
|
else
|
|
$delim = "&";
|
|
$grs = $this->get_forums();
|
|
$this->header();
|
|
$this->show_last_posts();
|
|
foreach($grs as $g){
|
|
if($this->have_access($g->id)){
|
|
$this->o .= "<div class='wpf'><table width='100%' class='wpf-table forumsList'>";
|
|
$this->o .= "<tr><th colspan='4'><a href='".$this->get_grouplink($g->id)."'>".$this->output_filter($g->name)."</a></th></tr>";
|
|
$this->o .= $this->showsubforum($g->id);
|
|
$this->o .= "</table></div><br class='clear'/>";
|
|
}
|
|
}
|
|
$this->o .= apply_filters('wpwf_new_posts',"<table>
|
|
<tr>
|
|
<td><small><img alt='' align='top' src='$this->skin_url/images/new_some.gif' /> ".__("New posts", "mingleforum")." <img alt='' align='top' src='$this->skin_url/images/new_none.gif' /> ".__("No new posts", "mingleforum")." - <a href='".get_permalink($this->get_pageid()).$delim."markallread=true'>".__("Mark All Read", "mingleforum")."</a></small></td>
|
|
</tr>
|
|
</table><br class='clear'/>");
|
|
$this->footer();
|
|
}
|
|
|
|
function vforum($groupid){
|
|
global $user_ID;
|
|
$alt = "";
|
|
$grs = $this->get_forums($groupid);
|
|
$this->current_group = $groupid;
|
|
$this->header();
|
|
foreach($grs as $g){
|
|
if($this->have_access($g->id)){
|
|
$this->o .= "<div class='wpf'><table width='100%' class='wpf-table'>";
|
|
$this->o .= "<tr><th colspan='4'><a href='".$this->get_grouplink($g->id)."'>".$this->output_filter($g->name)."</a></th></tr>";
|
|
$frs = $this->get_forums($g->id);
|
|
foreach($frs as $f){
|
|
if ($this->have_access($f->id)) {
|
|
$alt = ($alt=="alt even")?"odd":"alt even";
|
|
$this->o .= "<tr class='$alt'>";
|
|
$image = "off.gif";
|
|
if($user_ID){
|
|
$lpif = $this->last_poster_in_forum($f->id, true);
|
|
$last_posterid = $this->last_posterid($f->id);
|
|
if($last_posterid != $user_ID){
|
|
$lp = strtotime($lpif); // date
|
|
$lv = strtotime($this->last_visit());
|
|
if($lv < $lp)
|
|
$image = "on.gif";
|
|
else
|
|
$image = "off.gif";
|
|
}
|
|
}
|
|
$this->o .= "
|
|
<td class='wpf-alt forumIcon' width='6%' align='center'><img alt='' src='$this->skin_url/images/$image' /></td>
|
|
<td valign='top'><strong><a href='".$this->get_forumlink($f->id)."'>"
|
|
.$this->output_filter($f->name)."</a></strong><br />"
|
|
.$this->output_filter($f->description);
|
|
if($f->description != "")$this->o .= "<br />";
|
|
$this->o .= $this->get_forum_moderators($f->id)
|
|
."</td>";
|
|
$this->o .= "<td nowrap='nowrap' width='11%' align='left' class='wpf-alt'><small>".__("Topics: ", "mingleforum").$this->num_threads($f->id)."<br />".__("Posts: ", "mingleforum").$this->num_posts_forum($f->id)."</small></td>";
|
|
$this->o .= "<td width='28%' ><small>".$this->last_poster_in_forum($f->id)."</small></td>";
|
|
$this->o .= "</tr>";
|
|
}
|
|
}
|
|
$this->o .= "</table>
|
|
</div><br class='clear'/>";
|
|
}
|
|
}
|
|
$this->o .= apply_filters('wpwf_new_posts',"<table>
|
|
<tr>
|
|
<td><small><img alt='' align='top' src='$this->skin_url/images/new_some.gif' /> ".__("New posts", "mingleforum")." <img alt='' align='top' src='$this->skin_url/images/new_none.gif' /> ".__("No new posts", "mingleforum")."</small></td>
|
|
</tr>
|
|
</table><br class='clear'/>");
|
|
$this->footer();
|
|
}
|
|
|
|
function output_filter($string){
|
|
$parser = new cartpaujBBCodeParser();
|
|
return stripslashes($parser->bbc2html($string));
|
|
}
|
|
|
|
function input_filter($string){
|
|
$Find = array("<", "%", "$");
|
|
$Replace = array("<", "%", "$");
|
|
$newStr = str_replace($Find, $Replace, $string);
|
|
return $newStr;
|
|
}
|
|
|
|
function sig_input_filter($string){
|
|
$Find = array("<", "%", "$");
|
|
$Replace = array("<", "%", "$");
|
|
$newStr = str_replace($Find, $Replace, $string);
|
|
return $newStr;
|
|
}
|
|
|
|
function last_posterid($forum){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT $this->t_posts.author_id FROM $this->t_posts INNER JOIN $this->t_threads ON $this->t_posts.parent_id=$this->t_threads.id WHERE $this->t_threads.parent_id = $forum ORDER BY $this->t_posts.date DESC");
|
|
}
|
|
|
|
function last_posterid_thread($thread_id){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT $this->t_posts.author_id FROM $this->t_posts INNER JOIN $this->t_threads ON $this->t_posts.parent_id=$this->t_threads.id WHERE $this->t_posts.parent_id = $thread_id ORDER BY $this->t_posts.date DESC");
|
|
}
|
|
|
|
function num_threads($forum){
|
|
global $wpdb;
|
|
return $wpdb->get_var("select count(id) from $this->t_threads where parent_id = $forum ");
|
|
}
|
|
|
|
function num_posts_forum($forum){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT count($this->t_posts.id) FROM $this->t_posts INNER JOIN $this->t_threads ON $this->t_posts.parent_id=$this->t_threads.id WHERE $this->t_threads.parent_id = $forum ORDER BY $this->t_posts.date DESC");
|
|
}
|
|
|
|
function num_posts_total(){
|
|
global $wpdb;
|
|
return $wpdb->get_var("select count(id) from $this->t_posts");
|
|
}
|
|
|
|
function num_posts($thread_id){
|
|
global $wpdb;
|
|
return $wpdb->get_var("select count(id) from $this->t_posts where parent_id = $thread_id ");
|
|
}
|
|
|
|
function num_threads_total(){
|
|
global $wpdb;
|
|
return $wpdb->get_var("select count(id) from $this->t_threads");
|
|
}
|
|
|
|
function last_poster_in_forum($forum, $post_date = false){
|
|
global $wpdb;
|
|
$date = $wpdb->get_row("SELECT $this->t_posts.date, $this->t_posts.id, $this->t_posts.parent_id, $this->t_posts.author_id FROM $this->t_posts INNER JOIN $this->t_threads ON $this->t_posts.parent_id=$this->t_threads.id WHERE $this->t_threads.parent_id = $forum ORDER BY $this->t_posts.date DESC");
|
|
if($post_date && is_object($date))
|
|
return $date->date;
|
|
if(!$date)
|
|
return __("No topics yet", "mingleforum");
|
|
$d = date_i18n($this->opt['forum_date_format'], strtotime($date->date));
|
|
return "<strong>".__("Last post", "mingleforum")."</strong> ".__("by", "mingleforum")." ".$this->profile_link($date->author_id)
|
|
."<br />".__("in", "mingleforum")." <a href='".$this->get_paged_threadlink($date->parent_id)."#postid-$date->id'>".$this->get_threadname($date->parent_id)."</a><br />".__("on", "mingleforum")." $d";
|
|
}
|
|
|
|
function last_poster_in_thread($thread_id) {
|
|
global $wpdb;
|
|
return $wpdb->get_var("select `date` from $this->t_posts where parent_id = $thread_id order by `date` DESC");
|
|
}
|
|
|
|
function have_access($groupid, $type='access') {
|
|
global $wpdb, $user_ID;
|
|
|
|
if(current_user_can("administrator") || is_super_admin($user_ID))
|
|
return true;
|
|
|
|
switch ($type) {
|
|
case 'access':
|
|
$type = 'usergroups';
|
|
break;
|
|
case 'post':
|
|
$type = 'usercanpost';
|
|
break;
|
|
}
|
|
|
|
$user_groups = maybe_unserialize($wpdb->get_var("select $type from {$this->t_forums} where id = {$groupid}"));
|
|
if(!$user_groups)
|
|
return true;
|
|
|
|
foreach($user_groups as $user_group) {
|
|
if($this->is_user_ingroup($user_ID, $user_group))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function get_usergroups(){
|
|
global $wpdb;
|
|
return $wpdb->get_results("SELECT * FROM $this->t_usergroups");
|
|
}
|
|
|
|
function get_members($usergroup){
|
|
global $wpdb;
|
|
return $wpdb->get_results("SELECT user_id FROM $this->t_usergroup2user WHERE `group` = $usergroup");
|
|
}
|
|
|
|
function is_user_ingroup($user_id = "0", $user_group_id=''){
|
|
global $wpdb;
|
|
if(!$user_id)
|
|
return false;
|
|
$id = $wpdb->get_var("select user_id from $this->t_usergroup2user where user_id = $user_id and `group` = $user_group_id");
|
|
if($id != "")
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
// TODO
|
|
function setup_header(){
|
|
$this->setup_links();
|
|
if($this->options['forum_use_rss']) { ?>
|
|
<link rel='alternate' type='application/rss+xml' title="<?php echo __("Forums RSS", "mingleforum"); ?>" href="<?php echo $this->global_feed_url;?>" /> <?php }
|
|
if(is_page($this->get_pageid()))
|
|
{
|
|
if($this->ads_options['mf_ad_custom_css'] != "") {
|
|
?>
|
|
<style type="text/css"><?php echo stripslashes($this->ads_options['mf_ad_custom_css']); ?></style>
|
|
<?php } //ENDIF FOR CUSTOM ADS CSS ?>
|
|
<link rel='stylesheet' type='text/css' href="<?php echo "$this->skin_url/style.css";?>" />
|
|
<style type="text/css">
|
|
.quicktags-toolbar{display:none}
|
|
img.mceIcon{display:inline-block!important;width:16px!important;height:16px!important;vertical-align:middle!important}
|
|
.wpf-meta-table{table-layout:fixed;word-wrap:break-word;}
|
|
</style>
|
|
<script language="JavaScript" type="text/javascript">
|
|
function wpf_confirm(){
|
|
var answer = confirm ('<?php echo __("Are you sure you want to remove this?", "mingleforum");?>');
|
|
if (!answer)
|
|
return false;
|
|
else
|
|
return true;
|
|
}
|
|
</script>
|
|
<?php
|
|
wp_enqueue_script('mingle-forum', plugins_url('js/script.js', __FILE__), array('jquery'));
|
|
}
|
|
}
|
|
|
|
// Some SEO friendly stuff
|
|
function get_pagetitle($bef_title){
|
|
global $wpdb;
|
|
$default_title = " ";
|
|
$action = "";
|
|
$title = "";
|
|
if(isset($_GET['mingleforumaction']) && !empty($_GET['mingleforumaction']))
|
|
$action = $_GET['mingleforumaction'];
|
|
elseif($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$uri = $this->get_seo_friendly_query();
|
|
if (!empty($uri) && $uri['action'] && $uri['id'])
|
|
{
|
|
switch($uri['action'])
|
|
{
|
|
case 'group':
|
|
$action = 'vforum';
|
|
$_GET['g'] = $uri['id'];
|
|
break;
|
|
case 'forum':
|
|
$action = 'viewforum';
|
|
$_GET['f'] = $uri['id'];
|
|
break;
|
|
case 'thread':
|
|
$action = 'viewtopic';
|
|
$_GET['t'] = $uri['id'];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
switch($action){
|
|
case "vforum":
|
|
$title = $default_title.$this->get_groupname($this->check_parms($_GET['g']));
|
|
break;
|
|
case "viewforum":
|
|
$title = $default_title.$this->get_groupname($this->forum_get_parent($this->check_parms($_GET['f'])))." » ".$this->get_forumname($this->check_parms($_GET['f']));
|
|
break;
|
|
case "viewtopic":
|
|
$group = $this->get_groupname($this->forum_get_parent($this->forum_get_forum_from_post($this->check_parms($_GET['t']))));
|
|
$title = $default_title.$group." » ".$this->get_forumname($this->forum_get_forum_from_post($this->check_parms($_GET['t'])))." » ".$this->get_threadname($this->check_parms($_GET['t']));
|
|
break;
|
|
case "search":
|
|
$terms = htmlentities($wpdb->escape($_POST['search_words']), ENT_QUOTES);
|
|
$title = $default_title.__("Search Results", "mingleforum"). " » {$terms} | ";
|
|
break;
|
|
case "profile":
|
|
$title = $default_title.__("Profile", "mingleforum")."";
|
|
break;
|
|
case "editpost":
|
|
$title = $default_title.__("Edit Post", "mingleforum")."";
|
|
break;
|
|
case "postreply":
|
|
$title = $default_title.__("Post Reply", "mingleforum")."";
|
|
break;
|
|
case "addtopic":
|
|
$title = $default_title.__("New Topic", "mingleforum")."";
|
|
break;
|
|
}
|
|
return $bef_title.$title." ";
|
|
}
|
|
|
|
function set_pagetitle($title){
|
|
if(is_page($this->get_pageid())) {
|
|
return $this->get_pagetitle($title);
|
|
} else {
|
|
return $title;
|
|
}
|
|
}
|
|
function array_search( $needle, $haystack, $strict = FALSE ){
|
|
if( !is_array($haystack) )return false;
|
|
foreach($haystack as $val){
|
|
if( ( ( $strict ) && ( $needle === $val ) ) || ( ( !$strict ) && ( $needle == $val ) ) )return $val;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function get_usergroup_name($usergroup_id){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT name FROM $this->t_usergroups WHERE id = $usergroup_id");
|
|
}
|
|
|
|
function get_usergroup_description($usergroup_id){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT description FROM $this->t_usergroups WHERE id = $usergroup_id");
|
|
}
|
|
|
|
function is_moderator($user_id, $forum_id = ''){
|
|
$user = get_userdata($user_id);
|
|
if($user && $user->user_level >= 9)
|
|
return true;
|
|
$forums = get_user_meta($user_id, 'wpf_moderator', true);
|
|
if(!$forum_id)
|
|
return $forums;
|
|
if($forums == "mod_global")
|
|
return true;
|
|
return $this->array_search( $forum_id, $forums );
|
|
}
|
|
|
|
function get_users(){
|
|
global $wpdb;
|
|
return $wpdb->get_results("SELECT user_login, ID FROM {$wpdb->users} ORDER BY user_login ASC");
|
|
}
|
|
|
|
function get_moderators(){
|
|
global $wpdb;
|
|
|
|
return $wpdb->get_results("
|
|
select $wpdb->usermeta.user_id, $wpdb->users.user_login
|
|
from
|
|
$wpdb->usermeta
|
|
inner join
|
|
$wpdb->users on $wpdb->usermeta.user_id = $wpdb->users.ID
|
|
where
|
|
$wpdb->usermeta.meta_key = 'wpf_moderator' ORDER BY $wpdb->users.user_login ASC");
|
|
}
|
|
|
|
function get_forum_moderators($forum_id){
|
|
global $wpdb;
|
|
$out = "";
|
|
$mods = $wpdb->get_results("SELECT user_id, meta_value FROM $wpdb->usermeta WHERE meta_key = 'wpf_moderator'");
|
|
foreach($mods as $mod){
|
|
if($this->is_moderator($mod->user_id, $forum_id)){
|
|
$out .= $this->profile_link($mod->user_id).", ";
|
|
}
|
|
}
|
|
$out = substr($out, 0, strlen($out)-2);
|
|
return (empty($out)) ? '' : "<small><i>".__("Moderators:", "mingleforum")." $out</i></small>";
|
|
}
|
|
|
|
function get_sub_forums($forum_id){
|
|
global $wpdb;
|
|
$out = "";
|
|
$fs = $wpdb->get_results("SELECT id, name FROM $this->t_forums WHERE parent_id = $forum_id");
|
|
foreach($fs as $f){
|
|
$out .= "<a href='".$this->get_forumlink($f->id)."'>".$this->output_filter($f->name)."</a>";
|
|
}
|
|
return (empty($out)) ? '' : "<small><i>".__("Subforums", "mingleforum").": $out</i></small><br/>";
|
|
}
|
|
|
|
function wp_forum_install()
|
|
{
|
|
global $table_prefix, $wpdb;
|
|
$table_threads = $table_prefix."forum_threads";
|
|
$table_posts = $table_prefix."forum_posts";
|
|
$table_forums = $table_prefix."forum_forums";
|
|
$table_usergroup2user = $table_prefix."forum_usergroup2user";
|
|
$table_usergroups = $table_prefix."forum_usergroups";
|
|
$oldops = get_option('mingleforum_options');
|
|
|
|
if($oldops['forum_db_version'] < $this->db_version) //Don't run all the friggin queries if db is already at latest version
|
|
{
|
|
$charset_collate = '';
|
|
if( $wpdb->has_cap('collation'))
|
|
{
|
|
if(!empty($wpdb->charset))
|
|
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
|
|
if(!empty($wpdb->collate))
|
|
$charset_collate .= " COLLATE $wpdb->collate";
|
|
}
|
|
|
|
$sql1 = "
|
|
CREATE TABLE ". $table_forums." (
|
|
id int(11) NOT NULL auto_increment,
|
|
`name` varchar(255) NOT NULL default '',
|
|
parent_id int(11) NOT NULL default '0',
|
|
`description` varchar(255) NOT NULL default '',
|
|
views int(11) NOT NULL default '0',
|
|
`sort` int( 11 ) NOT NULL default '0',
|
|
PRIMARY KEY (id)
|
|
){$charset_collate};";
|
|
|
|
$sql3 = "
|
|
CREATE TABLE ". $table_posts." (
|
|
id int(11) NOT NULL auto_increment,
|
|
`text` longtext,
|
|
parent_id int(11) NOT NULL default '0',
|
|
`date` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
author_id int(11) NOT NULL default '0',
|
|
`subject` varchar(255) NOT NULL default '',
|
|
views int(11) NOT NULL default '0',
|
|
PRIMARY KEY (id)
|
|
){$charset_collate};";
|
|
|
|
$sql4 = "
|
|
CREATE TABLE ". $table_threads." (
|
|
id int(11) NOT NULL auto_increment,
|
|
parent_id int(11) NOT NULL default '0',
|
|
views int(11) NOT NULL default '0',
|
|
`subject` varchar(255) NOT NULL default '',
|
|
`date` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
`status` varchar(20) NOT NULL default 'open',
|
|
closed int(11) NOT NULL default '0',
|
|
mngl_id int(11) NOT NULL default '-1',
|
|
starter int(11) NOT NULL,
|
|
`last_post` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
){$charset_collate};";
|
|
|
|
$sql5 = "
|
|
CREATE TABLE ". $table_usergroup2user." (
|
|
`id` int(11) NOT NULL auto_increment,
|
|
`user_id` int(11) NOT NULL,
|
|
`group` varchar(255) NOT NULL,
|
|
PRIMARY KEY (`id`)
|
|
){$charset_collate};";
|
|
|
|
$sql6 =
|
|
"CREATE TABLE ". $table_usergroups." (
|
|
`id` int(11) NOT NULL auto_increment,
|
|
`name` varchar(255) NOT NULL,
|
|
`description` varchar(255) default NULL,
|
|
`leaders` varchar(255) default NULL,
|
|
PRIMARY KEY (`id`)
|
|
){$charset_collate};";
|
|
|
|
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
|
|
|
dbDelta($sql1);
|
|
dbDelta($sql3);
|
|
dbDelta($sql4);
|
|
dbDelta($sql5);
|
|
dbDelta($sql6);
|
|
|
|
$xyquery2="ALTER TABLE ".$table_forums." ADD sort int( 11 ) NOT NULL;";
|
|
$xyquery3="ALTER TABLE ".$table_threads." ADD last_post datetime NOT NULL;";
|
|
$xyquery7="ALTER TABLE ".$table_posts." CHANGE thread_id parent_id int(11);";
|
|
$xyquery8="ALTER TABLE `".$table_posts."` ADD FULLTEXT ( `text` );";
|
|
$xyquery9="ALTER TABLE ".$table_threads." ADD closed int(11) NOT NULL default '0';";
|
|
$xyquery10="ALTER TABLE ".$table_threads." ADD mngl_id int(11) NOT NULL default '-1';";
|
|
$xyquery11="ALTER TABLE ".$table_forums." ADD usergroups VARCHAR( 255 ) NULL DEFAULT ''";
|
|
$xyquery12="ALTER TABLE ".$table_forums." ADD usercanpost VARCHAR( 255 ) NULL DEFAULT ''";
|
|
|
|
// 1.7.3
|
|
maybe_add_column($table_forums, 'sort', $xyquery2);
|
|
|
|
// 1.7.5
|
|
maybe_add_column($table_threads, 'last_post', $xyquery3);
|
|
|
|
// 2.0
|
|
maybe_add_column($table_posts, 'parent_id', $xyquery7);
|
|
$wpdb->query($xyquery8);
|
|
|
|
// 3.0
|
|
maybe_add_column($table_forums, 'usergroups', $xyquery11);
|
|
maybe_add_column($table_forums, 'usercanpost', $xyquery12);
|
|
|
|
// Mingle Forum 1.0
|
|
maybe_add_column($table_threads, 'closed', $xyquery9);
|
|
maybe_add_column($table_threads, 'mngl_id', $xyquery10);
|
|
|
|
$this->convert_moderators();
|
|
$this->upgrade_forums_groups();
|
|
|
|
//Setup the Skin Folder outside of the plugin
|
|
$target_path = ABSPATH.'wp-content/mingle-forum-skins';
|
|
if(!file_exists($target_path))
|
|
@mkdir($target_path."/");
|
|
|
|
$oldops['forum_db_version'] = 2;
|
|
update_option('mingleforum_options', $oldops);
|
|
}
|
|
}
|
|
|
|
function forum_menu($pos = "top"){
|
|
global $user_ID;
|
|
$menu = "";
|
|
if($user_ID || $this->allow_unreg()){
|
|
if($pos == "top")
|
|
$class = "mirrortab";
|
|
else
|
|
$class= "maintab";
|
|
|
|
$menu = "<table cellpadding='0' cellspacing='0' style='margin-right:10px;' class='forummenu'>";
|
|
$menu .= "<tr>
|
|
<td class='".$class."_first'> </td>";
|
|
if ($this->have_access($this->current_forum, 'post') && $this->have_access($this->current_group, 'post')) {
|
|
$menu .= "<td valign='top' class='".$class."_back' nowrap='nowrap'><a href='".$this->get_addtopic_link()."'>".__("New Topic", "mingleforum")."</a></td>";
|
|
}
|
|
if($user_ID)
|
|
{
|
|
if($this->is_forum_subscribed()) //Check if user has already subscribed to topic
|
|
$menu .= "<td class='".$class."_back' nowrap='nowrap'><a onclick='return notify();' href='".$this->forum_link.$this->current_forum."&forumsubs'>".__("Unsubscribe", "mingleforum")."</a></td>";
|
|
else
|
|
$menu .= "<td class='".$class."_back' nowrap='nowrap'><a onclick='return notify();' href='".$this->forum_link.$this->current_forum."&forumsubs'>".__("Subscribe", "mingleforum")."</a></td>";
|
|
}
|
|
$menu .= "<td valign='top' class='".$class."_last'> </td>
|
|
</tr>
|
|
</table>";
|
|
}
|
|
return $menu;
|
|
}
|
|
|
|
function topic_menu($pos = "top"){
|
|
global $user_ID;
|
|
$menu = "";
|
|
$stick = "";
|
|
$closed = "";
|
|
if($user_ID || $this->allow_unreg()){
|
|
if($pos == "top"){
|
|
$class = "mirrortab";
|
|
}else{
|
|
$class = "maintab";
|
|
}
|
|
if($this->is_moderator($user_ID, $this->current_forum)){
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
if($this->is_sticky()){
|
|
$stick = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->thread_link.$this->current_thread.".".$this->curr_page."&sticky&id=$this->current_thread'>".__("Undo Sticky", "mingleforum")."</a></td>";
|
|
}else{
|
|
$stick = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->thread_link.$this->current_thread.".".$this->curr_page."&sticky&id=$this->current_thread'>".__("Sticky", "mingleforum")."</a></td>";
|
|
}
|
|
if($this->is_closed()){
|
|
$closed = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->thread_link.$this->current_thread.".".$this->curr_page."&closed=0&id=$this->current_thread'>".__("Re-open", "mingleforum")."</a></td>";
|
|
}else{
|
|
$closed = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->thread_link.$this->current_thread.".".$this->curr_page."&closed=1&id=$this->current_thread'>".__("Close", "mingleforum")."</a></td>";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if($this->is_sticky()){
|
|
$stick = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->get_threadlink($this->current_thread)."&sticky&id=$this->current_thread'>".__("Undo Sticky", "mingleforum")."</a></td>";
|
|
}else{
|
|
$stick = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->get_threadlink($this->current_thread)."&sticky&id=$this->current_thread'>".__("Sticky", "mingleforum")."</a></td>";
|
|
}
|
|
if($this->is_closed()){
|
|
$closed = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->get_threadlink($this->current_thread)."&closed=0&id=$this->current_thread'>".__("Re-open", "mingleforum")."</a></td>";
|
|
}else{
|
|
$closed = "<td class='".$class."_back' nowrap='nowrap'><a href='".$this->get_threadlink($this->current_thread)."&closed=1&id=$this->current_thread'>".__("Close", "mingleforum")."</a></td>";
|
|
}
|
|
}
|
|
}
|
|
$menu .= "<table cellpadding='0' cellspacing='0' style='margin-right:10px;' class='topicmenu $class'>";
|
|
$menu .= "<tr><td class='".$class."_first'> </td>";
|
|
if(!in_array($this->current_group, $this->options['forum_disabled_cats']) || is_super_admin() || $this->is_moderator($user_ID, $this->current_forum) || $this->options['allow_user_replies_locked_cats'])
|
|
{
|
|
if(!$this->is_closed() && $this->have_access($this->current_forum, 'post') && $this->have_access($this->current_group, 'post'))
|
|
$menu .= "<td valign='top' class='".$class."_back' nowrap='nowrap'><a href='".$this->get_post_reply_link()."'>".__("Reply", "mingleforum")."</a></td>";
|
|
}
|
|
if($user_ID)
|
|
{
|
|
if($this->is_thread_subscribed()) //Check if user has already subscribed to topic
|
|
$menu .= "<td class='".$class."_back' nowrap='nowrap'><a onclick='return notify();' href='".$this->thread_link.$this->current_thread.".".$this->curr_page."&threadsubs'>".__("Unsubscribe", "mingleforum")."</a></td>";
|
|
else
|
|
$menu .= "<td class='".$class."_back' nowrap='nowrap'><a onclick='return notify();' href='".$this->thread_link.$this->current_thread.".".$this->curr_page."&threadsubs'>".__("Subscribe", "mingleforum")."</a></td>";
|
|
}
|
|
if($this->options['forum_use_rss'])
|
|
$menu .= "<td class='".$class."_back' nowrap='nowrap'><a href='$this->topic_feed_url"."$this->current_thread'>".__("RSS feed", "mingleforum")."</a></td>";
|
|
$menu .= $stick.$closed."
|
|
<td valign='top' class='".$class."_last'> </td>
|
|
</tr></table>";
|
|
}
|
|
return $menu;
|
|
}
|
|
|
|
function setup_menu(){
|
|
global $user_ID;
|
|
$this->setup_links();
|
|
|
|
if(isset($_GET['closed']))
|
|
$this->closed_post();
|
|
$link = "<a id='user_button' href='".$this->base_url."profile&id=$user_ID' title='".__("My profile", "mingleforum")."'>".__("My Profile", "mingleforum")."</a>";
|
|
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$menuitems = array(
|
|
"home" => "<a id='home_button' href='".$this->home_url."'>".__("Forum Home", "mingleforum")."</a>",
|
|
"profile" => $link,
|
|
"move" => "<a href='".$this->forum_link.$this->current_forum.".".$this->curr_page."&getNewForumID&topic=$this->current_thread'>".__("Move Topic", "mingleforum")."</a>"
|
|
);
|
|
}
|
|
else
|
|
{
|
|
$menuitems = array(
|
|
"home" => "<a id='home_button' href='".$this->home_url."'>".__("Forum Home", "mingleforum")."</a>",
|
|
"profile" => $link,
|
|
"move" => "<a href='".$this->get_forumlink($this->current_forum)."&getNewForumID&topic=$this->current_thread'>".__("Move Topic", "mingleforum")."</a>");
|
|
}
|
|
|
|
$menu = "";
|
|
if($user_ID || $this->allow_unreg()){
|
|
$menu .= "<table cellpadding='0' cellspacing='5' id='wp-mainmenu'><tr>";
|
|
$menu .= "<td valign='top' class='menu_sub'>{$menuitems['home']}</td>";
|
|
if($user_ID)
|
|
$menu .= "<td valign='top' class='menu_sub'>{$menuitems['profile']}</td>";
|
|
|
|
switch($this->current_view){
|
|
case THREAD:
|
|
if($this->is_moderator($user_ID, $this->current_forum)){
|
|
$menu .= "<td valign='top' class='menu_sub'>{$menuitems['move']}</td>";
|
|
}
|
|
}
|
|
$menu .= "</tr></table>";
|
|
}
|
|
return $menu;
|
|
}
|
|
|
|
function convert_moderators(){
|
|
global $wpdb;
|
|
if(!get_option('wpf_mod_option_vers')){
|
|
$mods = $wpdb->get_results("SELECT user_id, user_login, meta_value FROM $wpdb->usermeta
|
|
INNER JOIN $wpdb->users ON $wpdb->usermeta.user_id=$wpdb->users.ID WHERE meta_key = 'moderator' AND meta_value <> ''");
|
|
|
|
foreach($mods as $mod){
|
|
$string = explode(",", substr_replace($mod->meta_value, "", 0, 1));
|
|
|
|
update_user_meta($mod->user_id, 'wpf_moderator', maybe_serialize($string));
|
|
}
|
|
update_option('wpf_mod_option_vers', '2');
|
|
}
|
|
}
|
|
|
|
function upgrade_forums_groups() {
|
|
global $wpdb, $table_prefix;
|
|
$wpdb->get_var("SHOW TABLES LIKE '%forum_groups%'");
|
|
if ($wpdb->num_rows) {
|
|
$groups = $wpdb->get_results("SELECT * FROM {$table_prefix}forum_groups");
|
|
foreach ($groups as $group) {
|
|
$wpdb->query($wpdb->prepare(
|
|
"INSERT INTO $this->t_forums (name, description, sort, usergroups) VALUES (%s, %s, %d, %s)",
|
|
$group->name,
|
|
$group->description,
|
|
$group->sort,
|
|
$group->usergroups
|
|
));
|
|
$wpdb->query($wpdb->prepare(
|
|
"UPDATE $this->t_forums SET parent_id = %d WHERE parent_id = %d",
|
|
$wpdb->insert_id,
|
|
$group->id
|
|
));
|
|
}
|
|
$wpdb->query("DROP TABLE {$table_prefix}forum_groups");
|
|
}
|
|
}
|
|
|
|
function login_form(){
|
|
global $user_ID;
|
|
if($user_ID)
|
|
$user = get_userdata($user_ID);
|
|
$login_msg = "";
|
|
if ($user_ID)
|
|
$login_msg = "<p>".__("You are logged in as:", "mingleforum")." ".$user->user_login."</p>";
|
|
else
|
|
$login_msg = "";
|
|
|
|
if(!is_user_logged_in() && $this->options['forum_show_login_form']){
|
|
return "<form action='".wp_login_url()."' method='post'>
|
|
<label style='font-size:100%;' for='log'>".__("Username: ", "mingleforum")."</label><br /><input type='text' name='log' id='log' value='' size='20' class='wpf-input'/><br />
|
|
<label style='font-size:100%;' for='pwd'>".__("Password: ", "mingleforum")."</label><br /><input type='password' name='pwd' id='pwd' size='20' class='wpf-input'/>
|
|
<input type='submit' name='submit' value='Login' id='wpf-login-button' class='button' /><br />
|
|
<label style='font-size:100%;' for='rememberme'><input name='rememberme' id='rememberme' type='checkbox' checked='checked' value='forever' /> ".__("Remember Me", "mingleforum")."</label>
|
|
|
|
<input type='hidden' name='redirect_to' value='".$_SERVER['REQUEST_URI']."'/>
|
|
</form>";
|
|
}
|
|
else
|
|
return $login_msg;
|
|
}
|
|
|
|
function print_curr(){
|
|
$this->o .= "<p>Group: $this->current_group<br>
|
|
Forum: $this->current_forum<br>
|
|
Thread: $this->current_thread</p>";
|
|
}
|
|
|
|
// TODO
|
|
function get_userrole($user_id){
|
|
$user = get_userdata($user_id);
|
|
if($user && $user->user_level >= 9)
|
|
return __("Administrator", "mingleforum");
|
|
if(!$user_id)
|
|
return ""; //User is a guest
|
|
if($this->is_moderator($user_id, $this->current_forum))
|
|
return __("Moderator", "mingleforum");
|
|
else
|
|
{
|
|
$mePosts = $this->get_userposts_num($user_id);
|
|
if ($mePosts < $this->opt['level_one'])
|
|
return __($this->opt['level_newb_name'], "mingleforum");
|
|
if ($mePosts < $this->opt['level_two'])
|
|
return __($this->opt['level_one_name'], "mingleforum");
|
|
if ($mePosts < $this->opt['level_three'])
|
|
return __($this->opt['level_two_name'], "mingleforum");
|
|
else
|
|
return __($this->opt['level_three_name'], "mingleforum");
|
|
}
|
|
}
|
|
|
|
/**************************************************/
|
|
function forum_get_group_id($group){
|
|
$group = ($group) ? $group : 0;
|
|
while (true) {
|
|
$parent = $this->forum_get_parent($group);
|
|
if (!$parent) return $group;
|
|
$group = $parent;
|
|
}
|
|
}
|
|
function forum_get_parent($forum){
|
|
$forum = ($forum) ? $forum : 0;
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT parent_id FROM $this->t_forums WHERE id = $forum");
|
|
}
|
|
function forum_get_forum_from_post($thread){
|
|
$thread = ($thread) ? $thread : 0;
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT parent_id FROM $this->t_threads WHERE id = $thread");
|
|
}
|
|
function forum_get_group_from_post($thread_id){
|
|
return $this->forum_get_group_id($this->forum_get_parent($this->forum_get_forum_from_post($thread_id)));
|
|
}
|
|
/****************************************************/
|
|
|
|
function trail($pos = "top"){
|
|
global $wpdb;
|
|
$this->setup_links();
|
|
|
|
$class= "maintab";
|
|
if($pos == "top")
|
|
$class = "mirrortab";
|
|
|
|
$trail = "<a href='".get_permalink($this->page_id)."'>".__("Forum", "mingleforum")."</a>";
|
|
|
|
if($this->current_group)
|
|
if($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($this->current_group))."-group".$this->current_group;
|
|
$trail .= " <strong>»</strong> <a href='".rtrim($this->home_url, '/').'/'.$group.".0'>".$this->get_groupname($this->current_group)."</a>";
|
|
}
|
|
else
|
|
$trail .= " <strong>»</strong> <a href='$this->base_url"."vforum&g=$this->current_group.0'>".$this->get_groupname($this->current_group)."</a>";
|
|
|
|
$parents = array();
|
|
$current = $this->forum_get_parent($this->current_forum);
|
|
while ($current) {
|
|
$parents[] = $current;
|
|
$current = $this->forum_get_parent($current);
|
|
}
|
|
$parents = array_reverse($parents);
|
|
unset($parents[0]);
|
|
|
|
foreach ($parents as $parent) {
|
|
if ($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($this->forum_get_parent($parent))."-group".$this->forum_get_parent($parent));
|
|
$forum = $this->get_seo_friendly_title($this->get_forumname($parent)."-forum".$parent);
|
|
$trail .= " <strong>»</strong> <a href='".rtrim($this->home_url, '/').'/'.$group.'/'.$forum.".0'>".$this->get_forumname($parent)."</a>";
|
|
}
|
|
else
|
|
$trail .= " <strong>»</strong> <a href='$this->base_url"."viewforum&f=$parent.0'>".$this->get_forumname($parent)."</a>";
|
|
}
|
|
|
|
if($this->current_forum)
|
|
if ($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($this->forum_get_parent($this->current_forum))."-group".$this->forum_get_parent($this->current_forum));
|
|
$forum = $this->get_seo_friendly_title($this->get_forumname($this->current_forum)."-forum".$this->current_forum);
|
|
$trail .= " <strong>»</strong> <a href='".rtrim($this->home_url, '/').'/'.$group.'/'.$forum.".0'>".$this->get_forumname($this->current_forum)."</a>";
|
|
}
|
|
else
|
|
$trail .= " <strong>»</strong> <a href='$this->base_url"."viewforum&f=$this->current_forum.0'>".$this->get_forumname($this->current_forum)."</a>";
|
|
|
|
if($this->current_thread)
|
|
if ($this->options['forum_use_seo_friendly_urls'])
|
|
{
|
|
$group = $this->get_seo_friendly_title($this->get_groupname($this->forum_get_parent($this->forum_get_forum_from_post($this->current_thread)))."-group".$this->forum_get_parent($this->forum_get_forum_from_post($this->current_thread)));
|
|
$forum = $this->get_seo_friendly_title($this->get_forumname($this->forum_get_forum_from_post($this->current_thread))."-forum".$this->forum_get_forum_from_post($this->current_thread));
|
|
$thread = $this->get_seo_friendly_title($this->get_threadname($this->current_thread)."-thread".$this->current_thread);
|
|
$trail .= " <strong>»</strong> <a href='".rtrim($this->home_url, '/').'/'.$group.'/'.$forum.'/'.$thread.".0'>".$this->get_threadname($this->current_thread)."</a>";
|
|
}
|
|
else
|
|
$trail .= " <strong>»</strong> <a href='$this->base_url"."viewtopic&t=$this->current_thread.0'>".$this->get_threadname($this->current_thread)."</a>";
|
|
|
|
if($this->current_view == NEWTOPICS)
|
|
$trail .= " <strong>»</strong> ".__("New Topics since last visit", "mingleforum");
|
|
|
|
if($this->current_view == SEARCH){
|
|
$terms = "";
|
|
if(isset($_POST['search_words']))
|
|
$terms = htmlentities($wpdb->escape($_POST['search_words']), ENT_QUOTES);
|
|
$trail .= " <strong>»</strong> ".__("Search Results", "mingleforum")." » $terms";
|
|
}
|
|
|
|
if($this->current_view == PROFILE)
|
|
$trail .= " <strong>»</strong> ".__("Profile Info", "mingleforum");
|
|
|
|
if($this->current_view == POSTREPLY)
|
|
$trail .= " <strong>»</strong> ".__("Post Reply", "mingleforum");
|
|
|
|
if($this->current_view == EDITPOST)
|
|
$trail .= " <strong>»</strong> ".__("Edit Post", "mingleforum");
|
|
|
|
if($this->current_view == NEWTOPIC)
|
|
$trail .= " <strong>»</strong> ".__("New Topic", "mingleforum");
|
|
|
|
return apply_filters('mf_ad_above_breadcrumbs', '')."<p class='trail breadcrumbs $class'>$trail</p>"; //Adsense Area -- Above Breadcrumbs
|
|
}
|
|
|
|
function last_visit(){
|
|
global $user_ID;
|
|
if($user_ID)
|
|
return $_COOKIE['wpmfcookie'];
|
|
else
|
|
return "0000-00-00 00:00:00";
|
|
}
|
|
|
|
function set_cookie()
|
|
{
|
|
global $user_ID;
|
|
if($user_ID && !isset($_COOKIE['wpmfcookie']))
|
|
{
|
|
$last = get_user_meta($user_ID, 'lastvisit', true);
|
|
setcookie("wpmfcookie", $last, 0, "/");
|
|
update_user_meta($user_ID, 'lastvisit', $this->wpf_current_time_fixed('mysql', 0));
|
|
}
|
|
}
|
|
|
|
function markallread()
|
|
{
|
|
global $user_ID;
|
|
if($user_ID)
|
|
{
|
|
update_user_meta($user_ID, 'lastvisit', $this->wpf_current_time_fixed('mysql', 0));
|
|
$last = get_user_meta($user_ID, 'lastvisit', true);
|
|
setcookie("wpmfcookie", $last, 0, "/");
|
|
}
|
|
}
|
|
|
|
function get_avatar($user_id, $size = 60){
|
|
|
|
if($this->opt['forum_use_gravatar'] == 'true')
|
|
return get_avatar($user_id, $size);
|
|
else
|
|
return "";
|
|
}
|
|
|
|
function header(){
|
|
global $user_ID;
|
|
$avatar = "";
|
|
$this->setup_links();
|
|
$ProfLinky = "<a href='".site_url("wp-admin/profile.php") . "'>".__("Edit Profile", "mingleforum")."</a><br />";
|
|
|
|
if($user_ID){
|
|
$welcome = __("Welcome", "mingleforum")." ".$this->get_userdata($user_ID, $this->options['forum_display_name']);
|
|
$meta = "<div style='float:left'>".__("Your last visit was:", "mingleforum")." ".$this->format_date($this->last_visit())."<br />";
|
|
$meta .= "<a href='".$this->base_url."shownew'>".__("Show new topics since your last visit", "mingleforum")."</a><br />";
|
|
$meta .= "<a href='".$this->base_url."editprofile&user_id=$user_ID'>".__("Edit your forum options", "mingleforum")."</a><br />";
|
|
$meta .= $ProfLinky;
|
|
$meta .= "<a href='".wp_logout_url(get_permalink($this->get_pageid()))."'>".__("Log out", "mingleforum")."</a></div>";
|
|
$avatar = "<td class='wpf-alt' width='6%'>".$this->get_avatar($user_ID, 60)."</td>";
|
|
$colspan = "colspan = '2'";
|
|
}
|
|
else{
|
|
$meta = apply_filters('wpwf_guest_welcome_msg', "<p>".__("Welcome Guest, please login or", "mingleforum")." "."<a href='$this->reg_link'>".__("register.", "mingleforum")."</a></p>".$this->login_form()); //--weaver--
|
|
$welcome = __("Welcome", "mingleforum"). " <strong>".$this->get_userdata($user_ID, $this->options['forum_display_name'])."</strong>";
|
|
$colspan = "";
|
|
}
|
|
if(!$user_ID && !$this->allow_unreg()){
|
|
$meta = "<p>".__("Welcome Guest, posting in this forum requires", "mingleforum")." <a href='$this->reg_link'>".__("registration.", "mingleforum")."</a></p>".$this->login_form();
|
|
$colspan = "";
|
|
}
|
|
$o = "<div class='wpf'>
|
|
|
|
<table width='100%' class='wpf-table' id='profileHeader'>
|
|
<tr>
|
|
<th $colspan ><h4 style='float:left;'>$welcome </h4>
|
|
<a id='upshrink' style='float:right;' href='#' onclick='shrinkHeader(!current_header); return false;'>".__("Show/Hide Header", "mingleforum")."</a>
|
|
</th>
|
|
</tr>
|
|
|
|
<tr id='upshrinkHeader'>
|
|
$avatar
|
|
<td valign='top'>$meta</td>
|
|
</tr>
|
|
|
|
<tr id='upshrinkHeader2'>
|
|
<th class='wpf-bright' $colspan align='right'>
|
|
<div>
|
|
<form name='wpf_search_form' method='post' action='$this->base_url"."search'>
|
|
<input type='text' name='search_words' class='wpf-input' />
|
|
<input type='submit' id='wpf-search-submit' name='search_submit' value='".__("Search forums", "mingleforum")."' />
|
|
</form>
|
|
</div>
|
|
</th>
|
|
</tr>
|
|
</table>
|
|
</div>";
|
|
$o .= $this->setup_menu();
|
|
$o .= $this->trail();
|
|
$this->o .= $o;
|
|
}
|
|
|
|
function post_pageing($thread_id){
|
|
global $wpdb;
|
|
$out = __("Pages:", "mingleforum");
|
|
$count = $wpdb->get_var("SELECT count(*) FROM $this->t_posts WHERE parent_id = $thread_id");
|
|
$num_pages = ceil($count/$this->opt['forum_posts_per_page']);
|
|
if($num_pages <= 6) {
|
|
for($i = 0; $i < $num_pages; ++$i){
|
|
if($i == $this->curr_page)
|
|
$out .= " [<strong>".($i+1)."</strong>]";
|
|
else
|
|
$out .= " <a href='".$this->get_threadlink($this->current_thread, ".".$i)."'>".($i+1)."</a>";
|
|
}
|
|
}
|
|
else {
|
|
if($this->curr_page >= 4)
|
|
$out .= " <a href='".$this->get_threadlink($this->current_thread)."'>".__("First", "mingleforum")."</a> << ";
|
|
for($i = 3; $i > 0; $i--) {
|
|
if((($this->curr_page + 1) - $i) > 0)
|
|
$out .= " <a href='".$this->get_threadlink($this->current_thread, ".".($this->curr_page - $i))."'>".(($this->curr_page + 1) - $i)."</a>";
|
|
}
|
|
$out .= " [<strong>".($this->curr_page + 1)."</strong>]";
|
|
for($i = 1; $i <= 3; $i++) {
|
|
if((($this->curr_page + 1) + $i) <= $num_pages)
|
|
$out .= " <a href='".$this->get_threadlink($this->current_thread, ".".($this->curr_page + $i))."'>".(($this->curr_page + 1) + $i)."</a>";
|
|
}
|
|
if($num_pages - $this->curr_page >= 5)
|
|
$out .= " >> <a href='".$this->get_threadlink($this->current_thread, ".".($num_pages-1))."'>".__("Last", "mingleforum")."</a>";
|
|
}
|
|
return "<span class='wpf-pages'>".$out."</span>";
|
|
}
|
|
|
|
function thread_pageing($forum_id){
|
|
global $wpdb;
|
|
$out = __("Pages:", "mingleforum");
|
|
$count = $wpdb->get_var("SELECT count(*) FROM $this->t_threads WHERE parent_id = $forum_id AND `status` <> 'sticky'");
|
|
$num_pages = ceil($count/$this->opt['forum_threads_per_page']);
|
|
if($num_pages <= 6) {
|
|
for($i = 0; $i < $num_pages; ++$i){
|
|
if($i == $this->curr_page)
|
|
$out .= " [<strong>".($i+1)."</strong>]";
|
|
else
|
|
$out .= " <a href='".$this->get_forumlink($this->current_forum, '.'.$i)."'>".($i+1)."</a>";
|
|
}
|
|
}
|
|
else {
|
|
if($this->curr_page >= 4)
|
|
$out .= " <a href='".$this->get_forumlink($this->current_forum, ".0")."'>".__("First", "mingleforum")."</a> << ";
|
|
for($i = 3; $i > 0; $i--) {
|
|
if((($this->curr_page + 1) - $i) > 0)
|
|
$out .= " <a href='".$this->get_forumlink($this->current_forum, ".".($this->curr_page - $i))."'>".(($this->curr_page + 1) - $i)."</a>";
|
|
}
|
|
$out .= " [<strong>".($this->curr_page + 1)."</strong>]";
|
|
for($i = 1; $i <= 3; $i++) {
|
|
if((($this->curr_page + 1) + $i) <= $num_pages)
|
|
$out .= " <a href='".$this->get_forumlink($this->current_forum, ".".($this->curr_page + $i))."'>".(($this->curr_page + 1) + $i)."</a>";
|
|
}
|
|
if($num_pages - $this->curr_page >= 5)
|
|
$out .= " >> <a href='".$this->get_forumlink($this->current_forum, ".".($num_pages-1))."'>".__("Last", "mingleforum")."</a>";
|
|
}
|
|
return "<span class='wpf-pages'>".$out."</span>";
|
|
}
|
|
|
|
function remove_topic($forum_id){
|
|
global $user_ID, $wpdb;
|
|
$topic = $_GET['topic'];
|
|
if($this->is_moderator($user_ID, $forum_id)){
|
|
$wpdb->query($wpdb->prepare("DELETE FROM {$this->t_posts} WHERE `parent_id` = %d", $topic));
|
|
$wpdb->query($wpdb->prepare("DELETE FROM {$this->t_threads} WHERE `id` = %d", $topic));
|
|
}else{
|
|
wp_die(__("An unknown error has occured. Please try again.", "mingleforum"));
|
|
}
|
|
}
|
|
|
|
function getNewForumID(){
|
|
global $user_ID;
|
|
$topic = !empty($_GET['topic']) ? (int)$_GET['topic'] : 0;
|
|
$topic = !empty($_GET['t']) ? (int)$_GET['t'] : $topic;
|
|
if($this->is_moderator($user_ID, $this->current_forum)){
|
|
$currentForumID = $this->check_parms($_GET['f']);
|
|
$strOUT = '
|
|
<form id="" method="post" action="'.$this->base_url.'viewforum&f='.$currentForumID.'&move_topic&topic='.$topic.'">
|
|
'.__("Move", "mingleforum").' "<strong>'.$this->get_subject($topic).'</strong>" '.__("to new forum:", "mingleforum").' <select id="newForumID" name="newForumID" onchange="location=\''.$this->base_url.'viewforum&f='.$currentForumID.'&move_topic&topic='.$topic.'&newForumID=\'+this.options[this.selectedIndex].value">';
|
|
$frs = $this->get_forums();
|
|
$strOUT .= $this->move_getSubForums($frs, $currentForumID);
|
|
$strOUT .= '
|
|
</select>
|
|
<noscript><input type="submit" value="Go!" /></noscript>
|
|
</form>';
|
|
|
|
return $strOUT;
|
|
}else{
|
|
wp_die(__("An unknown error has occured. Please try again.", "mingleforum"));
|
|
}
|
|
}
|
|
|
|
function move_getSubForums($frs, $cfid, $i=0) {
|
|
$out = '';
|
|
foreach ($frs as $f) {
|
|
$lvl = '';
|
|
for ($l=0;$l<$i;$l++)
|
|
$lvl.='-';
|
|
$out .= '<option value="'.$f->id.'"'.($f->id==$cfid ? ' selected="selected"' : '').($f->parent_id==0 ? ' disabled="disabled"' : '').'>'.$lvl.' '.$f->name.'</option>';
|
|
$subfrs = $this->get_forums($f->id);
|
|
if (!empty($subfrs)) {
|
|
$out .= $this->move_getSubForums($subfrs, $cfid, ++$i);
|
|
$i--;
|
|
}
|
|
}
|
|
return $out;
|
|
}
|
|
|
|
function move_topic($forum_id){
|
|
global $user_ID, $wpdb;
|
|
$topic = $_GET['topic'];
|
|
$newForumID = !empty($_GET['newForumID']) ? (int)$_GET['newForumID'] : 0;
|
|
$newForumID = !empty($_POST['newForumID']) ? (int)$_POST['newForumID'] : $newForumID;
|
|
if($this->is_moderator($user_ID, $forum_id)){
|
|
$strSQL = $wpdb->prepare("UPDATE {$this->t_threads} SET `parent_id` = {$newForumID} WHERE id = %d", $topic);
|
|
$wpdb->query($strSQL);
|
|
@header("location: ".$this->base_url."viewforum&f=".$newForumID);
|
|
@exit;
|
|
}else{
|
|
wp_die(__("An unknown error has occured. Please try again.", "mingleforum"));
|
|
}
|
|
}
|
|
|
|
function remove_post(){
|
|
global $user_ID, $wpdb;
|
|
$id = (isset($_GET['id']) && is_numeric($_GET['id']))?$_GET['id']:0;
|
|
$author = $wpdb->get_var($wpdb->prepare("SELECT author_id, parent_id from {$this->t_posts} where id = %d"), $id);
|
|
|
|
$del = "fail";
|
|
if(current_user_can("administrator") || is_super_admin($user_ID))
|
|
$del = "ok";
|
|
if($this->is_moderator($user_ID, $this->current_forum))
|
|
$del = "ok";
|
|
if($user_ID == $author->author_id)
|
|
$del = "ok";
|
|
|
|
if($del == "ok"){
|
|
$wpdb->query($wpdb->prepare("DELETE FROM {$this->t_posts} WHERE id = %d", $id));
|
|
$nbmsg = $wpdb->get_var("SELECT COUNT(*) FROM {$this->t_posts} WHERE parent_id = {$author->parent_id}");
|
|
if (!$nbmsg)
|
|
$wpdb->query("DELETE FROM {$this->t_threads} WHERE id = {$author->parent_id}");
|
|
$this->o .= "<div class='updated'>".__("Post deleted", "mingleforum")."</div>";
|
|
}else{
|
|
wp_die(__("An unknown error has occured. Please try again.", "mingleforum"));
|
|
}
|
|
}
|
|
|
|
function sticky_post(){
|
|
global $user_ID, $wpdb;
|
|
if(current_user_can("administrator") || is_super_admin($user_ID)){
|
|
if(!$this->is_moderator($user_ID, $this->current_forum)){
|
|
wp_die(__("An unknown error has occured. Please try again.", "mingleforum"));
|
|
}
|
|
}
|
|
$id = (isset($_GET['id']) && is_numeric($_GET['id']))?$_GET['id']:0;
|
|
$status = $wpdb->get_var($wpdb->prepare("SELECT status FROM {$this->t_threads} WHERE id = %d", $id));
|
|
|
|
switch($status){
|
|
case 'sticky':
|
|
$wpdb->query($wpdb->prepare("UPDATE {$this->t_threads} SET status = 'open' WHERE id = %d", $id));
|
|
break;
|
|
case 'open':
|
|
$wpdb->query($wpdb->prepare("UPDATE {$this->t_threads} SET status = 'sticky' WHERE id = %d", $id));
|
|
break;
|
|
}
|
|
}
|
|
|
|
function forum_subscribe()
|
|
{
|
|
global $user_ID;
|
|
if(isset($_GET['forumsubs']) && $user_ID)
|
|
{
|
|
$useremail = $this->get_userdata($user_ID, 'user_email');
|
|
if(!empty($useremail))
|
|
{
|
|
$list = get_option("mf_forum_subscribers_".$this->current_forum, array());
|
|
if($this->is_forum_subscribed()) //remove user if already exists (user clicked unsubscribe)
|
|
{
|
|
$key = array_search($useremail, $list);
|
|
unset($list[$key]);
|
|
}
|
|
else
|
|
$list[] = $useremail;
|
|
update_option("mf_forum_subscribers_".$this->current_forum, $list);
|
|
}
|
|
}
|
|
}
|
|
|
|
function is_forum_subscribed()
|
|
{
|
|
global $user_ID;
|
|
if($user_ID)
|
|
{
|
|
$useremail = $this->get_userdata($user_ID, 'user_email');
|
|
$list = get_option("mf_forum_subscribers_".$this->current_forum, array());
|
|
if(in_array($useremail, $list))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function get_subscribed_forums()
|
|
{
|
|
global $user_ID, $wpdb;
|
|
$results = array();
|
|
$email = $this->get_userdata($user_ID, 'user_email');
|
|
$forums = $wpdb->get_results("SELECT id FROM {$this->t_forums}");
|
|
if(!empty($forums))
|
|
foreach($forums as $f)
|
|
{
|
|
$list = get_option("mf_forum_subscribers_".$f->id, array());
|
|
if(in_array($email, $list))
|
|
$results[] = $f->id;
|
|
}
|
|
return $results;
|
|
}
|
|
|
|
function thread_subscribe()
|
|
{
|
|
global $user_ID;
|
|
if(isset($_GET['threadsubs']) && $user_ID)
|
|
{
|
|
$useremail = $this->get_userdata($user_ID, 'user_email');
|
|
if(!empty($useremail))
|
|
{
|
|
$list = get_option("mf_thread_subscribers_".$this->current_thread, array());
|
|
if($this->is_thread_subscribed()) //remove user if already exists (user clicked unsubscribe)
|
|
{
|
|
$key = array_search($useremail, $list);
|
|
unset($list[$key]);
|
|
}
|
|
else
|
|
$list[] = $useremail;
|
|
update_option("mf_thread_subscribers_".$this->current_thread, $list);
|
|
}
|
|
}
|
|
}
|
|
|
|
function is_thread_subscribed()
|
|
{
|
|
global $user_ID;
|
|
if($user_ID)
|
|
{
|
|
$useremail = $this->get_userdata($user_ID, 'user_email');
|
|
$list = get_option("mf_thread_subscribers_".$this->current_thread, array());
|
|
if(in_array($useremail, $list))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function get_subscribed_threads()
|
|
{
|
|
global $user_ID, $wpdb;
|
|
$results = array();
|
|
$email = $this->get_userdata($user_ID, 'user_email');
|
|
$threads = $wpdb->get_results("SELECT id FROM {$this->t_threads}");
|
|
if(!empty($threads))
|
|
foreach($threads as $t)
|
|
{
|
|
$list = get_option("mf_thread_subscribers_".$t->id, array());
|
|
if(in_array($email, $list))
|
|
$results[] = $t->id;
|
|
}
|
|
return $results;
|
|
}
|
|
|
|
function is_sticky($thread_id = ''){
|
|
global $wpdb;
|
|
if($thread_id){
|
|
$id = $thread_id;
|
|
}else{
|
|
$id = $this->current_thread;
|
|
}
|
|
$status = $wpdb->get_var("select status from $this->t_threads where id = $id");
|
|
if($status == "sticky")
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function closed_post(){
|
|
global $user_ID, $wpdb;
|
|
if(current_user_can("administrator") || is_super_admin($user_ID)){
|
|
if(!$this->is_moderator($user_ID, $this->current_forum)){
|
|
wp_die(__("An unknown error has occured. Please try again.", "mingleforum"));
|
|
}
|
|
}
|
|
$strSQL = "UPDATE {$this->t_threads} SET closed = %d WHERE id = %d";
|
|
$wpdb->query($wpdb->prepare($strSQL, (int)$_GET['closed'], (int)$_GET['id']));
|
|
}
|
|
|
|
function is_closed($thread_id = ''){
|
|
global $wpdb;
|
|
if($thread_id){
|
|
$id = $thread_id;
|
|
}else{
|
|
$id = $this->current_thread;
|
|
}
|
|
$strSQL = $wpdb->prepare("SELECT closed FROM {$this->t_threads} WHERE id = %d", $id);
|
|
$closed = $wpdb->get_var($strSQL);
|
|
if($closed){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function allow_unreg(){
|
|
if($this->opt['forum_require_registration'] == false)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
function profile_link($user_id, $toWrap = false){
|
|
if($toWrap)
|
|
$user = wordwrap($this->get_userdata($user_id, $this->options['forum_display_name']), 10, "-<br/>", 1);
|
|
else
|
|
$user = $this->get_userdata($user_id, $this->options['forum_display_name']);
|
|
$link = "<a href='".$this->base_url."profile&id=$user_id' title='".__("View profile", "mingleforum")."'>$user</a>";
|
|
if($user == __("Guest", "mingleforum"))
|
|
return $user;
|
|
$user_op = get_user_meta($user_id, "wpf_useroptions", true);
|
|
if($user_op)
|
|
if($user_op['allow_profile'] == false)
|
|
return $user;
|
|
return $link;
|
|
}
|
|
|
|
function footer(){
|
|
$o = "";
|
|
switch($this->current_view){
|
|
case MAIN:
|
|
$o = apply_filters('mf_ad_above_info_center', ''); //Adsense Area -- Above Info Center
|
|
$o .= "<div class='wpf'>";
|
|
$o .= "<table class='wpf-table' width='100%' cellspacing='0' cellpadding='0'>";
|
|
$o .= "<tr>
|
|
<th align='center' colspan='2'>".__("Info Center", "mingleforum")."</th>
|
|
</tr>
|
|
<tr>
|
|
</tr>
|
|
<tr>
|
|
<td width='3%' class='forumIcon' align='center'><img alt='' src='$this->skin_url/images/icons/info.gif' /></td>
|
|
<td>
|
|
".$this->num_posts_total()." ".__("Posts in", "mingleforum")." ".$this->num_threads_total()." ".__("Topics Made by", "mingleforum")." ".count($this->get_users())." ".__("Members", "mingleforum").". ".__("Latest Member:", "mingleforum")." ".$this->profile_link($this->latest_member())."
|
|
<br />".$this->get_lastpost_all()."
|
|
</td>
|
|
</tr>
|
|
</table>";
|
|
$o .= "</div>";
|
|
break;
|
|
case FORUM: break;
|
|
case THREAD: break;
|
|
}
|
|
$this->o .= $o;
|
|
}
|
|
|
|
function latest_member(){
|
|
global $wpdb;
|
|
return $wpdb->get_var("select ID from $wpdb->users order by user_registered DESC limit 1");
|
|
}
|
|
|
|
function show_new(){
|
|
$this->current_view = NEWTOPICS;
|
|
global $wpdb;
|
|
$this->header();
|
|
$lastvisit = $this->last_visit();
|
|
$threads = $wpdb->get_results("select distinct($this->t_threads.id) from $this->t_posts inner join $this->t_threads on $this->t_posts.parent_id = $this->t_threads.id where $this->t_posts.date > '$lastvisit' order by $this->t_posts.date desc");
|
|
$o = "<div class='wpf'><table class='wpf-table' cellpadding='0' cellspacing='0'>
|
|
<tr>
|
|
<th colspan='5' class='wpf-bright'>".__("New topics since your last visit", "mingleforum")."</th>
|
|
</tr>
|
|
<tr>
|
|
<th width='7%'>".__("Status", "mingleforum")."</th>
|
|
<th>".__("Topic Title", "mingleforum")."</th>
|
|
<th width='11%' nowrap='nowrap'>".__("Started by", "mingleforum")."</th>
|
|
<th width='4%'>".__("Replies", "mingleforum")."</th>
|
|
<th width='22%'>".__("Last post", "mingleforum")."</th>
|
|
</tr>";
|
|
foreach($threads as $thread){
|
|
if($this->have_access($this->forum_get_group_from_post($thread->id)))
|
|
{
|
|
$starter_id = $wpdb->get_var("SELECT starter FROM $this->t_threads WHERE id = $thread->id");
|
|
$o .= "<tr>
|
|
<td align='center' class='forumIcon'>".$this->get_topic_image($thread->id)."</td>
|
|
<td class='wpf-alt' align='top'><a href='"
|
|
.$this->get_paged_threadlink($thread->id)."'>"
|
|
.$this->output_filter($this->get_threadname($thread->id))."</a>
|
|
</td>
|
|
<td>".$this->profile_link($starter_id)."</td>
|
|
<td class='wpf-alt' align='center'>".( $this->num_posts($thread->id) - 1 )."</td>
|
|
<td><small>".$this->get_lastpost($thread->id)."</small></td>
|
|
</tr>";
|
|
}
|
|
}
|
|
$o .= "</table></div>";
|
|
$this->o .= $o;
|
|
$this->footer();
|
|
}
|
|
|
|
function num_post_user($user){
|
|
global $wpdb;
|
|
return $wpdb->get_var("SELECT count(author_id) FROM $this->t_posts WHERE author_id = $user");
|
|
}
|
|
|
|
function view_profile(){
|
|
$this->current_view = PROFILE;
|
|
if(is_numeric($_GET['id'])) //Security fix to prevent SQL injections
|
|
$user_id = $_GET['id'];
|
|
else
|
|
$user_id = 0;
|
|
$user = get_userdata($user_id);
|
|
$this->header();
|
|
$o = "<div class='wpf'>
|
|
<table class='wpf-table' cellpadding='0' cellspacing='0' width='100%'>
|
|
<tr>
|
|
<th class='wpf-bright'>".__("Summary", "mingleforum")." - ".$this->get_userdata($user_id, $this->options['forum_display_name'])."</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<table class='wpf-table' cellpadding='0' cellspacing='0' width='100%'>
|
|
<tr>
|
|
<td width='20%'><strong>".__("Name:", "mingleforum")."</strong></td>
|
|
<td>$user->first_name $user->last_name</td>
|
|
<td rowspan='9' valign='top' width='1%'>".$this->get_avatar($user_id, 60)."</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>".__("Registered:", "mingleforum")."</strong></td>
|
|
<td>".$this->format_date($user->user_registered)."</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>".__("Posts:", "mingleforum")."</strong></td>
|
|
<td>".$this->num_post_user($user_id)."</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>".__("Position:", "mingleforum")."</strong></td>
|
|
<td>".$this->get_userrole($user_id)."</td></tr>
|
|
<tr>
|
|
<td><strong>".__("Website:", "mingleforum")."</strong></td>
|
|
<td><a href='$user->user_url'>$user->user_url</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>".__("AIM:", "mingleforum")."</strong></td>
|
|
<td>$user->aim</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>".__("Yahoo:", "mingleforum")."</strong></td>
|
|
<td>$user->yim</td></tr>
|
|
<tr>
|
|
<td><strong>".__("Jabber/google Talk:", "mingleforum")."</strong></td>
|
|
<td>$user->jabber</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign='top'><strong>".__("Biographical Info:", "mingleforum")."</strong></td>
|
|
<td valign='top'>".$this->output_filter(make_clickable(convert_smilies(wpautop($user->description))))."</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table></div>";
|
|
$this->o .= $o;
|
|
$this->footer();
|
|
}
|
|
|
|
function search_results(){
|
|
global $wpdb;
|
|
$o = "";
|
|
$this->current_view = SEARCH;
|
|
$this->header();
|
|
$search_string = $wpdb->escape($_POST['search_words']);
|
|
$sql = "SELECT $this->t_posts.id, `text`, $this->t_posts.subject, $this->t_posts.parent_id, $this->t_posts.`date`, MATCH (`text`) AGAINST (' {$search_string}') AS score
|
|
FROM $this->t_posts JOIN $this->t_threads on $this->t_posts.parent_id = $this->t_threads.id
|
|
AND MATCH (`text`) AGAINST ('{$search_string}')
|
|
ORDER BY score DESC
|
|
LIMIT 30";
|
|
$results = $wpdb->get_results($sql);
|
|
$max = 0;
|
|
foreach($results as $result)
|
|
if($result->score > $max)
|
|
$max = $result->score;
|
|
if($results)
|
|
$const = 100/$max;
|
|
$o .= "<table class='wpf-table' cellspacing='0' cellpadding='0' width='100%'>
|
|
<tr>
|
|
<th width='8%'>Status</th>
|
|
<th width='100%'>".__("Subject", "mingleforum")."</th>
|
|
<th>".__("Relevance", "mingleforum")."</th>
|
|
<th>".__("Started by", "mingleforum")."</th>
|
|
<th>".__("Posted", "mingleforum")."</th>
|
|
</tr>";
|
|
foreach($results as $result){
|
|
if($this->have_access($this->forum_get_group_from_post($result->parent_id))){
|
|
$starter = $wpdb->get_var("select starter from {$this->t_threads} where id = {$result->parent_id}");
|
|
$o .= "<tr>
|
|
<td valign='top' align='center'>".$this->get_topic_image($result->parent_id)."</td>
|
|
<td valign='top' class='wpf-alt'><a href='".$this->get_threadlink($result->parent_id)."'>".stripslashes($result->subject)."</a>
|
|
</td>
|
|
<td valign='top'><small>".round($result->score*$const, 1)."%</small></td>
|
|
<td valign='top' nowrap='nowrap' class='wpf-alt'>".$this->profile_link($starter)."</td>
|
|
<td valign='top' class='wpf-alt' nowrap='nowrap'>".$this->format_date($result->date)."</td>
|
|
</tr>";
|
|
}
|
|
}
|
|
$o .= "</table>";
|
|
$this->o .= $o;
|
|
$this->footer();
|
|
}
|
|
|
|
function ext_str_ireplace($findme, $replacewith, $subject){
|
|
return substr($subject, 0, stripos($subject, $findme)).
|
|
str_replace('$1', substr($subject, stripos($subject, $findme), strlen($findme)), $replacewith).
|
|
substr($subject, stripos($subject, $findme)+strlen($findme));
|
|
}
|
|
|
|
function cuttext($value, $length){
|
|
if(is_array($value)) list($string, $match_to) = $value;
|
|
else { $string = $value; $match_to = $value{0}; }
|
|
$match_start = stristr($string, $match_to);
|
|
$match_compute = strlen($string) - strlen($match_start);
|
|
if (strlen($string) > $length)
|
|
{
|
|
if ($match_compute < ($length - strlen($match_to)))
|
|
{
|
|
$pre_string = substr($string, 0, $length);
|
|
$pos_end = strrpos($pre_string, " ");
|
|
if($pos_end === false) $string = $pre_string."...";
|
|
else $string = substr($pre_string, 0, $pos_end)."...";
|
|
}
|
|
else if ($match_compute > (strlen($string) - ($length - strlen($match_to))))
|
|
{
|
|
$pre_string = substr($string, (strlen($string) - ($length - strlen($match_to))));
|
|
$pos_start = strpos($pre_string, " ");
|
|
$string = "...".substr($pre_string, $pos_start);
|
|
if($pos_start === false) $string = "...".$pre_string;
|
|
else $string = "...".substr($pre_string, $pos_start);
|
|
}
|
|
else
|
|
{
|
|
$pre_string = substr($string, ($match_compute - round(($length / 3))), $length);
|
|
$pos_start = strpos($pre_string, " "); $pos_end = strrpos($pre_string, " ");
|
|
$string = "...".substr($pre_string, $pos_start, $pos_end)."...";
|
|
if($pos_start === false && $pos_end === false) $string = "...".$pre_string."...";
|
|
else $string = "...".substr($pre_string, $pos_start, $pos_end)."...";
|
|
}
|
|
$match_start = stristr($string, $match_to);
|
|
$match_compute = strlen($string) - strlen($match_start);
|
|
}
|
|
return $string;
|
|
}
|
|
|
|
function get_topic_image($thread){
|
|
$post_count = $this->num_posts($thread);
|
|
if($this->is_closed($thread)){
|
|
return "<img src='$this->skin_url/images/topic/closed.gif' alt='".__("Closed topic", "mingleforum")."' title='".__("Closed topic", "mingleforum")."'>";
|
|
}
|
|
if($post_count < $this->opt['hot_topic']){
|
|
return "<img src='$this->skin_url/images/topic/normal_post.gif' alt='".__("Normal topic", "mingleforum")."' title='".__("Normal topic", "mingleforum")."'>";
|
|
}
|
|
if($post_count >= $this->opt['hot_topic'] && $post_count < $this->opt['veryhot_topic']){
|
|
return "<img src='$this->skin_url/images/topic/hot_post.gif' alt='".__("Hot topic", "mingleforum")."' title='".__("Hot topic", "mingleforum")."'>";
|
|
}
|
|
if($post_count >= $this->opt['veryhot_topic']){
|
|
return "<img src='$this->skin_url/images/topic/my_hot_post.gif' alt='".__("Very Hot topic", "mingleforum")."' title='".__("Very Hot topic", "mingleforum")."'>";
|
|
}
|
|
}
|
|
|
|
function get_topic_image_two($thread){
|
|
$post_count = $this->num_posts($thread);
|
|
if($this->is_closed($thread)){
|
|
return "closed.gif";
|
|
}
|
|
if($post_count < $this->opt['hot_topic']){
|
|
return "normal_post.gif";
|
|
}
|
|
if($post_count >= $this->opt['hot_topic'] && $post_count < $this->opt['veryhot_topic']){
|
|
return "hot_post.gif";
|
|
}
|
|
if($post_count >= $this->opt['veryhot_topic']){
|
|
return "my_hot_post.gif";
|
|
}
|
|
}
|
|
|
|
function get_captcha(){
|
|
global $user_ID;
|
|
$out = "";
|
|
if(!$user_ID && $this->opt['forum_captcha'])
|
|
{
|
|
include_once(WPFPATH."captcha/shared.php");
|
|
include_once(WPFPATH."captcha/captcha_code.php");
|
|
$wpf_captcha = new CaptchaCode();
|
|
$wpf_code = wpf_str_encrypt($wpf_captcha->generateCode(6));
|
|
$out .= " <tr>
|
|
<td><img alt='' src='".WPFURL."captcha/captcha_images.php?width=120&height=40&code=".$wpf_code."' />
|
|
<input type='hidden' name='wpf_security_check' value='".$wpf_code."'></td>
|
|
<td>".__("Security Code:", "mingleforum")."<input id='wpf_security_code' name='wpf_security_code' type='text' class='wpf-input'/></td>
|
|
</tr>";
|
|
}
|
|
return $out;
|
|
}
|
|
|
|
function get_quick_reply_captcha(){
|
|
global $user_ID;
|
|
$out = "";
|
|
$out .= apply_filters('wpwf_quick_form_guestinfo',"");//--weaver-- show the guest info form
|
|
if(!$user_ID && $this->opt['forum_captcha'])
|
|
{
|
|
include_once(WPFPATH."captcha/shared.php");
|
|
include_once(WPFPATH."captcha/captcha_code.php");
|
|
$wpf_captcha = new CaptchaCode();
|
|
$wpf_code = wpf_str_encrypt($wpf_captcha->generateCode(6));
|
|
$out .= " <tr>
|
|
<td>
|
|
<img src='".WPFURL."captcha/captcha_images.php?width=120&height=40&code=".$wpf_code."' />
|
|
<input type='hidden' name='wpf_security_check' value='".$wpf_code."'><br/>
|
|
<input id='wpf_security_code' name='wpf_security_code' type='text' class='wpf-input'/>".__("Enter Security Code: (required)", "mingleforum")
|
|
."</td>
|
|
</tr>";
|
|
}
|
|
return $out;
|
|
}
|
|
|
|
function notify_thread_subscribers($thread_id, $subject, $content, $date)
|
|
{
|
|
global $user_ID;
|
|
$submitter_name = (!$user_ID)?"Guest":$this->get_userdata($user_ID, $this->options['forum_display_name']);
|
|
$submitter_email = (!$user_ID)?"guest@nosite.com":$this->get_userdata($user_ID, 'user_email');
|
|
$sender = get_bloginfo("name");
|
|
$to = get_option("mf_thread_subscribers_".$thread_id, array());
|
|
$posMailer = array_search($submitter_email, $to);
|
|
if ($posMailer !== false)
|
|
unset($to[$posMailer]);
|
|
|
|
$subject = __("Forum post - ", "mingleforum").$subject;
|
|
$message = __("DETAILS:", "mingleforum")."<br/><br/>".
|
|
__("Name:", "mingleforum")." ".$submitter_name."<br/>".
|
|
__("Date:", "mingleforum")." ".$this->format_date($date)."<br/>".
|
|
__("Reply Content:", "mingleforum")."<br/>".$content."<br/><br/>".
|
|
__("View Post Here:", "mingleforum")." ".$this->get_threadlink($thread_id);
|
|
$headers = "MIME-Version: 1.0\r\n".
|
|
"From: ".$sender." "."<".get_bloginfo("admin_email").">\r\n".
|
|
"Content-Type: text/HTML; charset=\"".get_option('blog_charset')."\"\r\n".
|
|
"BCC: ".implode(",", $to)."\r\n";
|
|
if(!empty($to))
|
|
wp_mail("", $subject, make_clickable(convert_smilies(wpautop($this->output_filter(stripslashes($message))))), $headers);
|
|
}
|
|
|
|
function notify_forum_subscribers($thread_id, $subject, $content, $date, $forum_id)
|
|
{
|
|
global $user_ID;
|
|
$submitter_name = (!$user_ID)?"Guest":$this->get_userdata($user_ID, $this->options['forum_display_name']);
|
|
$submitter_email = (!$user_ID)?"guest@nosite.com":$this->get_userdata($user_ID, 'user_email');
|
|
$sender = get_bloginfo("name");
|
|
$to = get_option("mf_forum_subscribers_".$forum_id, array());
|
|
$posMailer = array_search($submitter_email, $to);
|
|
if ($posMailer !== false)
|
|
unset($to[$posMailer]);
|
|
|
|
$subject = __("Forum post - ", "mingleforum").$subject;
|
|
$message = __("DETAILS:", "mingleforum")."<br/><br/>".
|
|
__("Name:", "mingleforum")." ".$submitter_name."<br/>".
|
|
__("Date:", "mingleforum")." ".$this->format_date($date)."<br/>".
|
|
__("Reply Content:", "mingleforum")."<br/>".$content."<br/><br/>".
|
|
__("View Post Here:", "mingleforum")." ".$this->get_threadlink($thread_id);
|
|
$headers = "MIME-Version: 1.0\r\n".
|
|
"From: ".$sender." "."<".get_bloginfo("admin_email").">\r\n".
|
|
"Content-Type: text/HTML; charset=\"".get_option('blog_charset')."\"\r\n".
|
|
"BCC: ".implode(",", $to)."\r\n";
|
|
if(!empty($to))
|
|
wp_mail("", $subject, make_clickable(convert_smilies(wpautop($this->output_filter(stripslashes($message))))), $headers);
|
|
}
|
|
|
|
function notify_admins($thread_id, $subject, $content, $date)
|
|
{
|
|
global $user_ID;
|
|
$submitter_name = (!$user_ID)?"Guest":$this->get_userdata($user_ID, $this->options['forum_display_name']);
|
|
$submitter_email = (!$user_ID)?"guest@nosite.com":$this->get_userdata($user_ID, 'user_email');
|
|
$sender = get_bloginfo("name");
|
|
$to = get_bloginfo("admin_email");
|
|
$subject = __("New Forum content - ", "mingleforum").$subject;
|
|
$message = __("DETAILS:", "mingleforum")."<br/><br/>".
|
|
__("Name:", "mingleforum")." ".$submitter_name."<br/>".
|
|
__("Email:", "mingleforum")." ".$submitter_email."<br/>".
|
|
__("Date:", "mingleforum")." ".$this->format_date($date)."<br/>".
|
|
__("Reply Content:", "mingleforum")."<br/>".$content."<br/><br/>".
|
|
__("View Post Here:", "mingleforum")." ".$this->get_threadlink($thread_id);
|
|
$headers = "MIME-Version: 1.0\r\n".
|
|
"From: ".$sender." "."<".$to.">\n".
|
|
"Content-Type: text/HTML; charset=\"".get_option('blog_charset')."\"\r\n";
|
|
if($this->options['notify_admin_on_new_posts'])
|
|
if(!empty($to))
|
|
wp_mail($to, $subject, make_clickable(convert_smilies(wpautop($this->output_filter(stripslashes($message))))), $headers);
|
|
}
|
|
|
|
function autoembed($string)
|
|
{
|
|
global $wp_embed;
|
|
if (is_object($wp_embed))
|
|
return $wp_embed->autoembed($string);
|
|
else
|
|
return $string;
|
|
}
|
|
|
|
function rewriting_on()
|
|
{
|
|
$permalink_structure = get_option('permalink_structure');
|
|
return ($permalink_structure and !empty($permalink_structure));
|
|
}
|
|
|
|
function get_mingle_version()
|
|
{
|
|
$plugin_data = implode('', file(ABSPATH."wp-content/plugins/mingle/mingle.php"));
|
|
$version = '';
|
|
if (preg_match("|Version:(.*)|i", $plugin_data, $version))
|
|
$version = $version[1];
|
|
return (string)$version;
|
|
}
|
|
function convert_version_to_int($version)
|
|
{
|
|
$result = str_replace(".", "", $version);
|
|
return (int)$result;
|
|
}
|
|
|
|
function admin_get_pages()
|
|
{
|
|
global $wpdb;
|
|
|
|
$query = "SELECT * FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'page'";
|
|
|
|
$results = $wpdb->get_results( $query );
|
|
|
|
if($results)
|
|
return $results;
|
|
else
|
|
return array();
|
|
}
|
|
|
|
//SEO Friendly URL stuff -- Pain in the @$$! -- But I am the bomb.com
|
|
function get_seo_friendly_query()
|
|
{
|
|
$end = array();
|
|
$request_uri = $_SERVER['REQUEST_URI'];
|
|
$link = str_replace(site_url(), '', get_permalink($this->get_pageid()));
|
|
$uri = explode('/', trim(str_replace($link, '', $request_uri), '/'));
|
|
if (array_count_values($uri))
|
|
{
|
|
$m = end($uri);
|
|
$found = '';
|
|
preg_match("/.*-(group|forum|thread)(\d*(\.?\d+)?)$/", $m, $found);
|
|
}
|
|
if (!empty($found))
|
|
{
|
|
$end = array('action' => $found[1], 'id' => $found[2]);
|
|
}
|
|
return $end;
|
|
}
|
|
|
|
function get_seo_friendly_title($str, $replace=array())
|
|
{
|
|
if(!empty($replace)) //Currently not used
|
|
{
|
|
$str = str_replace((array)$replace, ' ', $str);
|
|
}
|
|
if(function_exists('ctl_sanitize_title')) //perfect for crillic languages
|
|
return ctl_sanitize_title($str);
|
|
|
|
return sanitize_title_with_dashes($str); //Seems to work for most other languages
|
|
}
|
|
|
|
function flush_wp_rewrite_rules()
|
|
{
|
|
global $wp_rewrite;
|
|
$wp_rewrite->flush_rules();
|
|
}
|
|
|
|
function set_seo_friendly_rules($args)
|
|
{
|
|
$new = array();
|
|
$link = trim(str_replace(array(site_url(), 'index.php/'), '', get_permalink($this->get_pageid())), '/');
|
|
$new['('.$link.')(/[-/0-9a-zA-Z]+)?/(.*)$'] = 'index.php?pagename=$matches[1]&page=$matches[2]';
|
|
return $new + $args;
|
|
}
|
|
|
|
//Add a dynamic sitemap for the forum posts
|
|
function do_sitemap()
|
|
{
|
|
$priority = "0.8";
|
|
$freq = "daily";
|
|
$threads = $this->get_threads(false);
|
|
$ind = " ";
|
|
$nl = "\n";
|
|
|
|
if(!empty($threads))
|
|
{
|
|
$out = "<?xml version='1.0' encoding='UTF-8'?>".$nl."<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>".$nl;
|
|
foreach($threads as $t)
|
|
{
|
|
$time = explode(' ', $t->last_post, 2);
|
|
$time = explode('-', $time[0], 3);
|
|
$out .= $ind."<url>".$nl.$ind.$ind."<loc>".$this->clean_link($this->get_threadlink($t->id))."</loc>".$nl.$ind.$ind."<lastmod>".date_i18n('Y-m-d', mktime(0, 0, 0, $time[1], $time[2], $time[0]))."</lastmod>".$nl.$ind.$ind."<changefreq>".$freq."</changefreq>".$nl.$ind.$ind."<priority>".$priority."</priority>".$nl.$ind."</url>".$nl;
|
|
}
|
|
$out .= "</urlset>";
|
|
}
|
|
echo $out;
|
|
}
|
|
|
|
function clean_link($l)
|
|
{
|
|
$l = str_replace('&', '&', $l);
|
|
return $l;
|
|
}
|
|
|
|
//Filter function for ads
|
|
function mf_ad_above_forum()
|
|
{
|
|
if($this->ads_options['mf_ad_above_forum_on'])
|
|
$str = "<div class='mf-ad-above-forum'>".stripslashes($this->ads_options['mf_ad_above_forum'])."</div><br/>";
|
|
else
|
|
$str = '';
|
|
return $str;
|
|
}
|
|
|
|
function mf_ad_below_forum()
|
|
{
|
|
if($this->ads_options['mf_ad_below_forum_on'])
|
|
$str = "<br/><div class='mf-ad-below-forum'>".stripslashes($this->ads_options['mf_ad_below_forum'])."</div>";
|
|
else
|
|
$str = '';
|
|
return $str;
|
|
}
|
|
|
|
function mf_ad_above_branding()
|
|
{
|
|
if($this->ads_options['mf_ad_above_branding_on'])
|
|
$str = "<br/><div class='mf-ad-above-branding'>".stripslashes($this->ads_options['mf_ad_above_branding'])."</div><br/>";
|
|
else
|
|
$str = '';
|
|
return $str;
|
|
}
|
|
|
|
function mf_ad_above_info_center()
|
|
{
|
|
if($this->ads_options['mf_ad_above_info_center_on'])
|
|
$str = "<div class='mf-ad-above-info-center'>".stripslashes($this->ads_options['mf_ad_above_info_center'])."</div><br/>";
|
|
else
|
|
$str = '';
|
|
return $str;
|
|
}
|
|
|
|
function mf_ad_above_quick_reply()
|
|
{
|
|
if($this->ads_options['mf_ad_above_quick_reply_on'])
|
|
$str = "<div class='mf-ad-above-quick-reply'>".stripslashes($this->ads_options['mf_ad_above_quick_reply'])."</div>";
|
|
else
|
|
$str = '';
|
|
return $str;
|
|
}
|
|
|
|
function mf_ad_above_breadcrumbs()
|
|
{
|
|
if($this->ads_options['mf_ad_above_breadcrumbs_on'])
|
|
$str = "<br/><div class='mf-ad-above-breadcrumbs'>".stripslashes($this->ads_options['mf_ad_above_breadcrumbs'])."</div>";
|
|
else
|
|
$str = '';
|
|
return $str;
|
|
}
|
|
|
|
function mf_ad_below_first_post()
|
|
{
|
|
if($this->ads_options['mf_ad_below_first_post_on'])
|
|
$str = "<tr><td colspan='2'><div class='mf-ad-below-first-post'>".stripslashes($this->ads_options['mf_ad_below_first_post'])."</div></td></tr>";
|
|
else
|
|
$str = '';
|
|
return $str;
|
|
}
|
|
|
|
//Integrate WP Posts with the Forum
|
|
function send_wp_posts_to_forum()
|
|
{
|
|
add_meta_box('mf_posts_to_forum', __('Mingle Forum Post Options', 'mingleforum'), array(&$this, 'show_meta_box_options'), 'post');
|
|
}
|
|
|
|
function show_meta_box_options()
|
|
{
|
|
$forums = $this->get_forums();
|
|
echo '<input type="checkbox" name="mf_post_to_forum" value="true" /> '.__('Add this post to', 'mingleforum');
|
|
echo ' <select name="mf_post_to_forum_forum">';
|
|
foreach($forums as $f)
|
|
echo '<option value="'.$f->id.'">'.$f->name.'</option>';
|
|
echo '</select><br/><small>'.__('Do not check this if this post has already been linked to the forum!', 'mingleforum').'</small>';
|
|
}
|
|
|
|
function saving_posts($post_id)
|
|
{
|
|
global $wpdb, $user_ID;
|
|
$this->setup_links();
|
|
|
|
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
|
|
return;
|
|
|
|
if('post' == $_POST['post_type'])
|
|
{
|
|
if(!current_user_can('edit_post', $post_id))
|
|
return;
|
|
}
|
|
else
|
|
return;
|
|
|
|
$mydata = ($_POST['mf_post_to_forum'] == 'true')?true:false;
|
|
|
|
if($mydata)
|
|
{
|
|
$date = $this->wpf_current_time_fixed('mysql', 0);
|
|
$fid = (int)$_POST['mf_post_to_forum_forum'];
|
|
$_POST['mf_post_to_forum'] = 'false'; //Eternal loop if this isn't set to false
|
|
$post = get_post($post_id);
|
|
$sql_thread = "INSERT INTO {$this->t_threads} (last_post, subject, parent_id, `date`, status, starter) VALUES('{$date}', '".$this->strip_single_quote($post->post_title)."', '{$fid}', '{$date}', 'open', '{$user_ID}')";
|
|
$wpdb->query($sql_thread);
|
|
$tid = $wpdb->insert_id;
|
|
$sql_post = "INSERT INTO {$this->t_posts} (text, parent_id, `date`, author_id, subject) VALUES('".$this->input_filter($wpdb->escape($post->post_content))."', '{$tid}', '{$date}', '{$user_ID}', '".$this->strip_single_quote($post->post_title)."')";
|
|
$wpdb->query($sql_post);
|
|
$new = $post->post_content."\n".'<p><a href="'.$this->get_threadlink($tid).'">'.__("Join the Forum discussion on this post", "mingleforum").'</a></p>';
|
|
$post->post_content = $new;
|
|
wp_update_post($post);
|
|
}
|
|
}
|
|
|
|
function strip_single_quote($string)
|
|
{
|
|
$Find = array("'", "\\");
|
|
$Replace = array("", "");
|
|
$newStr = str_replace($Find, $Replace, $string);
|
|
return $newStr;
|
|
}
|
|
|
|
} // End class
|
|
} // End
|
|
?>
|