Запрет отправки личных сообщений пользователям из списка "недругов".

Небольшие моды и хаки для форума phpBB3
Правила форума
При размещении мода/статьи взятой с другого форума/сайта обязательно необходимо указывать первоисточник сообщения.
 • Просмотры: 1002
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Запрет отправки личных сообщений пользователям из списка "недругов".

15 авг 2013, 14:33

В phpBB3 есть система друзей/недругов, с помощью которой (во втором случае) все сообщения на форуме написанные пользователями которые у вас находятся в недругах будут скрываться, личные сообщения от таких пользователей будут приходить, но будут отмечаться другим цветом, небольшой мод, который добавляет в личный раздел опцию для отключения возможности отправки личных сообщений вам тем пользователям, которые у вас находятся в списке недругов.

1. В phpmyadmin выполнить (если префикс таблиц не phpbb_ - заменить на свой):

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

ALTER TABLE  `phpbb_users` ADD  `user_allow_foe_pm` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT  '0';
2. Переделать файлы:

includes/ucp/ucp_pm_compose.php перед

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

	if (!is_array($address_list))
	{
		$address_list = array();
	}
добавить

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

	$foe_blacklist=false;
если НЕ установлен этот viewtopic.php?f=56&t=3464 мод, после

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

	if (!is_array($address_list))
	{
		$address_list = array();
	}
добавить

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

	else
	{
		if(isset($address_list['u']) && sizeof($address_list['u']) && isset($_POST['post']))
		{
			$sql="SELECT z.user_id FROM ".ZEBRA_TABLE." z, ".USERS_TABLE." u WHERE z.user_id IN('".implode("', '", array_map('intval', array_keys($address_list['u'])))."') AND z.foe='1' AND z.zebra_id='{$user->data['user_id']}' AND z.user_id=u.user_id AND u.user_allow_foe_pm='0'";
			$result=$db->sql_query($sql);
			while($row=$db->sql_fetchrow($result))
			{
				unset($address_list['u'][$row['user_id']]);
				$foe_blacklist=true;
			}
			$db->sql_freeresult($result);
			$foe_blacklist ? $user->lang['NO_RECIPIENT'].=$user->lang['FOE_BLACKLIST'] : '';
		}
	}
если установлен, перед

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

			foreach($address_list['u'] as $user_id=>$type)
			{
				if($user_id==$user->data['user_id'])
				{
					trigger_error('NO_SELF_SEND_MESSAGE');
				}
			}
добавить

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

			$sql="SELECT z.user_id FROM ".ZEBRA_TABLE." z, ".USERS_TABLE." u WHERE z.user_id IN('".implode("', '", array_map('intval', array_keys($address_list['u'])))."') AND z.foe='1' AND z.zebra_id='{$user->data['user_id']}' AND z.user_id=u.user_id AND u.user_allow_foe_pm='0'";
			$result=$db->sql_query($sql);
			while($row=$db->sql_fetchrow($result))
			{
				unset($address_list['u'][$row['user_id']]);
				$foe_blacklist=true;
			}
			$db->sql_freeresult($result);
			$foe_blacklist ? $user->lang['NO_RECIPIENT'].=$user->lang['FOE_BLACKLIST'] : '';
includes/ucp/ucp_prefs.php после

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

					'popuppm'		=> request_var('popuppm', (bool) $user->optionget('popuppm')),
					'allowpm'		=> request_var('allowpm', (bool) $user->data['user_allow_pm']),
добавить

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

					'allowfoepm'		=> request_var('allowfoepm', (bool) $user->data['user_allow_foe_pm']),
после

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

						$sql_ary = array(
							'user_allow_pm'			=> $data['allowpm'],
добавить

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

							'user_allow_foe_pm'			=> $data['allowfoepm'],
после

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

					'S_MASS_EMAIL'		=> $data['massemail'],
					'S_ALLOW_PM'		=> $data['allowpm'],
добавить

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

					'S_ALLOW_FOE_PM'		=> $data['allowfoepm'],
language/ru/ucp.php в самом конце, перед добавить

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

	'FOE_BLACKLIST' => '<br /><br />Пользователям у которых вы находитесь в списке недругов нельзя отправлять личные сообщения.',
	'ALLOW_FOE_PM'						=> 'Разрешить пользователям из списка недругов посылать вам личные сообщения',
	'ALLOW_FOE_PM_EXPLAIN'				=> '',
styles/prosilver/template/ucp_prefs_personal.html перед

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

	<!-- IF S_CAN_HIDE_ONLINE -->
		<dl>
добавить

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

	<dl>
		<dt><label for="allowfoepm1">{L_ALLOW_FOE_PM}:</label><br /><span>{L_ALLOW_FOE_PM_EXPLAIN}</span></dt>
		<dd>
			<label for="allowfoepm1"><input type="radio" name="allowfoepm" id="allowfoepm1" value="1"<!-- IF S_ALLOW_FOE_PM --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
			<label for="allowfoepm0"><input type="radio" name="allowfoepm" id="allowfoepm0" value="0"<!-- IF not S_ALLOW_FOE_PM --> checked="checked"<!-- ENDIF --> /> {L_NO}</label>
		</dd>
	</dl>
styles/subsilver2/template/ucp_prefs_personal.html перед

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

<!-- IF S_CAN_HIDE_ONLINE -->
	<tr>
добавить

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

<tr>
	<td class="row1" width="50%"><b class="genmed">{L_ALLOW_FOE_PM}:</b><br /><span class="gensmall">{L_ALLOW_FOE_PM_EXPLAIN}</span></td>
	<td class="row2"><input type="radio" class="radio" name="allowfoepm" value="1"<!-- IF S_ALLOW_FOE_PM --> checked="checked"<!-- ENDIF --> /><span class="genmed">{L_YES}</span>&nbsp;&nbsp;<input type="radio" class="radio" name="allowfoepm" value="0"<!-- IF not S_ALLOW_FOE_PM --> checked="checked"<!-- ENDIF --> /><span class="genmed">{L_NO}</span></td>
</tr>
3. Обновить переделанные стили, очистить кеш.

Скриншоты:
Опция в личном разделе:


Результат:

Вернуться в «Минимоды и хаки для phpBB3»