Перейти к содержимому
Русский язык для Invision Community 5

Как можно сбросить Reputation Points на оригинал

Как можно сбросить счетчик Reputation Points на оригинал, для всех. IPB 3.1.4

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

Не вполне понятен вопрос.

 

Имеется ввиду сбросить значения счетчика?

  • Автор

ну если оригинальны репутация +48 но я дал ему +20, через админку ... хочу сделать сброс Reputation Points на оригинал, для всех.

Изменено пользователем Qartvela™

  • 7 месяцев спустя...

Очень заинтересовал данный вопрос.

Есть стандартные функции в 3.2.3 Инструменты пересчета и обновления

Вот только репутации там нет!

ну если оригинальны репутация +48 но я дал ему +20, через админку ... хочу сделать сброс Reputation Points

Отнять так же, как и давали. Функции по пересчета репутации нету.

 

Вот моя с локалхоста. Под 3.2 не знаю если будет работать, не проверял.

Осторожно, хардкод!

 

1. Открыть /admin/applications/core/skin_cp/cp_skin_rebuild.php

 

Найти

<form action='{$this->settings['base_url']}{$this->form_code}' method='post' name='theAdminForm'  id='theAdminForm'>
<input type='hidden' name='do' value='domsgcounts' />

 

Выше добавить

<form action='{$this->settings['base_url']}{$this->form_code}' method='post' name='theAdminForm'  id='theAdminForm'>
<input type='hidden' name='do' value='doreputations' />
<input type='hidden' name='_admin_auth_key' value='{$this->registry->adminFunctions->generated_acp_hash}' />

<div class='acp-box'>
	<h3>Пересчитать репутацию</h3>

	<ul class='acp-form alternate_rows'>
		<li>
			<label>Пересчитать баллы репутации<span class='desctext'>Будет пересчитана репутация пользователей</span></label>
			{$form['pergo']} {$this->lang->words['re_percycle']}
		</li>
	</ul>		
	<div class='acp-actionbar'>
		<input type='submit' value='Пересчет репутации' class='button primary' accesskey='s'>
	</div>
</div>
</form><br />

 

2. Открыть /admin/applications/core/modules_admin/tools/rebuild.php

Найти

		case 'dopostnames':

 

Выше добавить

		case 'doreputations':
			$this->registry->getClass('class_permissions')->checkPermissionAutoMsg( 'tools_rebuild' );
			$this->rebuildReputations();
		break;

 

Найти

/**
 * Rebuild Post Thumbnails
 *
 * @return	void
 */
public function rebuildThumbnails()

 

Выше добавить

/**
 * Rebuild Post Reputation
 *
 * @return	void
 */
public function rebuildReputations()
{
	$done   = 0;
	$start  = intval( $this->request['st'] );
	$end    = intval( $this->request['pergo'] ) ? intval( $this->request['pergo'] ) : 100;
	$dis    = $end + $start;
	$output = array();
	$max    = intval( $this->request['max'] );
	$nfound = array();
	$found  = array();

	//-----------------------------------------
	// Got any more?
	//-----------------------------------------

	if( ! $max )
	{
		$tmp = $this->DB->buildAndFetch( array(  'select' => 'COUNT(*) as count', 'from' => 'members', 'order' => 'member_id ASC' ) );
		$max = intval( $tmp['count'] );
	}

	//-----------------------------------------
	// Avoid limit...
	//-----------------------------------------

	$this->DB->build( array(  'select' => 'member_id', 'from'   => 'members', 'order'  => 'member_id ASC', 'limit'  => array($start,$end) ) );
	$this->DB->execute();

	$members_id = array();
	while( $row = $this->DB->fetch() )
	{
		$members_id[] = $row['member_id'];
	}

	$this->DB->build( array( 'select' => 'SUM(ri.rep_rating) as sum',
							 'from'   => array( 'reputation_index' => 'ri' ),
							 'where'  => 'ri.type="pid" AND app="forums"',
							 'group'  => 'p.author_id',
							 'order'  => 'p.author_id ASC',
							 'add_join' => array(
							 	0 => array( 'select' => 'p.author_id',
											'from'   => array( 'posts' => 'p' ),
											'where'  => 'author_id IN ('.implode(',', $members_id).') AND p.pid=ri.type_id',
											'type'   => 'left',
								)
							 ),
	) );
	$outer = $this->DB->execute();

	//-----------------------------------------
	// Process...
	//-----------------------------------------

	while( $row = $this->DB->fetch( $outer ) )
	{
		if( $row['author_id'] )
		{
			$this->DB->update( 'profile_portal', array( 'pp_reputation_points' => $row['sum'] ), 'pp_member_id='.$row['author_id'] );
			$found[] = $row['author_id'];

			$done++;
		}
	}

	//---------------------------------------
	// Update members who have not found
	//---------------------------------------

	$nfound = array_diff( $members_id, $found );

	if( count($nfound) )
	{
		$this->DB->update( 'profile_portal', array('pp_reputation_points' => 0), 'pp_member_id IN ('.implode(',', $nfound).')' );
	}

	//-----------------------------------------
	// Finish - or more?...
	//-----------------------------------------

	if ( ! $done OR $dis >= $max )
	{
	 	//-----------------------------------------
		// Done..
		//-----------------------------------------

		$text = $this->lang->words['re_rebuildcomp'] . '<br />' . implode( "<br />", $output );
		$url  = "{$this->settings['base_url']}{$this->form_code}";
		$time = 2;
	}
	else
	{
		//-----------------------------------------
		// More..
		//-----------------------------------------
		$output[] = 'Update members '.$done;

		$thisgoeshere = sprintf( $this->lang->words['re_thisgoeshere'], $dis );
		$text = $thisgoeshere . '<br />' . implode( "<br />", $output );
		$url  = "{$this->settings['base_url']}{$this->form_code}&do={$this->request['do']}&pergo={$this->request['pergo']}&st={$dis}&max={$max}";
		$time = 1;
	}

	//-----------------------------------------
	// Bye....
	//-----------------------------------------

	$this->registry->output->redirect( $url, $text, $time );
}

  • 2 года спустя...

@siv1987,

А можно такое же но для тем? Что бы пересчитать кол-во тем у пользователей?

Тем? Я не помню такого счетчика у пользователей. Есть счетчик сообщений и его можно обновить стандартными средствами пересчета. Количество тем форума также можно пересчитать оттуда.

Тем? Я не помню такого счетчика у пользователей.

Кастомно подключил, через хук. Показывает кол-во созданных тем пользователя, информацию берёт с таблицы members с поля topics_started

Это можно обновить и простым sql запросам по аналогии с обновлением постов:

 

UPDATE ibf_members m LEFT JOIN (SELECT COUNT(*) as total, starter_id FROM ibf_topics GROUP BY starter_id) t ON t.starter_id=m.member_id SET m.topics_started=t.total

или

UPDATE ibf_members SET topics_started=(SELECT COUNT(*) FROM ibf_topics WHERE starter_id=member_id)

Для конкретного пользователя добавить в конце запроса условие - WHERE member_id=ид_пользователя

Это можно обновить и простым sql запросам по аналогии с обновлением постов:

Спасибо, то что надо!

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

Аккаунт

Навигация

Поиск

Поиск

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

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