Перейти к контенту
  • 0

Не работает ограничение репутации для группы


proit

Вопрос

Создал новую группу, выставил ограничение 0/0 для +/- к выставлению репутации.

Решил зарегиться для проверки и понаставлять +/- и каково было мое удивление, когда я смог это сделать.

Возможно, кто то уже сталкивался с этим багом и уже знает решение, прошу помощи.

Ссылка на комментарий
Поделиться на других сайтах

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

  • 0
Вряд ли стоит надеяться.. Это баг исключительно мода расширенной репутации. Здесь стоит уповать лишь на возможный интузиазм здешних спецов: Ritsuka, FatCat, либо каким-нибудь образом донести о выявленной проблеме разработчику мода.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Оказалось, просто это не было предусмотрено хуком.

Написать фикс не проблема, когда проблема ясна:D

В общем ищем в hooks/ah30ReputationCoreFunctions.php строки:

 

/* Day Cutoff */
	$day_cutoff = time() - 86400;

	/* Check Max Positive Votes */
	if( ipsRegistry::member()->getProperty( 'g_rep_max_positive' ) &&  $rating == 1 )
	{
		$total = ipsRegistry::DB()->buildAndFetch( array( 
															'select' => 'count(*) as votes', 
															'from'   => 'reputation_index', 
															'where'  => 'member_id=' . ipsRegistry::member()->getProperty( 'member_id' ) . ' AND rep_rating=1 AND rep_date > ' . $day_cutoff
														)	);

		if( $total['votes'] >= ipsRegistry::member()->getProperty( 'g_rep_max_positive' ) )
		{
			$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_quota_pos'];
			return false;				
		}
	}

	/* Check Max Negative Votes */
	if( ipsRegistry::member()->getProperty( 'g_rep_max_negative' ) && $rating == -1 )
	{
		$total = ipsRegistry::DB()->buildAndFetch( array( 
															'select' => 'count(*) as votes', 
															'from'   => 'reputation_index', 
															'where'  => 'member_id=' . ipsRegistry::member()->getProperty( 'member_id' ) . ' AND rep_rating=-1 AND rep_date > ' . $day_cutoff
													)	);

		if( $total['votes'] >= ipsRegistry::member()->getProperty( 'g_rep_max_negative' ) )
		{
			$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_quota_neg'];
			return false;				
		}
	}

Заменяем на:

 

/* Day Cutoff */
	$day_cutoff = time() - 86400;

	/* FIX PROIT. Check Reputation Quota*/		 
	if( !ipsRegistry::member()->getProperty( 'g_rep_max_positive' ) && !ipsRegistry::member()->getProperty( 'g_rep_max_negative' ) )
	{
		$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_offline'];
		return false;	 
	}

	/* FIX PROIT. Check Max Positive Votes */
	if( $rating == 1 )
	{
		if( !ipsRegistry::member()->getProperty( 'g_rep_max_positive' ) )
		{
			$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_offline'];
			return false;
		}

		$total = ipsRegistry::DB()->buildAndFetch( array( 
															'select' => 'count(*) as votes', 
															'from'   => 'reputation_index', 
															'where'  => 'member_id=' . ipsRegistry::member()->getProperty( 'member_id' ) . ' AND rep_rating=1 AND rep_date > ' . $day_cutoff
														)	);

		if( $total['votes'] >= ipsRegistry::member()->getProperty( 'g_rep_max_positive' ) )
		{
			$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_quota_pos'];
			return false;				
		}
	}		

	/* FIX PROIT. Check Max Negative Votes */
	if( $rating == -1 )
	{
		if( !ipsRegistry::member()->getProperty( 'g_rep_max_negative' ) )
		{
			$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_offline'];
			return false;
		}

		$total = ipsRegistry::DB()->buildAndFetch( array( 
															'select' => 'count(*) as votes', 
															'from'   => 'reputation_index', 
															'where'  => 'member_id=' . ipsRegistry::member()->getProperty( 'member_id' ) . ' AND rep_rating=-1 AND rep_date > ' . $day_cutoff
													)	);

		if( $total['votes'] >= ipsRegistry::member()->getProperty( 'g_rep_max_negative' ) )
		{
			$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_quota_neg'];
			return false;				
		}
	}

 

Теперь, когда выдача оценок для группы запрещена, будет показываться табличка "Rating failed: Вы исчерпали лимит положительных оценок на сегодня"

 

Еще рекомендую убрать дублирование кода. Удалите блок:

 

if( $rating == -1 AND ipsRegistry::$settings['reputation_point_types'] == 'positive' )
	{
		$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_invalid'];
		return false;
	}

	if( $rating == 1 AND ipsRegistry::$settings['reputation_point_types'] == 'negative' )
	{
		$this->error_message = ipsRegistry::instance()->getClass( 'class_localization' )->words['reputation_invalid'];
		return false;
	}

Вот так все просто;)

P.S. Фикс актуален для AH30_Reputation_1.0.2_FIX_RU

Изменено пользователем proit
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Подскажите пожалуйста, у меня вылетает ошибка при добавлении репутации:

 

Rating failed: <html>

<head><title>502 Bad Gateway</title></head>

<body bgcolor="white">

</body>

</html>

 

где копатЬ?

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.