<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://www.fustrate.com/dev/sources/Other/modification.xsl"?>
<!DOCTYPE modification SYSTEM "http://www.simplemachines.org/xml/modification">
<modification xmlns="http://www.simplemachines.org/xml/modification" xmlns:smf="http://www.simplemachines.org/">
	<name>Referrals Mod</name>
	<id>yodaofdarkness:referrals</id>
	<version>2.2.6</version>

	<file name="$boarddir/index.php">
		<operation>
			<search position="before"><![CDATA[
	// Load the current user's permissions.
	loadPermissions();]]></search>
			<add><![CDATA[

	// Referrals Mod - Check For Referrals
	if (isset($_GET['referredby']) || isset($_COOKIE['smf_referrals']))
		loadReferral();]]></add>
		</operation>
	</file>

	<file name="$sourcedir/Load.php">
		<operation>
			<search position="before"><![CDATA[
	if ($set == 'normal')
	{
		$select_columns = "]]></search>
			<add><![CDATA[
			mem.referrals_no, mem.referrals_hits, mem.referred_by, mem.referred_on,]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
	elseif ($set == 'profile')
	{
		$select_columns = "]]></search>
			<add><![CDATA[
			mem.referrals_no, mem.referrals_hits, mem.referred_on, mem.referred_by,]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
	elseif ($set == 'minimal')
	{
		$select_columns = ']]></search>
			<add><![CDATA[
			mem.referrals_no, mem.referrals_hits, mem.referred_by, mem.referred_on,]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
		'local_time' => timeformat(time() + ($profile['timeOffset'] - $user_info['time_offset']) * 3600, false),]]></search>
			<add><![CDATA[
		'referrals_no' => &$profile['referrals_no'],
		'referrals_hits' => &$profile['referrals_hits'],
		'referred_on' => &$profile['referred_on'],
		'referred_by' => &$profile['referred_by'],]]></add>
		</operation>

		<operation>
			<search position="end" />
			<add><![CDATA[
function loadReferral(){
	global $context, $db_prefix, $user_info;

	// Guests only!
	if (!$user_info['is_guest'])
		return;

	if (!empty($_GET['referredby'])){
		// Sanitize - must be a valid number id
		$referrer = (int) $_GET['referredby'];

		// If not a valid id, then just return
		if (empty($referrer)){
			setcookie("smf_referrals", "", time() - 90000);
			return;
		}

		$result = db_query("
			SELECT realName
			FROM {$db_prefix}members
			WHERE ID_MEMBER = {$referrer}", __FILE__, __LINE__);

		if (mysql_num_rows($result) < 1){
			setcookie("smf_referrals", "", time() - 90000);
			return;
		}

		list ($name) = mysql_fetch_row($result);

		mysql_free_result($result);

		// If Cookie doesn't already exist, count it as a referral hit
		if (empty($_COOKIE['smf_referrals'])){
			// Increase referral hits by 1 for the referrer
			updateMemberData($referrer, array('referrals_hits' => '+'));

			# @ Hidden Easter Eggs @
			# Use to give rewards for each referral hit
			# Uncomment the line by removing // from the beginning of the line

			# Reward with Karma
			// updateMemberData($referrer, array('karmaGood' => 'karmaGood + 25'));

			# Using SMF Shop? Give them money
			// updateMemberData($referrer, array('money' => 'money + 100'));
		}

		// Set a ReferralCookie (overriding any existing one to extend the 60 days)
		setcookie("smf_referrals", ($referrer . '#' . time()), (time() + (86400 * 60)));

		// $user_info seems to save better
		$user_info['was_referred'] = array(
			'referred_date' => timeformat(time()),
			'referred_by_id' => $referrer,
			'referred_timestamp' => time(),
			'referred_by_name' => $name
		);
	} else {
		// Must contain hash, and not be empty
		if (!eregi("([0-9]{1,8})#([0-9]{9,10})", $_COOKIE['smf_referrals'], $parts)){
			setcookie("smf_referrals", "", time() - 90000);
			return;
		}

		$result = db_query("
			SELECT realName
			FROM {$db_prefix}members
			WHERE ID_MEMBER = " . $parts[1], __FILE__, __LINE__);

		if (mysql_num_rows($result) < 1){
			setcookie("smf_referrals", "", time() - 90000);
			return;
		}

		list ($name) = mysql_fetch_row($result);

		mysql_free_result($result);

		// Set a cookie, extending any existing one
		setcookie("smf_referrals", $parts[0], (time() + (86400 * 60)));

		// $user_info seems to save better
		$user_info['was_referred'] = array(
			'referred_date' => timeformat($parts[2]),
			'referred_by_id' => $parts[1],
			'referred_timestamp' => $parts[2],
			'referred_by_name' => $name
		);
	}
}]]></add>
		</operation>
	</file>

	<file name="$sourcedir/Profile.php">
		<operation>
			<search position="after"><![CDATA[
	// Set the age...]]></search>
			<add><![CDATA[
	// Cast the referred by
	$context['member']['referred_by'] = empty($context['member']['referred_by']) ? 0 : (int) $context['member']['referred_by'] ;

	// Query to get the real name of the referring user
	if (!empty($context['member']['referred_by'])){
		$request = db_query("
			SELECT realName
			FROM {$db_prefix}members
			WHERE ID_MEMBER = " . $context['member']['referred_by'] . "
			LIMIT 1", __FILE__, __LINE__);

		if (mysql_num_rows($request) > 0){
			list ($realname) = mysql_fetch_row($request);
			$context['member']['referred_by_link'] = '<a href="' . $scripturl . '?action=profile;u=' . $context['member']['referred_by'] . '">' . $realname . '</a>';
		}

		mysql_free_result($request);
	}

	// Get the data of which members this user has referred
	if (!empty($context['member']['referrals_no'])){
		$request = db_query("
			SELECT realName, ID_MEMBER
			FROM {$db_prefix}members
			WHERE referred_by = " . $context['member']['id'], __FILE__, __LINE__);

		if (mysql_num_rows($request) > 0){
			$context['member']['referred_members'] = array();

			while($row = mysql_fetch_assoc($request))
				$context['member']['referred_members'][] = '<option value="' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '">' . $row['realName'] . '</option>';
		}

		mysql_free_result($request);
	}
]]></add>
		</operation>
	</file>

	<file name="$sourcedir/Register.php">
		<operation>
			<search position="replace"><![CDATA[
	$memberID = registerMember($regOptions);]]></search>
			<add><![CDATA[
	// Referrals Mod - If they emptied it, don't do referral information
	if (!empty($_POST['referredby'])){
		// If there was a referrer, is it the same one
		if (!empty($user_info['was_referred']) && strtolower($_POST['referredby']) == strtolower($user_info['was_referred']['referred_by_name'])){
			$regOptions['extra_register_vars']['referred_by'] = (int) $user_info['was_referred']['referred_by_id'];
			$regOptions['extra_register_vars']['referred_on'] = (int) $user_info['was_referred']['referred_timestamp'];
			$referrer = $user_info['was_referred']['referred_by_id'];
		} else {
			// No, they changed it, so we've got to find this user
			$result = db_query("
				SELECT ID_MEMBER
				FROM {$db_prefix}members
				WHERE realName = '" . addslashes($_POST['referredby']) . "'
				LIMIT 1", __FILE__, __LINE__);

			if (mysql_num_rows($result) > 0){
				list ($referrer) = mysql_fetch_row($result);

				mysql_free_result($result);

				$regOptions['extra_register_vars']['referred_by'] = $referrer;
				$regOptions['extra_register_vars']['referred_on'] = time();
			} else {
				mysql_free_result($result);
				fatal_lang_error('referrals_referrer_not_found', false);
			}
		}
	}

	$memberID = registerMember($regOptions);

	// Referrals Mod - Continue, now that they have successfully registered
	if (!empty($regOptions['extra_register_vars']['referred_by'])){
		setcookie("smf_referrals", "", time() - 90000);

		// Credit the referral to the user
		updateMemberData($referrer, array('referrals_no' => '+'));
		trackStats(array('referrals' => '+'));

		# @ Hidden Easter Eggs @
		# Use to give rewards for each referral
		# Uncomment the line by removing // from the beginning of the line

		# Reward with Karma
		// updateMemberData($referrer, array('karmaGood' => 'karmaGood + 25'));

		# Using SMF Shop?  Give them money
		// updateMemberData($referrer, array('money' => 'money + 100'));
	}]]></add>
		</operation>
	</file>

	<file name="$sourcedir/Stats.php">
		<operation>
			<search position="before"><![CDATA[
	foreach ($context['top_boards'] as $i => $board)
		$context['top_boards'][$i]['post_percent'] = round(($board['num_posts'] * 100) / $max_num_posts);]]></search>
			<add><![CDATA[

	// Top 5 Referrals (By Referrals)
	$result = db_query("
		SELECT referrals_no, realName, ID_MEMBER
		FROM {$db_prefix}members
		WHERE referrals_no > 0
		ORDER BY referrals_no DESC
		LIMIT 5", __FILE__, __LINE__);

	$context['total_referrals'] = 0;

	if (mysql_num_rows($result) != 0){
		while ($row = mysql_fetch_assoc($result)) {
			$context['top_referrers'][] = array(
				'referrals_no' => $row['referrals_no'],
				'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '">' . $row['realName'] . '</a>'
			);

			$context['total_referrals'] += $row['referrals_no'];
		}

		mysql_free_result($result);

		// Now work out the sizes of the bars
		foreach ($context['top_referrers'] as $i => $x)
			$context['top_referrers'][$i]['referrals_percent'] =  round(($context['top_referrers'][$i]['referrals_no'] * 100) / $context['total_referrals']);
	}

	// Top 5 Referrers (By Posts Made By Referred Members)
	$result = db_query("
		SELECT m.posts, SUM(m.posts) as totalposts, m.referred_by, r.realName, r.ID_MEMBER
		FROM {$db_prefix}members as m, {$db_prefix}members as r
		WHERE m.referred_by = r.ID_MEMBER
			AND IFNULL(m.referred_by, 0) != 0
		GROUP BY m.referred_by
		ORDER BY totalposts DESC
		LIMIT 5", __FILE__, __LINE__);

	$context['total_referrals_posts'] = 0;

	if (mysql_num_rows($result) > 0){
		while ($row = mysql_fetch_assoc($result)){
			$context['top_referrers_by_posts'][] = array(
				'posts' => $row['totalposts'],
				'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '">' . $row['realName'] . '</a>'
			);

			$context['total_referrals_posts'] += $row['totalposts'];
		}

		mysql_free_result($result);

		// Now work out the sizes of the bars
		if ($context['total_referrals_posts'] > 0)
			foreach ($context['top_referrers_by_posts'] as $i => $x)
				$context['top_referrers_by_posts'][$i]['referralsposts_percent'] =  round(($context['top_referrers_by_posts'][$i]['posts'] * 100) / $context['total_referrals_posts']);
	}
]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[MAX(mostOn) AS mostOn, COUNT(*) AS numDays]]></search>
			<add><![CDATA[, SUM(referrals) AS referrals]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
			'hits' => $row_months['hits'],]]></search>
			<add><![CDATA[
			'referrals' => $row_months['referrals'],]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[registers, mostOn]]></search>
			<add><![CDATA[, referrals]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
			'new_members' => $row_days['registers'],]]></search>
			<add><![CDATA[
			'referrals' => $row_days['referrals'],]]></add>
		</operation>
	</file>

	<file name="$themedir/Display.template.php">
		<operation>
			<search position="before"><![CDATA[
			// Show how many posts they have made.
			echo '
								', $txt[26], ': ', $message['member']['posts'], '<br />]]></search>
			<add><![CDATA[
								', $txt['referrals_referrals'], ' ', $message['member']['referrals_no'], '<br />]]></add>
		</operation>
	</file>

	<file name="$themedir/Profile.template.php">
		<operation>
			<search position="after"><![CDATA[
	// Messenger type information.]]></search>
			<add><![CDATA[
	// Adds the referral/referred user information to the profile summary
	echo '
				<tr>
					<td colspan="2"><hr size="1" width="100%" class="hrcolor" /></td>
				</tr>
				<tr>
					<td><b>', $txt['referrals_referrals'], '</b></td>
					<td>', $context['member']['referrals_no'];

	// Show in dropdown of those referred
	if (!empty($context['member']['referred_members'])){
		echo '  <select onchange="location=options[selectedIndex].value;">
							<option>', $txt['referrals_membersreferred'], '</option>';

		foreach($context['member']['referred_members'] as $referred)
			echo '
							', $referred;

		echo '
						</select>';
	}

		echo '
					</td>
				</tr>
				<tr>
					<td><b>', $txt['referrals_referrals_hits'], '</b></td>
					<td>', $context['member']['referrals_hits'], '</td>
				</tr>';

		if (!empty($context['member']['referred_by']))
			echo'
				<tr>
					<td><b>', $txt['referrals_referred_by'], '</b></td>
					<td>', $context['member']['referred_by_link'], ' ', $txt['referrals_on'], ' ', date("jS M Y",$context['member']['referred_on']), '</td>
				</tr>';

		echo '
				<tr>
					<td colspan="2"><b>', $txt['referrals_link'], '</b></td>
				</tr>
				<tr>
					<td colspan="2" style="text-align: center;">
						<input type="text" id="referral_link" value="', $scripturl, '?referredby=', $context['member']['id'], '" readonly="true" style="width:250px;" />
					</td>
				</tr>';]]></add>
		</operation>
	</file>

	<file name="$themedir/Register.template.php">
		<operation>
			<search position="before"><![CDATA[
function template_before()
{
	global $context, $settings, $options, $scripturl, $txt, $modSettings]]></search>
			<add><![CDATA[, $user_info]]></add>
		</operation>

		<operation>
			<search position="after"><![CDATA[
	// Are there age restrictions in place?]]></search>
			<add><![CDATA[
	echo '
				<tr>
					<td width="40%">
						<b>', $txt['referrals_who'], '</b>
						<div class="smalltext">', $txt['referrals_who_description'], '</div>
					</td>
					<td>
						<input name="referredby" id="referredby" type="text" size="30" value="', ( !empty($user_info['was_referred']['referred_by_name']) ? $user_info['was_referred']['referred_by_name'] : '' ), '" />
						<a href="', $scripturl, '?action=findmember;input=referredby;sesc=', $context['session_id'], '" onclick="document.getElementById(\'referredby\').value=\'\';document.getElementById(\'referredon\').innerHTML =\'&nbsp;\';return reqWin(this.href, 350, 400);"><img src="', $settings['images_url'], '/icons/assist.gif" border="0" alt="', $txt['referrals_findreferrer'] ,'" /> ', $txt['referrals_findreferrer'], '</a><br />
						<span id="referredon" class="smalltext">', ( !empty($user_info['was_referred']['referred_date']) ? $txt['referrals_on'] . ' ' . $user_info['was_referred']['referred_date'] : '' ), '</span>
					</td>
				</tr>';]]></add>
		</operation>
	</file>

	<file name="$themedir/Stats.template.php">
		<operation>
			<search position="before"><![CDATA[
	foreach ($context['top_boards'] as $board)
		echo '
						<tr>
							<td width="60%" valign="top">', $board['link'], '</td>
							<td width="20%" align="left" valign="top">', $board['num_posts'] > 0 ? '<img src="' . $settings['images_url'] . '/bar.gif" width="' . $board['post_percent'] . '" height="15" alt="" />' : '&nbsp;', '</td>
							<td width="20%" align="right" valign="top">', $board['num_posts'], '</td>
						</tr>';]]></search>
			<add><![CDATA[
	// Start of Referrals Mod Stats
	echo '
					</table>
				</td>
			</tr><tr>
				<td class="catbg" colspan="2" width="50%"><b>', $txt['referrals_top5referrers'], '</b></td>
				<td class="catbg" colspan="2" width="50%"><b>', $txt['referrals_top5referrersbyposts'], '</b></td>
			</tr><tr>
				<td class="windowbg" width="20" valign="middle" align="center"><img src="', $settings['images_url'], '/stats_info.gif" width="20" height="20" alt="" /></td>
				<td class="windowbg2" width="50%" valign="top">
					<table border="0" cellpadding="1" cellspacing="0" width="100%">';

	if (empty($context['total_referrals']))
		echo '
						<tr>
							<td valign="top" style="text-align:center">', $txt['referrals_noneyet'], '</td>
						</tr>';
	else
		foreach ($context['top_referrers'] as $referrer)
			echo '
						<tr>
							<td width="60%" valign="top">', $referrer['link'], '</td>
							<td width="20%" align="left" valign="top">', $referrer['referrals_no'] > 0 ? '<img src="' . $settings['images_url'] . '/bar.gif" width="' . $referrer['referrals_percent'] . '" height="15" alt="" />' : '&nbsp;', '</td>
							<td width="20%" align="right" valign="top">', $referrer['referrals_no'], '</td>
						</tr>';

	echo '
					</table>
				</td>
				<td class="windowbg" width="20" valign="middle" align="center"><img src="', $settings['images_url'], '/stats_info.gif" width="20" height="20" alt="" /></td>
				<td class="windowbg2" width="50%" valign="top">
					<table border="0" cellpadding="1" cellspacing="0" width="100%">';

	if (empty($context['total_referrals_posts']))
		echo '
						<tr>
							<td valign="top" style="text-align:center">', $txt['referrals_noneyet'], '</td>
						</tr>';
	else
		foreach ($context['top_referrers_by_posts'] as $referrer)
			echo '
						<tr>
							<td width="60%" valign="top">', $referrer['link'], '</td>
							<td width="20%" align="left" valign="top">', $referrer['posts'] > 0 ? '<img src="' . $settings['images_url'] . '/bar.gif" width="' . $referrer['referralsposts_percent'] . '" height="15" alt="" />' : '&nbsp;', '</td>
							<td width="20%" align="right" valign="top">', $referrer['posts'], '</td>
						</tr>';]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
							<td width="15%">', $txt['smf_stats_7'], '</td>
							<td width="15%">', $txt['smf_stats_8'], '</td>
							<td width="15%">', $txt['smf_stats_9'], '</td>
							<td width="15%">', $txt['smf_stats_14'], '</td>]]></search>
			<add><![CDATA[
							<td width="10%">', $txt['referrals_referralsstats'], '</td>]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
							<th align="center" width="15%">', $month['new_topics'], '</th>
							<th align="center" width="15%">', $month['new_posts'], '</th>
							<th align="center" width="15%">', $month['new_members'], '</th>
							<th align="center" width="15%">', $month['most_members_online'], '</th>]]></search>
			<add><![CDATA[
							<th align="center" width="10%">', $month['referrals'], '</th>]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
							<td align="center">', $day['most_members_online'], '</td>]]></search>
			<add><![CDATA[
							<td align="center">', $day['referrals'], '</td>]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
				var dataCells = [
					"date",
					"new_topics",
					"new_posts",
					"new_members",
					"most_members_online"]]></search>
			<add><![CDATA[,
					"referrals"]]></add>
		</operation>

		<operation>
			<search position="replace"><![CDATA[dataCells[5] = "hits";]]></search>
			<add><![CDATA[dataCells[6] = "hits";]]></add>
		</operation>
	</file>

	<file name="$themedir/Xml.template.php">
		<operation>
			<search position="replace"><![CDATA[
		<day date="', $day['year'], '-', $day['month'], '-', $day['day'], '" new_topics="', $day['new_topics'], '" new_posts="', $day['new_posts'], '" new_members="', $day['new_members'], '" most_members_online="', $day['most_members_online'], '"', empty($modSettings['hitStats']) ? '' : ' hits="' . $day['hits'] . '"', ' />';]]></search>
			<add><![CDATA[
		<day date="', $day['year'], '-', $day['month'], '-', $day['day'], '" new_topics="', $day['new_topics'], '" new_posts="', $day['new_posts'], '" new_members="', $day['new_members'], '" most_members_online="', $day['most_members_online'], '" referrals="', $day['referrals'], '"', empty($modSettings['hitStats']) ? '' : ' hits="' . $day['hits'] . '"', ' />';]]></add>
		</operation>
	</file>
</modification>