Skip to content
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

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

Featured Replies

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

 

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

  • Author

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

Edited by Qartvela™

  • 7 months later...

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

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

@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 запросам по аналогии с обновлением постов:

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

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.