Опубликовано: 19 июля 201114 г Как можно сбросить счетчик Reputation Points на оригинал, для всех. IPB 3.1.4
Опубликовано: 20 июля 201114 г Автор ну если оригинальны репутация +48 но я дал ему +20, через админку ... хочу сделать сброс Reputation Points на оригинал, для всех. Изменено 20 июля 201114 г пользователем Qartvela™
Опубликовано: 14 марта 201213 г Очень заинтересовал данный вопрос.Есть стандартные функции в 3.2.3 Инструменты пересчета и обновленияВот только репутации там нет!
Опубликовано: 14 марта 201213 г ну если оригинальны репутация +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 ); }
Опубликовано: 24 октября 201411 г @siv1987, А можно такое же но для тем? Что бы пересчитать кол-во тем у пользователей?
Опубликовано: 25 октября 201411 г Тем? Я не помню такого счетчика у пользователей. Есть счетчик сообщений и его можно обновить стандартными средствами пересчета. Количество тем форума также можно пересчитать оттуда.
Опубликовано: 25 октября 201411 г Тем? Я не помню такого счетчика у пользователей.Кастомно подключил, через хук. Показывает кол-во созданных тем пользователя, информацию берёт с таблицы members с поля topics_started
Опубликовано: 25 октября 201411 г Это можно обновить и простым 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=ид_пользователя
Опубликовано: 25 октября 201411 г Это можно обновить и простым sql запросам по аналогии с обновлением постов:Спасибо, то что надо!
Как можно сбросить счетчик Reputation Points на оригинал, для всех. IPB 3.1.4