Замучился выкидывать ссылки от новичков и их же емейлы. Задумался, как же запретить писать ссылки для определенных групп, кроме как на этот же форум.
Существует два расположения :
1) threadfpdata_presave - хук на сообщение в создаваемой теме
2) postdata_presave - хук на добавляемое в тему сообщение
соответственно, в оба расположения добавил
Код:
global $vbulletin;
$groups = explode(',','2,3,17');
if (is_member_of($vbulletin->userinfo, $groups) OR $groups[0] == 0)
{
$pagetext = $this->fetch_field('pagetext','post');
$pagetext = str_replace('[url]https://olegon.ru','',$pagetext);
$pagetext = str_replace('https://olegon.ru','',$pagetext);
$pagetext = str_replace('[url]https://storage.olegon.ru','',$pagetext);
$pagetext = str_replace('https://storage.olegon.ru','',$pagetext);
if ((stristr($pagetext,'[url') or stristr($pagetext,'://') or stristr($pagetext,'@') or stristr($pagetext,'[URL') or stristr($pagetext,'www.')))
{
$this->error('restrict_by_rules');
$return_value = false;
}
}
'2,3,17' - группы пользователей, которые не имеют право вставлять ссылки
куча replace - для того, чтобы можно было вставлять ссылки на сам форум и Хранилище.
Обратил внимание, что если создавать переменную, как
$pagetext =& $this->fetch_field('pagetext','post');
то в нее передается ссылка на сам текст, которая, если переменную править, в итоге остается в БД, как сообщение. Как бы понятнее объяснить...
Если сделать
$pagetext =& $this->fetch_field('pagetext','post');
$pagetext = '';
то все создаваемые сообщения после срабатывания хука будут пустыми. Можно использовать для редактирования сообщений на лету.
Фразу restrict_by_rules необходимо добавить в раздел "Сообщения об ошибках" (не в общие фразы!)