\filepath\filename
At line XXX --		code on this line for simple search 		--
Add AFTER/BEFORE/REPLACE

New code here


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

\includes\admin.php
At line 315 --		elseif($_GET['c'] == "mods")		--
Add BEFORE

	elseif($_GET['c'] == "comms")
	 // ###################[ Comms ]##################################################################
	{
		CheckAdminAccess( ADMIN_OWNER|ADMIN_ADD_BAN|ADMIN_EDIT_OWN_BANS|ADMIN_EDIT_ALL_BANS );
		
		if(!isset($_GET['o']))
		{
			// ====================[ ADMIN SIDE MENU START ] ===================
			$banTabMenu = new CTabsMenu();
			if($userbank->HasAccess(ADMIN_OWNER|ADMIN_ADD_BAN ) ) {
				$banTabMenu->addMenuItem("Add a block", 0);
			}
			$banTabMenu->addMenuItem("Comms list", 1, "", "index.php?p=commslist",true);
			$banTabMenu->outputMenu();
			// ====================[ ADMIN SIDE MENU END ] ===================

			include TEMPLATES_PATH . "/admin.comms.php";
			
			if(isset($_GET['mode']) && $_GET['mode'] == "delete")
				echo "<script>ShowBox('Ban Deleted', 'The ban has been deleted from SourceBans', 'green', '', true);</script>";
			elseif(isset($_GET['mode']) && $_GET['mode']=="unban")
				echo "<script>ShowBox('Player Unbanned', 'The Player has been unbanned from SourceBans', 'green', '', true);</script>";
			
			RewritePageTitle("Comms");
		}
		elseif($_GET['o'] == 'edit')
		{
			$banTabMenu = new CTabsMenu();
			$banTabMenu->addMenuItem("Back", 0,"", "javascript:history.go(-1);", true);
			$banTabMenu->outputMenu();			
			
			include TEMPLATES_PATH . "/admin.edit.comms.php";
			RewritePageTitle("Edit Block Details");
		}
	}

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

\includes\page-builder.php
At line 38 --		case "servers":		--
Add BEFORE

	case "commslist":
		RewritePageTitle("Communications Block List");
		$page = TEMPLATES_PATH ."/page.commslist.php";
		break;

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

\includes\sb-callback.php
At line 2969 (end of file) --		?>		--
Add BEFORE

function AddBlock($nickname, $type, $steam, $length, $reason)
{
	$objResponse = new xajaxResponse();
	global $userbank, $username;
	if(!$userbank->HasAccess(ADMIN_OWNER|ADMIN_ADD_BAN))
	{
		$objResponse->redirect("index.php?p=login&m=no_access", 0);
		$log = new CSystemLog("w", "Hacking Attempt", $username . " tried to add a block, but doesnt have access.");
		return $objResponse;
	}
	
	$steam = trim($steam);
	
	$error = 0;
	// If they didnt type a steamid
	if(empty($steam))
	{
		$error++;
		$objResponse->addAssign("steam.msg", "innerHTML", "You must type a Steam ID or Community ID");
		$objResponse->addScript("$('steam.msg').setStyle('display', 'block');");
	}
	else if((!is_numeric($steam) 
	&& !validate_steam($steam))
	|| (is_numeric($steam) 
	&& (strlen($steam) < 15
	|| !validate_steam($steam = FriendIDToSteamID($steam)))))
	{
		$error++;
		$objResponse->addAssign("steam.msg", "innerHTML", "Please enter a valid Steam ID or Community ID");
		$objResponse->addScript("$('steam.msg').setStyle('display', 'block');");
	}
	else
	{
		$objResponse->addAssign("steam.msg", "innerHTML", "");
		$objResponse->addScript("$('steam.msg').setStyle('display', 'none');");
	}
	
	if($error > 0)
		return $objResponse;

	$nickname = RemoveCode($nickname);
	$reason = RemoveCode($reason);
	if(!$length)
		$len = 0;
	else
		$len = $length*60;

	// prune any old bans
	PruneComms();

	$typeW = "";
	switch ((int)$type)
	{
		case 1:
			$typeW = "type = 1";
			break;
		case 2:
			$typeW = "type = 2";
			break;
		case 3:
			$typeW = "(type = 1 OR type = 2)";
			break;
		default:
			$typeW = "";
			break;
	}

	// Check if the new steamid is already banned
	$chk = $GLOBALS['db']->GetRow("SELECT count(bid) AS count FROM ".DB_PREFIX."_comms WHERE authid = ? AND (length = 0 OR ends > UNIX_TIMESTAMP()) AND RemovedBy IS NULL AND ".$typeW, array($steam));
	
	if(intval($chk[0]) > 0)
	{
		$objResponse->addScript("ShowBox('Error', 'SteamID: $steam is already blocked.', 'red', '');");
		return $objResponse;
	}

	// Check if player is immune
	$admchk = $userbank->GetAllAdmins();
	foreach($admchk as $admin)
	if($admin['authid'] == $steam && $userbank->GetProperty('srv_immunity') < $admin['srv_immunity'])
		{
			$objResponse->addScript("ShowBox('Error', 'SteamID: Admin ".$admin['user']." ($steam) is immune.', 'red', '');");
			return $objResponse;
		}

	if((int)$type == 1 || (int)$type == 3)
	{
		$pre = $GLOBALS['db']->Prepare("INSERT INTO ".DB_PREFIX."_comms(created,type,authid,name,ends,length,reason,aid,adminIp ) VALUES
									  (UNIX_TIMESTAMP(),1,?,?,(UNIX_TIMESTAMP() + ?),?,?,?,?)");
		$GLOBALS['db']->Execute($pre,array($steam,
										   $nickname,
										   $length*60,
										   $len,
										   $reason,
										   $userbank->GetAid(),
										   $_SERVER['REMOTE_ADDR']));
	}
	if ((int)$type == 2 || (int)$type ==3)
	{
		$pre = $GLOBALS['db']->Prepare("INSERT INTO ".DB_PREFIX."_comms(created,type,authid,name,ends,length,reason,aid,adminIp ) VALUES
									  (UNIX_TIMESTAMP(),2,?,?,(UNIX_TIMESTAMP() + ?),?,?,?,?)");
		$GLOBALS['db']->Execute($pre,array($steam,
										   $nickname,
										   $length*60,
										   $len,
										   $reason,
										   $userbank->GetAid(),
										   $_SERVER['REMOTE_ADDR']));
	}

	$objResponse->addScript("ShowBlockBox('".$steam."', '".(int)$type."', '".(int)$len."');");
	$objResponse->addScript("TabToReload();");
	$log = new CSystemLog("m", "Block Added", "Block against (" . $steam . ") has been added, reason: $reason, length: $length", true, $kickit);
	return $objResponse;
}

function PrepareReblock($bid)
{
	$objResponse = new xajaxResponse();

	$ban = $GLOBALS['db']->GetRow("SELECT name, authid, type, length, reason FROM ".DB_PREFIX."_comms WHERE bid = '".$bid."';");

	// clear any old stuff
	$objResponse->addScript("$('nickname').value = ''");
	$objResponse->addScript("$('steam').value = ''");
	$objResponse->addScript("$('txtReason').value = ''");
	$objResponse->addAssign("txtReason", "innerHTML",  "");

	// add new stuff
	$objResponse->addScript("$('nickname').value = '" . $ban['name'] . "'");
	$objResponse->addScript("$('steam').value = '" . $ban['authid']. "'");
	$objResponse->addScriptCall("selectLengthTypeReason", $ban['length'], $ban['type']-1, addslashes($ban['reason']));

	$objResponse->addScript("SwapPane(0);");
	return $objResponse;
}

function PrepareBlockFromBan($bid)
{
	$objResponse = new xajaxResponse();

	// clear any old stuff
	$objResponse->addScript("$('nickname').value = ''");
	$objResponse->addScript("$('steam').value = ''");
	$objResponse->addScript("$('txtReason').value = ''");	
	$objResponse->addAssign("txtReason", "innerHTML",  "");

	$ban = $GLOBALS['db']->GetRow("SELECT name, authid FROM ".DB_PREFIX."_bans WHERE bid = '".$bid."';");

	// add new stuff
	$objResponse->addScript("$('nickname').value = '" . $ban['name'] . "'");
	$objResponse->addScript("$('steam').value = '" . $ban['authid']. "'");
	
	$objResponse->addScript("SwapPane(0);");
	return $objResponse;
}

function PasteBlock($sid, $name)
{
	$objResponse = new xajaxResponse();
	global $userbank, $username;
	
	$sid = (int)$sid;
	if(!$userbank->HasAccess(ADMIN_OWNER|ADMIN_ADD_BAN))
	{
		$objResponse->redirect("index.php?p=login&m=no_access", 0);
		$log = new CSystemLog("w", "Hacking Attempt", $username . " tried paste a block, but doesn't have access.");
		return $objResponse;
	}
	require INCLUDES_PATH.'/CServerRcon.php';
	//get the server data
	$data = $GLOBALS['db']->GetRow("SELECT ip, port, rcon FROM ".DB_PREFIX."_servers WHERE sid = ?;", array($sid));
	if(empty($data['rcon'])) {
		$objResponse->addScript("$('dialog-control').setStyle('display', 'block');");
		$objResponse->addScript("ShowBox('Error', 'No RCON password for server ".$data['ip'].":".$data['port']."!', 'red', '', true);");
		return $objResponse;
	}

	$r = new CServerRcon($data['ip'], $data['port'], $data['rcon']);
	if(!$r->Auth())
	{
		$GLOBALS['db']->Execute("UPDATE ".DB_PREFIX."_servers SET rcon = '' WHERE sid = ?;", array($sid));
		$objResponse->addScript("$('dialog-control').setStyle('display', 'block');");
		$objResponse->addScript("ShowBox('Error', 'Wrong RCON password for server ".$data['ip'].":".$data['port']."!', 'red', '', true);");
		return $objResponse;
	}

	$ret = $r->rconCommand("status");
	$search = preg_match_all(STATUS_PARSE,$ret,$matches,PREG_PATTERN_ORDER);
	$i = 0;
	$found = false;
	$index = -1;
	foreach($matches[2] AS $match) {
		if($match == $name) {
			$found = true;
			$index = $i;
			break;
		}
		$i++;
	}
	if($found) {
		$steam = $matches[3][$index];
		$name = $matches[2][$index];
		$objResponse->addScript("$('nickname').value = '" . addslashes($name) . "'");
		$objResponse->addScript("$('steam').value = '" . $steam . "'");
	} else {
		$objResponse->addScript("ShowBox('Error', 'Can\'t get player info for ".addslashes(htmlspecialchars($name)).". Player is not on the server (".$data['ip'].":".$data['port'].") anymore!', 'red', '', true);");
		$objResponse->addScript("$('dialog-control').setStyle('display', 'block');");
		return $objResponse;
	}
	$objResponse->addScript("SwapPane(0);");
	$objResponse->addScript("$('dialog-control').setStyle('display', 'block');");
	$objResponse->addScript("$('dialog-placement').setStyle('display', 'none');");
	return $objResponse;
}

******************************************************************
At line 2477-2478 --		if($ctype=="B")
								$redir = "?p=banlist".$pagelink;		--
Add AFTER

	elseif($ctype=="C")
		$redir = "?p=commslist".$pagelink;

******************************************************************
At line 2448-2449 --		elseif($ctype=="P")
								$redir = "?p=admin&c=bans#^1";		--
Add AFTER

	elseif($ctype=="C")
		$redir = "?p=commslist".$pagelink;

******************************************************************
At line 2410-2411 --		elseif($ctype=="P")
								$redir = "?p=admin&c=bans#^1";		--
ADD AFTER

	elseif($ctype=="C")
		$redir = "?p=commslist".$pagelink;

******************************************************************
At line 1348 --		{name: "Kick", callback: function(){KickPlayerConfirm('.$sid.', "'.str_replace('"', '\"', $player["name"]).'", 0);}},		--
Add AFTER

														{name: "Block comms", callback: function(){window.location = "index.php?p=admin&c=comms&action=pasteBan&sid='.$sid.'&pName='.str_replace('"', '\"', $player["name"]).'"}},


******************************************************************
At line 66 -- 		$xajax->registerFunction("SendMail");		--
Add AFTER

	$xajax->registerFunction("AddBlock");
	$xajax->registerFunction("PrepareReblock");
	$xajax->registerFunction("PrepareBlockFromBan");
	$xajax->registerFunction("PasteBlock");

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

\includes\system-functions.php
At line 765 --		function GetSVNRev()		--
Add BEFORE

function PruneComms()
{
	global $userbank;

	$res = $GLOBALS['db']->Execute('UPDATE `'.DB_PREFIX.'_comms` SET `RemovedBy` = 0, `RemoveType` = \'E\', `RemovedOn` = UNIX_TIMESTAMP() WHERE `length` != 0 and `ends` < UNIX_TIMESTAMP() and `RemoveType` IS NULL');
    return $res?true:false;
}

******************************************************************
At line 218 --		case "groups":		--
Add BEFORE

			case "comms":
				$cat = "Communication blocks management";
				break;

******************************************************************
At line 187 --		$submenu->addMenuItem("Bans", 0,"", "index.php?p=admin&amp;c=bans", true);		--
Add AFTER

		if($userbank->HasAccess( ADMIN_OWNER|ADMIN_ADD_BAN|ADMIN_EDIT_OWN_BANS|ADMIN_EDIT_ALL_BANS))
			$submenu->addMenuItem("Comms", 0,"", "index.php?p=admin&amp;c=comms", true);

******************************************************************
At line 169 --		AddTab("Ban List", "index.php?p=banlist", "All of the bans in the database can be viewed from here.");		--
Add AFTER

	AddTab("Comm List", "index.php?p=commslist", "All of the communication bans (such as chat gags and voice mutes) in the database can be viewed from here.");

******************************************************************
At line 135-137 --			$tab_arr[2] = "Servers";
							$tab_arr[3] = "Submit a ban";
							$tab_arr[4] = "Protest a ban";		--
REPLACE 

	$tab_arr[2] = "Comm List";
	$tab_arr[3] = "Servers";
	$tab_arr[4] = "Submit a ban";
	$tab_arr[5] = "Protest a ban";

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

\pages\page.banlist.php
At line 470 --		$data['details_link'] = CreateLinkR('click','getdemo.php?type=B&id='.$res->fields['ban_id']);		--
ADD BEFORE

	$data['blockcomm_link'] = CreateLinkR('<img src="images/forbidden.png" border="0" alt="" style="vertical-align:middle" /> Block Comms',"index.php?p=admin&c=comms".$pagelink."&blockfromban=".$res->fields['ban_id']."&key=".$_SESSION['banlist_postkey']."#^0");

******************************************************************
At line 345 --		$where = "WHERE CO.commenttxt LIKE ?";		--
REPLACE

				$where = "WHERE CO.type = 'B' AND CO.commenttxt LIKE ?";

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

\scripts\sourcebans.js
At line 1473 (end of file)	--		}		--
Add AFTER

function RemoveBlock(id, key, page, name, confirm)
{
	if(confirm==0) {
		ShowBox('Delete Block', 'Are you sure you want to delete the block for '+ name + '?', 'blue', '', true);
		$('dialog-control').setHTML('<input type="button" onclick="RemoveBlock(\''+id+'\', \''+key+'\', \''+page+'\', \''+addslashes(name.replace(/\'/g,'\\\''))+'\', \'1\''+');" name="rban" class="btn ok" onmouseover="ButtonOver(\'rban\')" onmouseout="ButtonOver(\'rban\')" id="rban" value="Remove Block" />&nbsp;<input type="button" onclick="closeMsg(\'\');$(\'bulk_action\').options[0].selected=true;" name="astop" class="btn cancel" onmouseover="ButtonOver(\'astop\')" onmouseout="ButtonOver(\'astop\')" id="astop" value="Cancel" />');
	} else if(confirm==1) {
		if(page != "") 
			var pagelink = page;
		else
			var pagelink = "";
		window.location = "index.php?p=commslist" + pagelink + "&a=delete&id="+ id +"&key="+ key;
	}
}

function UnGag(id, key, page, name, popup)
{
	if(popup==1) {
		ShowBox('UnGag Reason', '<b>Please give a short comment, why you are going to ungag '+"\'"+ name +"\'"+'!</b><br><textarea rows="3" cols="40" name="ureason" id="ureason" style="overflow:auto;"></textarea><br><div id="ureason.msg" class="badentry"></div>', 'blue', '', true);
		$('dialog-control').setHTML('<input type="button" onclick="UnGag(\''+id+'\', \''+key+'\', \''+page+'\', \''+addslashes(name.replace(/\'/g,'\\\''))+'\', \'0\''+');" name="uban" class="btn ok" onmouseover="ButtonOver(\'uban\')" onmouseout="ButtonOver(\'uban\')" id="uban" value="UnGag Player" />&nbsp;<input type="button" onclick="closeMsg(\'\');" name="astop" class="btn cancel" onmouseover="ButtonOver(\'astop\')" onmouseout="ButtonOver(\'astop\')" id="astop" value="Cancel" />');
	} else if(popup==0) {
		if(page != "")
			var pagelink = page;
		else
			var pagelink = "";
		reason = $('ureason').value;
		if(reason == "") {
			$('ureason.msg').setHTML("Please leave a comment.");
			$('ureason.msg').setStyle('display', 'block');
			return;
		} else {
			$('ureason.msg').setHTML('');
			$('ureason.msg').setStyle('display', 'none');
		}
		window.location = "index.php?p=commslist" + pagelink + "&a=ungag&id="+ id +"&key="+ key +"&ureason="+ reason;
	}
}

function UnMute(id, key, page, name, popup)
{
	if(popup==1) {
		ShowBox('UnMute Reason', '<b>Please give a short comment, why you are going to unmute '+"\'"+ name +"\'"+'!</b><br><textarea rows="3" cols="40" name="ureason" id="ureason" style="overflow:auto;"></textarea><br><div id="ureason.msg" class="badentry"></div>', 'blue', '', true);
		$('dialog-control').setHTML('<input type="button" onclick="UnMute(\''+id+'\', \''+key+'\', \''+page+'\', \''+addslashes(name.replace(/\'/g,'\\\''))+'\', \'0\''+');" name="uban" class="btn ok" onmouseover="ButtonOver(\'uban\')" onmouseout="ButtonOver(\'uban\')" id="uban" value="UnMute Player" />&nbsp;<input type="button" onclick="closeMsg(\'\');" name="astop" class="btn cancel" onmouseover="ButtonOver(\'astop\')" onmouseout="ButtonOver(\'astop\')" id="astop" value="Cancel" />');
	} else if(popup==0) {
		if(page != "")
			var pagelink = page;
		else
			var pagelink = "";
		reason = $('ureason').value;
		if(reason == "") {
			$('ureason.msg').setHTML("Please leave a comment.");
			$('ureason.msg').setStyle('display', 'block');
			return;
		} else {
			$('ureason.msg').setHTML('');
			$('ureason.msg').setStyle('display', 'none');
		}
		window.location = "index.php?p=commslist" + pagelink + "&a=unmute&id="+ id +"&key="+ key +"&ureason="+ reason;
	}
}

function search_blocks()
{
	var type = "";
	var input = "";
	if($('name').checked)
	{
		type = "name";
		input = $('nick').value;
	}
	if($('steam_').checked)
	{
		type = (document.getElementById('steam_match').value == "1" ? "steam" : "steamid");
		input = $('steamid').value;
	}
	if($('reason_').checked)
	{
		type = "reason";
		input = $('ban_reason').value;
	}
	if($('date').checked)
	{
		type = "date";
		input = $('day').value + "," + $('month').value + "," + $('year').value;
	}
	if($('length_').checked)
	{
		type = "length";
		if($('length').value=="other")
			var length = $('other_length').value;
		else
			var length = $('length').value
		input = $('length_type').value + "," + length;
	}
	if($('ban_type_').checked)
	{
		type = "btype";
		input = $('ban_type').value;
	}
	if($('bancount').checked)
	{
		type = "bancount";
		input = $('timesbanned').value;
	}
	if($('admin').checked)
	{
		type = "admin";
		input = $('ban_admin').value;
	}
	if($('where_banned').checked)
	{
		type = "where_banned";
		input = $('server').value;
	}
	if($('comment_').checked)
	{
		type = "comment";
		input = $('ban_comment').value;
	}
	if(type!="" && input!="")
		window.location = "index.php?p=commslist&advSearch=" + input + "&advType=" + type;
}

function ShowBlockBox(check, type, length)
{
	ShowBox('Block Added', 'The block has been successfully added<br><iframe id="srvkicker" frameborder="0" width="100%" src="pages/admin.blockit.php?check='+check+'&type='+type+'&length='+length+'"></iframe>', 'green', 'index.php?p=admin&c=comms', true);
}

******************************************************************
At line 1197 --		window.location = "index.php?p=banlist"+searchlink+"&page="+nextPage;		--
Add AFTER

		if(type == "C")
            window.location = "index.php?p=commslist"+searchlink+"&page="+nextPage;

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

\themes\**\css\css.php
At line 496-501 --		#search {
							width: 300px;
							float: right;
							padding: 2px 0 0 0;
							text-align: right;
							}		--
REPLACE

#search2 {
	width: 300px;
	float: right;
	padding: 2px 0 0 0;
	text-align: right;
	}

#search {
	width: 200px;
	float: right;
	margin: auto 14px 0 auto;
	margin-right: 14;
	margin-bottom: -10px;
	padding: 0 0 0 0;
	text-align: right;
	}

******************************************************************
At line 334-339 --		.searchbox {
 						   width:105px; 
 						   height:14px; 
 						   background-color:#d7d7d7; 
 						   border:0;
						}		--
REPLACE

.searchbox {
    width:230px;
    height:14px;
    background-color:#fdeaa8;
    border:0;
}
.searchbox2 {
    width:105px; 
    height:14px; 
    background-color:#fdeaa8;
    border:0;
}

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

\themes\**\page_bans.tpl
At line 138 --		<li>{$ban.demo_link}</li>		--
ADD BEFORE

                      <li>{$ban.blockcomm_link}</li>
