Запрет некоторых слов в названии темы

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
fanatic
phpBB 2.0.0
Сообщения: 244
Стаж: 17 лет 6 месяцев
Благодарил (а): 2 раза

Запрет некоторых слов в названии темы

Сообщение fanatic »

Необходимо запретить некоторые слова в названии темы.
Например создает человек тему: "Помогите разобраться" пишет сообщение и нажимает создать. Ему выскакивает окно следующего содержания:
Название темы не должно содержать слов Задача, HELP, Помогите, Плз, Проблема, Спасите и др. Дайте теме более полное и точное название, соответствующее ее содержанию.
Есть готовые решения?
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Запрет некоторых слов в названии темы

Сообщение nissin »

Когда давно писал что-то аналогичное для двойки.
Для тройки естественно не подойдёт.
fanatic
phpBB 2.0.0
Сообщения: 244
Стаж: 17 лет 6 месяцев
Благодарил (а): 2 раза

Re: Запрет некоторых слов в названии темы

Сообщение fanatic »

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

Re: Запрет некоторых слов в названии темы

Сообщение Nekstati »

Найти в posting.php

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

	// Parse subject
	if (!$preview && !$refresh && utf8_clean_string($post_data['post_subject']) === '' && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
	{
		$error[] = $user->lang['EMPTY_SUBJECT'];
	}
Добавить после

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

	include($phpbb_root_path . 'language/' . $config['default_lang'] . '/restricted_words.' . $phpEx);
	$restricted_words = false;
	$subject_lower = utf8_strtolower($post_data['post_subject']);
	foreach ($words as $word_match)
	{
		if (utf8_strpos($subject_lower, $word_match) !== false)
		{
			$restricted_words = true;
			break;
		}
	}
	if (!$preview && !$refresh && $restricted_words && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
	{
		$error[] = $user->lang['RESTRICTED_WORDS'];
	}
Найти в language/ru/posting.php

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

	'QUOTE_DEPTH_EXCEEDED'		=> 'Максимально допустимое количество вложенных друг в друга цитат в сообщении: %1$d.',
Добавить после

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

	'RESTRICTED_WORDS'			=> 'Название темы не должно содержать слов <em>Задача, HELP, Помогите, Плз, Проблема, Спасите</em> и др. Дайте теме более полное и точное название, соответствующее её содержанию.',
Создать файл language/ru/restricted_words.php в кодировке UTF-8 без BOM. Файл должен иметь такое содержание:

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

<?php

if (!defined('IN_PHPBB'))
{
	exit;
}

$words = array(
	'помогите',
	'проблема',
	'спасите',
	'пожалуйста',
	'плиз',
);

?>
Добавьте в него все неугодные вам слова в нижнем регистре.
Аватара пользователя
Kostelano
phpBB 1.4.2
Сообщения: 69
Стаж: 16 лет 7 месяцев
Откуда: Dnepr, UA
Благодарил (а): 10 раз
Поблагодарили: 12 раз

Re: Запрет некоторых слов в названии темы

Сообщение Kostelano »

Большое спасибо, работает :)

Присоединяюсь к fanatic' у - функция действительно очень полезная...
fanatic
phpBB 2.0.0
Сообщения: 244
Стаж: 17 лет 6 месяцев
Благодарил (а): 2 раза

Re: Запрет некоторых слов в названии темы

Сообщение fanatic »

Установил все как описано. Создаю тестовую тему "Спасите...." и вот такая ошибка появляется

[phpBB Debug] PHP Notice: in file /posting.php on line 919: include(./language/ru/restricted_words.php) [function.include]: failed to open stream: No such file or directory
[phpBB Debug] PHP Notice: in file /posting.php on line 919: include(./language/ru/restricted_words.php) [function.include]: failed to open stream: No such file or directory
[phpBB Debug] PHP Notice: in file /posting.php on line 919: include() [function.include]: Failed opening './language/ru/restricted_words.php' for inclusion (include_path='.:')
[phpBB Debug] PHP Notice: in file /posting.php on line 922: Invalid argument supplied for foreach()
Последний раз редактировалось fanatic 26.06.2010 11:39, всего редактировалось 1 раз.
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Запрет некоторых слов в названии темы

Сообщение MIT »

Ну написано же, что не найден файл. Что тут не понятного?
fanatic
phpBB 2.0.0
Сообщения: 244
Стаж: 17 лет 6 месяцев
Благодарил (а): 2 раза

Re: Запрет некоторых слов в названии темы

Сообщение fanatic »

всё теперь понятно. Случайно вышло так, что файл назывался restricted_words(а перед точкой пробел).php
убрал пробел и все заработало.
Спасибо!
romeo_piter
phpBB 2.0.22
Сообщения: 1375
Стаж: 17 лет 5 месяцев
Благодарил (а): 260 раз
Поблагодарили: 32 раза

Re: Запрет некоторых слов в названии темы

Сообщение romeo_piter »

Подскажите, нет ли возможности добавить в этот код запрет на множественные знаки препинания?
Т.е. 2 точки, 3 точки, >3 и так далее и тп со всеми знаками препинания.

Вручную вбивать как то не айс.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Запрет некоторых слов в названии темы

Сообщение Sheer »

Сказано же было
Nekstati писал(а):Добавьте в него все неугодные вам слова в нижнем регистре.
Аватара пользователя
sys1n4
phpBB 1.0.0
Сообщения: 4
Стаж: 15 лет 4 месяца
Откуда: Москва
Благодарил (а): 1 раз

Re: Запрет некоторых слов в названии темы

Сообщение sys1n4 »

Nekstati, Я бы сделал по лаконичнее регулярочку, например: :roll:
Найти:

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

// Parse subject
if (!$preview && !$refresh && utf8_clean_string($post_data['post_subject']) === '' && ($mode == 'post' ||($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
{
     $error[] = $user->lang['EMPTY_SUBJECT'];
}
 
Добавить после:

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

if (preg_match("/(помогите|проблема|спасите|пожалуйста|плиз)/i", $post_data['post_subject']));
{
    $error[] = $user->lang['RESTRICTED_WORDS'];
}
 
Или вообще включить это в первую конструкцию...
И нет никаких utf8_strtolower(); и тому подобной ереси)))
Хотя сейчас нет скрипта и возможности потестить. :(

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

require_once( HEAD . '/brain.php' );
//Начинаю думать...
brain::run(); 

Вернуться в «Запросы модов для phpBB 3.0.x»