Как ограничить количество добавляемых пользователем материалов.

Главные вкладки

Аватар пользователя gruz gruz 18 января 2008 в 15:57

Подскажите, каким модулем или другими способами (override) и т.п. можно ограничить количество добавляемых пользователем материалов определённого типа (в моём случае - image), за определённый промежуток времени. Например, пользователь может добавлять не более 3-х картинок в день.
Я перелопатил несколько модулей, но решения пока не нашёл:
quota by role - просто ограничивает кол-во добавляемых материалов, независимо от типа.
user quota - вполне подходит, но версия модуля для 4.7, для 5.х - нету, автор забросил разработку.
nodelimit - проект закрыт, в разделе модулей его нет вообще, хотя был для 4.7
noderestrict - та же история, упоминание есть, самого модуля нет нигде.
Ещё читал, что можно через paypernode и nodevote сделать, но никак не заставил их заработать как надо.
Подскажите решение, кто знает!

Комментарии

Аватар пользователя gruz gruz 20 января 2008 в 14:01

в общем проблему решил своими силами, пришлось сделать маленький модуль, без настроек, кому интересно вот код:

<?php
function sitehelper_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {

if ( $op == 'validate' ) {
$type = 'image'; // указываем какой тип материала надо ограничить

if ( $node->type == $type) {
  global $user;
  $username = $user->name;
  $user = user_load(array("name" => $username));

  $quota = 2; // квота - граничное количество материалов, добавляемых пользователем
  $hours = 24; // промежуток времени, за который, пользователь может добавить вышеуказанно кол-во материалов
  $seconds = $hours * 3600;
  
  $query = "SELECT "
  		. "COUNT(*) AS cnt "
  		. "FROM {node} "
  		. "WHERE "
  		. "created >= (unix_timestamp() - %d) "
  		. "AND type='%s' "
  		. "AND uid = %d ";
  
  $cursor = db_query($query, $seconds, $type, $user->uid);
  $row = db_fetch_array($cursor);
  $results[$uid] = $row["cnt"];
  $num_nodes=$results[$uid];
  $total = $num_nodes;
  	if ($total >= $quota) {
  			$message = t("Sorry, but your posting quota has been exceeded. You posted " . $total . " fotos in past 24 hours and your quota is " . $quota);
  			form_set_error("", $message);
  			watchdog("user_quota", $message);
  		}
}
}
}
?>

в данном варианте пользователи могут добавлять не более 2-х картинок (image) в течении суток.