Запретить ссылки на определенные сайты

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

Запретить ссылки на определенные сайты

Сообщение katherine »

Здравствуйте.
Подскажите, пожалуйста, как можно запретить пользователям использовать в своих сообщениях ссылки на определенные сайты? В частности интересует, как запретить постить картинки с определенных хостингов. Автоцензор на ссылки картинок не работает.. :(
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Запретить ссылки на определенные сайты

Сообщение MIT »

Ничего сложного.
includes\message_parser.php
Find:

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

                return (!$update_this_message) ? $return_message : $this->warn_msg;
            }
        } 
After add:

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

        if (preg_match("/.*(site1\.com|site2\.com|site3\.ru|site4\.com).*/i",$this->message)>0)
        {
            $this->warn_msg[] = $user->lang['LANG_WARNING'];
            return $this->warn_msg;
        } 
Где LANG_WARNING — языковая константа (с примерным содержанием "Нефиг постить ссылки на всякие там пакоостные сайты!")
Аватара пользователя
владимир1983
phpBB 3.2.6
Сообщения: 5954
Стаж: 16 лет 4 месяца
Откуда: Сергиев Посад
Благодарил (а): 373 раза
Поблагодарили: 727 раз

Re: Запретить ссылки на определенные сайты

Сообщение владимир1983 »

MIT
это работает если постят через BBcode:

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

[img]http://savepic.ru/1598283.png[/img]
?
За ваши деньги решу ваши проблемы. Стучи в ЛС.
Нет человека - нет проблемы. (c)
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 6 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1454 раза

Re: Запретить ссылки на определенные сайты

Сообщение Nekstati »

katherine писал(а):Автоцензор на ссылки картинок не работает
Автоцензор работает, если написать так: *ipicture*, *savepic* и т. п.
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

Re: Запретить ссылки на определенные сайты

Сообщение katherine »

MIT писал(а):Ничего сложного.
includes\message_parser.php
Сделала, как вы сказали — при нажатии на Отправить, страница просто перезагружается, никакого сообщения не выдается, и сам пост никак нельзя добавить.
Nekstati писал(а):Автоцензор работает, если написать так: *ipicture*, *savepic* и т. п.
Если так написать, то вместо http://savepic.ru/777888999.jpg получается http://Читайте правила.ru/777888999.jpg.. Это не очень хороший вариант.


Скажите, а нельзя ли сделать так, чтобы человек мог написать сообщение, но просто при его публикации вместо картинки или ссылки на «плохой» хостинг выводилась надпись «Читайте правила форума».
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Запретить ссылки на определенные сайты

Сообщение MIT »

владимир1983
Работает при любом упоминании домена в сообщении.

katherine
Языковую переменную мне на твой форум добавить, али сами там управитесь как-нибудь?
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 6 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1454 раза

Re: Запретить ссылки на определенные сайты

Сообщение Nekstati »

katherine писал(а):а нельзя ли сделать так, чтобы человек мог написать сообщение, но просто при его публикации вместо картинки или ссылки на «плохой» хостинг выводилась надпись «Читайте правила форума».
Конечно, можно. Вот пример на яваскрипте. Заменяются картинки, ссылки, а также картинки, являющиеся ссылками — в общем, любые объекты с нежелательными URL — на нужную вам ссылку «Читайте правила форума».

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

	window.onload = block_links;
	function block_links()
	{
		sitename = /savepic.ru|ipicture.ru|radikal.ru/gi;

		for (i = 0; i < document.getElementsByTagName('A').length; i++)
		{
			link = document.getElementsByTagName('A')[i];
			if (link.href.search(sitename) >= 0 || link.innerHTML.search(sitename) >= 0)
			{
				link.href = '.\/rules\/';
				link.innerHTML = 'Читайте правила форума';
			}
		}

		for (j = 0; j < document.getElementsByTagName('img').length; j++)
		{
			img = document.getElementsByTagName('img')[j];
			if (img.src.search(sitename) >= 0)
			{
				replacement = '<a href=".\/rules\/">Читайте правила форума<\/a>';
				if (img.outerHTML) // IE, Opera, Chrome, Safari
				{
					img.outerHTML = replacement;
				} 
				else // Firefox
				{
					var range = document.createRange();
					range.setStartBefore(img);
					var docFrag = range.createContextualFragment(replacement);
					img.parentNode.replaceChild(docFrag, img);
				}
			}
		}
	}
Скрипт добавьте в конец файла styles/prosilver/template/forum_fn.js. Кодировку файла предварительно измените на UTF8 без BOM, т. к. скрипт содержит кириллицу. Блокируемые адреса подставляйте в эту строку:

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

		sitename = /savepic.ru|ipicture.ru|radikal.ru/gi;
Ну и не забудьте заменить .\/rules\/ на свой путь к правилам, например, .\/viewtopic.php?t=123.
Аватара пользователя
владимир1983
phpBB 3.2.6
Сообщения: 5954
Стаж: 16 лет 4 месяца
Откуда: Сергиев Посад
Благодарил (а): 373 раза
Поблагодарили: 727 раз

Re: Запретить ссылки на определенные сайты

Сообщение владимир1983 »

Nekstati
На сабсильвер можно поправить? а то не работает.
За ваши деньги решу ваши проблемы. Стучи в ЛС.
Нет человека - нет проблемы. (c)
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

Re: Запретить ссылки на определенные сайты

Сообщение katherine »

MIT писал(а):Языковую переменную мне на твой форум добавить, али сами там управитесь как-нибудь?
Я пробовала добавлять языковую переменную ('LANG_WARNING' => 'Читаем правила!') и в language/ru/common.php, и в posting.php, но тогда при загрузке форума открывается пустая страница. Подскажите, что неправильно..
Nekstati писал(а):Конечно, можно. Вот пример на яваскрипте. Заменяются картинки, ссылки, а также картинки, являющиеся ссылками — в общем, любые объекты с нежелательными URL — на нужную вам ссылку «Читайте правила форума».
Спасибо! В принципе неплохой вариант. Единственная проблема — если человек, например, вставил в сообщение 10 фотографий, то приходится сначала ждать пока они все полностью загрузятся, и только потом заменятся на ссылку «Читайте правила». А нельзя сделать, чтобы уже на выводе сообщения всё преобразовывалось? :roll:
Shredder
Former team member
Сообщения: 2266
Стаж: 17 лет 9 месяцев
Благодарил (а): 283 раза
Поблагодарили: 584 раза

Re: Запретить ссылки на определенные сайты

Сообщение Shredder »

katherine
Вам только на определённые фотохостинги запрет надо или вообще на любые посторонние сайты? Лично я у себя сделал именно последнее - по крайней мере, не придётся беспокоиться, что изображения не твои и куда-то потом пропадут.
Последний раз редактировалось Shredder 25.08.2010 7:53, всего редактировалось 1 раз.
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Запретить ссылки на определенные сайты

Сообщение MIT »

katherine писал(а):что неправильно
Значит добавляешь неправильно. Про запятую, небось, забыли?
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

Re: Запретить ссылки на определенные сайты

Сообщение Пчелкин »

MIT писал(а):Где LANG_WARNING — языковая константа (с примерным содержанием "Нефиг постить ссылки на всякие там пакоостные сайты!")
Вам же по русски написали...
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

Re: Запретить ссылки на определенные сайты

Сообщение katherine »

MIT писал(а):Про запятую, небось, забыли?
Забыли.. :oops:
Теперь всё работает!
Shredder писал(а):Вам только на определённые фотохостинги запрет надо или вообще на любые посторонние сайты? Лично я у себя сделал именно последнее - по крайней мере, не придётся беспокоиться, что изображения не твои и куда-то потом пропадут.
Я думаю, запрещать ссылки на любые посторонние сайты — слишком жестко по отошению к пользователям, ведь они постоянно делятся интересными ссылками на всякие новости и пр. Но вот хостинги запрещать надо (особенно, если ресурсы позволяют), потому что уже через несколько месяцев от половины файлов и следа не остается... А когда всё хранится на форуме, уже не нужно волноваться за сохранность материалов :)
Shredder
Former team member
Сообщения: 2266
Стаж: 17 лет 9 месяцев
Благодарил (а): 283 раза
Поблагодарили: 584 раза

Re: Запретить ссылки на определенные сайты

Сообщение Shredder »

katherine писал(а):Я думаю, запрещать ссылки на любые посторонние сайты — слишком жестко по отошению к пользователям, ведь они постоянно делятся интересными ссылками на всякие новости и пр.
Не сайты, а именно картинки с сайтов. Т.е., обычные ссылки на сайты проходят, а на картинки, включая любые хостинги - нет.
Shredder
Former team member
Сообщения: 2266
Стаж: 17 лет 9 месяцев
Благодарил (а): 283 раза
Поблагодарили: 584 раза

Re: Запретить ссылки на определенные сайты

Сообщение Shredder »

katherine
Именно.
Вместо той части кода, что давал MIT, добавляется вот это:

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

if (isset($post_id))
{
	preg_match_all('#' . get_preg_expression('url') . '|' . get_preg_expression('www_url') . '#iu', $this->message, $matches);
	foreach ($matches[0] as $match)
	{
		if (preg_match('#\.(?:gif|jpg|jpe|png|bmp)#iu', $match))
		{
			$this->warn_msg[] = $user->lang['LANG_WARNING'];
			return (!$update_this_message) ? $return_message : $this->warn_msg;
		}
	}
}
Это выдаёт такое же предупреждение и не даёт разместить сообщение, с той лишь разницей, что отрезает ссылки на картинки с вообще любых сайтов. А проверка if (isset($post_id)) в самом начале нужна для того, чтобы код не запрещал эти ссылки в личных сообщениях, потому что кто и что там в них постит - это их личное дело и запрещать как-то глупо, мне важна сохранность только общедоступной информации.

Вернуться в «Поддержка phpBB 3.0.х»