Репутация

Started by DarkMod on 2011-08-28 16:04 — 83 replies, 23339 views

#1
MOD Title: Репутация
MOD Version: 1.0.2
MOD Author: antongranik
Updated MOD TP II: DarkMod, отдельное спасибо Antony Rus Liverov

MOD Description: Allows users to give reputation points to each others,
earn it by posts and by "living" on forum, see the history of givings.
Admin can edit users' reputations in admin cp. The whole system can be a text or a
graphic version (5 different medals) and simple or advanced version
(with choosing of how much reputation to give).
You can get help on the system in the guide/ folder.

#2
Ставил этот мод на SVN, нагрузка нехилая конечно ;-)
#3
в админ панели такая трабла
Spoiler content hidden.
Spoiler content hidden.
#4
Mr.ELDORADO, в ланги добавить не как?
#5
DarkMod,

В аттаче ланги строчные, а надо прописные. Потому и ругается. Под виндой может и пофиг, но никсам критично

Фикс 1.
$lang['REPUTATION'] = 'Репутация';
$lang['NO_VOTES'] = 'Нет голосов';
$lang['VOTES'] = 'голосов';
$lang['REPUTATION'] = 'Репутация';
$lang['REPUTATION_CONFIG_TITLE'] = 'Настройка системы репутации пользователей';
$lang['REPUTATION_CONFIG_EXPLAIN'] = 'Здесь можно настроить все параметры работы системы репутации пользователей.';
$lang['REP_CONFIG_UPDATED'] = 'Настройки репутации изменены';
$lang['CLICK_RETURN_REP_CONFIG'] = '%sВернуться к настройкам репутации%s';
$lang['DISABLE_REP'] = 'Отключить систему репутаций';
$lang['GRAPHIC_VERSION'] = 'Графическая система репутаций';
$lang['SHOW_STATS_TO_MODS'] = 'Показывать статистику выданных очков только администраторам/модераторам';
$lang['PM_NOTIFY'] = 'Уведомлять пользователей через личные сообщения о получении ими новых очков репутации';
$lang['POSTS_TO_EARN'] = 'Кол-во сообщений для заработка 1 очка репутации (0 - запретить)';
$lang['DAYS_TO_EARN'] = 'Кол-во дней существования на форуме для заработка 1 очка репутации (0 - запретить)';
$lang['FLOOD_CONTROL_TIME'] = 'Минимальное кол-во минут для одного пользователя между раздачами репутаций<br />(не действует на модераторов и администраторов)';
$lang['MEDAL1_TO_EARN'] = 'Кол-во очков репутации для заработка медали 1 размера';
$lang['MEDAL2_TO_EARN'] = 'Кол-во очков репутации для заработка медали 2 размера';
$lang['MEDAL3_TO_EARN'] = 'Кол-во очков репутации для заработка медали 3 размера';
$lang['MEDAL4_TO_EARN'] = 'Кол-во очков репутации для заработка медали 4 размера';
$lang['GIVEN_REP_TO_EARN'] = 'Кол-во отданной репутации для заработка 1 очка (0 - запретить)';
$lang['REPSUM_LIMIT'] = 'Максимальное кол-во очков, которые единовременно пользователи могут выдавать (0 - неограниченно)';
$lang['DEFAULT_AMOUNT'] = 'Включить упрощенную систему выдачи репутации и установить каждую выдачу равную этому числу (0 - запретить)';

Фикс 2.
Вместо

#
#-----[ OPEN ]------------------------------------------
#
language/lang_main.php
Надо
#
#-----[ OPEN ]------------------------------------------
#
language/lang_russian/lang_main.php

Мелочь, но тут и более тупые "Почему не работает?!" встречаются

Фикс 3.
А вот это серьезный косяк, делающий мод несовместимым с ТП2

#
#-----[ OPEN ]------------------------------------------
#
reputation.php
#
#-----[ FIND ]--------------------------------------
#
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.php');
include($phpbb_root_path . 'reputation_common.php');
include($phpbb_root_path . 'language/lang_' . $bb_cfg['default_lang'] . '/lang_reputation.php');

#
#-----[ REPLACE ]--------------------------------------
#
define('IN_PHPBB', true);
define('BB_ROOT', './');
require(BB_ROOT .'common.php');
require(BB_ROOT .'reputation_common.php');
require(BB_ROOT .'language/lang_' . $bb_cfg['default_lang'] . '/lang_reputation.php');

Upd. ну и файлик reputation.tpl в аттаче неплохо было бы в UTF сконвертить. А то кракозяблы 🙂
#6
Госссподи... ну и мешанина в коде с регистрами вызова лангов... Лог разрывается просто от необъявленных переменных😕

А так, вроде работает... Докинул только проверку от несуществующих пользователей. У меня за несколько лет по разным причинам попадаются посты от юзверей, которых в bb_users нет. На таких постах в теме мод блокирует все.
#7
Вот честно. За последнее время это первый мод сделанный настолько через ... кхм ... ну вы поняли через что. Пришлось уже самому править сие безобразие руками, но так как я себя никогда программистом не считал, то очень много сказал нецензурных выражений. Ну то что в нескольких местах пришлось править Reputation на REPUTATION - это ладно.

В настоящую минуту если включить
упрощенную систему выдачи репутации и установить каждую выдачу равную этому числу (0 - запретить)
, а я ставил скажем 1, то мускуль начинал орать

)______________________________________________________________________________

#001064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '4 WHERE user_id = 3299' at line 2

UPDATE bb_users SET user_reputation = user_reputation + 1,4 WHERE user_id = 3299

Source  : reputation.php(156) :: db1.team_gdi_2011
IP      : 178.49.136.62
Date    : 2011-10-04 13:53:07
Agent  : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Req_URI : /reputation.php?a=post
Referer : http://www.team-gdi.com/reputation.php?a=add&u=3299&p=138001&c=d41d8cd9
Method  : POST
PID    : 02414
Request : Array
(
    [a] => post
    [rep_sum_to_give] => 1
    [rep_neg_to_give] => 0
    [rep_comment_to_give] =>
    [submit] => Выдать
    [user_id_to_give] => 3299
    [post_id_to_give] => 138001
    [ccode] => d41d8cd9

Ну и репутация соответственно не выдавалась (Could not update reputation for the user)

Есть способ избавиться или проще все снести к свиням? 🙂
#8
Didier,
Удалите или закоментируйте в \language\lang_russian\lang_main.php строку
setlocale(LC_ALL, 'ru_RU.UTF-8');

в ТП2 двойное объявление локали, из-за этого у вас в "+ 1,4" запятая, а должна быть точка. Мускль такого надругательства не выдерживает 🙂
#9
Mikotka, спасибо огромное. Сам бы не допер. 🙂
--- добавлено: Oct 5, 2011 12:38 AM ---
Кстати, как избавится от вывода десятичных дробей?
(Репутация 535.5
Голосов 524)
#10
Кстати, как избавится от вывода десятичных дробей?
А зачем? Мне как раз даже понравилось, что, чем больше разница в "уровнях" по рейтингу, тем больше бонус получающему.

Но, если очень надо, то это явно задается в reputation.php

        if ($userdata['user_reputation'] > $row['user_reputation'])
        {
            if ($userdata['user_reputation'] >= $rep_config['medal1_to_earn']) // >= medal1?
            {
                $mul = 1.4;
            } else if ($userdata['user_reputation'] >= $rep_config['medal2_to_earn']) // >= medal2 && < medal1
            {
                $mul = 1.3;
            } else if ($userdata['user_reputation'] >= $rep_config['medal3_to_earn']) // >=medal3 && <medal2 && <medal1
            {
                $mul = 1.2;
            } else
            {
                $mul = 1.1;
            }
        } else
        {
            $mul = 1;
        }

Поставьте вместо этого просто
$mul = 1;

И не будет присваивать дробные числа.