Здраствуйте. Столкнулся с проблемой, заказчик захотел чтобы голосовать можно было раз в час с одного ip. Долго ковырялся в модулях (там еще votingapi), так и не понял по какой схеме он работает. Нашел только функцию votingapi_add_vote:
if ($uid == NULL) {
global $user;
$uid = $user->uid;
}
$vobj->vote_id = db_next_id('{votingapi_vote}');
$vobj->content_type = $content_type;
$vobj->content_id = $content_id;
$vobj->value = $value;
$vobj->value_type = $value_type;
$vobj->tag = $tag;
$vobj->uid = $uid;
$vobj->timestamp = time();
$vobj->hostname = $_SERVER['REMOTE_ADDR'];
// Append internal IP if it exists.
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$vobj->hostname .= '-'. $_SERVER['HTTP_X_FORWARDED_FOR'];
}
db_query("INSERT INTO {votingapi_vote} (vote_id, content_type, content_id, value, value_type, tag, uid, timestamp, hostname) VALUES (%d, '%s', %d, %f, '%s', '%s', %d, %d, '%s')",
$vobj->vote_id, $vobj->content_type, $vobj->content_id, $vobj->value, $vobj->value_type, $vobj->tag, $vobj->uid, $vobj->timestamp, $vobj->hostname);
// Give other modules a chance to act on the insert operation.
votingapi_invoke('insert', $vobj);
return $vobj;
}
видно, что при добавлении голоса в базу заносится hostname и timestamp. но как он определяет через какое время можно будет снова проголосовать я так и не понял. есть у кого какие мысли?
Комментарии
ну хук же votingapi_invoke, ну написано ведь на понятном британском Give other modules a chance to act on the insert operation.
admin/settings/votingapi - разве это не то, что нужно?
The amount of time that must pass before two anonymous votes from the same computer are considered unique. Setting this to 'never' will eliminate most double-voting, but will make it impossible for multiple anonymous on the same computer (like internet cafe customers) from casting votes.