####################################################
#      Примечание:                                 #
#      В мод добавлена настойка правил             #
# разрешения выдачи инвайтов определенной групе    #
####################################################
# ЕСЛИ У ВАС УЖЕ УСТАНОВЛЕНА ПОСЛЕДНЯЯ ВЕРСИЯ      #
# АДАПТАЦИИ ОТ МЕНЯ ТОКГДА ЧИТАТЬ 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'] = 'Поле для ввода инвайт кода не должно быть пустым';
#
#-----[EoM]------------------------------------
#