Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Trotor

Повышение репутации через определённый промежуток времени

Рекомендованные сообщения

SQL запрос отредактировали?

Да.

 

Попробую ещё заново повторить всё, может где то ошибку допустил.

Поделиться сообщением


Ссылка на сообщение

По всякому делал - никакого эффекта.

Вот сам файл, уже с правками.

ah30ReputationCoreFunctions.php

Поделиться сообщением


Ссылка на сообщение
Потестил. Не срабатывает, свободно повышаю определённому пользователю репутацию как и прежде без временного интервала

Мистика? Вряд ли.

 

		/* Check for existing rating */
	$current_rating = ipsRegistry::DB()->buildAndFetch( array( 

Здесь мы ищем в БД запись поста (события, фото и др.), репутацию которого юзер уже изменял. Нужно, чтобы юзер не смог накрутить репутацию, сформировав ссылку.

Или у Вас есть возможность переопределять оценку?

Поделиться сообщением


Ссылка на сообщение
Или у Вас есть возможность переопределять оценку?

@newbie, там по логике должно селектится последняя запись из бд (order by id DESC) и либо вставляется новая, либо выдается ошибка. Странно что не срабатывает условие $current_rating['rep_date'] > $offset.

Поделиться сообщением


Ссылка на сообщение

Здесь мы ищем в БД запись поста (события, фото и др.), репутацию которого юзер уже изменял. Нужно, чтобы юзер не смог накрутить репутацию, сформировав ссылку.

Или у Вас есть возможность переопределять оценку?

Я не понял о чём вы. Нужно изменить эту запись так как она неправильна?

Поделиться сообщением


Ссылка на сообщение

Для дебага перед if( $current_rating ) добавьте код

$this->error_message = "\nCurrent time:".time()."\nrep_date: {$current_rating['rep_date']}\nid:{$current_rating['id']}";

return false;

Поделиться сообщением


Ссылка на сообщение

Для дебага перед 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:1423179896

rep_date:

id:

Поделиться сообщением


Ссылка на сообщение
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&section=reputation&do=add_rating&app_rate=forums&type=pid&type_id=1&secure_key={secure_key}&&rating=1

Порядок действий:

1. Внесите правки в файл из поста №10

2. Измените репутацию посту

3. Перейдите по ссылке, указанной выше, предварительно изменив значения параметров, и увидите "You have already voted for this post. Be able to vote again after X minutes".

 

Я не понял о чём вы. Нужно изменить эту запись так как она неправильна?
Последнее предложение/вопрос прочитайте и ответьте. Если у Вас нет возможности переопределять оценку, то код отработает только после выполнения действий указанных выше.

Поделиться сообщением


Ссылка на сообщение

Забыл важный момент уточнить:

Юзер А может повысить/понизить репутацию юзеру Б только скажем через час

 

		$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( 

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Вот что выдало при повышении репы:

При повторном изменение смотрите.

 

Если кнопки не активны после изменения репутации, открыть шаблон Темы -> topicViewTemplate, найти и удалить:

$post['post']['has_given_rep'] != 1 AND $post['post']['has_given_rep'] != -1 AND

Поделиться сообщением


Ссылка на сообщение

Я еще раз перечитал стартпост, и мы говорим именно о повторном изменение репутации для одного и того же сообщения. А не изменения репутации в целом. Наверное я не правильно понял задачу, потому что ограничивать репутацию по времени нет смысла, в настройках групп есть лимит баллов за сутки, и без разницы скликает пользователь его за пять минут или за один день. Если вам нужно чтобы юзер А мог изменять репутацию юзеру Б через определенное время, смотрите пост newbie.

Поделиться сообщением


Ссылка на сообщение

Добавить можно выше

Ура, заработало!!!!

 

Большое спасибо за отклик форумчан siv1987 и newbie на мою просьбу!

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...