Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

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

Не подскажите как реализовать функционал, что бы репутацию могли повышать/понижать через определённый промежуток времени?

 

Помниться на старенькой и древненькой IPB 1.3 был большой функционал к моду репутации - на тройке на жаль очень скуден это функционал.

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

  • Автор

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

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

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( 

Вот что выдало при повышении репы:

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

 

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

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

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

  • Автор

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

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

 

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

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.