Warning Module
| > Module written by Matt Mecham
| > Date started: 16th May 2003
|
| > Module Version Number: 1.0.0
+--------------------------------------------------------------------------
*/
$idx = new warn;
class warn {
var $output = "";
var $topic = array();
var $forum = array();
var $topic_id = "";
var $forum_id = "";
var $moderator = "";
var $modfunc = "";
var $mm_data = "";
var $parser = "";
var $can_ban = 0;
var $can_mod_q = 0;
var $can_rem_post = 0;
var $times_a_day = 0;
var $type = 'mod';
var $warn_member = "";
//------------------------------------------------------
// @constructor (no, not bob the builder)
//------------------------------------------------------
function warn()
{
global $ibforums, $DB, $std, $print;
//-------------------------------------
// Load modules...
//-------------------------------------
$ibforums->lang = $std->load_words($ibforums->lang, 'lang_mod', $ibforums->lang_id);
$this->html = $std->load_template('skin_mod');
require( ROOT_PATH.'sources/lib/post_parser.php');
$this->parser = new post_parser(1);
//-------------------------------------
// Make sure we're a moderator...
//-------------------------------------
$pass = 0;
if ($ibforums->member['id'])
{
if ( $ibforums->member['g_access_cp'] )
{
$pass = 1;
$this->can_ban = 1;
$this->can_mod_q = 1;
$this->can_rem_post = 1;
$this->times_a_day = -1;
$this->type = 'admin';
}
else if ($ibforums->member['g_is_supmod'] == 1)
{
$pass = 1;
$this->can_ban = $ibforums->vars['warn_gmod_ban'];
$this->can_mod_q = $ibforums->vars['warn_gmod_modq'];
$this->can_rem_post = $ibforums->vars['warn_gmod_post'];
$this->times_a_day = intval($ibforums->vars['warn_gmod_day']);
$this->type = 'supmod';
}
else if ($ibforums->member['is_mod'])
{
$DB->query("SELECT * FROM ibf_moderators WHERE (member_id='".$ibforums->member['id']."' OR (is_group=1 AND group_id='".$ibforums->member['mgroup']."'))");
if ( $this->moderator = $DB->fetch_row() )
{
$pass = 1;
$this->can_ban = $ibforums->vars['warn_mod_ban'];
$this->can_mod_q = $ibforums->vars['warn_mod_modq'];
$this->can_rem_post = $ibforums->vars['warn_mod_post'];
$this->times_a_day = intval($ibforums->vars['warn_mod_day']);
$this->type = 'mod';
}
}
else if ( $ibforums->vars['warn_show_own'] and $ibforums->member['id'] == $ibforums->input['mid'] )
{
$pass = 1;
$this->can_ban = 0;
$this->can_mod_q = 0;
$this->can_rem_post = 0;
$this->times_a_day = 0;
$this->type = 'member';
}
else
{
$pass = 0;
}
}
if ($pass == 0)
{
$std->Error( array( LEVEL => 1, MSG => 'no_permission') );
}
if ( ! $ibforums->vars['warn_on'] )
{
$std->Error( array( LEVEL => 1, MSG => 'no_permission') );
}
//-------------------------------------
// Ensure we have a valid member id
//-------------------------------------
$mid = intval($ibforums->input['mid']);
if ( $mid < 1 )
{
$std->Error( array( LEVEL => 1, MSG => 'no_such_user') );
}
$DB->query("SELECT m.*, g.* FROM ibf_members m
LEFT JOIN ibf_groups g on (m.mgroup=g.g_id)
WHERE id=$mid");
$this->warn_member = $DB->fetch_row();
if ( ! $this->warn_member['id'] )
{
$std->Error( array( LEVEL => 1, MSG => 'no_such_user') );
}
if ( $ibforums->input['CODE'] == "" OR $ibforums->input['CODE'] == "dowarn" )
{
//-------------------------------------
// Protected member? Really? o_O
//-------------------------------------
if ( stristr( $ibforums->vars['warn_protected'], ','.$this->warn_member['mgroup'].',' ) )
{
$std->Error( array( LEVEL => 1, MSG => 'protected_user') );
}
//-------------------------------------
// I've already warned you!!
//-------------------------------------
if ( $this->times_a_day > 0 )
{
$time_to_check = time() - 86400;
$DB->query("SELECT * FROM ibf_warn_logs WHERE wlog_mid={$this->warn_member['id']} AND wlog_date > $time_to_check");
if ( $DB->get_num_rows() >= $this->times_a_day )
{
$std->Error( array( LEVEL => 1, MSG => 'warned_already') );
}
}
}
//-------------------------------------
// Bouncy, bouncy!
//-------------------------------------
switch ($ibforums->input['CODE']) {
case 'dowarn':
$this->do_warn();
break;
case 'view':
$this->view_log();
break;
default:
$this->show_form();
break;
}
if ( count($this->nav) < 1 )
{
$this->nav[] = $ibforums->lang['w_title'];
}
if (! $this->page_title )
{
$this->page_title = $ibforums->lang['w_title'];
}
$print->add_output( $this->output );
$print->do_output( array( 'TITLE' => $this->page_title, 'JS' => 1, 'NAV' => $this->nav ) );
}
//-------------------------------------------------
// Show logs
//-------------------------------------------------
function view_log()
{
global $std, $ibforums, $DB, $print;
//-------------------------------------
// Protected member? Really? o_O
//-------------------------------------
if ( stristr( $ibforums->vars['warn_protected'], ','.$this->warn_member['mgroup'].',' ) )
{
$std->Error( array( LEVEL => 1, MSG => 'protected_user') );
}
$perpage = 50;
$start = intval($ibforums->input['st']);
$DB->query("SELECT count(*) as cnt FROM ibf_warn_logs WHERE wlog_mid={$this->warn_member['id']}");
$row = $DB->fetch_row();
$links = $std->build_pagelinks( array(
'TOTAL_POSS' => $row['cnt'],
'PER_PAGE' => $perpage,
'CUR_ST_VAL' => $ibforums->input['st'],
'L_SINGLE' => "",
'L_MULTI' => $ibforums->lang['w_v_pages'],
'BASE_URL' => $ibforums->base_url."act=warn&CODE=view&mid={$this->warn_member['id']}",
) );
$this->output .= $this->html->warn_view_header($this->warn_member['id'], $this->warn_member['name'], $links);
if ( $row['cnt'] < 1 )
{
$this->output .= $this->html->warn_view_none();
}
else
{
$DB->query("SELECT l.*, p.id as punisher_id, p.name as punisher_name
FROM ibf_warn_logs l
LEFT JOIN ibf_members p ON ( p.id=l.wlog_addedby )
WHERE l.wlog_mid={$this->warn_member['id']} ORDER BY l.wlog_date DESC LIMIT $start, $perpage");
while ( $r = $DB->fetch_row() )
{
$date = $std->get_date( $r['wlog_date'], 'LONG' );
$raw = preg_match( "#(.+?)#is", $r['wlog_notes'], $match );
$content = $this->parser->convert( array(
'TEXT' => $match[1],
'SMILIES' => 1,
'CODE' => 1,
'HTML' => 0
) );
$puni_name = $std->make_profile_link( $r['punisher_name'], $r['punisher_id'] );
if ( $r['wlog_type'] == 'pos' )
{
$this->output .= $this->html->warn_view_positive_row($date, $content, $puni_name);
}
else
{
$this->output .= $this->html->warn_view_negative_row($date, $content, $puni_name);
}
}
}
$this->output .= $this->html->warn_view_footer();
$print->pop_up_window( "WARN", $this->output );
}
//-------------------------------------------------
// Do the actual warny-e-poos
//-------------------------------------------------
function do_warn()
{
global $std, $ibforums, $DB, $print;
require "./sources/lib/emailer.php";
$this->email = new emailer();
$save = array();
if ( $this->type == 'member' )
{
$std->Error( array( LEVEL => 1, MSG => 'no_permission') );
}
$err = "";
if ( ! $ibforums->vars['warn_past_max'] )
{
$ibforums->vars['warn_min'] = $ibforums->vars['warn_min'] ? $ibforums->vars['warn_min'] : 0;
$ibforums->vars['warn_max'] = $ibforums->vars['warn_max'] ? $ibforums->vars['warn_max'] : 10;
$warn_level = intval($this->warn_member['warn_level']);
if ( $ibforums->input['level'] == 'add' )
{
if ( $warn_level >= $ibforums->vars['warn_max'] )
{
$err = 1;
}
}
else
{
if ( $warn_level <= $ibforums->vars['warn_min'] )
{
$err = 1;
}
}
if ( $err == 1 )
{
$std->Error( array( LEVEL => '1', MSG => 'no_warn_max' ) );
}
}
//-------------------------------------------------
// Check security fang
//-------------------------------------------------
if ( $ibforums->input['key'] != $std->return_md5_check() )
{
$std->Error( array( LEVEL => '1', MSG => 'del_post') );
}
//-------------------------------------------------
// As Celine Dion once squawked, "Show me the reason"
//-------------------------------------------------
if ( trim($ibforums->input['reason']) == "" )
{
$this->show_form('we_no_reason');
return;
}
//-------------------------------------------------
// Plussy - minussy?
//-------------------------------------------------
$save['wlog_type'] = ( $ibforums->input['level'] == 'add' ) ? 'neg' : 'pos';
$save['wlog_date'] = time();
//-------------------------------------------------
// Contacting the member?
//-------------------------------------------------
if ( $ibforums->input['contact'] != "" )
{
$save['wlog_contact'] = $ibforums->input['contactmethod'];
$save['wlog_contact_content'] = "{$ibforums->input['subject']}{$ibforums->input['contact']}";
if ( trim($ibforums->input['subject']) == "" )
{
$this->show_form('we_no_subject');
return;
}
if ( $ibforums->input['contactmethod'] == 'email' )
{
//----------------------------------
// Send the email
//----------------------------------
$this->email->get_template("email_member");
$this->email->build_message( array(
'MESSAGE' => str_replace( "
", "\n", str_replace( "\r", "", $ibforums->input['contact'] ) ),
'MEMBER_NAME' => $this->warn_member['name'],
'FROM_NAME' => $ibforums->member['name']
)
);
$this->email->subject = $ibforums->input['subject'];
$this->email->to = $this->warn_member['email'];
$this->email->from = $ibforums->member['email'];
$this->email->send_mail();
}
else
{
//----------------------------------
// PM :o
//----------------------------------
$show_popup = $this->warn_member['view_pop'];
//--------------------------------------
// Enter the info into the DB
// Target user side.
//--------------------------------------
$db_string = $std->compile_db_string( array(
'member_id' => $this->warn_member['id'],
'msg_date' => time(),
'read_state' => '0',
'title' => $ibforums->input['subject'],
'message' => $std->remove_tags($ibforums->input['contact']),
'from_id' => $ibforums->member['id'],
'vid' => 'in',
'recipient_id' => $this->warn_member['id'],
'tracking' => 0,
) );
$DB->query("INSERT INTO ibf_messages (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
$new_id = $DB->get_insert_id();
unset($db_string);
//-----------------------------------------------------
$DB->query("UPDATE ibf_members SET ".
"msg_total = msg_total + 1, " .
"new_msg = new_msg + 1, " .
"msg_from_id='" . $ibforums->member['id'] . "', ".
"msg_msg_id='" . $new_id . "', ".
"show_popup='" . $show_popup . "' ".
"WHERE id='" . $this->warn_member['id'] . "'");
//-----------------------------------------------------
// Has this member requested a PM email nofity?
//-----------------------------------------------------
if ($this->warn_member['email_pm'] == 1)
{
$this->warn_member['language'] = $this->warn_member['language'] == "" ? 'en' : $this->warn_member['language'];
$this->email->get_template("pm_notify", $this->warn_member['language']);
$this->email->build_message( array(
'NAME' => $this->warn_member['name'],
'POSTER' => $ibforums->member['name'],
'TITLE' => $ibforums->input['subject'],
'LINK' => "?act=Msg&CODE=03&VID=in&MSID=$new_id",
)
);
$this->email->subject = $ibforums->lang['pm_email_subject'];
$this->email->to = $this->warn_member['email'];
$this->email->send_mail();
}
}
}
//-------------------------------------------------
// Right - is we banned or wha?
//-------------------------------------------------
$restrict_post = '';
$mod_queue = '';
$susp = '';
$save['wlog_notes'] = "{$ibforums->input['reason']}";
$save['wlog_notes'] .= "{$ibforums->input['mod_value']},{$ibforums->input['mod_unit']},{$ibforums->input['mod_indef']}";
$save['wlog_notes'] .= "{$ibforums->input['post_value']},{$ibforums->input['post_unit']},{$ibforums->input['post_indef']} ";
$save['wlog_notes'] .= "{$ibforums->input['susp_value']},{$ibforums->input['susp_unit']}";
if ( $ibforums->input['mod_indef'] == 1 )
{
$mod_queue = 1;
}
elseif ( $ibforums->input['mod_value'] > 0 )
{
$mod_queue = $std->hdl_ban_line( array( 'timespan' => intval($ibforums->input['mod_value']), 'unit' => $ibforums->input['mod_unit'] ) );
}
if ( $ibforums->input['post_indef'] == 1 )
{
$restrict_post = 1;
}
elseif ( $ibforums->input['post_value'] > 0 )
{
$restrict_post = $std->hdl_ban_line( array( 'timespan' => intval($ibforums->input['post_value']), 'unit' => $ibforums->input['post_unit'] ) );
}
if ( $ibforums->input['susp_value'] > 0 )
{
$susp = $std->hdl_ban_line( array( 'timespan' => intval($ibforums->input['susp_value']), 'unit' => $ibforums->input['susp_unit'] ) );
}
$save['wlog_mid'] = $this->warn_member['id'];
$save['wlog_addedby'] = $ibforums->member['id'];
//-------------------------------------------------
// Enter into warn loggy poos (eeew - poo)
//-------------------------------------------------
$dbs = $DB->compile_db_insert_string( $save );
$DB->query("INSERT INTO ibf_warn_logs ({$dbs['FIELD_NAMES']}) VALUES({$dbs['FIELD_VALUES']})");
//-------------------------------------------------
// Update member
//-------------------------------------------------
$warn_level = intval($this->warn_member['warn_level']);
if ( $ibforums->input['level'] == 'add' )
{
$warn_level++;
}
else
{
$warn_level--;
}
if ( $warn_level > $ibforums->vars['warn_max'] )
{
$warn_level == $ibforums->vars['warn_max'];
}
if ( $warn_level < 1 )
{
$warn_level == 0;
}
$dbs = $DB->compile_db_update_string( array (
'mod_posts' => $mod_queue,
'restrict_post' => $restrict_post,
'temp_ban' => $susp,
'warn_level' => $warn_level,
'warn_lastwarn' => time(),
) );
$DB->query("UPDATE ibf_members SET $dbs WHERE id={$this->warn_member['id']}");
//-------------------------------------------------
// Now what? Show success screen, that's what!!
//-------------------------------------------------
$ibforums->lang['w_done_te'] = sprintf( $ibforums->lang['w_done_te'], $this->warn_member['name'] );
$this->output .= $this->html->warn_success();
// Did we have a topic? eh! eh!! EH!
$tid = intval($ibforums->input['t']);
if ( $tid > 0 )
{
$DB->query("SELECT t.tid, t.title, f.id, f.name FROM ibf_topics t, ibf_forums f WHERE tid=$tid AND t.forum_id=f.id");
$topic = $DB->fetch_row();
$this->output = str_replace( "", $this->html->warn_success_forum( $topic['id'], $topic['name'], $topic['tid'], $topic['title'], intval($ibforums->input['st']) ), $this->output );
}
}
//-------------------------------------------------
// Show form
//-------------------------------------------------
function show_form($errors="")
{
global $std, $ibforums, $DB, $print;
if ( $this->type == 'member' )
{
$std->Error( array( LEVEL => 1, MSG => 'no_permission') );
}
$key = $std->return_md5_check();
if ( $errors != "" )
{
$this->output .= $this->html->warn_errors($ibforums->lang[$errors]);
}
$type = array( 'minus' => "", 'add' => "" );
if ( $ibforums->input['type'] == 'minus' )
{
$type['minus'] = 'checked="checked"';
}
else
{
$type['add'] = 'checked="checked"';
}
$this->output .= $this->html->warn_header(
$this->warn_member['id'],
$this->warn_member['name'],
intval($this->warn_member['warn_level']),
$ibforums->vars['warn_min'],
$ibforums->vars['warn_max'],
$key,
intval($ibforums->input['t']),
intval($ibforums->input['st']),
$type
);
if ( $this->can_mod_q )
{
$mod_tick = 0;
$mod_arr = array();
if ( $this->warn_member['mod_posts'] == 1 )
{
$mod_tick = 'checked';
}
elseif ($this->warn_member['mod_posts'] > 0)
{
$mod_arr = $std->hdl_ban_line($this->warn_member['mod_posts'] );
$hours = ceil( ( $mod_arr['date_end'] - time() ) / 3600 );
if ( $hours > 24 and ( ($hours / 24) == ceil($hours / 24) ) )
{
$mod_arr['days'] = 'selected="selected"';
$mod_arr['timespan'] = $hours / 24;
}
else
{
$mod_arr['hours'] = 'selected="selected"';
$mod_arr['timespan'] = $hours;
}
$mod_extra = $this->html->warn_restricition_in_place();
}
$this->output .= $this->html->warn_mod_posts($mod_tick, $mod_arr, $mod_extra);
}
if ( $this->can_rem_post )
{
$post_tick = 0;
$post_arr = array();
if ( $this->warn_member['restrict_post'] == 1 )
{
$post_tick = 'checked';
}
else if ( $this->warn_member['restrict_post'] > 0 )
{
$post_arr = $std->hdl_ban_line( $this->warn_member['restrict_post'] );
$hours = ceil( ( $post_arr['date_end'] - time() ) / 3600 );
if ( $hours > 24 and ( ($hours / 24) == ceil($hours / 24) ) )
{
$post_arr['days'] = 'selected="selected"';
$post_arr['timespan'] = $hours / 24;
}
else
{
$post_arr['hours'] = 'selected="selected"';
$post_arr['timespan'] = $hours;
}
$post_extra = $this->html->warn_restricition_in_place();
}
$this->output .= $this->html->warn_rem_posts($post_tick, $post_arr, $post_extra);
}
if ( $this->can_ban )
{
$ban_arr = array();
if ( $this->warn_member['temp_ban'] )
{
$ban_arr = $std->hdl_ban_line( $this->warn_member['temp_ban'] );
$hours = ceil( ( $ban_arr['date_end'] - time() ) / 3600 );
if ( $hours > 24 and ( ($hours / 24) == ceil($hours / 24) ) )
{
$ban_arr['days'] = 'selected="selected"';
$ban_arr['timespan'] = $hours / 24;
}
else
{
$ban_arr['hours'] = 'selected="selected"';
$ban_arr['timespan'] = $hours;
}
$post_extra = $this->html->warn_restricition_in_place();
}
$this->output .= $this->html->warn_suspend($ban_arr, $ban_extra);
}
$this->output .= $this->html->warn_footer();
}
}
?>