Опубликовано: 3 февраля 201510 г Не подскажите как реализовать функционал, что бы репутацию могли повышать/понижать через определённый промежуток времени? Помниться на старенькой и древненькой IPB 1.3 был большой функционал к моду репутации - на тройке на жаль очень скуден это функционал.
Опубликовано: 5 февраля 201510 г Автор По всякому делал - никакого эффекта.Вот сам файл, уже с правками.ah30ReputationCoreFunctions.php
Опубликовано: 5 февраля 201510 г Потестил. Не срабатывает, свободно повышаю определённому пользователю репутацию как и прежде без временного интервалаМистика? Вряд ли. /* Check for existing rating */ $current_rating = ipsRegistry::DB()->buildAndFetch( array( Здесь мы ищем в БД запись поста (события, фото и др.), репутацию которого юзер уже изменял. Нужно, чтобы юзер не смог накрутить репутацию, сформировав ссылку.Или у Вас есть возможность переопределять оценку?
Опубликовано: 5 февраля 201510 г Или у Вас есть возможность переопределять оценку?@newbie, там по логике должно селектится последняя запись из бд (order by id DESC) и либо вставляется новая, либо выдается ошибка. Странно что не срабатывает условие $current_rating['rep_date'] > $offset.
Опубликовано: 5 февраля 201510 г Автор Здесь мы ищем в БД запись поста (события, фото и др.), репутацию которого юзер уже изменял. Нужно, чтобы юзер не смог накрутить репутацию, сформировав ссылку.Или у Вас есть возможность переопределять оценку?Я не понял о чём вы. Нужно изменить эту запись так как она неправильна?
Опубликовано: 5 февраля 201510 г Для дебага перед if( $current_rating ) добавьте код$this->error_message = "\nCurrent time:".time()."\nrep_date: {$current_rating['rep_date']}\nid:{$current_rating['id']}";return false;
Опубликовано: 5 февраля 201510 г Автор Для дебага перед if( $current_rating ) добавьте код$this->error_message = "\nCurrent time:".time()."\nrep_date: {$current_rating['rep_date']}\nid:{$current_rating['id']}";return false;Добавил. Вот что выдало при повышении репы:Rating failed: Current time:1423179896rep_date: id:
Опубликовано: 6 февраля 201510 г newbie, там по логике должно селектится последняя запись из бд (order by id DESC) и либо вставляется новая, либо выдается ошибка. Странно что не срабатывает условие $current_rating['rep_date'] > $offset.Так метод addRate когда срабатывает? Когда юзер жмет на кнопку плюс или минус.Смотрю код файла class_reputation_cache.php версии 3.1.4 /* Insert */ if( $current_rating ) { //ipsRegistry::DB()->update( 'reputation_index', $db_insert, "app='{$app}' AND type='{$type}' AND type_id={$type_id} AND member_id=".ipsRegistry::member()->getProperty( 'member_id' ) ); return true; } else { ipsRegistry::DB()->insert( 'reputation_index', $db_insert ); } Здесь проверка нужна для предотвращения накруткиhttp://forum/index.php?s={sessin_id}&app=core&module=ajax§ion=reputation&do=add_rating&app_rate=forums&type=pid&type_id=1&secure_key={secure_key}&&rating=1Порядок действий:1. Внесите правки в файл из поста №102. Измените репутацию посту3. Перейдите по ссылке, указанной выше, предварительно изменив значения параметров, и увидите "You have already voted for this post. Be able to vote again after X minutes". Я не понял о чём вы. Нужно изменить эту запись так как она неправильна?Последнее предложение/вопрос прочитайте и ответьте. Если у Вас нет возможности переопределять оценку, то код отработает только после выполнения действий указанных выше.
Опубликовано: 6 февраля 201510 г Забыл важный момент уточнить:Юзер А может повысить/понизить репутацию юзеру Б только скажем через час $restrict_time_offset = time() - 3600; // Можно изменять репутацию одному юзеру 1 раз в час $restrict_query = ipsRegistry::DB()->buildAndFetch( array( 'select' => '*', 'from' => array('reputation_index' => 'r'), 'where' => "{$rep_author_config[$type]['column']} = {$member_id} AND r.rep_date > {$restrict_time_offset} AND r.member_id = " . ipsRegistry::member()->getProperty('member_id'), 'add_join' => $rep_log_joins ) ); if ($restrict_query) { $time_again = $restrict_query['rep_date'] - $restrict_time_offset; $this->error_message = 'Вы уже изменяли репутацию контента данного пользователя. Подождите ' . IPSTime::time_ago($time_again); return false; } Добавить можно выше /* Check for existing rating */ $current_rating = ipsRegistry::DB()->buildAndFetch( array(
Опубликовано: 6 февраля 201510 г Вот что выдало при повышении репы:При повторном изменение смотрите. Если кнопки не активны после изменения репутации, открыть шаблон Темы -> topicViewTemplate, найти и удалить:$post['post']['has_given_rep'] != 1 AND $post['post']['has_given_rep'] != -1 AND
Опубликовано: 6 февраля 201510 г Я еще раз перечитал стартпост, и мы говорим именно о повторном изменение репутации для одного и того же сообщения. А не изменения репутации в целом. Наверное я не правильно понял задачу, потому что ограничивать репутацию по времени нет смысла, в настройках групп есть лимит баллов за сутки, и без разницы скликает пользователь его за пять минут или за один день. Если вам нужно чтобы юзер А мог изменять репутацию юзеру Б через определенное время, смотрите пост newbie.
Опубликовано: 6 февраля 201510 г Автор Добавить можно вышеУра, заработало!!!! Большое спасибо за отклик форумчан siv1987 и newbie на мою просьбу!
Не подскажите как реализовать функционал, что бы репутацию могли повышать/понижать через определённый промежуток времени?
Помниться на старенькой и древненькой IPB 1.3 был большой функционал к моду репутации - на тройке на жаль очень скуден это функционал.