Files
IPB/upload/sources/Moderate.php
T
2025-12-19 00:16:25 -08:00

2094 lines
60 KiB
PHP

<?php
/*
+--------------------------------------------------------------------------
| Invision Board v1.1
| ========================================
| by Matthew Mecham
| (c) 2001,2002 Invision Power Services
| http://www.ibforums.com
| ========================================
| Web: http://www.ibforums.com
| Email: phpboards@ibforums.com
| Licence Info: phpib-licence@ibforums.com
+---------------------------------------------------------------------------
|
| > Moderation core module
| > Module written by Matt Mecham
| > Date started: 19th February 2002
|
| > Module Version 1.0.0
+--------------------------------------------------------------------------
*/
$idx = new Moderate;
class Moderate {
var $output = "";
var $base_url = "";
var $html = "";
var $moderator = "";
var $forum = array();
var $topic = array();
var $upload_dir = "";
/***********************************************************************************/
//
// Our constructor, load words, load skin, print the topic listing
//
/***********************************************************************************/
function Moderate() {
global $ibforums, $DB, $std, $print, $skin_universal, $HTTP_POST_VARS;
// Make sure this is a POST request, not a naughty IMG redirect
if ($ibforums->input['CODE'] != '04' && $ibforums->input['CODE'] != '02' && $ibforums->input['CODE'] != '20' && $ibforums->input['CODE'] != '22')
{
if ($HTTP_POST_VARS['act'] == '')
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'incorrect_use') );
}
}
//-------------------------------------
// Compile the language file
//-------------------------------------
$ibforums->lang = $std->load_words($ibforums->lang, 'lang_mod', $ibforums->lang_id);
$this->html = $std->load_template('skin_mod');;
//-------------------------------------
// Check the input
//-------------------------------------
if ($ibforums->input['t'])
{
$ibforums->input['t'] = intval($ibforums->input['t']);
if (! $ibforums->input['t'] )
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'missing_files') );
}
else
{
$DB->query("SELECT tid, title, description, posts, state, starter_id, pinned, forum_id, last_post from ibf_topics WHERE tid='".$ibforums->input['t']."'");
$this->topic = $DB->fetch_row();
if (empty($this->topic['tid']))
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'missing_files') );
}
}
}
if ($ibforums->input['p'])
{
$ibforums->input['p'] = intval($ibforums->input['p']);
if (! $ibforums->input['p'] )
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'missing_files') );
}
}
$ibforums->input['f'] = intval($ibforums->input['f']);
if (! $ibforums->input['f'] )
{
$std->Error( array( 'LEVEL' => 1,'MSG' => 'missing_files') );
}
$ibforums->input['st'] = $ibforums->input['st'] ? $std->is_number($ibforums->input['st']) : 0;
//-------------------------------------
// Get the forum info based on the forum ID, get the category name, ID, and get the topic details
//-------------------------------------
$DB->query("SELECT f.*, c.name as cat_name, c.id as cat_id from ibf_forums f, ibf_categories c WHERE f.id=".$ibforums->input['f']." and c.id=f.category");
$this->forum = $DB->fetch_row();
//-------------------------------------
// Error out if we can not find the forum
//-------------------------------------
if (!$this->forum['id'])
{
$std->Error( array( LEVEL => 1, MSG => 'missing_files') );
}
$this->base_url = "{$ibforums->vars['board_url']}/index.{$ibforums->vars['php_ext']}?s={$ibforums->session_id}";
if ($ibforums->member['id'])
{
if ($ibforums->member['g_is_supmod'] != 1)
{
$DB->query("SELECT * FROM ibf_moderators WHERE forum_id='".$this->forum['id']."' AND (member_id='".$ibforums->member['id']."' OR (is_group=1 AND group_id='".$ibforums->member['mgroup']."'))");
$this->moderator = $DB->fetch_row();
}
}
$this->upload_dir = $ibforums->vars['upload_dir'];
//-------------------------------------
// Convert the code ID's into something
// use mere mortals can understand....
//-------------------------------------
switch ($ibforums->input['CODE']) {
case '02':
$this->move_form();
break;
case '03':
$this->delete_form();
break;
case '04':
$this->delete_post();
break;
case '05':
$this->edit_form();
break;
case '00':
$this->close_topic();
break;
case '01':
$this->open_topic();
break;
case '08':
$this->delete_topic();
break;
case '12':
$this->do_edit();
break;
case '14':
$this->do_move();
break;
case '15':
$this->pin_topic();
break;
case '16':
$this->unpin_topic();
break;
case '17':
$this->rebuild_topic();
break;
//-------------------------
case '20':
$this->poll_edit_form();
break;
case '21':
$this->poll_edit_do();
break;
//-------------------------
case '22':
$this->poll_delete_form();
break;
case '23':
$this->poll_delete_do();
break;
//-------------------------
case '30':
$this->unsubscribe_all_form();
break;
case '31':
$this->unsubscribe_all();
break;
//-------------------------
case '50':
$this->split_start();
break;
case '51':
$this->split_complete();
break;
//-------------------------
case '60':
$this->merge_start();
break;
case '61':
$this->merge_complete();
break;
//-------------------------
case '90':
$this->topic_history();
break;
default:
$this->moderate_error();
break;
}
// If we have any HTML to print, do so...
$print->add_output("$this->output");
$print->do_output( array( 'TITLE' => $this->page_title, 'JS' => 0, NAV => $this->nav ) );
}
/*************************************************/
// TOPIC HISTORY:
// ---------------
//
/*************************************************/
function topic_history() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_access_cp'] == 1) {
$passed = 1;
}
else
{
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$tid = intval($ibforums->input['t']);
//-----------------------------------------
// Get all info for this topic-y-poos
//-----------------------------------------
$DB->query("SELECT * FROM ibf_topics WHERE tid='$tid'");
$topic = $DB->fetch_row();
if ($topic['last_post'] == $topic['start_date'])
{
$avg_posts = 1;
}
else
{
$avg_posts = round( ($topic['posts'] + 1) / ((( $topic['last_post'] - $topic['start_date']) / 86400)), 1);
}
if ($avg_posts < 0)
{
$avg_posts = 1;
}
$data = array(
'th_topic' => $topic['title'],
'th_desc' => $topic['description'],
'th_start_date' => $std->get_date($topic['start_date'], 'LONG'),
'th_start_name' => $std->make_profile_link($topic['starter_name'], $topic['starter_id'] ),
'th_last_date' => $std->get_date($topic['last_post'], 'LONG'),
'th_last_name' => $std->make_profile_link($topic['last_poster_name'], $topic['last_poster_id'] ),
'th_avg_post' => $avg_posts,
);
$this->output .= $this->html->topic_history($data);
$this->output .= $this->html->mod_log_start();
// Do we have any logs in the mod-logs DB about this topic? eh? well?
$DB->query("SELECT * FROM ibf_moderator_logs WHERE topic_id='$tid' ORDER BY ctime DESC");
if ( ! $DB->get_num_rows() )
{
$this->output .= $this->html->mod_log_none();
}
else
{
while ($row = $DB->fetch_row())
{
$row['member'] = $std->make_profile_link($row['member_name'], $row['member_id'] );
$row['date'] = $std->get_date($row['ctime'], 'LONG');
$this->output .= $this->html->mod_log_row($row);
}
}
$this->output .= $this->html->mod_log_end();
$this->page_title = $this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/*************************************************/
// SPLIT TOPICS:
// ---------------
//
/*************************************************/
function split_start() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['split_merge'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
//-----------------------------------------
require "./sources/lib/post_parser.php";
$this->parser = new post_parser();
//-----------------------------------------
$jump_html = $std->build_forum_jump(0,1);
$this->output = $this->html_start_form( array( 1 => array( 'CODE', '51' ),
2 => array( 't' , $this->topic['tid'] ),
3 => array( 'f' , $this->forum['id'] ),
) );
$this->output .= $this->html->table_top( $ibforums->lang['st_top']." ".$this->forum['name']." &gt; ".$this->topic['title'] );
$this->output .= $this->html->mod_exp( $ibforums->lang['st_explain'] );
$this->output .= $this->html->split_body( $jump_html );
//-----------------------------------------
// Display the posty wosty's
//-----------------------------------------
$post_query = $DB->query("SELECT post, pid, post_date, author_id, author_name
FROM ibf_posts
WHERE topic_id='{$this->topic['tid']}'
AND queued <> 1
ORDER BY post_date");
$post_count = 0;
while ( $row = $DB->fetch_row($post_query) )
{
// Limit posts to 200 chars to stop shite loads of pages
if ( strlen($row['post']) > 800 )
{
$row['post'] = $this->parser->unconvert($row['post']);
$row['post'] = substr($row['post'], 0, 800) . '...';
}
$row['date'] = $std->get_date( $row['post_date'], 'LONG' );
$row['st_top_bit'] = sprintf( $ibforums->lang['st_top_bit'], $row['author_name'], $row['date'] );
$row['post_css'] = $post_count % 2 ? 'row1' : 'row2';
$this->output .= $this->html->split_row( $row );
$post_count++;
}
//-----------------------------------------
// print my bottom, er, the bottom
//-----------------------------------------
$this->output .= $this->html->split_end_form( $ibforums->lang['st_submit'] );
$this->page_title = $ibforums->lang['st_top']." ".$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
function split_complete() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['split_merge'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
//------------------------------------------
// Check the input
//------------------------------------------
if ($ibforums->input['title'] == "")
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'complete_form' ) );
}
//------------------------------------------
// Get the post ID's to split
//------------------------------------------
$ids = array();
foreach ($ibforums->input as $key => $value)
{
if ( preg_match( "/^post_(\d+)$/", $key, $match ) )
{
if ($ibforums->input[$match[0]])
{
$ids[] = $match[1];
}
}
}
$affected_ids = count($ids);
// Do we have enough?
if ($affected_ids < 1)
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'split_not_enough' ) );
}
// Complete the PID string
$pid_string = implode( ",", $ids );
//----------------------------------------------------
// Check the forum we're moving this too
//----------------------------------------------------
$ibforums->input['fid'] = intval($ibforums->input['fid']);
if ($ibforums->input['fid'] != $this->forum['id'])
{
$DB->query("SELECT id, subwrap, sub_can_post FROM ibf_forums WHERE id='".$ibforums->input['fid']."'");
if ( ! $f = $DB->fetch_row() )
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'move_no_forum' ) );
}
if ($f['subwrap'] == 1 and $f['sub_can_post'] != 1)
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'forum_no_post_allowed' ) );
}
}
//----------------------------------------------------
// Complete a new dummy topic
//----------------------------------------------------
$new_topic = array(
'title' => $ibforums->input['title'],
'description' => $ibforums->input['desc'] ,
'state' => 'open',
'posts' => 0,
'starter_id' => 0,
'starter_name' => 0,
'start_date' => time(),
'last_poster_id' => 0,
'last_poster_name' => 0,
'last_post' => time(),
'icon_id' => 0,
'author_mode' => 1,
'poll_state' => 0,
'last_vote' => 0,
'views' => 0,
'forum_id' => $ibforums->input['fid'],
'approved' => 1,
'pinned' => 0,
);
$db_string = $DB->compile_db_insert_string( $new_topic );
$DB->query("INSERT INTO ibf_topics (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
$new_topic_id = $DB->get_insert_id();
//----------------------------------------------------
// Move the posts
//----------------------------------------------------
$DB->query("UPDATE ibf_posts SET forum_id='".$ibforums->input['fid']."', topic_id='$new_topic_id' WHERE pid IN($pid_string)");
//----------------------------------------------------
// NEW TOPIC: Get the last / first post in the "new" topic
//----------------------------------------------------
$DB->query("SELECT author_id, author_name, post_date FROM ibf_posts WHERE topic_id='$new_topic_id' ORDER BY post_date DESC LIMIT 1");
$last_post = $DB->fetch_row();
$DB->query("SELECT pid, author_id, author_name, post_date FROM ibf_posts WHERE topic_id='$new_topic_id' ORDER BY post_date ASC LIMIT 1");
$first_post = $DB->fetch_row();
// Get the number of posts in this "new" topic
$DB->query("SELECT count(pid) as posts FROM ibf_posts WHERE queued <> 1 AND topic_id='$new_topic_id'");
$post_count = $DB->fetch_row();
// Remove 1 from the count as we don't count the first post
$post_count['posts']--;
//----------------------------------------------------
// NEW TOPIC: Update new topic entry in DB
//----------------------------------------------------
$new_topic = array(
'posts' => $post_count['posts'],
'starter_id' => $first_post['author_id'],
'starter_name' => $first_post['author_name'],
'start_date' => $first_post['post_date'],
'last_poster_id' => $last_post['author_id'],
'last_poster_name' => $last_post['author_name'],
'last_post' => $last_post['post_date'],
'author_mode' => $first_post['author_id'] ? 1 : 0,
);
$db_string = $DB->compile_db_update_string( $new_topic );
$DB->query("UPDATE ibf_topics SET $db_string WHERE tid='$new_topic_id'");
//----------------------------------------------------
// NEW TOPIC: Reset the new_topic bit
//----------------------------------------------------
$DB->query("UPDATE ibf_posts SET new_topic=0 WHERE topic_id='$new_topic_id'");
$DB->query("UPDATE ibf_posts SET new_topic=1 WHERE topic_id='$new_topic_id' AND pid='".$first_post['pid']."'");
unset($last_post);
unset($first_post);
unset($post_count);
unset($new_topic);
//----------------------------------------------------
// OLD TOPIC: Get the last / first post in the "old" topic
//----------------------------------------------------
$DB->query("SELECT author_id, author_name, post_date FROM ibf_posts WHERE topic_id='".$this->topic['tid']."' ORDER BY post_date DESC LIMIT 1");
$last_post = $DB->fetch_row();
$DB->query("SELECT pid, author_id, author_name, post_date FROM ibf_posts WHERE topic_id='".$this->topic['tid']."' ORDER BY post_date ASC LIMIT 1");
$first_post = $DB->fetch_row();
// Get the number of posts in this "new" topic
$DB->query("SELECT count(pid) as posts FROM ibf_posts WHERE queued <> 1 AND topic_id='".$this->topic['tid']."'");
$post_count = $DB->fetch_row();
// Remove 1 from the count as we don't count the first post
$post_count['posts']--;
//----------------------------------------------------
// OLD TOPIC: Update new topic entry in DB
//----------------------------------------------------
$new_topic = array(
'posts' => $post_count['posts'],
'starter_id' => $first_post['author_id'],
'starter_name' => $first_post['author_name'],
'start_date' => $first_post['post_date'],
'last_poster_id' => $last_post['author_id'],
'last_poster_name' => $last_post['author_name'],
'last_post' => $last_post['post_date'],
'author_mode' => $first_post['author_id'] ? 1 : 0,
);
$db_string = $DB->compile_db_update_string( $new_topic );
$DB->query("UPDATE ibf_topics SET $db_string WHERE tid='".$this->topic['tid']."'");
//----------------------------------------------------
// OLD TOPIC: Reset the new_topic bit
//----------------------------------------------------
$DB->query("UPDATE ibf_posts SET new_topic=0 WHERE topic_id='".$this->topic['tid']."'");
$DB->query("UPDATE ibf_posts SET new_topic=1 WHERE topic_id='".$this->topic['tid']."' AND pid='".$first_post['pid']."'");
//----------------------------------------------------
// Update the forum(s)
//----------------------------------------------------
$this->recount($this->topic['forum_id']);
if ($this->topic['forum_id'] != $ibforums->input['fid'])
{
$this->recount($ibforums->input['fid']);
}
$this->moderate_log("Split topic '{$this->topic['title']}'");
$print->redirect_screen( $ibforums->lang['st_redirect'], "act=SF&f=".$this->forum['id'] );
}
/*************************************************/
// MERGE TOPICS:
// ---------------
//
/*************************************************/
function merge_start() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['split_merge'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$this->output = $this->html_start_form( array( 1 => array( 'CODE', '61' ),
2 => array( 't' , $this->topic['tid'] ),
3 => array( 'f' , $this->forum['id'] ),
) );
$this->output .= $this->html->table_top( $ibforums->lang['mt_top']." ".$this->forum['name']." &gt; ".$this->topic['title'] );
$this->output .= $this->html->mod_exp( $ibforums->lang['mt_explain'] );
$this->output .= $this->html->merge_body( $this->topic['title'], $this->topic['description'] );
$this->output .= $this->html->end_form( $ibforums->lang['mt_submit'] );
$this->page_title = $ibforums->lang['mt_top']." ".$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
function merge_complete() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['split_merge'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
//------------------------------------------
// Check the input
//------------------------------------------
if ($ibforums->input['topic_url'] == "" or $ibforums->input['title'] == "")
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'complete_form' ) );
}
//------------------------------------------
// Get the topic ID of the entered URL
//------------------------------------------
preg_match( "/(\?|&amp;)t=(\d+)($|&amp;)/", $ibforums->input['topic_url'], $match );
$old_id = intval(trim($match[2]));
if ($old_id == "")
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'mt_no_topic' ) );
}
//------------------------------------------
// Get the topic from the DB
//------------------------------------------
$DB->query("SELECT tid, title, forum_id, last_post, last_poster_id, last_poster_name, posts, views FROM ibf_topics WHERE tid='$old_id'");
if ( ! $old_topic = $DB->fetch_row() )
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'mt_no_topic' ) );
}
//----------------------------------------------------
// Update the posts, remove old polls, subs and topic
//----------------------------------------------------
$DB->query("UPDATE ibf_posts SET forum_id='".$this->topic['forum_id']."', topic_id='".$this->topic['tid']."' WHERE topic_id='".$old_topic['tid']."'");
$DB->query("DELETE FROM ibf_polls WHERE tid='".$old_topic['tid']."'");
$DB->query("DELETE FROM ibf_voters WHERE tid='".$old_topic['tid']."'");
$DB->query("DELETE FROM ibf_tracker WHERE topic_id='".$old_topic['tid']."'");
$DB->query("DELETE FROM ibf_topics WHERE tid='".$old_topic['tid']."'");
//----------------------------------------------------
// Update the newly merged topic
//----------------------------------------------------
$updater = array( 'title' => $ibforums->input['title'],
'description' => $ibforums->input['desc']
);
if ($old_topic['last_post'] > $this->topic['last_post'])
{
$updater['last_post'] = $old_topic['last_post'];
$updater['last_poster_name'] = $old_topic['last_poster_name'];
$updater['last_poster_id'] = $old_topic['last_poster_id'];
}
// We need to now count the original post, which isn't in the "posts" field 'cos it was a new topic
$old_topic['posts']++;
$str = $DB->compile_db_update_string($updater);
$DB->query("UPDATE ibf_topics SET $str,views=views+{$old_topic['views']} WHERE tid='".$this->topic['tid']."'");
//----------------------------------------------------
// Fix up the "new_topic" attribute.
//----------------------------------------------------
$DB->query("UPDATE ibf_posts SET new_topic=0 WHERE topic_id='".$this->topic['tid']."'");
$DB->query("SELECT pid, author_name, author_id, post_date FROM ibf_posts WHERE topic_id='".$this->topic['tid']."' ORDER BY post_date ASC LIMIT 1");
if ( $first_post = $DB->fetch_row() )
{
$DB->query("UPDATE ibf_posts SET new_topic=1 WHERE pid='".$first_post['pid']."'");
}
//----------------------------------------------------
// Reset the post count for this topic
//----------------------------------------------------
$amode = $first_post['author_id'] ? 1 : 0;
$DB->query("SELECT count(pid) as posts FROM ibf_posts WHERE queued <> 1 AND topic_id='".$this->topic['tid']."'");
if ( $post_count = $DB->fetch_row() )
{
$post_count['posts']--; //Remove first post
$DB->query("UPDATE ibf_topics
SET posts=".$post_count['posts'].",
starter_name='".$first_post['author_name']."',
starter_id='".$first_post['author_id']."',
start_date='".$first_post['post_date']."',
author_mode=$amode
WHERE tid='".$this->topic['tid']."'");
}
//----------------------------------------------------
// Update the forum(s)
//----------------------------------------------------
$this->recount($this->topic['forum_id']);
if ($this->topic['forum_id'] != $old_topic['forum_id'])
{
$this->recount($old_topic['forum_id']);
}
$this->moderate_log("Merged topic '{$old_topic['title']}' with '{$this->topic['title']}'");
$print->redirect_screen( $ibforums->lang['mt_redirect'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid'] );
}
/*************************************************/
// UNSUBSCRIBE ALL FORM:
// ---------------------
//
/*************************************************/
function unsubscribe_all_form() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$DB->query("SELECT COUNT(trid) as subbed FROM ibf_tracker WHERE topic_id='".$this->topic['tid']."'");
$tracker = $DB->fetch_row();
/*if (! $tracker = $DB->fetch_row() )
{
$this->moderate_error();
}*/
if ( $tracker['subbed'] < 1 )
{
$text = $ibforums->lang['ts_none'];
}
else
{
$text = sprintf($ibforums->lang['ts_count'], $tracker['subbed']);
}
$this->output = $this->html_start_form( array( 1 => array( 'CODE', '31' ),
2 => array( 't' , $this->topic['tid'] ),
3 => array( 'f' , $this->forum['id'] ),
) );
$this->output .= $this->html->table_top( $ibforums->lang['ts_title']." &gt; ".$this->forum['name']." &gt; ".$this->topic['title'] );
$this->output .= $this->html->mod_exp( $text );
$this->output .= $this->html->end_form( $ibforums->lang['ts_submit'] );
$this->page_title = $ibforums->lang['ts_title']." &gt; ".$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
//---------------------------------
function unsubscribe_all() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
// Delete the subbies based on this topic ID
$DB->query("DELETE FROM ibf_tracker WHERE topic_id='".$this->topic['tid']."'");
$print->redirect_screen( $ibforums->lang['ts_redirect'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );
}
/*************************************************/
// EDIT POLL FORM:
// ---------------
//
/*************************************************/
function poll_delete_form() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['delete_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$DB->query("SELECT * FROM ibf_polls WHERE tid='".$this->topic['tid']."'");
$poll_data = $DB->fetch_row();
if (! $poll_data['pid'])
{
$this->moderate_error();
}
$this->output = $this->html_start_form( array( 1 => array( 'CODE', '23' ),
2 => array( 't' , $this->topic['tid'] ),
3 => array( 'f' , $this->forum['id'] ),
) );
$this->output .= $this->html->table_top( $ibforums->lang['pd_top']." ".$this->forum['name']." &gt; ".$this->topic['title'] );
$this->output .= $this->html->mod_exp( $ibforums->lang['pd_text'] );
$this->output .= $this->html->end_form( $ibforums->lang['pd_submit'] );
$this->page_title = $ibforums->lang['pd_top'].$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
function poll_delete_do() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['delete_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
// Remove the poll
$DB->query("DELETE FROM ibf_polls WHERE tid='".$this->topic['tid']."'");
// Remove from poll votes
$DB->query("DELETE FROM ibf_voters WHERE tid='".$this->topic['tid']."'");
// Update topic
$DB->query("UPDATE ibf_topics SET poll_state='', last_vote='', total_votes='' WHERE tid='".$this->topic['tid']."'");
// Boing!
$print->redirect_screen( $ibforums->lang['pd_redirect'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );
}
function poll_edit_do() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1)
{
$passed = 1;
}
else if ($this->moderator['edit_post'] == 1)
{
$passed = 1;
}
else
{
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$DB->query("SELECT * FROM ibf_polls WHERE tid='".$this->topic['tid']."'");
$poll_data = $DB->fetch_row();
if (! $poll_data['pid'])
{
$this->moderate_error();
}
$poll_answers = unserialize(stripslashes($poll_data['choices']));
reset($poll_answers);
$new_poll_array = array();
foreach ($poll_answers as $entry)
{
$id = $entry[0];
$choice = $ibforums->input['POLL_'.$id];
$votes = $entry[2];
$new_poll_array[] = array( $id, $choice, $votes);
}
$poll_data['choices'] = addslashes(serialize($new_poll_array));
$DB->query("UPDATE ibf_polls SET ".
"choices='" . $poll_data['choices'] . "' ".
"WHERE tid='" . $this->topic['tid'] . "'");
//------------------------
// Update the topic table to change the poll_only value.
$poll_state = $ibforums->input['pollonly'] == 1 ? 'closed' : 'open';
$DB->query("UPDATE ibf_topics SET poll_state='$poll_state' WHERE tid='".$this->topic['tid']."'");
$this->moderate_log("Edited a Poll");
$print->redirect_screen( $ibforums->lang['pe_done'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );
}
//--------------------------------------
function poll_edit_form() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['edit_post'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$DB->query("SELECT * FROM ibf_polls WHERE tid='".$this->topic['tid']."'");
$poll_data = $DB->fetch_row();
if (! $poll_data['pid'])
{
$this->moderate_error();
}
$this->output = $this->html_start_form( array( 1 => array( 'CODE', '21' ),
2 => array( 't' , $this->topic['tid'] ),
3 => array( 'f' , $this->forum['id'] ),
) );
$this->output .= $this->html->table_top( $ibforums->lang['pe_top']." ".$this->forum['name']." &gt; ".$this->topic['title'] );
$poll_answers = unserialize(stripslashes($poll_data['choices']));
reset($poll_answers);
foreach ($poll_answers as $entry)
{
$id = $entry[0];
$choice = $entry[1];
$votes = $entry[2];
$this->output .= $this->html->poll_entry($id, $choice);
}
$this->output .= $this->html->poll_select_form();
$this->output .= $this->html->end_form( $ibforums->lang['pe_submit'] );
$this->page_title = $ibforums->lang['pe_top'].$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
/*************************************************/
// MOVE FORM:
// ---------------
//
/*************************************************/
function move_form() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['move_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$this->output = $this->html_start_form( array( 1 => array( 'CODE', '14' ),
2 => array( 'tid' , $this->topic['tid'] ),
3 => array( 'sf' , $this->forum['id'] ),
) );
$jump_html = $std->build_forum_jump('no_html');
$this->output .= $this->html->table_top( $ibforums->lang['top_move']." ".$this->forum['name']." &gt; ".$this->topic['title'] );
$this->output .= $this->html->mod_exp( $ibforums->lang['move_exp'] );
$this->output .= $this->html->move_form( $jump_html , $this->forum['name']);
$this->output .= $this->html->end_form( $ibforums->lang['submit_move'] );
$this->page_title = $ibforums->lang['t_move'].": ".$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
/*************************************************/
function do_move() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['move_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
//----------------------------------
// Check for input..
//----------------------------------
if ($ibforums->input['sf'] == "")
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'move_no_source' ) );
}
//----------------------------------
if ($ibforums->input['move_id'] == "" or $ibforums->input['move_id'] == -1)
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'move_no_forum' ) );
}
//----------------------------------
if ($ibforums->input['move_id'] == $ibforums->input['sf'])
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'move_same_forum' ) );
}
//----------------------------------
$DB->query("SELECT id, subwrap, sub_can_post, name FROM ibf_forums WHERE id IN(".$ibforums->input['sf'].",".$ibforums->input['move_id'].")");
if ($DB->get_num_rows() != 2)
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'move_no_forum' ) );
}
$source_name = "";
$dest_name = "";
//-----------------------------------
// Check for an attempt to move into a subwrap forum
//-----------------------------------
while ( $f = $DB->fetch_row() )
{
if ($f['id'] == $ibforums->input['sf'])
{
$source_name = $f['name'];
}
else
{
$dest_name = $f['name'];
}
if ($f['subwrap'] == 1 and $f['sub_can_post'] != 1)
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'forum_no_post_allowed' ) );
}
}
$DB->query("SELECT * FROM ibf_topics WHERE tid='".$ibforums->input['tid']."'");
if ( ! $this->topic = $DB->fetch_row() )
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'move_no_forum' ) );
}
//----------------------------------
// We know that $this->topic is set..
//----------------------------------
$source = $ibforums->input['sf'];
$moveto = $ibforums->input['move_id'];
$tid = $ibforums->input['tid'];
//----------------------------------
// Update the topic
//----------------------------------
$DB->query("UPDATE ibf_topics SET forum_id='$moveto' WHERE forum_id='$source' AND tid='$tid'");
//----------------------------------
// Update the posts
//----------------------------------
$DB->query("UPDATE ibf_posts SET forum_id='$moveto' WHERE forum_id='$source' AND topic_id='$tid'");
//----------------------------------
// Update the polls
//----------------------------------
$DB->query("UPDATE ibf_polls SET forum_id='$moveto' WHERE forum_id='$source' AND tid='$tid'");
//----------------------------------
// Are we leaving a link?
//----------------------------------
if ($ibforums->input['leave'] == 'y')
{
//----------------------------------
// Insert a new "link" topic...
//----------------------------------
$db_string = $DB->compile_db_insert_string( array (
'title' => $this->topic['title'],
'description' => $this->topic['description'],
'state' => 'link',
'posts' => 0,
'views' => 0,
'starter_id' => $this->topic['starter_id'],
'start_date' => $this->topic['start_date'],
'starter_name' => $this->topic['starter_name'],
'last_post' => $this->topic['last_post'],
'forum_id' => $source,
'approved' => 1,
'pinned' => 0,
'moved_to' => $this->topic['tid'].'&'.$moveto,
'last_poster_id' => $this->topic['last_poster_id'],
'last_poster_name' => $this->topic['last_poster_name']
) );
$DB->query("INSERT INTO ibf_topics (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
}
$this->moderate_log("Moved a topic from $source_name to $dest_name");
// Resync the forums..
$this->recount($source);
$this->recount($moveto);
$print->redirect_screen( $ibforums->lang['p_moved'], "act=SF&f=".$this->forum['id']."&st=".$ibforums->input['st'] );
}
/*************************************************/
function delete_post() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1)
{
$passed = 1;
}
else if ($this->moderator['delete_post'] == 1)
{
$passed = 1;
}
else if ($ibforums->member['g_delete_own_posts'] == 1)
{
$passed = 1;
}
else
{
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
// Get this post id.
$DB->query("SELECT pid,attach_file, attach_id, post_date, new_topic from ibf_posts WHERE forum_id='".$this->forum['id']."' AND topic_id='".$this->topic['tid']."' and pid='".$ibforums->input['p']."'");
if ( ! $post = $DB->fetch_row() )
{
$this->moderate_error();
}
// Check to make sure that this isn't the first post in the topic..
if ($post['new_topic'] == 1)
{
$this->moderate_error('no_delete_post');
}
//---------------------------------------
// Is there an attachment to this post?
//---------------------------------------
if ($post['attach_id'] != "")
{
if (is_file($this->upload_dir."/".$post['attach_id']))
{
unlink ($this->upload_dir."/".$post['attach_id']);
}
}
//---------------------------------------
// delete the post
//---------------------------------------
$DB->query("DELETE from ibf_posts WHERE topic_id='".$this->topic['tid']."' and pid='".$post['pid']."'");
//---------------------------------------
// Update the stats
//---------------------------------------
$DB->query("UPDATE ibf_stats SET TOTAL_REPLIES=TOTAL_REPLIES-1");
//---------------------------------------
// Get the latest post details
//---------------------------------------
$DB->query("SELECT post_date, author_id, author_name from ibf_posts WHERE topic_id='".$this->topic['tid']."' and queued <> 1 ORDER BY pid DESC");
$last_post = $DB->fetch_row();
$DB->query("UPDATE ibf_topics SET last_post='" .$last_post['post_date'] ."', ".
"last_poster_id='" .$last_post['author_id'] ."', ".
"last_poster_name='" .$last_post['author_name'] ."', ".
"posts=posts-1 WHERE tid='".$this->topic['tid']."'");
//---------------------------------------
// If we deleted the last post in a topic that was
// the last post in a forum, best update that :D
//---------------------------------------
if ($this->forum['last_id'] == $this->topic['tid'])
{
$DB->query("SELECT title, tid, last_post, last_poster_id, last_poster_name "
."FROM ibf_topics WHERE forum_id='".$this->forum['id']."' AND approved=1 "
."ORDER BY last_post DESC LIMIT 0,1");
$tt = $DB->fetch_row();
$db_string = $DB->compile_db_update_string( array(
last_title => $tt['title'] ? $tt['title'] : "",
last_id => $tt['tid'] ? $tt['tid'] : "",
last_post => $tt['last_post'] ? $tt['last_post'] : "",
last_poster_name => $tt['last_poster_name'] ? $tt['last_poster_name'] : "",
last_poster_id => $tt['last_poster_id'] ? $tt['last_poster_id'] : "",
) );
$DB->query("UPDATE ibf_forums SET ".$db_string.",posts=posts-1 WHERE id='".$this->forum['id']."'");
}
$this->moderate_log("Deleted a post");
$print->redirect_screen( $ibforums->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );
}
function rebuild_topic() {}
/*************************************************/
// DELETE TOPIC:
// ---------------
//
/*************************************************/
function delete_form() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->topic['starter_id'] == $ibforums->member['id'])
{
if ($ibforums->member['g_delete_own_topics'] == 1)
{
$passed = 1;
}
}
else if ($this->moderator['delete_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid'])) {
$this->moderate_error();
}
$this->output = $this->html->delete_js();
$this->output .= $this->html_start_form( array( 1 => array( 'CODE', '08' ),
2 => array( 't', $this->topic['tid'] )
) );
$this->output .= $this->html->table_top( $ibforums->lang['top_delete']." ".$this->forum['name']." &gt; ".$this->topic['title'] );
$this->output .= $this->html->mod_exp( $ibforums->lang['delete_topic'] );
$this->output .= $this->html->end_form( $ibforums->lang['submit_delete'] );
$this->page_title = $ibforums->lang['t_delete'].": ".$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
function delete_topic() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1)
{
$passed = 1;
}
else if ($this->moderator['delete_topic'] == 1)
{
$passed = 1;
}
else if ($this->topic['starter_id'] == $ibforums->member['id'])
{
if ($ibforums->member['g_delete_own_topics'] == 1)
{
$passed = 1;
}
}
else
{
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid'])) {
$this->moderate_error();
}
// Do we have a linked topic to remove?
$DB->query("SELECT tid FROM ibf_topics WHERE state='link' AND moved_to='".$this->topic['tid'].'&'.$this->forum['id']."'");
if ( $linked_topic = $DB->fetch_row() )
{
$DB->query("DELETE FROM ibf_topics WHERE tid='".$linked_topic['tid']."'");
}
// Remove polls assigned to this topic
$DB->query("DELETE FROM ibf_polls WHERE tid='".$this->topic['tid']."'");
// Remove poll voters
$DB->query("DELETE FROM ibf_voters WHERE tid='".$this->topic['tid']."'");
// Remove the topic itself
$DB->query("DELETE FROM ibf_topics WHERE tid='".$this->topic['tid']."'");
// Get the attach ID's and filenames
$DB->query("SELECT attach_id, attach_hits, attach_file FROM ibf_posts WHERE attach_id <> '' AND topic_id='".$this->topic['tid']."'");
// Remove the attachments
if ( $DB->get_num_rows() )
{
while ( $r = $DB->fetch_row() )
{
if (is_file($this->upload_dir."/".$r['attach_id']))
{
@unlink ($this->upload_dir."/".$r['attach_id']);
}
}
}
// Remove the posts
$DB->query("DELETE FROM ibf_posts WHERE topic_id='".$this->topic['tid']."'");
//------------------------------------------------
// Update the forum topic/post and stat counters.
//
// We also need to make sure the last forum id and
// title is correct.
//------------------------------------------------
$DB->query("SELECT COUNT(tid) as tcount from ibf_topics WHERE approved=1");
$topics = $DB->fetch_row();
$DB->query("SELECT COUNT(pid) as pcount from ibf_posts WHERE queued <> 1");
$posts = $DB->fetch_row();
$DB->query("SELECT COUNT(tid) as tcount from ibf_topics WHERE approved=1 and forum_id='".$this->forum['id']."'");
$f_topics = $DB->fetch_row();
$DB->query("SELECT COUNT(pid) as pcount from ibf_posts WHERE queued <> 1 and forum_id='".$this->forum['id']."'");
$f_posts = $DB->fetch_row();
$this->forum['topics'] = $f_topics['tcount'];
$this->forum['posts'] = $f_posts['pcount'] - $f_topics['tcount'];
$DB->query("SELECT title, tid, last_post, last_poster_id, last_poster_name "
."FROM ibf_topics WHERE forum_id='".$this->forum['id']."' AND approved=1 "
."ORDER BY last_post DESC LIMIT 0,1");
$tt = $DB->fetch_row();
$db_string = $DB->compile_db_update_string( array(
last_title => $tt['title'] ? $tt['title'] : "",
last_id => $tt['tid'] ? $tt['tid'] : "",
last_post => $tt['last_post'] ? $tt['last_post'] : "",
last_poster_name => $tt['last_poster_name'] ? $tt['last_poster_name'] : "",
last_poster_id => $tt['last_poster_id'] ? $tt['last_poster_id'] : "",
topics => $this->forum['topics'],
posts => $this->forum['posts']
) );
$DB->query("UPDATE ibf_forums SET $db_string WHERE id='".$this->forum['id']."'");
// Update the main board stats.
$posts = $posts['pcount'] - $topics['tcount'];
$DB->query("UPDATE ibf_stats SET TOTAL_TOPICS='".$topics['tcount']."', TOTAL_REPLIES='".$posts."'");
$this->moderate_log("Deleted a topic");
$print->redirect_screen( $ibforums->lang['p_deleted'], "act=SF&f=".$this->forum['id'] );
}
/*************************************************/
// EDIT TOPIC:
// ---------------
//
/*************************************************/
function edit_form() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['edit_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid']))
{
$this->moderate_error();
}
$this->output = $this->html_start_form( array( 1 => array( 'CODE', '12' ),
2 => array( 't', $this->topic['tid'] )
) );
$this->output .= $this->html->table_top( $ibforums->lang['top_edit']." ".$this->forum['name']." &gt; ".$this->topic['title'] );
$this->output .= $this->html->mod_exp( $ibforums->lang['edit_topic'] );
$this->output .= $this->html->topictitle_fields( $this->topic['title'], $this->topic['description'] );
$this->output .= $this->html->end_form( $ibforums->lang['submit_edit'] );
$this->page_title = $ibforums->lang['t_edit'].": ".$this->topic['title'];
$this->nav = array ( "<a href='{$this->base_url}&act=SF&f={$this->forum['id']}'>{$this->forum['name']}</a>",
"<a href='{$this->base_url}&act=ST&f={$this->forum['id']}&t={$this->topic['tid']}'>{$this->topic['title']}</a>"
);
}
function do_edit() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['edit_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
if (empty($this->topic['tid'])) {
$this->moderate_error();
}
if ($ibforums->input['TopicTitle'] == "") {
$std->Error( array( 'LEVEL' => 2, 'MSG' => 'no_topic_title' ) );
}
$topic_title = preg_replace( "/'/", "/\\'/", $ibforums->input['TopicTitle'] );
$topic_desc = preg_replace( "/'/", "/\\'/", $ibforums->input['TopicDesc'] );
$DB->query("UPDATE ibf_topics SET title='$topic_title', description='$topic_desc' WHERE tid='".$this->topic['tid']."'");
if ($this->topic['tid'] == $this->forum['last_id'])
{
$DB->query("UPDATE ibf_forums SET last_title='$topic_title' WHERE id='".$this->forum['id']."'");
}
$this->moderate_log("Edited a topic title");
$print->redirect_screen( $ibforums->lang['p_edited'], "act=SF&f=".$this->forum['id'] );
}
/*************************************************/
// OPEN TOPIC:
// ---------------
//
/*************************************************/
function open_topic() {
global $std, $ibforums, $DB, $print;
if ($this->topic['state'] == 'open') {
$this->moderate_error();
}
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->topic['starter_id'] == $ibforums->member['id']) {
if ($ibforums->member['g_open_close_posts'] == 1) {
$passed = 1;
}
}
else
{
$passed = 0;
}
if ($this->moderator['open_topic'] == 1) {
$passed = 1;
}
if ($passed != 1) $this->moderate_error();
$this->alter_topic( array( 'TOPIC' => $this->topic['tid'], 'FIELD' => 'state', 'VALUE' => 'open' ) );
$this->moderate_log("Opened Topic");
$print->redirect_screen( $ibforums->lang['p_opened'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );
}
/*************************************************/
// CLOSE TOPIC:
// ---------------
//
/*************************************************/
function close_topic() {
global $std, $ibforums, $DB, $print;
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->topic['starter_id'] == $ibforums->member['id']) {
if ($ibforums->member['g_open_close_posts'] == 1) {
$passed = 1;
}
}
else
{
$passed = 0;
}
if ($this->moderator['close_topic'] == 1) {
$passed = 1;
}
if ($passed != 1) $this->moderate_error();
$this->alter_topic( array( 'TOPIC' => $this->topic['tid'], 'FIELD' => 'state', 'VALUE' => 'closed' ) );
$this->moderate_log("Locked Topic");
$print->redirect_screen( $ibforums->lang['p_closed'], "act=SF&f=".$this->forum['id'] );
}
/*************************************************/
// PIN TOPIC:
// ---------------
//
/*************************************************/
function pin_topic() {
global $std, $ibforums, $DB, $print;
if ($this->topic['PIN_STATE'] == 1) {
$this->moderate_error();
}
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['pin_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
$this->alter_topic( array( 'TOPIC' => $this->topic['tid'], 'FIELD' => 'pinned', 'VALUE' => '1' ) );
$this->moderate_log("Pinned Topic");
$print->redirect_screen( $ibforums->lang['p_pinned'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );
}
/*************************************************/
// UNPIN TOPIC:
// ---------------
//
/*************************************************/
function unpin_topic() {
global $std, $ibforums, $DB, $print;
if ($this->topic['pinned'] == 0) {
$this->moderate_error();
}
$passed = 0;
if ($ibforums->member['g_is_supmod'] == 1) {
$passed = 1;
}
else if ($this->moderator['unpin_topic'] == 1) {
$passed = 1;
}
else {
$passed = 0;
}
if ($passed != 1) $this->moderate_error();
$this->alter_topic( array( 'TOPIC' => $this->topic['tid'], 'FIELD' => 'pinned', 'VALUE' => '0' ) );
$this->moderate_log("Unpinned Topic");
$print->redirect_screen( $ibforums->lang['p_unpinned'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );
}
//+---------------------------------------------------------------------------------------------
/*************************************************/
// MODERATE ERROR:
// ---------------
//
// Function for error messages in this script
//
/*************************************************/
function moderate_error($msg = 'moderate_no_permission') {
global $std;
$std->Error( array( 'LEVEL' => 2, 'MSG' => $msg ) );
// Make sure we exit..
exit();
}
/*************************************************/
// MODERATE LOG:
// ---------------
//
// Function for adding the mod action to the DB
//
/*************************************************/
function moderate_log($title = 'unknown') {
global $std, $ibforums, $DB, $HTTP_REFERER, $QUERY_STRING;
$db_string = $std->compile_db_string( array (
'forum_id' => $ibforums->input['f'],
'topic_id' => $ibforums->input['t'],
'post_id' => $ibforums->input['p'],
'member_id' => $ibforums->member['id'],
'member_name' => $ibforums->member['name'],
'ip_address' => $ibforums->input['IP_ADDRESS'],
'http_referer'=> $HTTP_REFERER,
'ctime' => time(),
'topic_title' => $this->topic['title'],
'action' => $title,
'query_string'=> $QUERY_STRING,
)
);
$DB->query("INSERT INTO ibf_moderator_logs (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
}
/*************************************************/
// Re Count topics for the forums:
// ---------------
//
// Handles simple moderation functions, saves on
// writing the same code over and over.
// ASS_U_ME's that the requesting user has been
// authenticated by this stage.
//
/*************************************************/
function recount($fid="") {
global $ibforums, $root_path, $DB, $std;
if ($fid == "")
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'move_no_source' ) );
}
// Get the topics..
$DB->query("SELECT COUNT(tid) as count FROM ibf_topics WHERE approved=1 and forum_id='".$fid."'");
$topics = $DB->fetch_row();
// Get the posts..
$DB->query("SELECT COUNT(pid) as count FROM ibf_posts WHERE queued <> 1 and forum_id='".$fid."'");
$posts = $DB->fetch_row();
// Get the forum last poster..
$DB->query("SELECT tid, title, last_poster_id, last_poster_name, last_post FROM ibf_topics WHERE approved=1 and forum_id='".$fid."' ORDER BY last_post DESC LIMIT 0,1");
$last_post = $DB->fetch_row();
// Reset this forums stats
$db_string = $DB->compile_db_update_string( array (
'last_poster_id' => $last_post['last_poster_id'],
'last_poster_name' => $last_post['last_poster_name'],
'last_post' => $last_post['last_post'],
'last_title' => $last_post['title'],
'last_id' => $last_post['tid'],
'topics' => $topics['count'],
'posts' => $posts['count']
) );
$DB->query("UPDATE ibf_forums SET $db_string WHERE id='".$fid."'");
}
/*************************************************/
// ALTER TOPIC:
// ---------------
//
// Handles simple moderation functions, saves on
// writing the same code over and over.
// ASS_U_ME's that the requesting user has been
// authenticated by this stage.
//
/*************************************************/
function alter_topic( $data = array() ) {
global $ibforums, $DB;
if ( $data['FIELD'] == "" ) return -1;
if ( $data['VALUE'] == "" ) return -1;
if ( $data['TOPIC'] == "" ) return -1;
if ($data['TOPIC'] < 1) return -1;
$data['VALUE'] = preg_replace( "/'/", "\\'", $data['VALUE'] );
$DB->query("UPDATE ibf_topics SET ".$data['FIELD']."='".$data['VALUE']."' WHERE tid='".$data['TOPIC']."'");
}
/*****************************************************/
// HTML: start form.
// ------------------
// Returns the HTML for the <FORM> opening tag
/*****************************************************/
function html_start_form($additional_tags=array()) {
global $ibforums;
$form = "<form action='{$this->base_url}' method='POST' name='REPLIER'>".
"<input type='hidden' name='st' value='".$ibforums->input[st]."'>".
"<input type='hidden' name='act' value='Mod'>".
"<input type='hidden' name='s' value='".$ibforums->session_id."'>".
"<input type='hidden' name='f' value='".$this->forum['id']."'>";
// Any other tags to add?
if (isset($additional_tags)) {
foreach($additional_tags as $k => $v) {
$form .= "\n<input type='hidden' name='{$v[0]}' value='{$v[1]}'>";
}
}
return $form;
}
}
?>