﻿############################################################################################
## MOD Title: Users Reputations System                                                     #
## 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.                                    #
##                                                                                         #
## Installation Level: (Hard)                                                              #
## Installation Time: ~ 23 Minutes                                                         #
## License: GNU General Public License v2 (http://opensource.org/licenses/gpl-license.php) #
############################################################################################


# 
#-----[ OPEN ]------------------------------------------ 
# 
viewtopic.php
# 
#-----[ FIND ]-------------------------------------- 
#
require(INC_DIR .'bbcode.php');
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
require(BB_ROOT .'reputation_common.php');
require(INC_DIR .'functions_reputation.php');
# 
#-----[ FIND ]------------------------------------------ 
# 
	else
	{
		$l_edited_by = '';
	}
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
	// START ADD Reputation Mod v.1.0.2
	$reputation = '';
	if ($postrow[$i]['user_id'] != ANONYMOUS)
	{
		if ($rep_config['rep_disable'] == 0)
		{
			if ($postrow[$i]['user_reputation'] == 0)
			{
				$reputation = $lang['ZERO_REPUTATION'];
			} else
			{
				if ($rep_config['graphic_version'] == 0)
				{
					// Text version
					if ($postrow[$i]['user_reputation'] > 0)
					{
						$reputation .= "<strong><font color=\"green\">" . round($postrow[$i]['user_reputation'],1) . "</font></strong>";
					} else {
						$reputation .= "<strong><font color=\"red\">" . round($postrow[$i]['user_reputation'],1) . "</font></strong>";
					}
					$reputation_add = '';
				} else {
					// Graphic version
					get_reputation_medals($postrow[$i]['user_reputation']);
				}
			}
			global $bbcode_uid;
			$reputation .=  " <a href=\""  . append_sid("reputation.php?a=add&" . POST_USERS_URL . "=" . $postrow[$i]['user_id']) . "&" . POST_POST_URL . "=" . $postrow[$i]['post_id'] . "&c=" . substr(md5($bbcode_uid),0,8) . "\" target=\"_blank\" onClick=\"popupWin = window.open(this.href, '" . $lang['REPUTATION'] . "', 'location,width=700,height=400,top=0,scrollbars=yes'); popupWin.focus(); return false;\"><img src=\"images/reputation/add_plus.gif\" alt=\"\" border=\"0\"><img src=\"images/reputation/add_minus.gif\" alt=\"\" border=\"0\"></a>";
			$sql = "SELECT COUNT(user_id) AS count_reps
					FROM " . BB_REPUTATION . " AS r
					WHERE r.user_id = " . $postrow[$i]['user_id'] . "
					GROUP BY user_id";
			if ( !($result = DB()->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, "Could not obtain reputation stats for this user", '', __LINE__, __FILE__, $sql);
			}
			$row_rep = DB()->sql_fetchrow($result);
			if ($row_rep)
			{
				$reputation .= "<br /><a href=\""  . append_sid("reputation.php?a=stats&" . POST_USERS_URL . "=" . $postrow[$i]['user_id']) . "\" target=\"_blank\" onClick=\"popupWin = window.open(this.href, '" . $lang['REPUTATION'] . "', 'location,width=700,height=400,top=0,scrollbars=yes'); popupWin.focus(); return false;\">" . $lang['VOTES'] . "</a>: " . $row_rep['count_reps'];
			}
		}
	}
	// END ADD Reputation Mod v.1.0.2
# 
#-----[ FIND ]------------------------------------------ 
# 

// 2. All others posts
u.user_avatar, u.user_avatar_type,
	  u.user_opt,

#-----[ FIND ]------------------------------------------
u.user_opt,

# 
#-----[ INLINE, ADD AFTER]------------------------------------------ 
# 
 u.user_reputation,
# 
#-----[ FIND ]------------------------------------------ 
# 
		'POSTER_FROM'        => ($bb_cfg['show_poster_from']) ? wbr($poster_from) : '',
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
	// START ADD Reputation Mod
		'REPUTATION_ADD'     => @$reputation_add,
		'REPUTATION'         => $reputation,
	// END ADD Reputation Mod
# 
#-----[ OPEN ]------------------------------------------ 
# 
profile.php
# 
#-----[ FIND ]------------------------------------------ 
#
require(BB_ROOT .'common.php');
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
require(BB_ROOT . 'reputation_common.php');
require(INC_DIR . 'functions_reputation.php');
# 
#-----[ OPEN ]------------------------------------------ 
# 
posting.php
# 
#-----[ FIND ]------------------------------------------ 
#
require(INC_DIR .'functions_post.php');
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
require(BB_ROOT .'reputation_common.php');
require(INC_DIR .'functions_reputation.php');
# 
#-----[ FIND ]------------------------------------------ 
#
			update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
# 
#-----[ AFTER, ADD ]------------------------------------------ 
#
			update_reputations($mode, $user_id);

# 
#-----[ OPEN ]------------------------------------------ 
# 
modcp.php
# 
#-----[ FIND ]------------------------------------------ 
#
require_once(INC_DIR .'functions_admin.php');
# 
#-----[ AFTER, ADD ]------------------------------------------ 
#
require(BB_ROOT . 'reputation_common.php');
# 

# 
#-----[ OPEN ]------------------------------------------ 
# 
includes/sessions.php
# 
#-----[ FIND ]------------------------------------------ 
# 
		require(LANG_DIR .'lang_main.php');
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
		require(LANG_DIR .'lang_reputation.php');

# 
#-----[ OPEN ]------------------------------------------ 
# 
includes/page_header.php
# 
#-----[ FIND ]------------------------------------------ 
# 
	'U_GROUP_CP'         => "groupcp.php",
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
	'L_REPUTATION' 		 => $lang['REPUTATION'],
	'U_REPUTATION' 		 => "reputation.php",
# 
#-----[ OPEN ]------------------------------------------ 
# 
includes/init_bb.php
# 
#-----[ FIND ]------------------------------------------ 
# 
define('DELETED', -1);
# 
#-----[ AFTER,  ADD ]------------------------------------------ 
# 
define('PAGE_REPUTATION', -1280);
# 
#-----[ FIND ]------------------------------------------ 
# 
define('BB_VOTE_USERS',           'bb_vote_voters')
# 
#-----[ AFTER,  ADD ]------------------------------------------ 
#
define('BB_REPUTATION',        	  'bb_reputation');
define('BB_REPUTATION_CONFIG',    'bb_reputation_config');


# 
#-----[ OPEN ]------------------------------------------ 
# 
includes/ucp/usercp_viewprofile.php
# 
#-----[ FIND ]------------------------------------------ 
#

if(bf($profiledata['user_opt'], 'user_opt', 'view_profile') && IS_GUEST)
{
	meta_refresh(append_sid("login.php?redirect={$_SERVER['REQUEST_URI']}", true));

    bb_die("<b>{$profiledata['username']}</b> " . $lang['FORBADE_VIEWING']);
}

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
// START ADD Reputation Mod
	$reputation = '';
	if ($rep_config['rep_disable'] == 0)
	{
		if ($profiledata['user_reputation'] == 0)
		{
			$reputation = $lang['ZERO_REPUTATION'];
		} else
		{
			if ($rep_config['graphic_version'] == 0)
			{
				// Text version
				if ($profiledata['user_reputation'] > 0)
				{
					$reputation .= "<strong><font color=\"green\">" . round($profiledata['user_reputation'],1) . "</font></strong>";
				} else {
					$reputation .= "<strong><font color=\"red\">" . round($profiledata['user_reputation'],1) . "</font></strong>";
				}
			} else {
				// Graphic version
				get_reputation_medals($profiledata['user_reputation']);
			}
		}
		$sql = "SELECT COUNT(user_id) AS count_reps
				FROM " . BB_REPUTATION . " AS r
				WHERE r.user_id = " . $profiledata['user_id'] . "
				GROUP BY user_id";
		if ( !($result = DB()->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, "Could not obtain reputation stats for this user", '', __LINE__, __FILE__, $sql);
		}
		$row_rep = DB()->sql_fetchrow($result);
		if ($row_rep)
		{
			$reputation .= " <br /><span class=\"gensmall\">(<a href=\""  . append_sid("reputation.php?a=stats&" . POST_USERS_URL . "=" . $profiledata['user_id']) . "\" target=\"_blank\" onClick=\"popupWin = window.open(this.href, '" . $lang['REPUTATION'] . "', 'location,width=700,height=400,top=0,scrollbars=yes'); popupWin.focus(); return false;\">" . $lang['VOTES'] . "</a>: " . $row_rep['count_reps'] . ")</span>";
		}
	}
	// END ADD Reputation Mod
# 
#-----[ FIND ]------------------------------------------ 
#
	'POSTER_RANK' 	=> $poster_rank,
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
// START ADD Reputation Mod
	'REPUTATION' => $reputation,
// END ADD Reputation Mod

#
#-----[ OPEN ]------------------------------------------ 
# 
templates/default/usercp_viewprofile.tpl

# 
#-----[ FIND ]------------------------------------------ 
#
			<!-- IF INTERESTS -->
			<tr>
				<th>{L_INTERESTS}:</th>
				<td><b>{INTERESTS}</b></td>
			</tr>
			<!-- ENDIF -->

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
			<!-- IF REPUTATION -->
			<tr> 
				<th>{L_REPUTATION}:</th>
				<td> <span class="gen">{REPUTATION}</span></td>
			</tr>
			<!-- ENDIF -->
# 
#-----[ OPEN ]------------------------------------------ 
# 
templates/default/viewtopic.tpl
# 
#-----[ FIND ]------------------------------------------ 
#
		<!-- IF postrow.POSTER_FROM --><p class="from"><em>{L_LOCATION}:</em> {postrow.POSTER_FROM}</p><!-- ENDIF -->
# 
#-----[ AFTER, ADD ]------------------------------------------ 
#
		<!-- IF postrow.REPUTATION --><p><em>{L_REPUTATION}:</em> {postrow.REPUTATION}</p><!-- ENDIF -->

# 
#-----[ OPEN ]------------------------------------------ 
# 
language/lang_main.php
 
# 
#-----[ В самый конец ]------------------------------------------ 
#

// Reputation mod v.1.0.2
$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 - запретить)'; 

# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
#
# EoM