Name: Warning System

Version: 1.2

Last modified: 08/08/2009 @ 05:30 (GMT)

Description: This modification gives the staff the power to give warnings to members who misbehave on their forum.
                   There is a limit of 5 warns, if that is reached, then that member is banned for 72 hours.
                   There is a page in your admin panel for a few settings, including an On/Off, Money Deduction, Display Warns in Posts and Who Can Warn.
                   There is a page in your admin panel where you can view all the live warnings out right now and you can see the post that the member got warned for and see if the warning was warranted.
                   You are asked to confirm if you want to warn a member so there are no accidents.
                   You can also delete warnings.


Compatibility: XMB 1.9.8 SP3

Original Code Developed By: Nickpledge, Scan and Battle Angel.

Updated Code Developed By: Area51mafia (1.9.1 Release).
                                               WormHole : http://www.xmbgarage.com (1.9.5 Release)
                                               Adam Clarke : http://www.xmbservices.com (1.9.5 - Fixed Member Status Check)

MOD History: V1.0 (??/??/???? @ ??:??) - 1.9.1 Release by Area51mafia.
             V1.1 (??/??/???? @ ??:??) - 1.9.5 Release by WormHole.
             V1.2 (21/08/2006 @ 23:05) - Updated member status check code.
             V1.2 (08/08/2009 @ 05:30) - Updated for 1.9.8 SP3 by WormHole.

License Note: This modification is released under the GPL License. A copy is provided with this software package.

Note: Backup all affected files, templates & database's.

Affected Files (5): include/admin.user.inc.php, header.php, viewthread.php, member.php, & lang/English.lang.php.

Affected Templates (3): viewthread, viewthread_post, & member_profile.

====================================================================================================
========
STEP 1:
========
====================================
Go To Administration Panel -->  Insert Raw SQL
====================================
===============================
Upload SQL.txt and click Submit Changes
===============================
====================================================================================================
========
STEP 2:
========
=======================
Edit File: include/admin.inc.php
=======================
==========
Find Code:
==========

    &raquo;&nbsp;<a href="cp.php?action=settings"><?php echo $lang['textsettings']?></a><br />

===============
Add Code Below:
===============

    <!-- Warning System Mod Begin -->
    &raquo;&nbsp;<a href="warnings.php?action=settings"><?php echo $lang['warnsettings']?></a><br />
    <!-- Warning System Mod End -->

==========
Find Code:
==========

    &raquo;&nbsp;<a href="cp.php?action=rename"><?php echo $lang['admin_rename_txt']?></a><br />

===============
Add Code Below:
===============

    <!-- Warning System Mod Begin -->
    &raquo;&nbsp;<a href="warnings.php"><?php echo $lang['viewwarnings']?></a><br />
    <!-- Warning System Mod End -->

====================================================================================================
========
STEP 3:
========
=================
Edit File: header.php
=================
==========
Find Code:
==========

    $xmbuserinput = '';
    $xmbpwinput = '';
    $self['status'] = '';
}

===============
Add Code Below:
===============

// Warning System Mod Begin
$query = $db->query("SELECT * FROM $table_warnings WHERE username='$xmbuser' AND status='live'");
$origwarnings = mysql_num_rows($query);
if ($origwarnings > 0) {
    $expiretime = $onlinetime - 259200;
    $query = $db->query("UPDATE ".X_PREFIX."warnings SET status = 'exp' WHERE username='$xmbuser' AND dateline < $expiretime");
    $query = $db->query("SELECT * FROM $table_warnings WHERE username='$xmbuser' AND status='live'");
    $numwarnings = mysql_num_rows($query);

    if ($numwarnings < 5 && $origwarnings == 5) {
        $query = $db->query("UPDATE ".X_PREFIX."members SET ban='' WHERE username='$xmbuser'");
        $u2umessage = "You currently have ".$numwarnings." warnings from forum staff. Your posting ban has been automatically lifted. Please respect our members and participate in discussions in a productive manner.";
        $query = $db->query("INSERT INTO ".X_PREFIX."u2u VALUES('', '$xmbuser', 'FORUM STAFF', 'incoming', '$xmbuser', 'inbox', 'Posting Ban Lifted', '$u2umessage', $onlinetime, 'no', 'yes')");
    } 
    if ($numwarnings =! $origwarnings) {
        $u2umessage = "You currently have ".$numwarnings." warnings from forum staff. Please continue to respect our members and participate in discussions in a productive manner.";
        $query = $db->query("INSERT INTO ".X_PREFIX."u2u VALUES('', '$xmbuser', 'FORUM STAFF', 'incoming', '$xmbuser', 'inbox', 'Warning Expiration', '$u2umessage', $onlinetime, 'no', 'yes')");
    }
}
// Warning System Mod End

==========
Find Code:
==========

$tables = array(
    'attachments',

============
Find In Array:
============

    'u2u',

===============
Add Code Below:
===============

    'u2u',
    'warnings',

====================================================================================================
========
STEP 4:
========
===================
Edit File: viewthread.php
===================
==========
Find Code:
==========

smcwcache();

===============
Add Code Above:
===============

// Warning System Mod Begin
$viewmessage = '';
if ($SETTINGS['warnstatus'] == 'on' && $warn && $pid > 0) {
    $liststatuses = array_map('trim', explode(',', $SETTINGS['warnstatuses']));
    $warnallow = in_array($self['status'], $liststatuses);
    if ($warnallow && !X_GUEST) {
        $thatime = time();
        $query = $db->query("SELECT * FROM ".X_PREFIX."warnings WHERE username='$warn' AND status='live'");
        $numwarnings = mysql_num_rows($query);
        if ($numwarnings < 5) {
            $post = "viewthread.php?tid=$tid&page=$page#pid$pid";
            $query = $db->query("INSERT INTO ".X_PREFIX."warnings VALUES('', '$warn', $thatime, 'live', '$post')");
					
            $query = $db->query("SELECT subject FROM ".X_PREFIX."threads WHERE tid='$tid'");
            $subject = $db->fetch_array($query);
            $numwarnings = $numwarnings + 1;
            if ($numwarnings == $SETTINGS['warntoll']){
                $db->query("UPDATE ".X_PREFIX."members SET ban='posts', warncount='$numwarnings' WHERE username='$warn'");
                $viewmessage = '<div align="center" class="mediumtxt"><strong>'.$lang['warning_1'].$warn.$lang['warning_2'].'</strong></div>';
                $u2umessage = $lang['warning_4'].$subject['subject'].'. '.$lang['warning_5'].$numwarnings.$lang['warning_9'];
                $db->query("INSERT INTO ".X_PREFIX."u2u VALUES('', '$warn', '$bbname Staff', 'incoming', '$warn', 'inbox', '$lang[warningandban]', '$u2umessage', $thatime, 'no', 'yes')");
            } else {
                $db->query("UPDATE ".X_PREFIX."members SET warncount='$numwarnings' WHERE username='$warn'");
                $viewmessage = '<div align="center" class="mediumtxt"><strong>'.$lang['warning_1'].$warn.$lang['warning_3'].$numwarnings.' '.$lang['warnings'].'</strong></div>';
                $u2umessage = $lang['warning_4'].$subject['subject'].'. '.$lang['warning_6'].$numwarnings.' '.$lang['texttimes'].'. '.$lang['warning_7'].$numwarnings.$lang['warning_8'];
                $db->query("INSERT INTO ".X_PREFIX."u2u VALUES('', '$warn', '$bbname Staff', 'incoming', '$warn', 'inbox', '$lang[warning]', '$u2umessage', $thatime, 'no', 'yes')");
            }
            if ($SETTINGS['moneywarn'] != '0') {
                $query = $db->query("UPDATE ".X_PREFIX."members SET money=money-'$SETTINGS[moneywarn]' WHERE username='$warn'");
            }
        } else {
            $viewmessage= '<div align="center" class="mediumtxt"><strong>'.$lang['warningw_1'].$warn.$lang['warningw_2'].$lang['texttimes'].'</strong></div>';
        }
    } else {
        $viewmessage = '<div align="center" class="mediumtxt"><strong>'.$lang['notabletowarn'].'</strong></div>';
    }
}
// Warning System Mod End

==========
Find Code:
==========

loadtemplates(

================
Replace Code With:
================

loadtemplates(
'viewthread_post_warn',

==========
Find Code:
==========

        if ($post['icon'] != '' && file_exists($smdir.'/'.$post['icon'])) {
            $post['icon'] = '<img src="'.$smdir.'/'.$post['icon'].'" alt="'.$post['icon'].'" border="0" />';
        } else {
            $post['icon'] = '<img src="'.$imgdir.'/default_icon.gif" alt="[*]" border="0" />';
        }

===============
Add Code Below:
===============

        // Warning System Mod Begin
        $staffwarnings = $warninglink = $warndisplay = '';
        if ($SETTINGS['warnstatus'] == 'on') {
            $liststatuses = array_map('trim', explode(',', $SETTINGS['warnstatuses']));
            $warnallow = in_array($self['status'], $liststatuses);
            $query = $db->query("SELECT post FROM ".X_PREFIX."warnings WHERE username='$post[author]' AND status='live'");
            $numwarnings = mysql_num_rows($query);
                if (!in_array($post['status'], array('Moderator', 'Super Moderator', 'Administrator', 'Super Administrator')) && $warnallow && !X_GUEST) {
                    eval('$warninglink = "'.template('viewthread_post_warn').'";');			
                    if ($numwarnings > 0) {
                        $staffwarnings = "<br />$lang[staffwarns] <strong>".$numwarnings."</strong><br />";
                    }
                }
            if ($SETTINGS['displaywarns'] == 'on') {
                if ($numwarnings != 0) {
                    $warndisplay = "<div align=\"center\">$lang[warnings]:<br /><a href=\"member.php?action=warns&member=$post[author]\"><img alt=\"$lang[viewwarnings2]\" src=\"$THEME[imgdir]/warn".$numwarnings.".gif\" border=\"0\" /></a></div>";
                } elseif($numwarnings < 1) {
                    $warndisplay = "<div align=\"center\">$lang[warnings]:<br /><img alt=\"$lang[nowarnings]\"src=\"$THEME[imgdir]/warn0.gif\" border=\"0\"></div>";
                }
            }
        }
        // Warning System Mod End

==========
Find Code:
==========

            $location = '';
            $mood = '';

===============
Add Code Below:
===============

            // Warning System Mod Begin
            $staffwarnings = '';
            $warninglink = '';
            $warndisplay = '';
            // Warning System Mod End

====================================================================================================
========
STEP 5:
========
=================
Edit File: member.php
=================
==========
Find Code:
=================

loadtemplates(

================
Replace Code With:
================

loadtemplates(
'member_profile_warns',
'member_warns_rows',
'member_warns',
'member_warns_none',

==========
Find Code:
==========

    case 'coppa':
        nav($lang['textcoppa']);
        break;

===============
Add Code Below:
===============

    // Warning System Mod Begin
    case 'warns':
        nav($lang['evalmemswarns']);
        break;
    // Warning System Mod End

==========
Find Code:
==========

                if (X_SADMIN) {
                    $admin_edit = "<br />$lang[adminoption] <a href=\"./editprofile.php?user=$encodeuser\">$lang[admin_edituseraccount]</a>";
                } else {
                    $admin_edit = NULL;
                }

===============
Add Code Above:
===============

                // Warning System Mod Begin
                $warndisplay = '';
                if ($SETTINGS['warnstatus'] == 'on' && $SETTINGS['displaywarns'] == 'on') {
                    $query = $db->query("SELECT post FROM ".X_PREFIX."warnings WHERE username='$memberinfo[username]' AND status='live'");
                    $numwarnings = mysql_num_rows($query);
                    if ($numwarnings != 0) {
                        $warndisplay = "<a href=\"member.php?action=warns&member=$memberinfo[username]\"><img alt=\"$lang[viewwarnings2]\"src=\"$THEME[imgdir]/warn".$numwarnings.".gif\" border=\"0\" /></a>";
                        eval('$warnblock = "'.template('member_profile_warns').'";');
                    }
                }
                // Warning System Mod Begin

==========
Find Code:
==========

    case 'viewpro':
        $member = postedVar('member', '', TRUE, TRUE, FALSE, 'g');

===============
Add Code Above:
===============

    // Warning System Mod Begin
    case 'warns':
        $member = postedVar('member', '', TRUE, TRUE, FALSE, 'g');
        if (!$member) {
            error($lang['nomember']);
        } else {
            if ($SETTINGS['warnstatus'] == 'off' || $SETTINGS['displaywarns'] == 'off') {
                error($lang['warningoff']);
            }
            eval('echo ("'.template('header').'");');
                $query = $db->query("SELECT * FROM ".X_PREFIX."warnings WHERE status='live' AND username='$member' ORDER BY dateline DESC");
                    $warningsnum = mysql_num_rows($query);
                if ($warningsnum < 1) {
                    eval('$warns = "'.template('member_warns_none').'";');
                } 
                while ($warninfo = $db->fetch_array($query)) { 
                    $date = gmdate($dateformat, $warninfo['dateline'] + ($timeoffset * 3600) + ($addtime * 3600));
                    $time = gmdate($timecode, $warninfo['dateline'] + ($timeoffset * 3600) + ($addtime * 3600));
                    $datetime = "$date at $time";
                    $post =  "<a href=\"$warninfo[post]\">$lang[viewpost2]</a>";
                    if ($warningsnum != 0) {
                        eval('$warns .= "'.template('member_warns_rows').'";');
                    }
                }
            eval('echo ("'.template('member_warns').'");');
            }
        break;
    // Warning System Mod End

====================================================================================================
========
STEP 6:
========
=======================
Edit File: lang/English.lang.php
=======================
============================
Add Code To End Of File Above ?>
============================

// Warning System Mod Begin
$lang['warnings'] = 'Warnings';
$lang['warning'] = 'Warning';
$lang['deletewarn'] = 'Delete Warning';
$lang['warndate'] = 'Date of Warn:';
$lang['reviewwarn'] = 'Review Warn';
$lang['reviewwarn2'] = 'Review';
$lang['warnupdate'] = 'Warnings updated successfully!';
$lang['warnupdate2'] = 'Warning Settings updated successfully!';
$lang['warnsettings'] = 'Warning Settings';
$lang['displaywarns'] = 'Display Warns Next to Posts:';
$lang['warnstatus'] = 'Warning System Status:';
$lang['warnstatuses'] = 'Input the User Status of Those Who Can Give Out Warnings, Separated By Commas:<br /><small>(ie. Super Administrator,Administrator,Super Moderator,Moderator,Member)</small>';
$lang['notabletowarn']  = 'You Are Not Able to Warn Users.';
$lang['staffwarns'] = 'Staff Warnings: ';
$lang['viewwarnings'] = 'View Member Warnings';
$lang['nowarnings'] = 'This Member Has No Warnings';
$lang['viewpost'] = 'View Post They Got Warned For:';
$lang['viewpost2']  = 'View Post';
$lang['viewwarnings2']  = 'View This Members Warnings';
$lang['warningoff'] = 'The Warning System is Currently Turned Off';
$lang['warnsure'] = 'Are you sure you want to warn this member?';
$lang['texttimes']  = 'times';
$lang['warning_1']  = 'You have warned ';
$lang['warning_2']  = ' who is now banned from posting.';
$lang['warning_3']  = ' who now has ';
$lang['warning_4']  = 'A member of the forum staff has sent you a warning regarding your activity on the thread titled, ';
$lang['warning_5']  = 'This is now warning number ';
$lang['warning_6']  = 'You have been warned ';
$lang['warning_7']  = 'Warnings are recorded, and each individual warning expires in '.$warnexpiry.' days from the time it was applied. If forum staff continue to warn you for your actions, and you gain ';
$lang['warning_8']  = ' or more warnings, a temporary posting ban will be enforced automatically. Do not reply to this U2U.';
$lang['warning_9']  = ' for your account, and a temporary posting ban has been automatically applied. Warnings are recorded, and each individual warning expires in '.$warnexpiry.' days. This means your warnings will decrease in approximately '.$warnexpiry.' days, and your ban will be automatically lifted. However, be aware that unless all your warnings were given today, you may still have warnings applied to your profile when the ban is lifted. Do not reply to this U2U.';
$lang['warning_10'] = 'Your posting ban has been lifed. You currently have ';
$lang['warning_11'] = ' Warnings from the staff.';
$lang['warningw_1'] = 'The user, ';
$lang['warningw_2'] = ' has already been warned ';
$lang['warningandban']  = 'Warning and Post Ban';
$lang['warnforhow'] = 'How long should warnings remain in effect?<br />0 = Forever';
$lang['warnlift'] = 'Posting Ban Lifted';
$lang['toolshow'] = 'You currently have ';
$lang['warnlength'] = 'How many warnings should be issued before the user is banned?';
$lang['textwarn'] = 'Warn User';
$lang['moneywarn'] = "Money Taken Away on Warn:";
// Warning System Mod End

====================================================================================================
========
STEP 7:
========
==========================
Go To Admin Panel --> Templates
==========================
====================
Edit Template: viewthread
====================
============================
Add Code To Beginning Of Template:
============================

$viewmessage

====================================================================================================
========
STEP 8:
========
==========================
Go To Admin Panel --> Templates
==========================
========================
Edit Template: viewthread_post
========================
==========
Find Code:
==========

$onlinenow
<br />

===============
Add Code Below:
===============

$staffwarnings
<br />
$warninglink
<br />

==========
Find Code:
==========

$mood

===============
Add Code Below:
===============

$warndisplay

====================================================================================================
========
STEP 9:
========
==========================
Go To Admin Panel --> Templates
==========================
==================================
Create New Template: viewthread_post_warn
==================================
===========================================
Add Code & Submit (If you DON'T want an image button):
===========================================

<script type="text/javascript">
<!--
function warn() {
if(confirm("$lang[warnsure]?")) {
return true;
}
else {
return false;
}
}
//-->
</script>
<div align="center"><a href="viewthread.php?tid=$tid&page=$page&warn=$post[author]&pid=$post[pid]" onclick="return warn()" class='smalltxt'><strong>[warn]</strong></a></div>

========================================
Add Code & Submit (If you DO want an image button):
----------------------------------------------------------------------------------------------------
<script type="text/javascript">
<!--
function warn() {
if(confirm("$lang[warnsure]?")) {
return true;
}
else {
return false;
}
}
//-->
</script>
<div align="center"><a href="viewthread.php?tid=$tid&page=$page&warn=$post[author]&pid=$post[pid]" onclick="return warn()" class='smalltxt'><img src="$THEME[imgdir]/warn.gif" border="0" alt="warn" /></a></div>

----------------------------------------------------------------------------------------------------

If you have used the image version, you need to create an image called warn.gif, and upload it to all your theme image folders. 
If you wish to display the warns next to the members posts, 6 images (warn0-5.gif) has been included that you can use.

----------------------------------------------------------------------------------------------------
====================================================================================================
=========
STEP 10:
=========
==========================
Go To Admin Panel --> Templates
==========================
=======================
Edit Template: member_profile
=======================
==========
Find Code:
==========

<tr class="tablerow">
<td bgcolor="$altbg1">$lang[textposts]</td>
<td bgcolor="$altbg2">$memberinfo[postnum] ($percent% $lang[textoftotposts])</td>
</tr>

===============
Add Code Above:
===============

$warnblock

====================================================================================================
=========
STEP 11:
=========
==========================
Go To Admin Panel --> Templates
==========================
==================================
Create New Template: member_profile_warns
==================================
=================
Add Code & Submit:
=================

<tr class="tablerow">
<td bgcolor="$THEME[altbg1]">$lang[warnings]:</td>
<td bgcolor="$THEME[altbg2]">$warndisplay</a></td>
</tr>

====================================================================================================
=========
STEP 12:
=========
==========================
Go To Admin Panel --> Templates
==========================
=============================
Create New Template: member_warns
=============================
=================
Add Code & Submit:
=================

<tr bgcolor="$THEME[altbg2]">
<td>
<table cellspacing="0" cellpadding="0" border="0" width="500" align="center">
<tr>
<td bgcolor="$THEME[bordercolor]">
<table border="0" cellspacing="$THEME[borderwidth]" cellpadding="$THEME[tablespace]" width="100%">
<tr class="category">
<td width="50%"><strong><font color="$THEME[cattext]">$lang[warndate]</font></strong></td>
<td width="50%"><strong><font color="$THEME[cattext]">$lang[viewpost]</font></strong></td>
</tr>
$warns
</table>
</td>
</tr>
</table>
<br />
</td>
</tr>

====================================================================================================
=========
STEP 13:
=========
==========================
Go To Admin Panel --> Templates
==========================
=================================
Create New Template: member_warns_rows
=================================
=================
Add Code & Submit:
=================

<tr bgcolor="$THEME[altbg2]" class="tablerow">
<td>
$datetime
</td>
<td>
$post
</td>
</tr>

====================================================================================================
=========
STEP 14:
=========
==========================
Go To Admin Panel --> Templates
==========================
=================================
Create New Template: member_warns_none
=================================
=================
Add Code & Submit:
=================

<tr bgcolor="$THEME[altbg2]" class="tablerow">
<td colspan="2">
$lang[nowarnings]
</td>
</tr>

====================================================================================================
STEP 15: 

Upload 'warnings.php' to your forum directory.
Upload 'warn0.gif', 'warn1.gif', 'warn2.gif', 'warn3.gif', 'warn4.gif', 'warn5.gif' to all theme directories.
Upload 'warn.gif' if needed to all theme directories.
====================================================================================================
Enjoy!