Инвайты

tmk

Пользователь
Подтверждаю работоспособность проверки инвайта на аякс (R300).
anton4er как всегда отличная работа. Спасибо.
 

anton4er

Пользователь
На R377 тоже работать будет:)

Исправление нашел проблему когда отключается регистрация по инвайтом появляются ошибки поле прячется а проверки нет, + я сам у себя накосячилпри одну строку и прередалал ее
Сейчас нашел и исправил
Вот исправление
/includes/ucp/usercp_register.php
найти

PHP:
    /**
    *  Инвайт (edit, reg)
    */
    case 'invite_code':
        $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;
заменить
PHP:
    /**
    *  Инвайт (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;

если у вас есть $new_user_id = DB()->sql_nextid(); такая строка после
PHP:
        $user_id = DB()->sql_nextid();
            if ($invite_code != '') {
                $sql = "UPDATE `invites` SET `active`='0', `new_user_id`=".$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);
            }

удалите $user_id = DB()->sql_nextid();
а ту строку перенесите на место $user_id = DB()->sql_nextid();
и замените это
PHP:
            if ($invite_code != '') {
 
                $sql = "UPDATE `invites` SET `active`='0', `new_user_id`=".$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);
на это
PHP:
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);
            }
        }
Кому надо инструкцию архив ниже
 

Вложения

  • Invite mod for TPII.rar
    12.6 KB · Просмотры: 32

anton4er

Пользователь
Сделал обнову модуля залить не могу т.к. сижу через прокси и из за унылого провайдера не могу зайти на сайт через вой ип:(
Пишите ПМ или в ICQ: 568-869-059 там уж найдем способ поделиться.
В общем вот что получилось перевел все связанное с языком в языковые переменные
Один минус локализацию я делать не стал и не буду. Т.к. мне она не понадобится если найдется добрый человек который ее сделает,
буду благодарен
100% рабочий мод
В правилах для инвайтов когда не может человек выдать инвайты сделал вывод групп которой разрешено выдавать инвайты.
По сути мод полностью готов.
Во вложении 3 инструкции
1. установка с нуля INSTALL.txt
2. обновление с последнего то что я делал UPDATE.TXT
3. аддон аякс проверка инвайтов ADDON AJAX CHECK_INVITE.txt

Поправил не усмотрел и 2 языковые переменные потерял
Открыйть language/lang_russian/lang_main.php
Найти
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'] = 'Нет';
Вставить после
PHP:
//INVITE REGISTER
$lang['INVITE_TAKEN'] = 'Такого кода инвайта не существует или он уже активирован';
$lang['INVITE_EMPTY'] = 'Вы не указали код инвайта';
Архив перезалит и полностью функционален
 

Вложения

  • [FULL]_INVITE_MOD.rar
    13 KB · Просмотры: 35

anton4er

Пользователь
Добавил локализацию на английский.
Локализация предоставлена tmk за что ему огромное спасибо!

Во вложении все готово, для апдейта с прошлого поста возмите только то что касается language/lang_english/lang_main.php.
 

Вложения

  • [FULL]_INVITE_MOD.rar
    14.1 KB · Просмотры: 21

DarkMod

Легенда
PHP:
USER_GROUP_TABLE
не вижу смысли его два раза подключать
PHP:
$user_id = $userdata['user_id'];
можно было сдеалть через global, нее?
Удалить
PHP:
    global $db;
Ах да не забывает про append_sid чтоб лишних вопросов небыло
 

anton4er

Пользователь
Вот и обнова
С поддержкой R385 и исправлением ошибок указанных DarkMod,

Примечание заменить файлы обязательно.
Переделал функцию get_groupname, админка и сами инвайты обращаются к одной функции в отличии от ранее сделаных 2х похожих функций.

Как и раньше для обновления с прошлой версии мода читать UPDATE.TXT
Файлы заменить обязательно!
 

Вложения

  • [FULL]_INVITE_MOD_R385_SUPPORTED.rar
    12.2 KB · Просмотры: 70

Rusa

Пользователь
Дополнение ;)
PHP:
INSERT INTO `bb_config` VALUES ('new_user_reg_only_by_invite', '0');
 
 
 
"INVITE_ENABLED" => $new['new_user_reg_only_by_invite'],
 
 
 
<!-- invite_enabled -->
<tr>
<td><h4>{L_INVITE_ENABLED}</h4></td>
<td>
<label><input type="radio" name="new_user_reg_only_by_invite" value="1" <!-- IF INVITE_ENABLED -->checked="checked"<!-- ENDIF --> />{L_YES}</label>&nbsp;&nbsp;
<label><input type="radio" name="new_user_reg_only_by_invite" value="0" <!-- IF not INVITE_ENABLED -->checked="checked"<!-- ENDIF --> />{L_NO}</label>
</td>
</tr>
<!-- invite_enabled [END] -->
 
 
 
admin_lang
//
// Reports [END]
//
 
 
$lang['INVITE_ENABLED'] = 'Включить регистрацию только по инвайтам';
 
$lang['INVITE_ENABLED'] = 'Enable registration by invites only';

PHP:
INSERT INTO `bb_cron` VALUES (25, 1, 'Prune inactive invites', 'invites_prune.php', 'daily', NULL, '05:00:00', 255, '0', '0', NULL, 1, '', 0, 0, 0);
 
 
 
<?php
 
if (!defined('BB_ROOT')) die(basename(__FILE__));
 
$sql = "(SELECT i.invite_id
FROM invites i
LEFT JOIN bb_users u ON (u.user_id = i.new_user_id)
WHERE i.new_user_id <> 0 AND u.username IS NULL)
UNION
(SELECT i.invite_id
FROM invites i
LEFT JOIN bb_users u ON (u.user_id = i.user_id)
WHERE i.user_id <> 0 AND u.username IS NULL)";
$new_id = array();
foreach (DB()->fetch_rowset($sql) as $row)
{
{
$new_id[] = $row['invite_id'];
}
$del_ids = implode(",",$new_id);
DB()->query("DELETE FROM invites WHERE invite_id IN($del_ids)");
}
 
Сверху