Поиск пользователя по IP адресу

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

Поиск пользователя по IP адресу

17 май 2012, 11:06

В phpBB3 на странице списка пользователей есть ссылка на страницу поиска пользователя, где среди прочих параметров можно указать IP адрес пользователя (при этом поиск будет вестись по IP адресам сообщений с которых пользователь оставлял эти сообщения), небольшой мод, который добавляет возможность выбора области поиска по IP адресам:
1. IP с которых пользователь оставлял сообщения
2. IP с которого пользователь был зарегистрирован
3. IP пользователя который сейчас находится на форуме
4. IP пользователя с которого он посещал форум

1. Переделать файлы:
language/ru/memberlist.php в самом конце перед добавить

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

	'POST_FROM_IP' => 'оставлял сообщения',
	'REG_FROM_IP' => 'зарегистрировался',
	'ONLINE_FROM_IP' => 'сейчас на форуме',
	'OFFLINE_FROM_IP' => 'посещал форум',
/memberlist.php после

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

			$count			= (request_var('count', '') !== '') ? request_var('count', 0) : '';
			$ipdomain		= request_var('ip', '');
добавить

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

			$ip_select	= request_var('ip_select', 'default');
			$find_ip = array('default'=>$user->lang['POST_FROM_IP'],  'reg'=>$user->lang['REG_FROM_IP'], 'online'=>$user->lang['ONLINE_FROM_IP'], 'offline'=>$user->lang['OFFLINE_FROM_IP']);
			$s_find_ip = '';
			foreach ($find_ip as $key => $value)
			{
				$selected = ($ip_select == $key) ? ' selected="selected"' : '';
				$s_find_ip .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>';
			}
перед

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

					$ip_forums = array_keys($auth->acl_getf('m_info', true));

					$sql = 'SELECT DISTINCT poster_id
добавить

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

					if($ip_select=='default')
					{
после

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

						// A minor fudge but it does the job :D
						$sql_where .= " AND u.user_id = 0";
					}
					unset($ip_forums);

					$db->sql_freeresult($result);
добавить

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

					}
					else
					{
						switch ($ip_select)
						{
							case 'reg':
								$sql_where .= " AND u.user_ip " . ((strpos($ips, '%') !== false) ? 'LIKE' : 'IN') . " ($ips)";
							break;

							case 'online':
								$sql = 'SELECT DISTINCT session_user_id
									FROM ' . SESSIONS_TABLE . '
									WHERE session_ip ' . ((strpos($ips, '%') !== false) ? 'LIKE' : 'IN') . " ($ips)
										AND session_user_id>1";
								$result = $db->sql_query($sql);

								if ($row = $db->sql_fetchrow($result))
								{
									$ip_sql = array();
									do
									{
										$ip_sql[] = $row['session_user_id'];
									}
									while ($row = $db->sql_fetchrow($result));

									$sql_where .= ' AND ' . $db->sql_in_set('u.user_id', $ip_sql);
								}
								else
								{
									// A minor fudge but it does the job :D
									$sql_where .= " AND u.user_id = 0";
								}
								unset($ip_forums);

								$db->sql_freeresult($result);
							break;

							case 'offline':
								$sql = 'SELECT DISTINCT user_id
									FROM ' . SESSIONS_KEYS_TABLE . '
									WHERE last_ip ' . ((strpos($ips, '%') !== false) ? 'LIKE' : 'IN') . " ($ips)
										AND user_id>1";
								$result = $db->sql_query($sql);

								if ($row = $db->sql_fetchrow($result))
								{
									$ip_sql = array();
									do
									{
										$ip_sql[] = $row['user_id'];
									}
									while ($row = $db->sql_fetchrow($result));

									$sql_where .= ' AND ' . $db->sql_in_set('u.user_id', $ip_sql);
								}
								else
								{
									// A minor fudge but it does the job :D
									$sql_where .= " AND u.user_id = 0";
								}
								unset($ip_forums);

								$db->sql_freeresult($result);
							break;
						}
					}
после

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

		// We do not use request_var() here directly to save some calls (not all variables are set)
		$check_params = array(
добавить

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

			'ip_select'	=> array('ip_select', (in_array(request_var('ip_select', 'default'), array('default', 'reg', 'online', 'offline')) ? request_var('ip_select', 'default') : 'default')),
перед

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

				'USERNAME'	=> $username,
				'EMAIL'		=> $email,
добавить

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

				'S_IP_OPTIONS'		=> $s_find_ip,
styles/prosilver/template/memberlist_search.html заменить

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

		<dd><input class="inputbox medium" type="text" name="ip" id="ip" value="{IP}" /></dd>
на

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

		<dd><select name="ip_select">{S_IP_OPTIONS}</select> <input class="inputbox medium" type="text" name="ip" id="ip" value="{IP}" /></dd>
styles/subsilver2/template/memberlist_search.html заменить

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

	<td class="row2"><input class="post" type="text" name="ip" value="{IP}" /></td>
на

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

	<td class="row2"><select name="ip_select">{S_IP_OPTIONS}</select> <input class="post" type="text" name="ip" value="{IP}" /></td>
2. Очистить кеш, обновить стили
3. Скриншоты:
Отображение формы поиска в стиле prosilver по умолчанию

Отображение формы поиска в стиле prosilver после установки мода

--
Для пользователей ppkBB3cker - мод будет установлен в трекер в одном из следующих обновлений (с дополнительными опциями поиска по трекеру)

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