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

[1.x.x]Reputation Mod


d1pro

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

Теперь новая проблема - некоторым юзерам стало запещено менять репутацию (Аминистратор запретил Вам менять...). В админке всё правильно. Кто-нибудь наконец нашёл решение проблемы? Или уже есть новая улучшенная версия репутации? Ставил мод из архива (с этой темы).
Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...
  • Ответы 537
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

  • theIggs

    theIggs 87 публикаций

  • d1pro

    d1pro 39 публикаций

  • ilz

    ilz 22 публикации

  • Song

    Song 20 публикаций

После пересчета репутации все отрицательные значения округляются до нуля, хотя в подробнее все изменения на месте. Помогите разобраться, где искать ошибку.

 

http://forum.vinsit.ru/index.php?act=rep&CODE=totals

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

  • 2 недели спустя...

vinsit, а ты случайно не сам в админцетре ставишь отридцательную репутацию? Ведь пересчёт для того и нужен, чтобы от всяких накрутов и сбоев показывалась только истинная карма.

 

WARfromTEARS, проблема в том, что ты не до конца установил мод или не следовал инструкции, а вообще проверь наличие в skin_topic.php в самом начале в классе skin_topic функцию:

function rep_options_links($stuff) {
global $ibforums;
return <<<EOF
[ <a href='{$ibforums->base_url}act=rep&CODE=01&mid=$stuff[mid]&f=$stuff[f]&t=$stuff[t]&p=$stuff[p]'>+</a>
|
<a href='{$ibforums->base_url}act=rep&CODE=02&mid=$stuff[mid]&f=$stuff[f]&t=$stuff[t]&p=$stuff[p]'>—</a> ]
EOF;
}

и наличие строчки: {$author['rep']} {$post['rep_options']}, рядом с <!--$ author[field_1]-->

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

vinsit, а ты случайно не сам в админцетре ставишь отридцательную репутацию? Ведь пересчёт для того и нужен, чтобы от всяких накрутов и сбоев показывалась только истинная карма.

 

WARfromTEARS, проблема в том, что ты не до конца установил мод или не следовал инструкции, а вообще проверь наличие в skin_topic.php в самом начале в классе skin_topic функцию:

function rep_options_links($stuff) {
global $ibforums;
return <<<EOF
[ <a href='{$ibforums->base_url}act=rep&CODE=01&mid=$stuff[mid]&f=$stuff[f]&t=$stuff[t]&p=$stuff[p]'>+</a>
|
<a href='{$ibforums->base_url}act=rep&CODE=02&mid=$stuff[mid]&f=$stuff[f]&t=$stuff[t]&p=$stuff[p]'>—</a> ]
EOF;
}

и наличие строчки: {$author['rep']} {$post['rep_options']}, рядом с <!--$ author[field_1]-->

 

функция в порядке...

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

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

  • 2 месяца спустя...
А возожно ли сделать так, чтобы репутацию могли отменять не только админы, но и супермодераторы и модераторы?

Вроде бы нашел решение.Ну как я и предполагал, достаточно просто все.

Оперирование только над скриптом Reputation.php

Найти:

if ($ibforums->member['g_access_cp'])

Заменить на:

if (($ibforums->member['g_access_cp']) or ($ibforums->member['g_is_supmod'] == 1) or ($ibforums->member['is_mod']))

Найти:

if ($ibforums->member['g_access_cp'] and $ibforums->member['id'] != $i['member_id']) $i['admin_undo'] = "<br><a href='{$ibforums->base_url}act=rep&CODE=delete&id={$i['msg_id']}&mid={$i['member_id']}'>{$ibforums->lang['undo_change']}</a>";

Заменить на:

if (($ibforums->member['g_access_cp'] or ($ibforums->member['g_is_supmod'] == 1) or ($ibforums->member['is_mod'])) and $ibforums->member['id'] != $i['member_id']) $i['admin_undo'] = "<br><a href='{$ibforums->base_url}act=rep&CODE=delete&id={$i['msg_id']}&mid={$i['member_id']}'>{$ibforums->lang['undo_change']}</a>";

Найти:

if ($ibforums->member['g_access_cp'] and $ibforums->member['id'] != $i['member_id']) $i['admin_undo'] = "<br><a href='{$ibforums->base_url}act=rep&CODE=delete&id={$i['msg_id']}&mid={$i['member_id']}'>{$ibforums->lang['undo_change']}</a>";

Заменить на:

if (($ibforums->member['g_access_cp'] or ($ibforums->member['g_is_supmod'] == 1) or ($ibforums->member['is_mod'])) and $ibforums->member['id'] != $i['member_id']) $i['admin_undo'] = "<br><a href='{$ibforums->base_url}act=rep&CODE=delete&id={$i['msg_id']}&mid={$i['member_id']}'>{$ibforums->lang['undo_change']}</a>";

Найти и удалить:

if (! $ibforums->member['g_access_cp'])
	{
		$std->Error( array( LEVEL => 1, MSG => 'moderate_no_permission' ) );
	}

Найти около строки 1094:

if ($ibforums->member['g_access_cp'])

Заменить на:

if ($ibforums->member['g_access_cp'] or ($ibforums->member['g_is_supmod'] == 1) or ($ibforums->member['is_mod']) or ($ibforums->member['id'] == $i['member_id']))

Если нужно чтобы модераторы не могли отменять, а только админы и супермодеры, тогда из вышеуказанного кода замены удалите определяющие строки:

 or ($ibforums->member['is_mod'])

При изменениях не ошибитесь в количествах открываемых и закрываемых скобок (должно, естественно, быть одинаковым)!

Разработчики и спецы! Если что не так, подправьте!

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

  • 2 месяца спустя...

У меня не работает этот мод. Всё сделал как в ридми. Ошибка вроде в Topics.php!

Помогите, можно платно! Ася - 6393639

 

Вроде что-то не так с линией $row['rep_options'] = $this->rep_options($poster['id'], $row['pid']);

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

  • 4 недели спустя...
Народ, нужна хелп, щас поставил этот мод, всё пашет, но когда хочу повысить/понизить репутацию пользователя или просмотреть изменения репутации, то выкидывает на главную страницу! помогите плииз!
Ссылка на комментарий
Поделиться на других сайтах

  • 4 недели спустя...
  • 1 месяц спустя...

Чтобы установить этот мод нужни запросы в базу даных я нефига в ней ничего не понимаю, пожалуйста объясните мне всё пошагово вот запросы

 

ALTER TABLE `ibf_members` ADD `reputation` INT NOT NULL;
ALTER TABLE `ibf_members` ADD `rep_allow` TINYINT( 1 ) DEFAULT '1' NOT NULL;
ALTER TABLE `ibf_members` ADD `rep_notify` TINYINT( 1 ) DEFAULT '0' NOT NULL;

CREATE TABLE `ibf_reputation` (
 `id` int(11) NOT NULL auto_increment,
 `from_user` int(11) NOT NULL default '0',
 `to_user` int(11) NOT NULL default '0',
 `forum` int(11) NOT NULL default '0',
 `topic` int(11) NOT NULL default '0',
 `post` int(11) NOT NULL default '0',
 `created` int(11) NOT NULL default '0',
 `message` text NOT NULL,
 `rating` int(11) NOT NULL default '0',
 `anonym` TINYINT(1) NOT NULL DEFAULT '0',
 PRIMARY KEY  (`id`)
);

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

Чтобы установить этот мод нужни запросы в базу даных я нефига в ней ничего не понимаю, пожалуйста объясните мне всё пошагово вот запросы

Открываете phpmyadmin на сервере, выбираете вкладку SQL и копируете туда этот код и нажимаете "Выполнить" и все.Либо через админку, там ест опция SQL запросов в БД.

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

  • 2 месяца спустя...

Скажите, пожалуйста, как убрать рейтинг у администраторов и модераторов?

И если стоит 100 в пункте –“Число сообщений (минимум), после которого можно пользоваться системой?” , могли повышать рейтинг модераторы и администраторы. Спасибо!

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

у меня на форуме не показывается сколько репутации отдано

в чем ошибка???

Та же проблема, к чему здесь совет WARfromTEARS вообще не понятно. Ставилась сразу последняя версия 2.4а.

Покапавшись в БД и в Reputation.php понял что в function add_why($memid)

банально не работает этот кусок

		// Update rep changes count for the member changing this rep
	$query = 'rep_do=rep_do+1';
	if ($show) $query .= ', rep_do_open=rep_do_open+1';

	$DB->query("UPDATE ibf_members SET $query WHERE id = {$ibforums->member['id']}");
}

поскольку в БД эти поля у всех пустые, а к пустому значению 1 не прибавляется :D

 

Отсюда решение: Для тех кто только установил мод и ещё репу не менял достаточно выполнить этот запрос

UPDATE `ibf_members` SET rep_do=0, rep_do_open=0

Для тех кто ещё не ставил, в файле db_hack.php

$DB->query("ALTER TABLE `ibf_members` ADD (`rep` INT(10) DEFAULT NULL, `allow_rep` TINYINT(1) DEFAULT 1 NOT NULL, `allow_anon` TINYINT(1) DEFAULT 1 NOT NULL, `rep_do` INT(10) DEFAULT NULL, `rep_do_open` INT(10) DEFAULT NULL)");
$DB->query("ALTER TABLE `ibf_groups` ADD (`g_change_rep` TINYINT(1) DEFAULT '1', `g_exclude_rep` VARCHAR(255) DEFAULT NULL)");
$DB->query("CREATE TABLE `ibf_reputation` (`msg_id` BIGINT(20) NOT NULL AUTO_INCREMENT, `msg_date` INT(10) DEFAULT NULL, `message` TEXT, `from_id` VARCHAR(32) DEFAULT NULL, `member_id` varchar(32) NOT NULL DEFAULT '0', `forum_id` SMALLINT(5) DEFAULT '0' NOT NULL, `topic_id` VARCHAR(20) DEFAULT '0' NOT NULL, `post` BIGINT(20) NOT NULL, `CODE` VARCHAR(2) NOT NULL, `vis` TINYINT(1) DEFAULT '1' NOT NULL, `comment` TEXT DEFAULT NULL, PRIMARY KEY (`msg_id`), KEY `member_id` (`member_id`)) TYPE=MyISAM");
$DB->query("CREATE TABLE `ibf_reput_ranks` (`id` SMALLINT(5) NOT NULL AUTO_INCREMENT, `amount` INT(10) DEFAULT NULL, `title` VARCHAR(128) DEFAULT NULL, PRIMARY KEY(`id`)) TYPE=MyISAM");

Заменить на

$DB->query("ALTER TABLE `ibf_members` ADD (`rep` INT(10) DEFAULT NULL, `allow_rep` TINYINT(1) DEFAULT 1 NOT NULL, `allow_anon` TINYINT(1) DEFAULT 1 NOT NULL, `rep_do` INT(10) DEFAULT '0', `rep_do_open` INT(10) DEFAULT '0')");
$DB->query("ALTER TABLE `ibf_groups` ADD (`g_change_rep` TINYINT(1) DEFAULT '1', `g_exclude_rep` VARCHAR(255) DEFAULT NULL)");
$DB->query("CREATE TABLE `ibf_reputation` (`msg_id` BIGINT(20) NOT NULL AUTO_INCREMENT, `msg_date` INT(10) DEFAULT NULL, `message` TEXT, `from_id` VARCHAR(32) DEFAULT NULL, `member_id` varchar(32) NOT NULL DEFAULT '0', `forum_id` SMALLINT(5) DEFAULT '0' NOT NULL, `topic_id` VARCHAR(20) DEFAULT '0' NOT NULL, `post` BIGINT(20) NOT NULL, `CODE` VARCHAR(2) NOT NULL, `vis` TINYINT(1) DEFAULT '1' NOT NULL, `comment` TEXT DEFAULT NULL, PRIMARY KEY (`msg_id`), KEY `member_id` (`member_id`)) TYPE=MyISAM");
$DB->query("CREATE TABLE `ibf_reput_ranks` (`id` SMALLINT(5) NOT NULL AUTO_INCREMENT, `amount` INT(10) DEFAULT NULL, `title` VARCHAR(128) DEFAULT NULL, PRIMARY KEY(`id`)) TYPE=MyISAM");

А вот тем кто уже юзал репу, придется как то изворачиваться. Попробую сегодня с этим разобраться, так как самому надо ;)

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

А вот и решение проблемы:(данную операцию надо проделать всем после установки мода)

Открываем файл sources\Admin\ad_settings.php и ищем

$DB->query("SELECT id FROM ibf_members WHERE 1");

	while ($row = $DB->fetch_row())
	{
		$query = '';
		if (!is_numeric( $users[ $row['id'] ]['rep'] )) $query .= 'rep=NULL'; else $query .= 'rep='.$users[ $row['id'] ]['rep'];
		$query .= ', ';
		if (!is_numeric( $users[ $row['id'] ]['rep_do'] )) $query .= 'rep_do=NULL'; else $query .= 'rep_do='.$users[ $row['id'] ]['rep_do'];
		$query .= ', ';
		if (!is_numeric( $users[ $row['id'] ]['rep_do_open'] )) $query .= 'rep_do_open=NULL'; else $query .= 'rep_do_open='.$users[ $row['id'] ]['rep_do_open'];

и заменяем на

$DB->query("SELECT id FROM ibf_members WHERE 1");

	while ($row = $DB->fetch_row())
	{
		$query = '';
		if (!is_numeric( $users[ $row['id'] ]['rep'] )) $query .= 'rep=0'; else $query .= 'rep='.$users[ $row['id'] ]['rep'];
		$query .= ', ';
		if (!is_numeric( $users[ $row['id'] ]['rep_do'] )) $query .= 'rep_do=0'; else $query .= 'rep_do='.$users[ $row['id'] ]['rep_do'];
		$query .= ', ';
		if (!is_numeric( $users[ $row['id'] ]['rep_do_open'] )) $query .= 'rep_do_open=0'; else $query .= 'rep_do_open='.$users[ $row['id'] ]['rep_do_open'];

Сохраняем файл.

Идем в админку -> Системные настройки -> настройки репутации и делаем пересчет репы для всех пользователей.

Все! :D

Если данный кусок оставить как есть, то при пересчете репы поля rep_do и rep_do_open в БД снова станут пустыми и отданная репутация показываться не будет.

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

  • 3 недели спустя...
  • 1 месяц спустя...

Legion Leonhart, мегаспасибо :D Давно хотел это исправить.

 

А теперь вопрос, может кто знает:

1) ЗАЧЕМ сделано так что админ не может отменить изменения своей репутации?? Это типо прикол?

2) Это можно исправить?

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

  • 3 месяца спустя...

выдает ошибку что report_link не может вызвать, но если закоментировать код то все нормально вроде

 		$row['report_link'] = (($ibforums->vars['disable_reportpost'] != 1) and ( $ibforums->member['id'] ))
							? $this->html->report_link($row)
							: "";

 

;) по переставлял ф-ции местами все заработало :D

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

А как сделать что бы гости могли просматривать историю рептации? Ссылку я привентил уже, а вот в коде ковырятся стрёмно.
Ссылка на комментарий
Поделиться на других сайтах

Кто-нибудь вообще в состоянии ответить на мой вопрос?

Нет, никто не в силах, все дибилы.

 

Убрать из файла Reputation.php:

			if (! $ibforums->member['id'] )
		{
			$std->Error( array( 'LEVEL' => 1, 'MSG' => 'not_registered' ) );
		}

В Profile.php убрать выделенное:

if ($ibforums->member['id'] && $ibforums->vars['rep_profile'] && ( $ibforums->member['id'] != $member['id'] ) )

В Topics.php заменить

		if ($ibforums->member['id'])
	{
		$stuff = array( 't' => $this->topic['tid'],
						'f' => $this->forum['id'],
						'mid' => $member['id'] );

		$member['rep'] = "<a href='{$ibforums->base_url}act=rep&CODE=03&mid=".$stuff['mid']."'>".$ibforums->lang['rep_name'].":</a> ".$member['rep'];
	}
	else
	{
		$member['rep'] = $ibforums->lang['rep_name'].": ".$member['rep'];
	}

на

			$stuff = array( 't' => $this->topic['tid'],
						'f' => $this->forum['id'],
						'mid' => $member['id'] );

		$member['rep'] = "<a href='{$ibforums->base_url}act=rep&CODE=03&mid=".$stuff['mid']."'>".$ibforums->lang['rep_name'].":</a> ".$member['rep'];

		if (!$ibforums->member['id'] or in_array($this->forum['id'], $this->rep_exclude) or in_array($this->forum['id'], $this->rep_hide))
	{
		return "";
	}
	else
	{
		if (($memid) and ($ibforums->member['id'] != $memid)) {
			$stuff = array( 't' => $this->topic['tid'], 'f' => $this->forum['id'], 'mid' => $memid, 'p' => $pid );
			return $this->html->rep_options_links($stuff);
		}
	}

на

		if (in_array($this->forum['id'], $this->rep_exclude) or in_array($this->forum['id'], $this->rep_hide))
	{
		return "";
	}
	else
	{
		if (($memid) and ($ibforums->member['id'] != $memid)) {
			$stuff = array( 't' => $this->topic['tid'], 'f' => $this->forum['id'], 'mid' => $memid, 'p' => $pid );
			return $this->html->rep_options_links($stuff);
		}
	}

 

Как-то так. Продолжение ещё прочитай.

 

P.S. Не раходись. Если уж выбрал такую дорогу, то не переживай. Думаешь много людей используют 1.х? Кто действительно использует, давно выучил основы ПХП и простую логиу сам исправляет, а не на ИБР ходит. а остальные помочь в этом вопросе не в силах :D

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

Удали эту строку в файле Reputation.php

if (! $ibforums->member['id'] )
		{
			$std->Error( array( 'LEVEL' => 1, 'MSG' => 'not_registered' ) );
		}

Добавил после

Нет, никто не в силах, все дибилы.

Врет и не краснеет ;) Я просто редко сюда заглядываю.

Sannis, описал более подробно, то бишь что не просто статистику можно было смотреть, но так же чтобы отображалась для гостей в профиле и в темах.

А вот свое сообщение удалить уже не могу :D

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


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

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

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