Рейтинг гостям
Отмените проверку на зарегистрированность перед голосованием.
О какой ветке Инстанта идет речь?
Если речь пошла о голосовании гостями, то о защите от накруток речи уже быть не может.
Регистрировать айпи голосовавшего и не давать голосовать дважды с одного айпи?
об этом и речь! теряется смысл рейтинга...Если речь пошла о голосовании гостями, то о защите от накруток речи уже быть не может.
не самый лучший вариант, т.к. зарегистрированные в системе IP'шник может попасть пользователю который еще не голосовалРегистрировать айпи голосовавшего и не давать голосовать дважды с одного айпи?
В любом случае нужно не слабо допиливать систему хаками, чтобы что-то рабочее сделать.
Судя по всему, Ingvarruss готов на любые накрутки, лишь бы хоть кто-то голосовал.
Видел много сайтов, где можно голосовать гостям. Всякие конкурсы на лучшую фотографию ребенка. Самые накрутки с использованием тора и массовых рассылок по соцсетям.
Не видел ни одного сайта на инстанте, где можно голосовать гостям. Возможно плохо искал.
Что бы сделал я в такой ситуации:
1. Максимально упростил бы регистрацию. Только имейл и пароль. Отключил бы капчу и подтверждение мыла.
2. Отобрал бы у новичков все права, кроме голосования.
3. Перевод новичков в пользователи только после подтверждения мыла и нормального заполнения профиля.
Да кто накручивать будет новость, человек зашел, прочел, оставил мнение, это же не конкурс какой.Судя по всему, Ingvarruss готов на любые накрутки, лишь бы хоть кто-то голосовал.
Тоже не встречал.Не видел ни одного сайта на инстанте, где можно голосовать гостям. Возможно плохо искал.
Почему задал этот вопрос, потому что люди становятся все более ленивые и никто не будет регистрироваться, что бы оценить новость или статью.
Дорабатываем \templates\default\controllers\rating\widget.tpl.php
<?php $is_first_widget = $this->addJS('templates/default/js/rating.js'); ?> <div class="rating_widget" id="rating-<?php echo $target_subject; ?>-<?php echo $target_id; ?>" <?php if ($is_enabled || $options['is_show']){ ?> data-target-controller="<?php echo $target_controller; ?>" data-target-subject="<?php echo $target_subject; ?>" data-target-id="<?php echo $target_id; ?>" <?php if ($options['is_show']){ ?> data-info-url="<?php echo $this->href_to('info'); ?>" <?php } ?> <?php } ?> > <div class="arrow up"> <?php if (1==1){ ?> <a href="#vote-up" class="vote-up" title="<?php echo LANG_RATING_VOTE_UP; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>"></span> <?php } ?> </div> <div class="score" title="<?php echo LANG_RATING; ?>"> <?php if ($options['is_hidden'] && !$is_voted && ($is_enabled || $is_guest)){ ?> <span>—</span> <?php } else { ?> <span class="<?php echo html_signed_class($current_rating); ?><?php if ($options['is_show']) { ?> clickable<?php } ?>"> <?php echo html_signed_num($current_rating); ?> </span> <?php } ?> </div> <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>"> <?php if (1==1){ ?> <a href="#vote-down" class="vote-down" title="<?php echo LANG_RATING_VOTE_DOWN; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>"></span> <?php } ?> </div> </div> <?php if ($is_first_widget) { ?> <script> icms.rating.setOptions({ url: '<?php echo $this->href_to('vote'); ?>' }); </script> <?php }?>
<?php class modelRating extends cmsModel{ //============================================================================// //============================================================================// public function isUserVoted($vote){ return $votes_count > 0 ? true : false; } //============================================================================// //============================================================================// public function filterVotes($controller, $subject, $id){ $this->filterEqual('target_controller', $controller); $this->filterEqual('target_subject', $subject); $this->filterEqual('target_id', $id); return $this; } public function getVotesCount(){ return $this->getCount('rating_log'); } public function getVotes(){ $this->useCache("rating.votes"); $this->joinUser(); return $this->get('rating_log', function($item, $model){ 'id' => $item['user_id'], 'nickname' => $item['user_nickname'], 'avatar' => $item['user_avatar'] ); return $item; }); } //============================================================================// //============================================================================// public function addVote($vote){ cmsCache::getInstance()->clean("rating.votes"); return $this->insert('rating_log', $vote); } //============================================================================// //============================================================================// public function deleteVotes($controller, $subject, $id){ $this->filterVotes($controller, $subject, $id); $this->deleteFiltered('rating_log'); cmsCache::getInstance()->clean("rating.votes"); } public function deleteUserVotes($user_id){ cmsCache::getInstance()->clean("rating.votes"); return $this->delete('rating_log', $user_id, 'user_id'); } //============================================================================// //============================================================================// }