Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Qartvela™

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение
07/20/11 09:51 (изменено)

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

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

Поделиться сообщением


Ссылка на сообщение

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

Есть стандартные функции в 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 );
}

  • Upvote 3

Поделиться сообщением


Ссылка на сообщение

@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=ид_пользователя

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

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