####################################################
#      Примечание:                                 #
# Все что связанно с данным модулем переведено в   #
# /language/lang_language/lang_main.php            #
# За локализацию спасибо tmk!!!                    #
####################################################
# ЕСЛИ У ВАС УЖЕ УСТАНОВЛЕНА ПОСЛЕДНЯЯ ВЕРСИЯ      #
# АДАПТАЦИИ ОТ МЕНЯ ТОКГДА ЧИТАТЬ UPDATE.TXT       #
####################################################
# Для установки с нуля все запросы оптимизрованы   #
####################################################
#                   УСТАНОВКА                      #
####################################################
#
#-----[ COPY ]---------------------------------
#
/root/admin/admin_invites.php            to  /admin/admin_invites.php
/root/templates/admin/admin_invites.tpl  to  /templates/admin/admin_invites.tpl
/root/templates/default/invite.tpl       to  /templates/default/invite.tpl
/root/invite.php                         to  /invite.php

# 
#-----[ SQL QUERY ]---------------------------------
# 
CREATE TABLE `invite_rules` (
	`rule_id` INT(4) unsigned NOT NULL auto_increment,
	`user_rating` INT(4) unsigned NOT NULL default 0,
	`user_age` INT(4) unsigned NOT NULL default 0,
	`invites_count` INT(4) unsigned NOT NULL default 0,
	`user_group` INT(4) unsigned NOT NULL default 0,
	PRIMARY KEY (`rule_id`)
);
CREATE TABLE `invites` (
	`invite_id` INT(8) unsigned NOT NULL auto_increment,
	`user_id` MEDIUMINT(8) NOT NULL default 0,
	`new_user_id` MEDIUMINT(8) NOT NULL default 0,
	`invite_code` VARCHAR(16) NOT NULL default '',
	`active` ENUM('1','0') default '1',
	`generation_date` INT(10) NOT NULL default '0',
	`activation_date` INT(10) NOT NULL default '0',
	PRIMARY KEY (`invite_id`)
);

# 
#-----[ ФАЙЛ ]---------------------------------
# 
templates/default/page_header.tpl

#
#-----[ НАЙТИ ]--------------------------------
#
<a href="{U_SEARCH_SELF_BY_LAST}">{L_SEARCH_SELF}</a>

#
#-----[ ПОСЛЕ, ВСТАВИТЬ ]---------------------
#
<a href="invite.php">Выдать инвайт</a>

# 
#-----[ ФАЙЛ ]---------------------------------
# 
templates/default/usercp_register.tpl

#
#-----[ НАЙТИ ]--------------------------------
#
<span id="check_pass"></span></td>
</tr>

#
#-----[ ПОСЛЕ, ВСТАВИТЬ ]----------------------
#
<!-- IF $bb_cfg['new_user_reg_only_by_invite'] -->
<!-- IF EDIT_PROFILE -->
<!-- ELSE -->
<tr>
	<td>Код инвайта: *<br /><small>Внимание!<br />На данный момент регистрация разрешена только по инвайтам.<br />Если вы не введете код инвайта, вы не сможете зарегистрироваться.</small></td>
	<td><input type="text" name="invite_code" size="35" value="{INVITE_CODE}" /></td>
</tr>
<!-- ENDIF -->
<!-- ENDIF -->


# 
#-----[ ФАЙЛ ]---------------------------------
# 
config.php

#
#-----[ НАЙТИ ]--------------------------------
#
$bb_cfg['new_user_reg_disabled']   = false;        // Disable new user registrations

#
#-----[ ПОСЛЕ, ВСТАВИТЬ ]----------------------
#
$bb_cfg['new_user_reg_only_by_invite']   = true;    // Disable new user registrations by invites

# 
#-----[ ФАЙЛ ]---------------------------------
# 
includes/ucp/usercp_register.php

#
#-----[ НАЙТИ ]--------------------------------
#
		// field => can_edit
		$profile_fields = array(
			'username'         => true,
			'user_password'    => true,
			'user_email'       => true,

#
#-----[ ПОСЛЕ, ВСТАВИТЬ ]----------------------
#
			'invite_code'      => true,

#
#-----[ НАЙТИ ]--------------------------------
#
		$pr_data = array(
			'user_id'          => ANONYMOUS,
			'username'         => '',
			'user_password'    => '',
			'user_email'       => '',

#
#-----[ ПОСЛЕ, ВСТАВИТЬ ]----------------------
#
			'invite_code'      => '',

#
#-----[ НАЙТИ ]--------------------------------
#
	/**
	*  Пароль (edit, reg)
	*/
	case 'user_password':

#
#-----[ ПЕРЕД, ВСТАВИТЬ ]----------------------
#

	/**
	*  Инвайт (edit, reg)
	*/
	case 'invite_code':
		if($bb_cfg['new_user_reg_only_by_invite']){
			$invite_code = !empty($_POST['invite_code']) ? clean_username($_POST['invite_code']) : $pr_data['invite_code'];
			if ($submit)
			{
				$err = validate_invite_code($invite_code);
				if (!$errors AND $err && $mode == 'register')
				{
					$errors[] = $err;
				}
				if($invite_code != $pr_data['invite_code'] || $mode == 'register')
				{
					$pr_data['invite_code'] = $invite_code;
				}
			}
			$tp_data['CAN_EDIT_INVITE_CODE'] = $can_edit;
			$tp_data['INVITE_CODE'] = $pr_data['invite_code'];
		}
		break;
	

#
#-----[ НАЙТИ ]-------------------------------
#
		$sql_args = DB()->build_array('INSERT', $db_data);

		DB()->query("INSERT INTO ". BB_USERS . $sql_args);
		$new_user_id = DB()->sql_nextid();
#
#-----[ ПОСЛЕ, ВСТАВИТЬ ]---------------------
#
		if($bb_cfg['new_user_reg_only_by_invite']){
			if ($invite_code != '') {
				$sql = "UPDATE `invites` SET `active`='0', `new_user_id`=".$new_user_id.", `activation_date`=".time()." WHERE `invite_code`='".$invite_code."'";
				if (!($upd_querry = DB()->sql_query($sql))) message_die(GENERAL_ERROR, 'Ошибка при активации инвайта', '', __LINE__, __FILE__, $sql);
				DB()->sql_freeresult($upd_querry);
			}
		}
# 
#-----[ ФАЙЛ ]---------------------------------
# 
includes/functions_validate.php

#
#-----[ НАЙТИ ]--------------------------------
#
// Check to see if email address is banned or already present in the DB

#
#-----[ ПЕРЕД, ВСТАВИТЬ ]----------------------
#
function validate_invite_code ($invite_code, $check_activ_and_taken = true)
{
	global $lang;

	$invite_code = str_compact($invite_code);
	$invite_code = clean_username($invite_code);
	if($invite_code != ''){
		if ($check_activ_and_taken)
		{
			$invite_code_sql = DB()->escape($invite_code);
			$sql = "SELECT `invite_id` FROM `invites` WHERE `invite_code` = '$invite_code_sql' AND `active` = '1'";
			if (!($result = DB()->sql_query($sql))){
			return message_die(GENERAL_ERROR, 'Error checking code, invite', '', __LINE__, __FILE__, $sql);
			}else{
				$num_row = DB()->num_rows($result);
				DB()->sql_freeresult($result);
				if ($num_row == 0) {
					return $lang['INVITE_TAKEN'];
				}
			}
		}
	}else{
	return $lang['INVITE_EMPTY'];
	}
	return false;
}

# 
#-----[ ФАЙЛ ]---------------------------------
# 
language/lang_russian/lang_main.php

#
#-----[ В КОНЕЦ ФАЙЛА, ВСТАВИТЬ ]--------------
#
//Invites
$lang['INVITES'] = 'Панель управления инвайтами';
$lang['GET_INVITE'] = 'Выдать инвайт';
$lang['ALL_TIME_GETED_INVITE'] = 'За всё время вами выдано инвайтов:';
$lang['LAST_WEEK_GETED_INVITE'] = 'За последнюю неделю вами выдано инвайтов:';
$lang['ALLOW_GET_INVITE'] = 'На данный момент вы можете выдать инвайтов:';
$lang['REG_INVITES_DISABLE'] = 'Регистрация по инвайтам отключена';
$land['REG_INVITES_DISABLE_MSG'] = 'Чтобы включить, необходимо в <b>config.php</b> поменять значение переменной <b>$bb_cfg[\'new_user_reg_only_by_invite\']</b> с <b>false</b> на <b>true</b>';
$lang['DENNY_GET_INVITE_MSG'] = 'Извините, но на данный момент вы не можете выдавать инвайты.';
$lang['DENNY_GET_INVITE_MSG_1'] = 'Это может быть связано с тем, что:<br /><ul><li>вы уже выдали разрешенное вам максимальное кол-во инвайтов в неделю;</li><li>ваш рейтинг не позволяет выдавать вам инвайты;</li><li>кол-во прошедших месяцев со дня вашей регистрации не позволяет вам выдавать инвайты.</li></ul>';
$lang['INVITE_YOU_CURRENT_RATIO'] = 'Ваш текущий рейтинг:';
$lang['INVITE_TIME_REG_MOUNTH'] = 'Кол-во месяцев, прошедших со дня вашей регистрации:';
$lang['INVITE_CURRENT_RULES'] = 'Текущие правила для получения инвайтов:';
$lang['INVITE_RULES'] = 'Правила для инвайтов';
$lang['INVITE_ADD_RULE'] = 'Добавить правило';
$lang['EDIT_INVITE_RULES'] = 'Редактировать правила для инвайтов';
$lang['INVITE_MIN_RATIO'] = 'Минимальный рейтинг';
$lang['INVITE_MIN_EXP'] = 'Минимальный стаж в месяцах';
$lang['INVITE_ALLOWED_GROUP'] = 'Группа которой разрешено выдавать ивайт';
$lang['ENY_USER'] = 'Пользователи';
$lang['INVITE_NUMBERS_IN_WEEK'] = 'Кол-во инвайтов в неделю';
$lang['YOUR_INVITES'] ='Ваши инвайты';
$lang['INVITE_HISTORY'] = 'История выдачи инвайтов';
$lang['INVITE_GET_DATE'] = 'Дата выдачи';
$lang['INVITE_CODE'] = 'Код инвайта';
$lang['INVITE_ACTIVE'] = 'Активный';
$lang['INVITE_INVITED_USER'] = 'Привлеченный пользователь';
$lang['INVITE_GETED_USER'] = 'Пользователь, выдавший инвайт';
$lang['INVITE_ACTIVATION_DATE'] = 'Дата активации';
$lang['INVITE_NOT_GETED'] = 'Инвайтов не выдавалось';
$lang['CAN_GET_INVITE'] = 'Инвайт не может быть выдан<br /><br />';
$lang['INVITE_GET_SUCCESSFULLY'] = 'Инвайт успешно выдан<br /><br />';
$lang['GO_TO_INVITE_LIST'] ='Нажмите %sздесь%s, чтобы перейти к списку инвайтов';
$lang['INVITE_ACTIV_YES'] = 'Да';
$lang['INVITE_ACTIV_NO'] = 'Нет';
//INVITE REGISTER
$lang['INVITE_TAKEN'] = 'Такого кода инвайта не существует или он уже активирован';
$lang['INVITE_EMPTY'] = 'Вы не указали код инвайта';
$lang['NO_INPUT_INVITE'] = 'Поле для ввода инвайт кода не должно быть пустым';

# 
#-----[ ФАЙЛ ]---------------------------------
# 
language/lang_english/lang_main.php

#
#-----[ В КОНЕЦ ФАЙЛА, ВСТАВИТЬ ]--------------
#
//Invites
$lang['INVITES'] = 'Invites control panel';
$lang['GET_INVITE'] = 'Get invite';
$lang['ALL_TIME_GETED_INVITE'] = 'Total invites issued by you:';
$lang['LAST_WEEK_GETED_INVITE'] = 'Invites issued at last week:';
$lang['ALLOW_GET_INVITE'] = 'Invites available at this moment:';
$lang['REG_INVITES_DISABLE'] = 'Registration by invites disabled';
$land['REG_INVITES_DISABLE_MSG'] = 'To turn it on you should change <b>$bb_cfg[\'new_user_reg_only_by_invite\']</b> value to <b>true</b> in <b>config.php</b> file.';
$lang['DENNY_GET_INVITE_MSG'] = 'Sorry, but you can't get invite at this moment.';
$lang['DENNY_GET_INVITE_MSG_1'] = 'The reason may be:<br /><ul><li>you trying to exceed per week invites limit;</li><li>your ratio too low;</li><li>your tracker experience too low.</li></ul>';
$lang['INVITE_YOU_CURRENT_RATIO'] = 'Your current ratio:';
$lang['INVITE_TIME_REG_MOUNTH'] = 'Tracker experience (months):';
$lang['INVITE_CURRENT_RULES'] = 'Actual rules for invites issue:';
$lang['INVITE_RULES'] = 'Invites rules';
$lang['INVITE_ADD_RULE'] = 'Add rule';
$lang['EDIT_INVITE_RULES'] = 'Edit invites rules';
$lang['INVITE_MIN_RATIO'] = 'Minimal ratio';
$lang['INVITE_MIN_EXP'] = 'Minimal experience';
$lang['INVITE_ALLOWED_GROUP'] = 'Inviting allowed group';
$lang['ENY_USER'] = 'Users';
$lang['INVITE_NUMBERS_IN_WEEK'] = 'Invites per week';
$lang['YOUR_INVITES'] ='Your invites';
$lang['INVITE_HISTORY'] = 'Invites issue history';
$lang['INVITE_GET_DATE'] = 'Issue date';
$lang['INVITE_CODE'] = 'Invite code';
$lang['INVITE_ACTIVE'] = 'Active';
$lang['INVITE_INVITED_USER'] = 'Invited user';
$lang['INVITE_GETED_USER'] = 'Inviter';
$lang['INVITE_ACTIVATION_DATE'] = 'Activation date';
$lang['INVITE_NOT_GETED'] = 'No one invite has been issued';
$lang['CAN_GET_INVITE'] = 'Invite can't be issued<br /><br />';
$lang['INVITE_GET_SUCCESSFULLY'] = 'Invite successfully issued<br /><br />';
$lang['GO_TO_INVITE_LIST'] ='Click %shere%s, to access invites-list';
$lang['INVITE_ACTIV_YES'] = 'Yes';
$lang['INVITE_ACTIV_NO'] = 'No';
$lang['INVITE_TAKEN'] = 'Incorrect invite';
$lang['INVITE_EMPTY'] = 'Please, enter invite code';
#
#-----[EoM]------------------------------------
#