Реферальная система

N

NewLife

Гость
Создать файл ref.php в корне сайта
с таким содержимым
PHP:
<?php
 
define('BB_ROOT', './');
require(BB_ROOT .'common.php');
 
$user->session_start();
 
$id = request_var('id', '');
 
if (!$id) bb_die($lang['ERROR']);
 
$set = setcookie('ref', $id);
 
meta_refresh('profile.php?mode=register', 3);
 
bb_die('<img src="'.BB_ROOT.'/templates/default/images/progress_bar.gif">');

usercp_register.php
найти

PHP:
$new_user_id = DB()->sql_nextid();

ниже вставить
PHP:
if (isset($_COOKIE['ref']))
{
DB()->query("UPDATE ".BB_USERS." SET user_points = user_points + 100 WHERE user_id = ". intval($_COOKIE['ref']));
cache_rm_user_sessions(intval($_COOKIE['ref']));
}

usercp_viewprofile.php
Найти
PHP:
'TRAF_STATS' => !(IS_AM || $profile_user_id),
Ниже вставить
PHP:
'REF_ID' => "{$bb_cfg['server_name']}/ref.php?id=",

usercp_viewprofile.tpl
PHP:
<h1 class="pagetitle">
                Ссылка для приглашения друга: <input type="text" size="33" value="{REF_ID}{PROFILE_USER_ID}" readonly="" onclick="select();">
            </h1>
<span class="med" align="center">
    За каждого приглашенного друга, который зарегистрируется на ресурсе, вы получите в подарок V.I.P.-аккаунт на одну неделю.
        Количество начисляемых поощрений не ограничено, таким образом, вы можете пригласить сколь угодно большое число друзей и за
            каждого из них вам, в автоматическом режиме, сразу после регистрации пользователя будет начислено поощрение. Все подробности
                вы можете найти в <a href="viewtopic.php?t=66468" target="_blank">данной теме</a>.
</span>
123.jpg
//*************************************************************************//
ADDON by Gemini_13

SQL:
Код:
CREATE TABLE `bb_referals` (
  `referal_id` mediumint(8) NOT NULL DEFAULT '0',
  `new_user_id` mediumint(8) NOT NULL DEFAULT '0',
  PRIMARY KEY (`new_user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Открыть ajax.php
Найти:
PHP:
'change_tor_status' => array('user'),
Вставить после:
PHP:
'get_referals'        => array('user'),

Вставить перед последней кавычкой:
PHP:
    // Referals
    function get_referals ()
    {
        global $userdata, $lang;
 
        $user_id = (int) $this->request['user_id'];
        if (!$user_id) $this->ajax_die($lang['NO_USER_ID_SPECIFIED']);
        if ($user_id != $userdata['user_id'] && !IS_AM) $this->ajax_die('Ты не кошерный(ая)! :)');
 
        $sql = "
                SELECT u.user_active, u.user_id, u.username, u.user_avatar, u.user_avatar_type, u.user_reg_ip, u.user_regdate, u.user_rank, u.user_opt
                FROM ". BB_USERS ." u, ". BB_REFERALS ." r
                WHERE r.referal_id = $user_id
                AND u.user_id = r.new_user_id
                ORDER BY username ASC
        ";
 
        if (!$result = DB()->sql_query($sql)) $this->ajax_die('Shit happens, man...', '', __LINE__, __FILE__, $sql);
 
        $admin_mod_th = $admin_mod_td = '';
        if(IS_AM) $admin_mod_th = '<td>IP регистрации</td>';
 
        if ($row = DB()->sql_fetchrowset($result))
        {
            $row_count = count($row);
            $referals_list = '';
            for ($i=0; $i<$row_count; $i++)
            {
                $avatar = get_avatar($row[$i]['user_avatar'], $row[$i]['user_avatar_type'], !bf($row[$i]['user_opt'], 'user_opt', 'allow_avatar'), 64, 64);
                $user = profile_url(array('username' => $row[$i]['username'], 'user_id' => $row[$i]['user_id'], 'user_rank' => $row[$i]['user_rank']));
                $reg_time = bb_date($row[$i]['user_regdate'], 'Y-m-d', 'false') . '<br />' . bb_date($row[$i]['user_regdate'], 'H:i', 'false');
                $reg_ip = decode_ip($row[$i]['user_reg_ip']);
                $admin_mod_td = (IS_AM) ? '<td>'. $reg_ip .'</td>' : '';
                $active = ($row[$i]['user_active']) ? '<img src="images/good.gif" alt="" border="0">' : '<img src="images/bad.gif" alt="" border="0">';
                $row_class = ($i % 2) ? 'row1' : 'row2';
 
                $referals_list .= '
                    <tr class="'. $row_class .' tCenter" >
                        <td>'. $avatar .'</td>
                        <td>'. $user .'</td>
                        <td>'. $reg_time .'</td>
                        '. $admin_mod_td .'
                        <td>'. $active .'</td>
                    </tr>
                ';
            }
 
            $this->response['referals_html'] = '
                    <br />
                    <table class="mod_ip bCenter borderless" cellspacing="1">
                        <tr class="row3 tCenter">
                            <td>'. $lang['AVATAR'] .'</td>
                            <td>'. $lang['USER'] .'</td>
                            <td>Время регистрации</td>
                            '. $admin_mod_th .'
                            <td>Актив.</td>
                        </tr>
                        '. $referals_list .'
                    </table>
                    <br />
            ';
        }
        else
        {
            $this->ajax_die('Нет пользователей, которые зарегистрировались по рефералу');
        }
    }

Открыть includes/init_bb.php
Найти:
PHP:
define('BB_RANKS',                'bb_ranks');
Вставить после:
PHP:
define('BB_REFERALS',            'bb_referals');

Открыть includes/ucp/usercp_register.php
Найти:
PHP:
if (isset($_COOKIE['ref'])) DB()->query("UPDATE ".BB_USERS." SET user_points = user_points + 100 WHERE user_id = ". intval($_COOKIE['ref']));
Заменить на:
PHP:
        // Referals
        if (isset($_COOKIE['ref']))
        {
            DB()->query("UPDATE ".BB_USERS." SET user_points = user_points + 100 WHERE user_id = ". intval($_COOKIE['ref']));
            DB()->query("INSERT INTO ". BB_REFERALS ." VALUES (". intval($_COOKIE['ref']) .", ". $new_user_id .")");
            cache_rm_user_sessions(intval($_COOKIE['ref']));
        }

Открыть templates/default/usercp_viewprofile.tpl
Найти:
HTML:
<!-- ENDIF / SHOW_PASSKEY -->
Вставить после:
HTML:
<!-- IF LOGGED_IN -->
<script type="text/javascript">
ajax.referals = function(mode) {
    $('#referals').html('<i class="loading-1">{L_LOADING}</i>');
    ajax.exec({
        action  : 'get_referals',
        user_id : {PROFILE_USER_ID}
    });
}
ajax.callback.get_referals = function(data) {
    $('#referals').html(data.referals_html);
}
</script>
<!-- ENDIF -->
Найти:
HTML:
<!-- IF IS_AM --><span id="ip_list"></span><!-- ENDIF -->
Вставить после:
HTML:
<span id="referals"></span>
Вставить в любое место в профиле (куда понравится):
HTML:
[ <a href="#" class="med" onclick="ajax.referals('get_referals'); return false;">Приглашенные пользователи</a> ]
am.JPG
 

Lange

Легенда
Ещё бы выводило кто зарегался по этой рефералке, было бы шикарно.
PS Так круче будет:
HTML:
        <!-- IF EDIT_PROF -->
                                            <h1 class="pagetitle">
                Ссылка для приглашения друга: <input type="text" size="33" value="{REF_ID}{PROFILE_USER_ID}" readonly="" onclick="select();">
            </h1>
<span class="med" align="center">
    За каждого приглашенного друга, который зарегистрируется на ресурсе, вы получите в подарок V.I.P.-аккаунт на одну неделю.
        Количество начисляемых поощрений не ограничено, таким образом, вы можете пригласить сколь угодно большое число друзей и за
            каждого из них вам, в автоматическом режиме, сразу после регистрации пользователя будет начислено поощрение. Все подробности
                вы можете найти в <a href="viewtopic.php?t=66468" target="_blank">данной теме</a>.
</span>
<!-- ENDIF -->
 

alexsin

Пользователь
а почему бы так же не вывести в конфиг количество начисляемых бонусов
$bb_cfg['ref_point'] = '500';
user_points + " . $bb_cfg['ref_point'] . "
 

alexsin

Пользователь
к выше сказанному(моей месс)
config.php
PHP:
$bb_cfg['ref_id_url'] = 'viewtopic.php?t=1132';
$bb_cfg['ref_point'] = '500';
- - - - - - - - - - - - - - -
usercp_viewprofile.php
PHP:
'REF_URL' => $bb_cfg['ref_id_url'],
'REF_POINT' => $bb_cfg['ref_point'],

- - - - - - - - - - - - - - -
usercp_viewprofile.tpl

PHP:
<!-- IF EDIT_PROF -->
                                            <h1 class="pagetitle">              Ссылка для приглашения друга: <input type="text" size="33" value="{REF_ID}{PROFILE_USER_ID}" readonly="" onclick="select();">
        </h1>
<span class="med" align="center">
  За каждого приглашенного друга, который зарегистрируется на ресурсе, вы получите в подарок <a class="med bold" target="_blank">{REF_POINT} СидБонусов</a>.
        Количество начисляемых поощрений не ограничено, таким образом, вы можете пригласить сколь угодно большое число друзей и за  каждого из них вам, в автоматическом режиме, сразу после регистрации пользователя будет начислено поощрение. Все подробности  вы можете найти в <a href="{REF_URL}" target="_blank">данной теме</a>.
</span>
<!-- ENDIF -->
 
G

Gemini_13

Гость
хоть я и начинающий, но у срипта реально нет защиты от накрутки сидбонуса. достаточно просто править куки чтобы накрутить себе сидбонусов.

кстати, надо бы это:
PHP:
if (isset($_COOKIE['ref'])) DB()->query("UPDATE ".BB_USERS." SET user_points = user_points + 100 WHERE user_id = ". intval($_COOKIE['ref']));
заменить на:
PHP:
if (isset($_COOKIE['ref']))
{
DB()->query("UPDATE ".BB_USERS." SET user_points = user_points + 100 WHERE user_id = ". intval($_COOKIE['ref']));
cache_rm_user_sessions(intval($_COOKIE['ref']));
}
 
Сверху