Страница 1 из 2

BAN redirect URL phpbb3

Добавлено: 13 сен 2013, 13:43
DeaDRoMeO
Всем привет!!! Хочу поделиться одной маленькой модификацией, хотелось бы конечно видеть это в стандарте, но разрабы слишком упертые люди....

Вообщем встречайте, BAN redirect URL. Модификация, которая будет перенаправлять заблокированных пользователей по любому адресу, будь то тема на вашем форуме. Надо будет себе ее поставить....

Потестировать можно тут

Код: Выделить всё

Link: http://geolim4.com
User: Lebanni
Password: test1234
Если заинтересовало, скачиваем и ставим

Для русификации нужно открыть language/ru/acp/ban.php и найти

Код: Выделить всё

'BAN_GIVE_REASON'
Вставить перед найденным

Код: Выделить всё

'BAN_URL'				=> 'URL перенаправление',	
	'BAN_URL_EXPLAIN'		=> 'На данный адрес будет перенаправляться заблокированный пользователь при попытке входа на форум',	
Впринципе и все, внимательно смотрите и выполняйте инструкции, успехов :bra_vo:

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 17:37
Олег В
Сергей! А забаненых по IP тоже будет перенаправлять или только по бану ника ?

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 17:49
DeaDRoMeO
По айпи тоже работает

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 21:20
Олег В
Мод очень актуальный и нужный. К сожалению у меня не стал. 2 раза в ручную прописывал, потом через автомод попытался установить. Результат после установки, до запуска инстал файла, один. эээээх :du_ma_et:


BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 21:27
Олег В
Если из файла includes/session.php удалить вписанное ранее

Код: Выделить всё

//MOD START: BAN URL REDIRECT
		$sql = str_replace('ban_end', 'ban_end, ban_url', $sql);
		//MOD END: BAN URL REDIRECT
форум запускается и срабатывает инсталятор, форум/bru_install.php но мод наверное в таком виде уже не работает. :cry_ing:

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 21:56
DeaDRoMeO
Скрипт запускался до правок или после ? А что мешает проверить работу мода ?

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 22:03
kulyasov
Олег В,
Если Вы уже запустили bru_install.php, то по идее все необходимые поля в базе данных были созданы... верните то, что Вы удалили из includes/session.php - ошибки не должно быть

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 22:10
Олег В
DeaDRoMeO писал(а):Скрипт запускался до правок или после ?
как в инструкции, после редактирования файлов! Что мешает проверить? Да вроде ничего. Просто я боюсь как бы потом косяк этот не вылес в другом месте. Сиди потом гадай и вспоминай что ставил и где были бока!
Если Вы уже запустили bru_install.php, то по идее все необходимые поля в базе данных были созданы.
Я на локалке экспериментирую перед установкой мода на сервер. Перезалил все папки по новой, буду пробовать ещё.

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 22:20
Олег В
kulyasov, Ага. Всё заработало! Интересно, это только у меня так капризно он стал, или всё же не доработка в программе?

BAN redirect URL phpbb3

Добавлено: 14 сен 2013, 23:45
DeaDRoMeO
Олег В писал(а):Интересно, это только у меня так капризно он стал, или всё же не доработка в программе?
Это уж неизвестно, у меня нормально пошел

BAN redirect URL phpbb3

Добавлено: 15 сен 2013, 15:12
Олег В
Сергей! Не могли бы вы подсказать и ответить на несколько вопросов по данному моду??
1. Файл includes/mcp/mcp_ban.php просит найти строку

Код: Выделить всё

if ($ban)
			{
и добавить после найденного

Код: Выделить всё

//MOD START: BAN URL REDIRECT
				if ($ban_url && !filter_var($ban_url, FILTER_VALIDATE_URL))
				{
					trigger_error($user->lang['WRONG_DATA_WEBSITE']);//So easy :)
				}
				//MOD END: BAN URL REDIRECT
Но дело в том что в файле две строки

Код: Выделить всё

if ($ban)
			{
и возник вопрос, после какй из двух строк добавить нужный код? или же добавить необходимый код после каждой из найденных строк?? :-(--
Вот мой файл includes/mcp/mcp_ban.php с уже заполненными строками для мода

Код: Выделить всё

<?php
/**
*
* @package mcp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* @package mcp
*/
class mcp_ban
{
	var $u_action;

	function main($id, $mode)
	{
		global $config, $db, $user, $auth, $template, $cache;
		global $phpbb_root_path, $phpEx;

		include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

		// Include the admin banning interface...
		include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);

		$bansubmit		= (isset($_POST['bansubmit'])) ? true : false;
		$unbansubmit	= (isset($_POST['unbansubmit'])) ? true : false;
		$current_time	= time();

		$user->add_lang(array('acp/ban', 'acp/users'));
		$this->tpl_name = 'mcp_ban';

		// Ban submitted?
		if ($bansubmit)
		{
			// Grab the list of entries
			$ban				= request_var('ban', '', ($mode === 'user') ? true : false);

			if ($mode === 'user')
			{
				$ban = utf8_normalize_nfc($ban);
			}

			$ban_len			= request_var('banlength', 0);
			$ban_len_other		= request_var('banlengthother', '');
			$ban_exclude		= request_var('banexclude', 0);
			$ban_reason			= utf8_normalize_nfc(request_var('banreason', '', true));
			$ban_give_reason	= utf8_normalize_nfc(request_var('bangivereason', '', true));
			//MOD START: BAN URL REDIRECT
			$ban_url			= utf8_normalize_nfc(request_var('ban_url', '', true));			
			//MOD END: BAN URL REDIRECT

			if ($ban)
			{
			//MOD START: BAN URL REDIRECT
				if ($ban_url && !filter_var($ban_url, FILTER_VALIDATE_URL))
				{
					trigger_error($user->lang['WRONG_DATA_WEBSITE']);//So easy :)
				}
				//MOD END: BAN URL REDIRECT
				if (confirm_box(true))
				{
					user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reason, $ban_give_reason, $ban_url);

					trigger_error($user->lang['BAN_UPDATE_SUCCESSFUL'] . '<br /><br /><a href="' . $this->u_action . '">&laquo; ' . $user->lang['BACK_TO_PREV'] . '</a>');
				}
				else
				{
					confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
						'mode'				=> $mode,
						'ban'				=> $ban,
						'bansubmit'			=> true,
						'banlength'			=> $ban_len,
						'banlengthother'	=> $ban_len_other,
						'banexclude'		=> $ban_exclude,
						'banreason'			=> $ban_reason,
						'bangivereason'		=> $ban_give_reason,
						//MOD START: BAN URL REDIRECT
						'ban_url'			=> $ban_url
						//MOD START: BAN URL REDIRECT
						)));;
				}
			}
		}
		else if ($unbansubmit)
		{
			$ban = request_var('unban', array(''));

			if ($ban)
			{
			//MOD START: BAN URL REDIRECT
				if ($ban_url && !filter_var($ban_url, FILTER_VALIDATE_URL))
				{
					trigger_error($user->lang['WRONG_DATA_WEBSITE']);//So easy :)
				}
				//MOD END: BAN URL REDIRECT
				if (confirm_box(true))
				{
					user_unban($mode, $ban);

					trigger_error($user->lang['BAN_UPDATE_SUCCESSFUL'] . '<br /><br /><a href="' . $this->u_action . '">&laquo; ' . $user->lang['BACK_TO_PREV'] . '</a>');
				}
				else
				{
					confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
						'mode'			=> $mode,
						'unbansubmit'	=> true,
						'unban'			=> $ban)));
				}
			}
		}

		// Ban length options
		$ban_end_text = array(0 => $user->lang['PERMANENT'], 30 => $user->lang['30_MINS'], 60 => $user->lang['1_HOUR'], 360 => $user->lang['6_HOURS'], 1440 => $user->lang['1_DAY'], 10080 => $user->lang['7_DAYS'], 20160 => $user->lang['2_WEEKS'], 40320 => $user->lang['1_MONTH'], -1 => $user->lang['UNTIL'] . ' -> ');

		$ban_end_options = '';
		foreach ($ban_end_text as $length => $text)
		{
			$ban_end_options .= '<option value="' . $length . '">' . $text . '</option>';
		}

		// Define language vars
		$this->page_title = $user->lang[strtoupper($mode) . '_BAN'];

		$l_ban_explain = $user->lang[strtoupper($mode) . '_BAN_EXPLAIN'];
		$l_ban_exclude_explain = $user->lang[strtoupper($mode) . '_BAN_EXCLUDE_EXPLAIN'];
		$l_unban_title = $user->lang[strtoupper($mode) . '_UNBAN'];
		$l_unban_explain = $user->lang[strtoupper($mode) . '_UNBAN_EXPLAIN'];
		$l_no_ban_cell = $user->lang[strtoupper($mode) . '_NO_BANNED'];

		switch ($mode)
		{
			case 'user':
				$l_ban_cell = $user->lang['USERNAME'];
			break;

			case 'ip':
				$l_ban_cell = $user->lang['IP_HOSTNAME'];
			break;

			case 'email':
				$l_ban_cell = $user->lang['EMAIL_ADDRESS'];
			break;
		}

		acp_ban::display_ban_options($mode);

		$template->assign_vars(array(
			'L_TITLE'				=> $this->page_title,
			'L_EXPLAIN'				=> $l_ban_explain,
			'L_UNBAN_TITLE'			=> $l_unban_title,
			'L_UNBAN_EXPLAIN'		=> $l_unban_explain,
			'L_BAN_CELL'			=> $l_ban_cell,
			'L_BAN_EXCLUDE_EXPLAIN'	=> $l_ban_exclude_explain,
			'L_NO_BAN_CELL'			=> $l_no_ban_cell,

			'S_USERNAME_BAN'	=> ($mode == 'user') ? true : false,
			//MOD START: BAN URL REDIRECT
			'S_EMAIL_BAN'		=> ($mode == 'email') ? true : false,
			//MOD END: BAN URL REDIRECT

			'U_ACTION'			=> $this->u_action,
			'U_FIND_USERNAME'	=> append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=mcp_ban&field=ban'),
		));

		if ($mode === 'email' && !$auth->acl_get('a_user'))
		{
			return;
		}

		// As a "service" we will check if any post id is specified and populate the username of the poster id if given
		$post_id = request_var('p', 0);
		$user_id = request_var('u', 0);
		$username = $pre_fill = false;

		if ($user_id && $user_id <> ANONYMOUS)
		{
			$sql = 'SELECT username, user_email, user_ip
				FROM ' . USERS_TABLE . '
				WHERE user_id = ' . $user_id;
			$result = $db->sql_query($sql);
			switch ($mode)
			{
				case 'user':
					$pre_fill = (string) $db->sql_fetchfield('username');
				break;
				
				case 'ip':
					$pre_fill = (string) $db->sql_fetchfield('user_ip');
				break;

				case 'email':
					$pre_fill = (string) $db->sql_fetchfield('user_email');
				break;
			}
			$db->sql_freeresult($result);
		}
		else if ($post_id)
		{
			$post_info = get_post_data($post_id, 'm_ban');

			if (sizeof($post_info) && !empty($post_info[$post_id]))
			{
				switch ($mode)
				{
					case 'user':
						$pre_fill = $post_info[$post_id]['username'];
					break;

					case 'ip':
						$pre_fill = $post_info[$post_id]['poster_ip'];
					break;

					case 'email':
						$pre_fill = $post_info[$post_id]['user_email'];
					break;
				}

			}
		}

		if ($pre_fill)
		{
			// left for legacy template compatibility
			$template->assign_var('USERNAMES', $pre_fill);
			$template->assign_var('BAN_QUANTIFIER', $pre_fill);
		}
	}
}

?>
Второй вопрос по стилям. Мод заточен под просильвер а у меня сабсильвер. В файле styles/Getaway/template/mcp_ban.html я нашёл похожие строки которые требует инструкция мода, но не совсем уверен что всё нужное вписал правильно. Если у вас будет время, гляньте плииз, верно ли я разместил требуемые строки. За ранее спасибо. :uch_tiv:
вот заполненный файл Getaway/template/mcp_ban.html

Код: Выделить всё

<!-- INCLUDE mcp_header.html -->

<script type="text/javascript">
// <![CDATA[

	var ban_length = new Array();
		ban_length[-1] = '';
	<!-- BEGIN ban_length -->
		ban_length['{ban_length.BAN_ID}'] = '{ban_length.A_LENGTH}';
	<!-- END ban_length -->

	var ban_reason = new Array();
		ban_reason[-1] = '';
	<!-- BEGIN ban_reason -->
		ban_reason['{ban_reason.BAN_ID}'] = '{ban_reason.A_REASON}';
	<!-- END ban_reason -->

	var ban_give_reason = new Array();
		ban_give_reason[-1] = '';
	<!-- BEGIN ban_give_reason -->
		ban_give_reason['{ban_give_reason.BAN_ID}'] = '{ban_give_reason.A_REASON}';
	<!-- END ban_give_reason -->
	//MOD START: BAN URL REDIRECT	
	<!-- IF not S_EMAIL_BAN -->
	var ban_url = new Array();
		ban_url[-1] = '';
	<!-- BEGIN ban_url -->
		ban_url['{ban_url.BAN_ID}'] = <!-- IF ban_url.BAN_URL -->'<a href="{ban_url.BAN_URL}" title="{ban_url.BAN_URL}" onclick="window.open(this.href); return false">{ban_url.BAN_URL}</a>';<!-- ELSE -->''<!-- ENDIF -->
	<!-- END ban_url -->
	<!-- ENDIF -->
//MOD END: BAN URL REDIRECT

	function display_details(option)
	{
		document.getElementById('mcp_ban').unbangivereason.value = ban_give_reason[option];
		document.getElementById('mcp_ban').unbanreason.value = ban_reason[option];
		document.getElementById('mcp_ban').unbanlength.value = ban_length[option];
	//MOD START: BAN URL REDIRECT
		<!-- IF not S_EMAIL_BAN -->
		document.getElementById('unban_url').innerHTML = ban_url[option];
		<!-- ENDIF -->
//MOD END: BAN URL REDIRECT	
	}

// ]]>
</script>

<form id="mcp_ban" method="post" action="{U_ACTION}">

{$CA_BLOCK_START}
{$CA_CAP2_START}{L_TITLE}{$CA_CAP2_END}
<table width="100%" class="tablebg" cellspacing="{$CA_SPACING}" cellpadding="4" border="0">
<tr>
	<td class="row3" colspan="2">{L_EXPLAIN}</td>
</tr>
<tr>
	<td class="row1" width="45%" valign="top"><b>{L_BAN_CELL}:</b></td>
	<td class="row2">
		<textarea name="ban" id="ban" cols="40" rows="3" class="post">{USERNAMES}</textarea>
		<!-- IF S_USERNAME_BAN --><br />[ <a href="{U_FIND_USERNAME}" onclick="find_username(this.href); return false;">{L_FIND_USERNAME}</a> ]<!-- ENDIF -->
	</td>
</tr>
<tr>
	<td class="row1" valign="top"><b>{L_BAN_LENGTH}:</b></td>
	<td class="row2"><select name="banlength">{S_BAN_END_OPTIONS}</select><br /><input type="text" name="banlengthother" class="post" /> {L_YEAR_MONTH_DAY}</td>
</tr>
<tr>
	<td class="row1" valign="top"><b>{L_BAN_EXCLUDE}:</b><br /><span class="gensmall">{L_BAN_EXCLUDE_EXPLAIN}</span></td>
	<td class="row2"><input type="radio" class="radio" name="banexclude" value="1" /> {L_YES} &nbsp; <input type="radio" class="radio" name="banexclude" value="0" checked="checked" /> {L_NO}</td>
</tr>
<tr>
	<td class="row1" valign="top"><b>{L_BAN_REASON}:</b></td>
	<td class="row2"><input name="banreason" type="text" class="post" maxlength="255" /></td>
</tr>
<tr>
	<td class="row1" valign="top"><b>{L_BAN_GIVE_REASON}:</b></td>
	<td class="row2"><input name="bangivereason" type="text" class="post" maxlength="255" /></td>
</tr>
<!-- IF not S_EMAIL_BAN -->
	<dl>
		<dt><label for="ban_url">{L_BAN_URL}:</label><br />{L_BAN_URL_EXPLAIN}</dt>
		<dd><input name="ban_url" id="ban_url" type="text" class="inputbox" maxlength="255" /></dd>
	</dl>
	<!-- ENDIF -->
<tr>
	<td class="cat" colspan="2" align="center"><input type="submit" name="bansubmit" value="{L_SUBMIT}" class="btnmain" />&nbsp; <input type="reset" value="{L_RESET}" class="btnlite" />&nbsp;</td>
</tr>
</table>
{$CA_BLOCK_END}

<br />

{$CA_BLOCK_START}
{$CA_CAP2_START}{L_UNBAN_TITLE}{$CA_CAP2_END}
<table width="100%" class="tablebg" cellspacing="{$CA_SPACING}" cellpadding="4" border="0">
<tr>
	<td class="row3" colspan="2">{L_UNBAN_EXPLAIN}</td>
</tr>
<!-- IF S_BANNED_OPTIONS -->
	<tr>
		<td class="row1" valign="top" width="45%"><b>{L_BAN_CELL}:</b></td>
		<td class="row2"><select name="unban[]" multiple="multiple" size="10" style="width: 50%" onchange="if (this.selectedIndex > -1) display_details(this.options[this.selectedIndex].value); else display_details(-1);">{BANNED_OPTIONS}</select></td>
	</tr>
	<tr>
		<td class="row1" valign="top"><b>{L_BAN_LENGTH}:</b></td>
		<td class="row2"><input style="border: 0; width: 100%" type="text" name="unbanlength" readonly="readonly" /></td>
	</tr>
	<tr>
		<td class="row1" valign="top"><b>{L_BAN_REASON}:</b></td>
		<td class="row2"><textarea style="border: 0; width: 100%" name="unbanreason" readonly="readonly" rows="5" cols="80">&nbsp;</textarea></td>
	</tr>
	<tr>
		<td class="row1" valign="top"><b>{L_BAN_GIVE_REASON}:</b></td>
		<td class="row2"><textarea style="border: 0; width: 100%" name="unbangivereason" readonly="readonly" rows="5" cols="80">&nbsp;</textarea></td>
	</tr>
	<!-- IF not S_EMAIL_BAN -->
		<dl>
			<dt>{L_BAN_URL}:</dt>
			<dd><strong id="unban_url"></strong></dd>
		</dl>
	<!-- ENDIF -->	
	<tr>
		<td class="cat" colspan="2" align="center"><input type="submit" name="unbansubmit" value="{L_SUBMIT}" class="btnmain" />&nbsp; <input type="reset" value="{L_RESET}" class="btnlite" />&nbsp;</td>
	</tr>
<!-- ELSE -->
	<tr>
		<td class="row1" colspan="2"><b>{L_NO_BAN_CELL}</b></td>
	</tr>
<!-- ENDIF -->
</table>
{$CA_BLOCK_END}
{S_FORM_TOKEN}
</form>

<!-- INCLUDE mcp_footer.html -->
P.S. Мод вроде работает нормально. Ошибок нет. Все забаненные идут по ссылке в лес :hi_hi_hi: . Но я опасаюсь как бы мод не вышел из под контроля и самостоятельно не перенаправлял обычного пользователя по другой ссылке, всё в тот же лес. :du_ma_et:

BAN redirect URL phpbb3

Добавлено: 15 сен 2013, 17:49
DeaDRoMeO
Олег В писал(а):Но дело в том что в файле две строки
Обычно надо вставлять в первом найденном случае
Олег В писал(а):вот заполненный файл Getaway/template/mcp_ban.html
У вас же стиль на сабсильвере, незачем использовать верстку просильвера там, для примера это

Код: Выделить всё

<!-- IF not S_EMAIL_BAN -->
   <dl>
      <dt><label for="ban_url">{L_BAN_URL}:</label><br />{L_BAN_URL_EXPLAIN}</dt>
      <dd><input name="ban_url" id="ban_url" type="text" class="inputbox" maxlength="255" /></dd>
   </dl>
   <!-- ENDIF -->
В сабсильвере должно выглядеть как минимум

Код: Выделить всё

<!-- IF not S_EMAIL_BAN -->
   <tr>
      <td><label for="ban_url">{L_BAN_URL}:</label><br />{L_BAN_URL_EXPLAIN}</td>
      <td><input name="ban_url" id="ban_url" type="text" class="inputbox" maxlength="255" /></td>
   </tr>
   <!-- ENDIF -->
Разницу видите ??

BAN redirect URL phpbb3

Добавлено: 15 сен 2013, 21:11
Олег В
Спасибо за разъяснения. Вот исправил, чтоб выглядело как у соседних кодов.
Правильно или набокопорил?? :smu:sche_nie: Так то в работе мода после исправлений ничего вроде не поменялось. как не было в разделе (Чёрный список Эмейл) возможности вписывать адресс перехода так и не появилось после изменений. Перенаправляет только по бану IP и ника.
Getaway/template/mcp_ban.html? Спасибо.. :hi_hi_hi:

Код: Выделить всё

<!-- IF not S_EMAIL_BAN -->
	<tr>
		<td><label for="ban_url">{L_BAN_URL}:</label><br />{L_BAN_URL_EXPLAIN}<b></td>
		<td><input name="ban_url" id="ban_url" type="text" class="inputbox" maxlength="255" /></td>
	</tr>
	<!-- ENDIF -->

Код: Выделить всё

<!-- IF not S_EMAIL_BAN -->
		<tr>
			<td>{L_BAN_URL}:</d></td>
			<td><strong id="unban_url"></strong></td>
		</tr>
	<!-- ENDIF -->	

BAN redirect URL phpbb3

Добавлено: 15 сен 2013, 23:37
DeaDRoMeO
Олег В писал(а):Перенаправляет только по бану IP и ника.
Так и задумано и только так

BAN redirect URL phpbb3

Добавлено: 16 сен 2013, 10:14
Олег В
Сергей! Так может код для стиля вобще не использовать? Что с ним что без него мод работает одинаково, а лишний код из другого стиля как по мне там не нужен! Или я не прав?

BAN redirect URL phpbb3

Добавлено: 16 сен 2013, 10:25
DeaDRoMeO
Олег В писал(а):Так может код для стиля вобще не использовать?
Дело в том, что не всегда же бан дается через админку, зачастую вообще из центра модератора, вот для этого и нужны правки в стиле

BAN redirect URL phpbb3

Добавлено: 16 сен 2013, 10:30
Олег В
Тфу. Я и не подумал об этом и даже не смотрел в центр модератора. Значит этот код в стиле отвечает за наличие возможности вписывать адрес перехода для забаненного из центра модератора? Вечером гляну дома. у меня пака этот мод только на локальном сервере установлен. С реального форума удалил, до выяснения

BAN redirect URL phpbb3

Добавлено: 16 сен 2013, 13:34
DeaDRoMeO
Олег В писал(а):Значит этот код в стиле отвечает за наличие возможности вписывать адрес перехода для забаненного из центра модератора?
Да, именно так

BAN redirect URL phpbb3

Добавлено: 16 сен 2013, 16:45
Олег В
С изменённым для стиля кодом, в центре модератора функция перенаправления появилась! Теперь всё хорошо и вопросов нет. :ta_n_cor:
Пойду поищу следующую головную боль в виде мода. Скучно... :hi_hi_hi:

BAN redirect URL phpbb3

Добавлено: 16 сен 2013, 21:58
DeaDRoMeO
Хах, успехов))