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

Проблемы с установкой или работой 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 раз

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

Сообщение katherine »

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

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

Сообщение MIT »

Ув. тов. Shredder рассказал какое условие надо добавить (if (isset($post_id))). Не проверял, но думаю что работать будет верно.
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

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

Сообщение katherine »

MIT, я пробовала, но почему-то не получается. Вот так предупреждение перестает работать:

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

if (isset($post_id))
{
        if (preg_match("/.*(site\.com|site\.ru|site\.org).*/i",$this->message)>0)
        {
            $this->warn_msg[] = $user->lang['LANG_WARNING'];
            return $this->warn_msg;
        } 
}
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

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

Сообщение MIT »

Попробуй тогда условие

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

if (in_array($this->mode, array('post', 'reply', 'quote', 'edit')) 
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

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

Сообщение katherine »

Не работает :( . Выдает ошибку «Parse error: syntax error, unexpected '{' in /path/to/forum/includes/message_parser.php on line 1120»

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

if (in_array($this->mode, array('post', 'reply', 'quote', 'edit')) 
{       //строчка 1120
        if (preg_match("/.*(dropbox\.com|savepic\.ru|site4\.com).*/i",$this->message)>0)
        {
            $this->warn_msg[] = $user->lang['LANG_WARNING'];
            return $this->warn_msg;
        } 
}
MAzZY
Бывший член :)
Сообщения: 2925
Стаж: 21 год 4 месяца
Благодарил (а): 79 раз
Поблагодарили: 69 раз
Забанен: Бессрочно

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

Сообщение MAzZY »

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

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

Сообщение MIT »

Ага, скобочку добавь, что-то я её где-то потерял
Shredder
Former team member
Сообщения: 2266
Стаж: 17 лет 9 месяцев
Благодарил (а): 283 раза
Поблагодарили: 584 раза

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

Сообщение Shredder »

katherine писал(а):предупреждение перестает работать
Не может быть! (с)
Почему же у меня тогда всё работает?.. (вопрос риторический)

Добавлено спустя 6 минут 54 секунды:
Не работать может только в одном случае: если редактируешь старый пост, не производя в нём при этом никаких изменений. Но это, по-моему, не критично.
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 6 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1454 раза

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

Сообщение Nekstati »

владимир1983 писал(а):На сабсильвер можно поправить? а то не работает.
Работает. Вставляйте скрипт в overall_header.html перед строкой // ]]>.
katherine писал(а):если человек, например, вставил в сообщение 10 фотографий, то приходится сначала ждать пока они все полностью загрузятся, и только потом заменятся на ссылку «Читайте правила». А нельзя сделать, чтобы уже на выводе сообщения всё преобразовывалось? :roll:
Можно. Используйте такой скрипт:

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

	// Catch DOMReady event
	var alreadyrunflag = 0; // flag to indicate whether target function has already been run
	if (document.addEventListener) // Firefox, Opera, Chrome
	{
		document.addEventListener('DOMContentLoaded', function(){alreadyrunflag = 1; block_links()}, false);
	}
	else if (document.all && !window.opera) // IE
	{
		document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');
		var contentloadtag = document.getElementById('contentloadtag');
		contentloadtag.onreadystatechange = function()
		{
			if (this.readyState == 'complete')
			{
				alreadyrunflag = 1;
				block_links();
			}
		}
	}
	if (/Safari/i.test(navigator.userAgent)) // Safari
	{
		var _timer = setInterval(function()
		{
			if (/loaded|complete/.test(document.readyState))
			{
				clearInterval(_timer);
				block_links();
			}
		}, 10);
	}
	window.onload = function() // Other browsers
	{
		setTimeout('if (!alreadyrunflag) block_links()', 0);
	}

	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);
				}
			}
		}
	}
Или можно сделать по-другому: вставить в файл forum_fn.js код из этого поста, удалив из него первую строку (window.onload = block_links;), а затем открыть overall_footer.html и вставить перед закрывающим тэгом </body> такие строчки:

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

<script type="text/javascript">
setTimeout('block_links()', 0);
</script>
В обоих случаях результат будет одинаковый: функция block_links() будет срабатывать, когда HTML-код уже загрузился, а картинки ещё нет.
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

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

Сообщение katherine »

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

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

Сообщение Shredder »

katherine
3.0.7-PL1
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

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

Сообщение katherine »

И у меня точно такая же... :(
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

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

Сообщение katherine »

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

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

Сообщение Shredder »

katherine

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

if (preg_match('#.(?:gif|jpg|jpe|png|bmp)#iu', $match))
Заменить на:

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

if (!preg_match('#(?:домен\.зона)#iu', $match) && preg_match('#.(?:gif|jpg|jpe|png|bmp)#iu', $match))
Где вместо слов домен и зона - имя вашего домена (без www) и зона (ru, com, net и т.д. - смотря, какая у вас), соответственно.

Добавлено спустя 15 минут 46 секунд:
Кстати, чтобы заработало разрешение картинок в личных сообщениях, перед кодом надо было добавить global $post_id;

То есть, полный рабочий код для вашего случая должен быть такой (не забудьте указать свои домен и зону):

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

global $post_id;

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('#(?:домен\.зона)#iu', $match) && 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;
		}
	}
}
katherine
phpBB 1.2.1
Сообщения: 27
Стаж: 16 лет 2 месяца
Благодарил (а): 12 раз

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

Сообщение katherine »

Shredder писал(а):if (!preg_match('#(?:домен\.зона)#iu', $match) && preg_match('#.(?:gif|jpg|jpe|png|bmp)#iu', $match))
А вы не подскажите, как в этот код прописать еще несколько сайтов, ссылки с которых разрешены? :roll:

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