============================================================================================================================
Modification Name: Referral System

Version: 1.7

Description:
- This modification will add a "Referred by" option on registration page for people to select the user who referred them.
- This modification will add a "Referred by" option on the "Edit Profile" page for people to select the user who referred them (if they haven't already selected one).
- This modification will add a 'block' into member profiles to show who referred them and who they referred.
- Once a member is deleted, the people they referred become referral-less (They will be set to No One) to prevent dead links in member profiles.
- One can give out registration links like: http://www.your_domain.com/your_forum/member.php?ref=USERNAME / member.php?refid=UID
- This modification is compatible with the Shop System v1.3 and will add money to the members who refer people.

Compatibility: XMB 1.9.5 SP1

Code Designed By: FunForum & Adam Clarke

License Note: This modification is released under the GPL License v3. A copy is provided with this software package.

Notes:
- For your own safety, backup all effected files & templates before proceeding with this modification.
- CAUTION: This modification completely relies on the UID's. It's in your own best interest to NOT use the "Fix UID's" / "Fix Member UID's (if skewed)" modification.

Version History:
- V1.7 (28/02/2006 @ 01:00) - Updated Release (1.9.5), with use of 1.10's functions.
- V1.6 (27/02/2006 @ 16:30) - Updated Release (1.9.3).
- V1.5 (04/08/2005 @ 00:10) - Squashed all remaining bugs (With help from WormHole).
- V1.4 (03/08/2005 @ 23:27) - Fixed code for cp.php.
- V1.3 (03/08/2005 @ 23:26) - Modified code so that members cannot edit there referral once done and if they select no-one, they are unable to change it again.
- V1.2 (03/08/2005 @ 23:10) - Modified step numbers (Duplicate Step 6's).
- V1.1 (03/08/2005 @ 23:00) - Updated minor errors within find instructions (By WormHole).
- V1.0 (25/07/2005 @ 20:54) - Initial Release (1.9.1).
============================================================================================================================
=======
Step 1.
=======
====================================
Go To Administration Panel --> Insert Raw SQL
====================================
============================================
Insert Code Below Into Text Area and Click Submit Changes
============================================

ALTER TABLE $table_members ADD referredby smallint(6) DEFAULT '0' NOT NULL;

============================================================================================================================
=======
Step 2.
=======
===================================================================
Upload the sanitize.inc.php file located in the Contents folder to the include folder on your server.
This file and the step below may already be done due to another modification.
===================================================================
=================
Edit File: header.php
=================
==========
Find Code:
==========

require ROOT.'xmb.php';

===============
Add Code Below:
===============

require ROOT.'include/sanitize.inc.php';

============================================================================================================================
=======
Step 3.
=======
=======================
Edit File: lang/English.lang.php
=======================
========================
Add To End Of File Above  ?>
========================

// Referral System Mod Begin
$lang['ref_o01'] = "No One";
$lang['ref_o02'] = "Referred by:";
$lang['ref_o03'] = "If you haven't been referred by anyone, please select the \"No One\" option at the top of the list.";
$lang['ref_o04'] = "Referral";
$lang['ref_o05'] = "Referrals:";
$lang['ref_o06'] = "Amount of Referrals:";
// Referral System Mod End

============================================================================================================================
=======
Step 4.
=======
==============
Edit File: cp.php
==============
==========
Find Code:
==========

                $db->query("DELETE FROM $table_members WHERE uid='$delete'");

===============
Add Code Below:
===============

                // Referral System Mod Begin
                $db->query("UPDATE $table_members SET referredby='-1' WHERE referredby='$delete'");
                // Referral System Mod End

============================================================================================================================
=======
Step 5.
=======
=================
Edit File: member.php
=================
==========
Find Code:
==========

eval('$css = "'.template('css').'";');

===============
Add Code Below:
===============

// Referral System Mod Begin 
$action = fetchFromRequest('action', X_POST|X_GET);
$refid = safeInt(fetchFromRequest('refid', X_POST|X_GET));
$ref = fetchFromRequest('ref', X_POST|X_GET);
if ($SETTINGS['coppa'] == 'on' && is_null($coppasubmit) && is_null($action)) {
    if (is_null($action)) {
        $action = 'coppa';
    }
} elseif (is_null($action)) {
    $action = 'reg';
} $ref_addon = '';
if (!is_null($ref)) {
    $ref_addon = '<input type="hidden" name="ref" value="'.$ref.'" />';
} elseif ($refid != 0) {
    $ref_addon = '<input type="hidden" name="refid" value="'.$refid.'" />';
}
// Referral System Mod End

==========
Find Code:
==========

    if (isset($coppasubmit)) {
        redirect('member.php?action=reg', 0);
    } else {
        eval('echo "'.template('header').'";');
        eval('echo stripslashes("'.template('member_coppa').'");');
    }

================
Replace Code With:
================

    if (isset($coppasubmit)) {
        // Referral System Mod Begin
        if ($refid != 0) {
            redirect("member.php?refid=".$refid, 0);
        } elseif (!is_null($ref)) {
            redirect("member.php?ref=".$ref, 0);
        } else {
            redirect("member.php?action=reg", 0);
        }
        // Referral System Mod End
    } else {
        eval('echo ("'.template('header').'");');
        eval('echo stripslashes("'.template('member_coppa').'");');
    }

==========
Find Code:
==========

            eval('echo stripslashes("'.template('member_reg').'");');

===============
Add Code Above:
===============

            // Referral System Mod Begin
            if (is_null($ref) && $refid == 0) {
                $ref_addon = '<select name="refer">';
                $ref_addon .= '<option value="-1">'.$lang['ref_o01'].'</option>';
                $ref_addon .= '<option value="0" selected="selected"></option>';
                $query = $db->query("SELECT uid, username FROM $table_members ORDER BY username");
                while($ref_mem = $db->fetch_array($query)) {
                    $ref_addon .= '<option value="'.$ref_mem['uid'].'">'.$ref_mem['username'].'</option>';
                }
                    $ref_addon .= "</select>";
                } else {
                    if ($refid == '-1') {
                        $ref = $refid;
                    } elseif ($refid > 0) {
                        $query = $db->query("SELECT username FROM $table_members WHERE uid = '$refid'");
                        $ref = ($db->num_rows($query) == 1 ? $db->result($query, 0) : '');
                    }
                    if (!is_null($ref)) {
                        $ref = addslashes($ref);
                        $query = $db->query("SELECT uid FROM $table_members WHERE username = '$ref'");
                        $refid = ($db->num_rows($query) == 1 ? $db->result($query, 0) : '');
                    }
                    $ref_addon = '<input type="hidden" name="refer" value="'.$refid.'" /><input type="text" readonly name="troep" value="'.$ref.'" />';
                }
                // Referral System Mod End

==========
Find Code:
==========

        $db->query("INSERT INTO $table_members (uid, username, password, regdate

===============
Add Code Below:
===============

        // Referral System Mod Begin
        $refer = safeInt(fetchFromRequest('refer', X_POST));
        $db->query("UPDATE $table_members SET referredby='$refer' WHERE username='$username'");
        // Referral System Mod End

==========
Find Code:
==========

            if ($memberinfo['customstatus'] != '') {

===============
Add Code Above:
===============

            // Referral System Mod Begin
            $referred_by = '';
            if ($memberinfo['referredby'] == '-1') {
                $referred_by = $lang['ref_o01'];
            } elseif ($memberinfo['referredby'] > 0) {
                $query = $db->query("SELECT username FROM $table_members WHERE uid = '".$memberinfo['referredby']."'");
                $referred_by = $db->result($query, 0);
                $referred_by = '<a href="member.php?action=viewpro&member='.rawurlencode($referred_by).'">'.$referred_by.'</a>';
            }
            $referred_count = 0;
            $referred_list = $comma = '';
            $query = $db->query("SELECT username FROM $table_members WHERE referredby = '$memberinfo[uid]'");
            while($ref_mem = $db->fetch_array($query)) {
                $referred_list .= $comma.'<a href="member.php?action=viewpro&member='.rawurlencode($ref_mem['username']).'">'.$ref_mem['username'].'</a>';
                $referred_count++;
                $comma = ', ';
            }
            // Referral System End

============================================================================================================================
=======
Step 6.
=======
=================
Edit File: memcp.php
=================
==========
Find Code:
==========

        $dayselect = implode("\n", $dayselect);

===============
Add Code Below:
===============

        // Referral System Mod Begin
        $referral_box = '';
        if ($member['referredby'] == '' || $member['referredby'] == '0') {
            $referral_box = '<tr><td colspan="2" class="category"><font color="'.$THEME['cattext'].'"><strong>'.$lang['texteditpro'].' - '.$lang['ref_o04'].'</td></tr>';
            $referral_box .= '<tr><td bgcolor="'.$THEME['altbg1'].'" class="tablerow">'.$lang['ref_o02'].'</td>';
            $referral_box .= '<td bgcolor="'.$THEME['altbg2'].'" class="tablerow">';
            $referral_box .= '<select name="refer">';
            $referral_box .= '<option value="-1">' . $lang['ref_o01'] . '</option>';
            $referral_box .= '<option value="0" selected="selected"></option>';
        $query = $db->query("SELECT uid, username FROM $table_members WHERE uid != '".$self['uid']."' ORDER BY username");
        while($ref_mem = $db->fetch_array($query)) {
            $referral_box .= '<option value="'.$ref_mem['uid'].'">'.$ref_mem['username'].'</option>'; }
            $referral_box .= '</select>';
            $referral_box .= '</td></tr><tr><td bgcolor="'.$THEME['altbg2'].'" class="tablerow" colspan="2">'.$lang['ref_o03'].'</td></tr>';
        }
        // Referral System Mod End

==========
Find Code:
==========

        $newpassword = trim($newpassword);

===============
Add Code Above:
===============

        // Referral System Mod Begin
        $ref_sql = '';
        $refer = safeInt(fetchFromRequest('refer', X_POST));
        if ($refer != 0) {
            $ref_sql = " referredby='$refer',";
        }
        // Referral System Mod End

==========
Find Code:
==========

useoldu2u='$useoldu2u',

================
Replace Code With:
================

useoldu2u='$useoldu2u',$ref_sql

============================================================================================================================
=======
Step 7.
=======
=======================
Edit Template: member_coppa
=======================
==========
Find Code:
==========

<form method="post" action="member.php?action=reg">

===============
Add Code Below:
===============

$ref_addon

============================================================================================================================
=======
Step 8.
=======
=========================
Edit Template: member_reg_rules
=========================
==========
Find Code:
==========

<form method="post" action="member.php?action=reg">

===============
Add Code Below:
===============

$ref_addon

============================================================================================================================
=======
Step 9.
=======
=====================
Edit Template: member_reg
=====================
==========
Find Code:
==========

<tr>
<td colspan="2" class="ctrtablerow" bgcolor="$altbg2"><input type="submit" class="submit" name="regsubmit" value="$lang[textregister]" /></td>
</tr>

===============
Add Code Above:
===============

<tr>
<td colspan="2" class="header">$lang[textregister] - $lang[ref_o04]</td>
</tr>
<tr class="tablerow">
<td bgcolor="$altbg1">$lang[ref_o02]</td>
<td bgcolor="$altbg2" class="tablerow">$ref_addon</td>
</tr>
<tr class="tablerow"> <td bgcolor="$altbg2" colspan="2">$lang[ref_o03]</td>
</tr>

============================================================================================================================
========
Step 10.
========
=======================
Edit Template: memcp_profile
=======================
==========
Find Code:
==========

<tr>
<td align="center" class="tablerow" bgcolor="$altbg2" colspan="2"><input type="submit" class="submit" name="editsubmit" value="$lang[texteditpro]" /></td>
</tr>

===============
Add Code Above:
===============

$referral_box

============================================================================================================================
========
Step 11.
========
=======================
Edit Template: member_profile
=======================
==========
Find Code:
==========

<tr>
<td bgcolor="$altbg1" valign="top"
class="tablerow">$lang[textproflastpost]</td>
<td bgcolor="$altbg2" class="tablerow">$lastpost</td>
</tr>

===============
Add Code Below:
===============

<tr class="tablerow">
<td bgcolor="$altbg1" valign="top">$lang[ref_o02]</td>
<td bgcolor="$altbg2" class="tablerow">$referred_by</td>
</tr>

<tr class="tablerow">
<td bgcolor="$altbg1" valign="top">$lang[ref_o06]</td>
<td bgcolor="$altbg2" class="tablerow">$referred_count</td>
</tr>

<tr class="tablerow">
<td bgcolor="$altbg1" valign="top">$lang[ref_o05]</td>
<td bgcolor="$altbg2" class="tablerow">$referred_list</td>
</tr>

============================================================================================================================
==========================================
If you have the Shop v1.3 installed then do the steps below.
==========================================
========
Step 12.
========
==============
Edit File: cp.php
==============
==========
Find Code:
==========

                $db->query("DELETE FROM $table_members WHERE uid='$delete'");
                // Referral System Mod Begin
                $db->query("UPDATE $table_members SET referredby='-1' WHERE referredby='$delete'");
                // Referral System Mod End

================
Replace Code With:
================

                // Referral System Mod Begin
                $query = $db->query("SELECT mpr FROM $table_shop_settings");
                $mpr = $db->result($query, 0);
                $query = $db->query("SELECT referredby FROM $table_members WHERE uid='$delete'");
                $ref_del = $db->result($query, 0);
                if ($ref_del != '' && $ref_del > 0) {
                    $db->query("UPDATE $table_members SET money=money-'$mpr' WHERE uid='$ref_del'");
                } $db->query("UPDATE $table_members SET referredby='-1' WHERE referredby='$delete'");
                // Referral System Mod End
                $db->query("DELETE FROM $table_members WHERE uid='$delete'");

============================================================================================================================
========
Step 13.
========
=================
Edit File: member.php
=================
==========
Find Code:
==========

        // Referral System Mod Begin
        $refer = safeInt(fetchFromRequest('refer', X_POST));
        $db->query("UPDATE $table_members SET referredby='$refer' WHERE username='$username'");
        // Referral System Mod End

================
Replace Code With:
================

        // Referral System Mod Begin
        $refer = safeInt(fetchFromRequest('refer', X_POST));
        $db->query("UPDATE $table_members SET referredby='$refer' WHERE username='$username'");
        if ($refer > 0) {
            $query = $db->query("SELECT mpr FROM $table_shop_settings");
            $mpr = $db->result($query, 0); $db->query("UPDATE $table_members SET money=money+'$mpr' WHERE uid='$refer'");
        }
        // Referral System Mod End

============================================================================================================================
========
Step 14.
========
=================
Edit File: memcp.php
=================
==========
Find Code:
==========

        // Referral System Mod Begin
        $ref_sql = '';
        $refer = safeInt(fetchFromRequest('refer', X_POST));
        if ($refer != 0) {
            $ref_sql = " referredby='$refer',";
        }
        // Referral System Mod End

================
Replace Code With:
=================

        // Referral System Mod Begin
        $ref_sql = '';
        $refer = safeInt(fetchFromRequest('refer', X_POST));
        if ($refer != 0 && $self['referredby'] == 0) {
            $query = $db->query("SELECT mpr FROM $table_shop_settings");
            $mpr = $db->result($query, 0);
            $db->query("UPDATE $table_members SET money=money+'$mpr' WHERE uid='$refer'");
            $ref_sql = " referredby='$refer',";
        }
        // Referral System Mod End

============================================================================================================================
Enjoy!