Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Haktar

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

Recommended Posts

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

Да.

 

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

Share this post


Link to post
Share on other sites
Потестил. Не срабатывает, свободно повышаю определённому пользователю репутацию как и прежде без временного интервала

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

 

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

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

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

Share this post


Link to post
Share on other sites
Или у Вас есть возможность переопределять оценку?

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

return false;

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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".

 

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

Share this post


Link to post
Share on other sites

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

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

 

		$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

Share this post


Link to post
Share on other sites
Вот что выдало при повышении репы:

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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...