На ваш второй вопрос я бы посмотрел код User Delete module (click) .
Модуль также отключает учетную запись пользователя и отменяет публикацию всех узлов / комментариев от определенного пользователя. Расширяя код, вы можете легко создать еще одну возможность отменить публикацию + удалить все узлы / комментарии от определенного пользователя и заблокировать учетную запись.
После отмены публикации кода в модуле вы должны просто поместить код удаления (в sql, если модуль выбирается с помощью sql-запроса или с помощью функций удаления drupal).
Другим вариантом будет создание представления (с использованием модуля просмотра) только для просмотра администраторами, когда вы выбираете определенного пользователя с помощью фильтров, а затем перечисляете его / ее сообщения. Затем в файле node-contenttype.tpl.php вы помещаете кнопку, которая вызывает функцию, которая удаляет все узлы / комментарии и пользователя.
Первая проблема ( частота постов )
Я думал об ограничении количества постов в комментариях. Если я правильно помню, Drupal хранит комментарии в отдельной таблице и имеет специальные функции для комментариев.
Я бы создал новый модуль и с помощью функции comment_nodeapi я бы проверил в операции «вставка», сколько комментариев уже сделал текущий пользователь за определенный период времени.
Чтобы проверить это, я написал бы собственный SQL-запрос к базе данных, который принимает количество всех комментариев, сделанных uid, когда post_date больше, чем NOW-1hour. Если это число превышает 10 или 15 или любую другую частоту публикации, то вы отправляете сообщение обратно пользователю . Вы можете получить идентификатор пользователя и имя с помощью глобальной переменной $ user.
(пример: print $user->name;
)
Вы должны самостоятельно проверить SQL-запрос, но вот некоторый код, когда у вас есть сумма:
<?php
function comment_nodeapi(&$node, $op, $arg = 0) {
switch ($op) {
case 'insert':
//PLACE HERE THE SQL TO GET THE COUNT
if($count > 15){
$repeat = FALSE;
$type = 'status'
drupal_set_message("You have reached the comment limit for this time.", $type, $repeat);
break;
}else{
db_query('INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) VALUES (%d, %d, NULL, %d, 0)', $node->nid, $node->changed, $node->uid);
break;
}
}
}
?>
(этот код не был проверен, поэтому никаких гарантий, но это должно поставить вас на правильный путь)