Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

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

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.

Как можно сбросить 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. Найдите Уведомления и измените свои настройки.