Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Qartvela™

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Edited by Qartvela™

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

ну если оригинальны репутация +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

Share this post


Link to post
Share on other sites

@siv1987,

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Это можно обновить и простым 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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...