############################################################## 
## MOD Title: 		Warnings Mod
## MOD Author:	 	Xpert < xpert@phpbbguru.net > http://www.phpbbguru.net 
## MOD Description: 	Warnings system for phpBB 
## MOD Version: 	1.0.7 
## 
## Installation Level: 	Easy 
## Installation Time: 	10 Minutes 
## Files To Edit (1): 	n/a
############################################################## 
## For Security Purposes, Please Check: http://www.phpbbguru.net/mods/ for the 
## latest version of this MOD. 
############################################################## 
## MOD History:
##
##   2008-01-02 - Version 1.0.7 
##	- Some how-to fixes
##	- Fixed an issue with warnings less than 0
##	- Fixed variable names conflict (Sarry)
##
##   2007-08-06 - Version 1.0.6 
##	- Full English version added
##	- Fixed an issue with ban and inproper rank when user have more than max warnings (Dimaman) 
##	- Changed warnings letter text (Alice) 
##	- Fixed an SQL error at admin_board.php (Unix_spv) 
##	- Added check on double warning if page reload (Palych) 
##	- Fixed an error with "user already banned" message (natali)
##
##   2007-04-16 - Version 1.0.4 
##	- Added warnings editing
##
##   2007-04-14 - Version 1.0.3 
##	- Added showing warnings at viewtopic
##	- Fixed an issue with improper icon showing
##	- Fixed an issue with removing permanent warning/ban
##	- Fixed an issue with deleting more than one warning per processing (thanks to Palych)
##	- How-to fixes
##
##   2007-04-07 - Version 1.0.2 
##	- Added warnings removing and deletion
##	- Some visual improvements
##
##   2007-03-11 - Version 1.0.1 
##	- More user-friendly: added emails and user unban time if ban is not permament
##	- New ban algorytm
##	- Some code fixes
## 
##   2007-02-20 - Version 1.0.0 
##      - Initial Release 
## 
############################################################## 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
############################################################## 

#
#-----[ COPY ]------------------------------------------
#
copy templates/*.* to templates/*.*
copy language/*.* to language/*.*
copy warnings.php to warnings.php

#
#-----[ SQL ]------------------------------------------
#
ALTER TABLE `phpbb_users` ADD `user_warnings` TINYINT( 1 ) DEFAULT '0' NOT NULL, ADD `user_banned` TINYINT( 1 ) DEFAULT '0' NOT NULL;

INSERT INTO `phpbb_config` VALUES ('warnings_time', '0');
INSERT INTO `phpbb_config` VALUES ('warnings_per_ban', '3');

CREATE TABLE `phpbb_warnings` (
  `warning_id` mediumint(8) unsigned NOT NULL auto_increment,
  `warning_type` tinyint(1) unsigned NOT NULL default '0',
  `warning_post_id` mediumint(8) unsigned NOT NULL default '0',
  `warning_user_id` mediumint(8) unsigned NOT NULL default '0',
  `warning_poster_id` mediumint(8) unsigned NOT NULL default '0',
  `warning_posted` int(11) NOT NULL default '0',
  `warning_expires` int(11) NOT NULL default '0',
  `warning_proceed` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`warning_id`)
) TYPE=MyISAM;

CREATE TABLE `phpbb_warnings_text` (
  `warning_id` mediumint(8) unsigned NOT NULL default '0',
  `bbcode_uid` varchar(10) NOT NULL default '',
  `warning_text` text,
  PRIMARY KEY  (`warning_id`)
) TYPE=MyISAM;

#
#-----[ OPEN ]------------------------------------------
#
includes/constants.php

#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
define('POST_WARNING_URL', 'w');

define('WARNING_TYPE_WARNING', 1);
define('WARNING_TYPE_BAN', 2);
define('WARNING_INFINITY', -1);

define('WARNINGS_TABLE', $table_prefix.'warnings');
define('WARNINGS_TEXT_TABLE', $table_prefix.'warnings_text');
// [end] Warnings Mod 1.0.7

#
#-----[ OPEN ]------------------------------------------
#
includes/sessions.php

#
#-----[ FIND ]------------------------------------------
#
function session_begin

#
#-----[ FIND ]------------------------------------------
#
	global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID;

#
#-----[ AFTER, ADD ]------------------------------------------
#
	// [begin] Warnings Mod 1.0.7
	global $lang;
	// [end] Warnings Mod 1.0.7
	
#
#-----[ FIND ]------------------------------------------
#
			message_die(CRITICAL_MESSAGE, 'You_been_banned');
		}
	}
	
#
#-----[ AFTER, ADD ]------------------------------------------
#
	// [begin] Warnings Mod 1.0.7
	if ( ( $userdata['user_warnings'] >= $board_config['warnings_per_ban'] ) || $userdata['user_banned'] )
	{
		if ( $userdata['user_banned'] )
		{
			$warning_type = WARNING_TYPE_BAN;
			$warning_lang = 'You_been_banned_ban';
		}
		else
		{
			$warning_type = WARNING_TYPE_WARNING;
			$warning_lang = 'You_been_banned_warnings';
		}

		$sql = "SELECT * FROM " . WARNINGS_TABLE . " WHERE warning_user_id = " . $userdata['user_id'] . " AND warning_proceed = 0 AND warning_expires != " . WARNING_INFINITY . " AND warning_type = '$warning_type' ORDER BY warning_expires ASC LIMIT 1";
		$result = $db->sql_query($sql) or message_die(GENERAL_ERROR, 'Could not get warning information', '', __LINE__, __FILE__, $sql);

		if ( $db->sql_numrows($result) )
		{
			$row = $db->sql_fetchrow($result);
			$unban_time = create_date($board_config['default_dateformat'], $row['warning_expires'], $board_config['board_timezone']);
			message_die(CRITICAL_MESSAGE, sprintf($lang[$warning_lang], $unban_time) );
		}
		else
		{
			message_die(CRITICAL_MESSAGE, 'You_been_banned');
		}
	}
	// [end] Warnings Mod 1.0.7

#
#-----[ OPEN ]------------------------------------------
#
viewtopic.php

#
#-----[ FIND ]------------------------------------------
#
// Go ahead and pull all data for this topic
//
$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from

#
#-----[ IN-LINE FIND ]------------------------------------------
#
u.username, u.user_id

#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
, u.user_level, user_warnings, user_banned

#
#-----[ FIND ]------------------------------------------
#
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
//

#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
$min_post_id = $postrow[0]['post_id'];
$max_post_id = $postrow[count($postrow) - 1]['post_id'];

$sql = "SELECT w.*, wt.*, u.username FROM " . WARNINGS_TABLE . " w, " . WARNINGS_TEXT_TABLE . " wt, " . USERS_TABLE . " u, " . POSTS_TABLE . " p WHERE p.topic_id = $topic_id AND p.post_id >= $min_post_id AND p.post_id <= $max_post_id AND w.warning_post_id = p.post_id AND w.warning_id = wt.warning_id AND w.warning_proceed = 0 AND u.user_id = w.warning_poster_id";
$result = $db->sql_query($sql) or message_die(GENERAL_ERROR, 'Could not insert warning information', '', __LINE__, __FILE__, $sql);

$warnings_row = array();
while ( $row = $db->sql_fetchrow($result) )
{
	if ( !is_array($warnings_row[$row['warning_post_id']]) )
	{
		$warnings_row[$row['warning_post_id']] = array();
	}
	$warnings_row[$row['warning_post_id']][] = $row;
}

$db->sql_freeresult($result);
// [end] Warnings Mod 1.0.7

#
#-----[ FIND ]------------------------------------------
#
	else if ( $postrow[$i]['user_rank'] )
	{
	
#
#-----[ BEFORE, ADD ]------------------------------------------
#
	// [begin] Warnings Mod 1.0.7
	elseif ( $postrow[$i]['user_warnings'] || $postrow[$i]['user_banned'] )
	{
		if ( ( $postrow[$i]['user_warnings'] >= $board_config['warnings_per_ban'] ) || $postrow[$i]['user_banned'] )
		{
			$poster_rank = $lang['Banned_rank'];
			$rank_image =  '<img src="' . $images['user_banned_rank'] . '" alt="' . $poster_rank . '" title="' . $poster_rank . '" border="0" />';
		}
		elseif ( $postrow[$i]['user_warnings'] )
		{
			$poster_rank = sprintf($lang['Warned_rank'], $postrow[$i]['user_warnings']);
			$rank_image =  '<img src="' . $images['user_warned_rank'] . '" alt="' . $poster_rank . '" title="' . $poster_rank . '" border="0" />&nbsp;';
			$rank_image = str_repeat($rank_image, $postrow[$i]['user_warnings']);
		}
		$rank_image .= '<br />';
	}
	// [end] Warnings Mod 1.0.7

#
#-----[ FIND ]------------------------------------------
#
	if ( $is_auth['auth_mod'] )
	{

#
#-----[ AFTER, ADD ]------------------------------------------
#
		// [begin] Warnings Mod 1.0.7
		if ( !in_array($postrow[$i]['user_level'], array(ADMIN,MOD)) && ($poster_id != ANONYMOUS) )
		{
			$temp_url = "warnings.$phpEx?" . POST_POST_URL . "=" . $postrow[$i]['post_id'] . "&amp;mode=add_warning&amp;sid=" . $userdata['session_id'];
			$warning_img = '<a href="' . $temp_url . '"><img src="' . $images['user_warn'] . '" alt="' . $lang['Warn_user'] . '" title="' . $lang['Warn_user'] . '" border="0" /></a>';
			$warning = '<a href="' . $temp_url . '">' . $lang['Warn_user'] . '</a>';
		}
		else
		{
			$temp_url = '';
			$warning_img = '';
			$warning = '';
		}
		// [end] Warnings Mod 1.0.7

#
#-----[ FIND ]------------------------------------------
#
		$l_edited_by = '';
	}
	
#
#-----[ AFTER, ADD ]------------------------------------------
#
	// [begin] Warnings Mod 1.0.7
	if ( isset($warnings_row[$postrow[$i]['post_id']]) )
	{
		$warnings = array();

		foreach ($warnings_row[$postrow[$i]['post_id']] as $warning_row)
		{
			$warning_icon = ( $warning_row['warning_type'] == WARNING_TYPE_WARNING ) ? $images['user_warned_rank'] : $images['user_banned_rank'];
			$warning_icon = '<img src="' . $warning_icon . '" border="0" alt="">';
			$warning_text = htmlspecialchars($warning_row['warning_text']);
			$warning_poster = '<a class="gensmall" href="' . append_sid('profile.' . $phpEx . '?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $warning_row['warning_poster_id']) . '">' . $warning_row['username'] . '</a>';

			$warnings[] = sprintf($lang['Warnings_viewtopic'], $warning_icon, $warning_text, $warning_poster);
		}

		$warnings_info = '<br /><br />' . implode('<br />', $warnings);
	}
	else
	{
		$warnings_info = '';
	}
	// [end] Warnings Mod 1.0.7

#
#-----[ FIND ]------------------------------------------
#
		'DELETE_IMG' =>
		'DELETE' =>

#
#-----[ AFTER, ADD ]------------------------------------------
#
		// [begin] Warnings Mod 1.0.7
		'WARNING_IMG' => $warning_img,
		'WARNING' => $warning,
		'WARNINGS_INFO' => $warnings_info,
		// [end] Warnings Mod 1.0.7

#
#-----[ OPEN ]------------------------------------------
#
includes/usercp_viewprofile.php

#
#-----[ FIND ]------------------------------------------
#
if ( $profiledata['user_rank'] )
	
#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
if ( $profiledata['user_warnings'] || $profiledata['user_banned'] )
{
	if ( ( $profiledata['user_warnings'] >= $board_config['warnings_per_ban'] ) || $profiledata['user_banned'] )
	{
		$poster_rank = $lang['Banned_rank'];
		$rank_image =  '<img src="' . $images['user_banned_rank'] . '" alt="' . $poster_rank . '" title="' . $poster_rank . '" border="0" />';

	}
	elseif ( $profiledata['user_warnings'] )
	{
		$poster_rank = sprintf($lang['Warned_rank'], $profiledata['user_warnings']);
		$rank_image =  '<img src="' . $images['user_warned_rank'] . '" alt="' . $poster_rank . '" title="' . $poster_rank . '" border="0" />&nbsp;';
		$rank_image = str_repeat($rank_image, $profiledata['user_warnings']);
	}
	$rank_image .= '<br />'; 

}
else
// [end] Warnings Mod 1.0.7

#
#-----[ FIND ]------------------------------------------
#
$template->pparse('body');

#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
$sql = "SELECT w.*, wt.*, u.username FROM " . WARNINGS_TABLE . " w, " . WARNINGS_TEXT_TABLE . " wt, " . USERS_TABLE . " u WHERE w.warning_user_id = '" . $profiledata['user_id'] . "' AND wt.warning_id = w.warning_id AND u.user_id = w.warning_poster_id";
if ( !in_array($userdata['user_level'], array(ADMIN,MOD)) )
{
	$sql .= " AND (w.warning_expires > " . time() . " OR w.warning_expires = " . WARNING_INFINITY . ')';
}
$sql .= " ORDER BY w.warning_proceed ASC, w.warning_posted DESC";
$result = $db->sql_query($sql) or message_die(GENERAL_ERROR, 'Could not insert warning information', '', __LINE__, __FILE__, $sql);

if ( $db->sql_numrows($result) )
{
	$template->set_filenames(array(
		'warnings_profile_view_body' => 'warnings_profile_view_body.tpl')
	);

	$template->assign_block_vars('switch_warnings', array());

	$template->assign_vars(array(
		'L_WARNINGS' => $lang['Warnings'],
		'L_WARNING_TEXT_CAPTION' => $lang['Warning_text_caption'],
		'L_WARNING_POSTER' => $lang['Warning_poster'],
		'L_WARNING_EXPIRES' => $lang['Warning_expires'],
		'L_WARNING_ACTIONS' => $lang['Warning_actions'],
		'L_EXPIRED_WARNINGS' => $lang['Expired_warnings']
		)
	);

	$i = 1;
	$previous_warning_proceed = 0;
	$warning_actions_flag = FALSE;

	while ( $row = $db->sql_fetchrow($result) )
	{
		switch ( $row['warning_type'] )
		{
			case WARNING_TYPE_WARNING:
				$warning_icon = $images['user_warned_rank'];
			break;
					
			case WARNING_TYPE_BAN:
				$warning_icon = $images['user_banned_rank'];
			break;
		}
			
		$warning_icon = '<img src="' . $warning_icon . '" border="0" alt="">';
		$warning_text = htmlspecialchars($row['warning_text']);
		$warning_post = '<a class="gensmall" href="' . append_sid('viewtopic.' . $phpEx . '?' . POST_POST_URL . '=' . $row['warning_post_id']) . '#' . $row['warning_post_id'] . '">' . $lang['Warned_post_link'] . '</a>';
		$warning_poster = '<a class="gensmall" href="' . append_sid('profile.' . $phpEx . '?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $row['warning_poster_id']) . '">' . $row['username'] . '</a>';
		$warning_posted = create_date($board_config['default_dateformat'], $row['warning_posted'], $board_config['board_timezone']);
		$warning_expires = ( $row['warning_expires'] != WARNING_INFINITY ) ? create_date($board_config['default_dateformat'], $row['warning_expires'], $board_config['board_timezone']) : $lang['wt_infinity'];

		if ( $row['warning_proceed'] && !$previous_warning_proceed )
		{
			$i = 1;
		}

		$template->assign_block_vars('warning_row', array(
			'WARNING_NUMBER' => $i,
			'WARNING_ICON' => $warning_icon,
			'WARNING_TEXT' => $warning_text,
			'WARNING_POST' => $warning_post,
			'WARNING_POSTER' => $warning_poster,
			'WARNING_POSTED' => $warning_posted,
			'WARNING_EXPIRES' => $warning_expires
			)
		);

		if ( $row['warning_proceed'] && !$previous_warning_proceed )
		{
			$template->assign_block_vars('warning_row.proceed_separator', array());
		}

		if ( ( $row['warning_poster_id'] == $userdata['user_id'] ) || ( $userdata['user_level'] == ADMIN ) )
		{
			$warning_actions_flag = TRUE;

			$warning_actions = array();
			$warning_actions[] = '<a class="gensmall" href="warnings.' . $phpEx . '?mode=edit_warning&amp;' . POST_WARNING_URL . '=' . $row['warning_id'] . '&amp;sid=' . $userdata['session_id'] . '">' . $lang['Edit_warning'] . '</a>';
			if ( !$row['warning_proceed'] )
			{
				$warning_actions[] = '<a class="gensmall" href="warnings.' . $phpEx . '?mode=remove_warning&amp;' . POST_WARNING_URL . '=' . $row['warning_id'] . '&amp;sid=' . $userdata['session_id'] . '">' . $lang['Remove_warning'] . '</a>';
			}
			$warning_actions[] = '<a class="gensmall" href="warnings.' . $phpEx . '?mode=delete_warning&amp;' . POST_WARNING_URL . '=' . $row['warning_id'] . '&amp;sid=' . $userdata['session_id'] . '">' . $lang['Delete_warning'] . '</a>';

			$template->assign_block_vars('warning_row.actions', array(
				'WARNING_ACTIONS' => implode($warning_actions, '<br />')
				)
			);
		}

		$i++;
		$previous_warning_proceed = $row['warning_proceed'];
	}

	if ( $warning_actions_flag )
	{
		$template->assign_block_vars('warning_actions_header', array());
	}

	if ( ( $profiledata['user_warnings'] >= $board_config['warnings_per_ban'] ) || 	$profiledata['user_banned'] )
	{
		if ( $profiledata['user_banned'] )
		{
			$warning_type = WARNING_TYPE_BAN;
			$warning_lang = 'User_banned_ban';
		}
		else
		{
			$warning_type = WARNING_TYPE_WARNING;
			$warning_lang = 'User_banned_warnings';
		}

		$sql = "SELECT * FROM " . WARNINGS_TABLE . " WHERE warning_user_id = " . $profiledata['user_id'] . " AND warning_proceed = 0 AND warning_expires != " . WARNING_INFINITY . " AND warning_type = '$warning_type' ORDER BY warning_expires ASC LIMIT 1";
		$result = $db->sql_query($sql) or message_die(GENERAL_ERROR, 'Could not get warning information', '', __LINE__, __FILE__, $sql);

		if ( $db->sql_numrows($result) )
		{
			$row = $db->sql_fetchrow($result);
			$unban_time = create_date($board_config['default_dateformat'], $row['warning_expires'], $board_config['board_timezone']);
			$warning_lang = sprintf($lang[$warning_lang], $unban_time);
		}
		else
		{
			$warning_lang = $lang['User_banned'];
		}

		$template->assign_block_vars('switch_banned', array());

		$template->assign_vars(array(
			'BANNED' => $warning_lang
			)
		);
	}

	$template->assign_var_from_handle('WARNINGS', 'warnings_profile_view_body');
}
// [end] Warnings Mod 1.0.7

#
#-----[ OPEN ]------------------------------------------
#
common.php

#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
$current_time = time();

if ( $current_time > ($board_config['warnings_time'] + 300) )
{
	$sql = "SELECT * FROM " . WARNINGS_TABLE . " WHERE warning_proceed = 0 AND warning_expires < $current_time AND warning_expires != " . WARNING_INFINITY;
	$result = $db->sql_query($sql) or message_die(GENERAL_MESSAGE, 'Error getting actions topics', '', __LINE__, __FILE__, $sql);

	$users_warning = $users_ban = $warnings_type_warning = $warnings_type_ban = array();

	if ($db->sql_numrows($result))
	{
		while ($row = $db->sql_fetchrow($result))
		{
			switch ($row['warning_type'])
			{
				case WARNING_TYPE_WARNING:
					if ( !in_array($row['warning_user_id'], $users_warning) )
					{
						$users_warning[] = $row['warning_user_id'];
						$warnings_type_warning[] = $row['warning_id'];
					}
				break;

				case WARNING_TYPE_BAN:
					$users_ban[] = $row['warning_user_id'];
					$warnings_type_ban[] = $row['warning_id'];
				break;
			}
   		}

  		if ( count($users_warning) )
  		{
	   		$users_warning_list = implode($users_warning, ',');
	   		$warnings_type_warning_list = implode($warnings_type_warning, ','); 

			$sql = "UPDATE " . USERS_TABLE . " u, " . WARNINGS_TABLE . " w SET u.user_warnings = u.user_warnings - 1, w.warning_proceed = 1 WHERE u.user_id IN($users_warning_list) AND w.warning_id IN($warnings_type_warning_list)";
			$db->sql_query($sql) or message_die(GENERAL_MESSAGE, 'Error updating user warnings', '', __LINE__, __FILE__, $sql);
		}
		
  		if ( count($users_ban) )
  		{
	   		$users_ban_list = implode($users_ban, ',');
	   		$warnings_type_ban_list = implode($warnings_type_ban, ','); 

			$sql = "UPDATE " . USERS_TABLE . " u, " . WARNINGS_TABLE . " w SET u.user_banned = 0, w.warning_proceed = 1 WHERE u.user_id IN($users_ban_list) AND w.warning_id IN($warnings_type_ban_list)";
			$db->sql_query($sql) or message_die(GENERAL_MESSAGE, 'Error updating user warnings', '', __LINE__, __FILE__, $sql);
		}
	}

	$sql = "UPDATE " . CONFIG_TABLE . " SET config_value ='$current_time' WHERE config_name = 'warnings_time'";
	$db->sql_query($sql) or message_die(GENERAL_MESSAGE, 'Error updating warnings time', '', __LINE__, __FILE__, $sql);
}
// [end] Warnings Mod 1.0.7

#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/viewtopic_body.tpl

#
#-----[ FIND ]------------------------------------------
#
{postrow.IP_IMG}

#
#-----[ IN-LINE FIND ]------------------------------------------
#
{postrow.IP_IMG}

#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
 {postrow.WARNING_IMG}
 
#
#-----[ FIND ]------------------------------------------
#
{postrow.EDITED_MESSAGE}

#
#-----[ IN-LINE FIND ]------------------------------------------
#
{postrow.EDITED_MESSAGE}

#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
{postrow.WARNINGS_INFO}
 
#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/profile_view_body.tpl

#
#-----[ FIND ]------------------------------------------
#
		<tr> 
		  <td valign="middle" align="right" nowrap="nowrap"><span class="gen">{L_JOINED}:&nbsp;</span></td>
		  <td width="100%"><b><span class="gen">{JOINED}</span></b></td>
		</tr>
		
#
#-----[ BEFORE, ADD ]------------------------------------------
#
		<!-- BEGIN switch_warnings -->
		<tr> 
		  <td valign="top" align="right" nowrap="nowrap"><span class="gen">{L_WARNINGS}:&nbsp;</span></td>
		  <td width="100%"><b><span class="gen">{WARNINGS}</span></b></td>
		</tr>
		<!-- END switch_warnings -->

#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/subSilver.cfg

#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
$images['user_warn'] = "$current_template_images/user_warn.gif";
$images['user_warned_rank'] = "$current_template_images/user_warned_rank.gif";
$images['user_banned_rank'] = "$current_template_images/user_banned_rank.gif";
// [end] Warnings Mod 1.0.7

#
#-----[ OPEN ]------------------------------------------
#
language/lang_english/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
$lang['Warned_rank'] = 'Warnings: %s';
$lang['Banned_rank'] = 'Banned';
$lang['Warn_user'] = 'Warn user';
$lang['Warning_type'] = 'What';
$lang['Warning_type_warning'] = 'Warning';
$lang['Warning_type_ban'] = 'Ban';
$lang['Warning_time'] = 'Time';
$lang['Warning_text'] = 'Text';
$lang['No_warning_for_user'] = 'You can not warn this user';
$lang['Warning_received_for_this_post'] = 'User was already warned for this post';
$lang['Ban_received_for_this_post'] = 'User was already banned for this post';
$lang['Warning_cannot_process_not_yours'] = 'You can not do anything with this warning';
$lang['Warning_cannot_remove_expired'] = 'You can not remove expired warning';
$lang['User_not_exist'] = 'No user';
$lang['Warnings_not_enough_params'] = 'Not enough parameters';
$lang['Warnings_wrong_params'] = 'Wrong parameters';
$lang['wt_infinity'] = 'Infinity';
$lang['wt_1'] = '1 day';
$lang['wt_3'] = '3 days';
$lang['wt_5'] = '5 days';
$lang['wt_7'] = '7 days';
$lang['wt_14'] = '2 weeks';
$lang['wt_30'] = '1 month';
$lang['Expired_warnings'] = 'Expired';
$lang['Warning_successfully_added'] = 'Warning was successfully given';
$lang['Warning_successfully_edited'] = 'Warning was successfully edited';
$lang['Warning_actions'] = 'Actions';
$lang['Edit_warning'] = 'edit';
$lang['Remove_warning'] = 'remove';
$lang['Delete_warning'] = 'delete';
$lang['Confirm_remove_warning'] = 'Are you sure you want to remove this warning?';
$lang['Confirm_delete_warning'] = 'Are you sure you want to delete this warning?';
$lang['Warning_removed'] = 'Warning was successfully removed';
$lang['Warning_deleted'] = 'Warning was successfully deleted';
$lang['Click_return_profile'] = 'Click %sHere%s to return to the users profile';
$lang['Warned_post_link'] = 'for this message';
$lang['Warnings'] = 'Warnings';
$lang['Warning_text_caption'] = 'Reason';
$lang['Warning_poster'] = 'Warner';
$lang['Warning_expires'] = 'Expires';
$lang['User_banned'] = 'User was banned';
$lang['You_been_banned_warnings'] = 'You have been banned because you reached maximum of the warnings. You will be unbanned at %s';
$lang['You_been_banned_ban'] = 'You have been banned. You will be unbanned at %s';
$lang['User_banned_warnings'] = 'User is banned because he reached maximum of the warnings. User will be unbanned at %s';
$lang['User_banned_ban'] = 'User is banned. User will be unbanned at %s';
$lang['Warnings_limit_reached'] = 'User reached maximum of the warnings';
$lang['You_received_warning'] = 'You have received a warning at %s';
$lang['You_received_ban'] = 'You have been banned at %s';
$lang['Warnings_per_ban'] = 'Maximum number of warnings';
$lang['Warnings_per_ban_explain'] = 'Number of warnings user will be banned';
$lang['Warnings_viewtopic'] = '%s %s by %s';
$lang['Warning_type_changed_12'] = 'Warning was changed to ban';
$lang['Warning_type_changed_21'] = 'Ban was changed to warning';
$lang['Total_warn'] = 'You have %s warnings, if you will receive %s warnings, you will be banned. ';
$lang['Warning_with_this_data_already_given'] = 'Warning with this data was already given';
// [end] Warnings Mod 1.0.7

#
#-----[ OPEN ]------------------------------------------
#
language/lang_russian/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
// [begin] Warnings Mod 1.0.7
$lang['Warned_rank'] = ': %s';
$lang['Banned_rank'] = '';
$lang['Warn_user'] = '  ';
$lang['Warning_type'] = '';
$lang['Warning_type_warning'] = '';
$lang['Warning_type_ban'] = '';
$lang['Warning_time'] = '';
$lang['Warning_text'] = '';
$lang['No_warning_for_user'] = '      ';
$lang['Warning_received_for_this_post'] = '      ';
$lang['Ban_received_for_this_post'] = '      ';
$lang['Warning_cannot_process_not_yours'] = '       ';
$lang['Warning_cannot_remove_expired'] = '     ';
$lang['User_not_exist'] = '  ';
$lang['Warnings_not_enough_params'] = ' ';
$lang['Warnings_wrong_params'] = ' ';
$lang['wt_infinity'] = '';
$lang['wt_1'] = '1 ';
$lang['wt_3'] = '3 ';
$lang['wt_5'] = '5 ';
$lang['wt_7'] = '7 ';
$lang['wt_14'] = '2 ';
$lang['wt_30'] = '1 ';
$lang['Expired_warnings'] = '';
$lang['Warning_successfully_added'] = '   ';
$lang['Warning_successfully_edited'] = '   ';
$lang['Warning_actions'] = '';
$lang['Edit_warning'] = '';
$lang['Remove_warning'] = '';
$lang['Delete_warning'] = '';
$lang['Confirm_remove_warning'] = '     ?';
$lang['Confirm_delete_warning'] = '     ?';
$lang['Warning_removed'] = '   ';
$lang['Warning_deleted'] = '   ';
$lang['Click_return_profile'] = '%s   %s';
$lang['Warned_post_link'] = '  ';
$lang['Warnings'] = '';
$lang['Warning_text_caption'] = '';
$lang['Warning_poster'] = '';
$lang['Warning_expires'] = ' ';
$lang['User_banned'] = ' ';
$lang['You_been_banned_warnings'] = '     .       %s';
$lang['You_been_banned_ban'] = '  .       %s';
$lang['User_banned_warnings'] = '    .    %s';
$lang['User_banned_ban'] = ' .    %s';
$lang['Warnings_limit_reached'] = '    ';
$lang['You_received_warning'] = '    %s';
$lang['You_received_ban'] = '    %s';
$lang['Warnings_per_ban'] = '  ';
$lang['Warnings_per_ban_explain'] = '    ';
$lang['Warnings_viewtopic'] = '%s %s,  %s';
$lang['Warning_type_changed_12'] = '    ';
$lang['Warning_type_changed_21'] = '    ';
$lang['Total_warn'] = '   %s ,    %s     . ';
$lang['Warning_with_this_data_already_given'] = '      ';
// [end] Warnings Mod 1.0.7

# 
#-----[ OPEN ]------------------------------------------ 
# 
templates/subSilver/admin/board_config_body.tpl

# 
#-----[ FIND ]------------------------------------------ 
# 
	<tr>
		<td class="row1">{L_ENABLE_PRUNE}</td>
		<td class="row2"><input type="radio" name="prune_enable" value="1" {PRUNE_YES} /> {L_YES}&nbsp;&nbsp;<input type="radio" name="prune_enable" value="0" {PRUNE_NO} /> {L_NO}</td>
	</tr>


# 
#-----[ AFTER, ADD ]------------------------------------------ 
#
	<tr>
		<td class="row1">{L_WARNINGS_PER_BAN}<br /><span class="gensmall">{L_WARNINGS_PER_BAN_EXPLAIN}</span></td>
		<td class="row2"><input class="post" type="text" name="warnings_per_ban" size="3" maxlength="4" value="{WARNINGS_PER_BAN}" /></td>
	</tr>

#
#-----[ OPEN ]------------------------------------------
#
admin/admin_board.php

# 
#-----[ FIND ]------------------------------------------ 
# 
	if( isset($HTTP_POST_VARS['submit']) ) 
	{ 
		$message = $lang['Config_updated']
	
#
#-----[ BEFORE, ADD ]------------------------------------------
#
	// [begin] Warnings Mod 1.0.7
	if( isset($HTTP_POST_VARS['submit']) )
	{
		$sql = "SELECT * FROM " . USERS_TABLE . " WHERE user_warnings >= " . $new['warnings_per_ban'];
		$result = $db->sql_query($sql) or message_die(GENERAL_MESSAGE, 'Error getting banned users', '', __LINE__, __FILE__, $sql);

		$users_list = array();

		if ($db->sql_numrows($result))
		{
			while ( $row = $db->sql_fetchrow($result) )
			{
				$users_list[] = $row['user_id'];
			}
			
			$sql = "DELETE FROM " . SESSIONS_TABLE . " WHERE session_user_id IN (" . implode(',', $users_list) . ")";
			$db->sql_query($sql) or message_die(GENERAL_ERROR, 'Could not update session information', '', __LINE__, __FILE__, $sql);
		}
	}
	// [end] Warnings Mod 1.0.7
	
# 
#-----[ FIND ]------------------------------------------ 
# 
	"L_RESET" => $lang['Reset'],

# 
#-----[ AFTER, ADD ]------------------------------------------ 
#
	// [begin] Warnings Mod 1.0.7
	"L_WARNINGS_PER_BAN" => $lang['Warnings_per_ban'],
	"L_WARNINGS_PER_BAN_EXPLAIN" => $lang['Warnings_per_ban_explain'],
	"WARNINGS_PER_BAN" => $new['warnings_per_ban'],
	// [end] Warnings Mod 1.0.7
	
#
#-----[ OPEN ]------------------------------------------
#
admin/admin_users.php

#
#-----[ FIND ]------------------------------------------
#
			$sql = "DELETE FROM " . SESSIONS_KEYS_TABLE . "
				WHERE user_id = $user_id";
			if ( !$db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, 'Could not delete auto-login keys for this user', '', __LINE__, __FILE__, $sql);
			}
			
#
#-----[ AFTER, ADD ]------------------------------------------
#
			// [begin] Warnings Mod 1.0.7
			$sql = "SELECT warning_id FROM " . WARNINGS_TABLE . " WHERE warning_user_id = $user_id";
			$result = $db->sql_query($sql) or message_die(GENERAL_ERROR, 'Could not select all users private messages', '', __LINE__, __FILE__, $sql);

			while ( $row_warnings = $db->sql_fetchrow($result) )
			{
				$mark_list[] = $row_warnings['warning_id'];
			}
			
			if ( count($mark_list) )
			{
				$delete_sql_id = implode(', ', $mark_list);
				
				$delete_sql = "DELETE FROM " . WARNINGS_TABLE . " WHERE warning_id IN ($delete_sql_id)";
				$db->sql_query($delete_sql) or message_die(GENERAL_ERROR, 'Could not delete warnings info', '', __LINE__, __FILE__, $delete_sql);

				$delete_text_sql = "DELETE FROM " . WARNINGS_TEXT_TABLE . " WHERE warning_id IN ($delete_sql_id)";
				$db->sql_query($delete_text_sql) or message_die(GENERAL_ERROR, 'Could not delete warnings text', '', __LINE__, __FILE__, $delete_text_sql);
			}
			// [end] Warnings Mod 1.0.7

# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM