<?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.referred_by, mem.referred_on, mem.referrals_hits,]]></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.referred_by, mem.referrals_hits, mem.referred_on,]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
		'local_time' => timeformat(time() + ($profile['time_offset'] - $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 $smcFunc, $context, $user_info;

	// Guests only!
	if (!$user_info['is_guest'])
		return;

	if (isset($_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 = $smcFunc['db_query']('', '
			SELECT real_name
			FROM {db_prefix}members
			WHERE id_member = {int:ref}',
			array(
				'ref' => $referrer
			)
		);

		if ($smcFunc['db_num_rows']($result) < 1){
			$smcFunc['db_free_result']($result);
			setcookie("smf_referrals", "", time() - 90000);
			return;
		}

		list ($name) = $smcFunc['db_fetch_row']($result);

		$smcFunc['db_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('karma_good' => 'karma_good + 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 has more staying power at this point
		$user_info['was_referred'] = array(
			'referred_timestamp' => time(),
			'referred_date' => timeformat(time()),
			'referred_by_id' => $referrer,
			'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;
		}

		// Set a cookie, extending any existing one
		setcookie("smf_referrals", $parts[0], (time() + (86400 * 60)));

		$result = $smcFunc['db_query']('', '
			SELECT real_name
			FROM {db_prefix}members
			WHERE id_member = {int:ref}',
			array(
				'ref' => $parts[1]
			)
		);

		if ($smcFunc['db_num_rows']($result) < 1){
			$smcFunc['db_free_result']($result);
			setcookie("smf_referrals", "", time() - 90000);
			return;
		}

		list ($name) = $smcFunc['db_fetch_row']($result);

		$smcFunc['db_free_result']($result);

		// $user_info has more staying power at this point
		$user_info['was_referred'] = array(
			'referred_timestamp' => $parts[2],
			'referred_date' => timeformat($parts[2]),
			'referred_by_id' => $parts[1],
			'referred_by_name' => $name,
		);
	}
}]]></add>
		</operation>
	</file>

	<file name="$sourcedir/Profile-View.php">
		<operation>
			<search position="after"><![CDATA[
	// Set the age...
	if (empty($context['member']['birth_date']))]]></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 = $smcFunc['db_query']('', '
			SELECT real_name
			FROM {db_prefix}members
			WHERE id_member = {int:ref_by}
			LIMIT 1',
			array(
				'ref_by' => $context['member']['referred_by']
			)
		);

		if ($smcFunc['db_num_rows']($request) != 0){
			list ($realname) = $smcFunc['db_fetch_row']($request);
			$context['member']['referred_by_link'] = '<a href="' . $scripturl . '?action=profile;u=' . $context['member']['referred_by'] . '">' . $realname . '</a>';
		}

		$smcFunc['db_free_result']($request);
	}

	// Get the data of which members this user has referred
	if (!empty($context['member']['referrals_no'])){
		$request = $smcFunc['db_query']('', '
			SELECT real_name, id_member
			FROM {db_prefix}members
			WHERE referred_by = {int:ref_by}',
			array(
				'ref_by' => $context['member']['id']
			)
		);

		if ($smcFunc['db_num_rows']($request) != 0){
			// Store in array preset as an <option> to be put straight in a dropdown box
			$context['member']['referred_members'] = array();
			while($row = $smcFunc['db_fetch_assoc']($request)) {
				$context['member']['referred_members'][] = '<option value="'.$scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</option>';
			}
		}

		$smcFunc['db_free_result']($request);
	}

]]></add>
		</operation>
	</file>

	<file name="$sourcedir/Register.php">
		<operation>
			<search position="replace"><![CDATA[
	$memberID = registerMember($regOptions, true);]]></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'] = $user_info['was_referred']['referred_by_id'];
			$regOptions['extra_register_vars']['referred_on'] = $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

			$request = $smcFunc['db_query']('', '

				SELECT id_member

				FROM {db_prefix}members

				WHERE real_name = {string:ref}

				LIMIT 1',

				array(
					'ref' => $_POST['referredby'],
				)

			);



			if ($smcFunc['db_num_rows']($request) > 0){

				list($referrer) = $smcFunc['db_fetch_row']($request);

				$regOptions['extra_register_vars']['referred_by'] = $referrer;
				$regOptions['extra_register_vars']['referred_on'] = time();
			} else
				fatal_lang_error('referrals_referrer_not_found', false);

			$smcFunc['db_free_result']($request);
		}
	}

	$memberID = registerMember($regOptions, true);

	// 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('karma_good' => 'karma_good + 25'));

		# Using SMF Shop?  Give them money
		// updateMemberData($referrer, array('money' => 'money + 100'));
	}]]></add>
		</operation>
	</file>

	<file name="$sourcedir/Subs.php">
		<operation>
			<search position="replace"><![CDATA[
		'notify_announcements', 'notify_send_body', 'notify_regularity', 'notify_types',]]></search>
			<add><![CDATA[
		'notify_announcements', 'notify_send_body', 'notify_regularity', 'notify_types',
		'referrals_no', 'referrals_hits',]]></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);
		$context['top_boards'][$i]['num_posts'] = comma_format($context['top_boards'][$i]['num_posts']);
	}]]></search>
			<add><![CDATA[

	// Top 5 Referrals (by referrals)
	$result = $smcFunc['db_query']('', '
		SELECT referrals_no, real_name, id_member
		FROM {db_prefix}members
		WHERE referrals_no > 0
		ORDER BY referrals_no DESC
		LIMIT 5',
		array()
	);

	$context['total_referrals'] = 0;

	if ($smcFunc['db_num_rows']($result) != 0){
		while ($row = $smcFunc['db_fetch_assoc']($result)) {
			$context['top_referrers'][] = array(
				'referrals_no' => $row['referrals_no'],
				'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>'
			);

			$context['total_referrals'] += $row['referrals_no'];
		}

		$smcFunc['db_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 referred members' posts)
	$result = $smcFunc['db_query']('', '
		SELECT m.posts, SUM(m.posts) as totalposts, m.referred_by, r.real_name, 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',
		array()
	);

	$context['total_referrals_posts'] = 0;

	if ($smcFunc['db_num_rows']($result) != 0){
		while($row = $smcFunc['db_fetch_assoc']($result)){
			$context['top_referrers_by_posts'][] = array(
				'posts' => $row['totalposts'],
				'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>'
			);

			$context['total_referrals_posts'] += $row['totalposts'];
		}

		$smcFunc['db_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]['referrals_posts_percent'] =  round(($context['top_referrers_by_posts'][$i]['posts'] * 100) / $context['total_referrals_posts']);
	}
]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[MAX(most_on) AS most_on, COUNT(*) AS num_days]]></search>
			<add><![CDATA[, SUM(referrals) AS referrals]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
			'hits' => comma_format($row_months['hits']),]]></search>
			<add><![CDATA[
			'referrals' => comma_format($row_months['referrals']),]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[registers, most_on]]></search>
			<add><![CDATA[, referrals]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
			'new_members' => comma_format($row_days['registers']),]]></search>
			<add><![CDATA[
			'referrals' => comma_format($row_days['referrals']),]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
		$context['yearly'][$year]['new_members'] = comma_format($data['new_members']);]]></search>
			<add><![CDATA[
		$context['yearly'][$year]['referrals'] = comma_format($data['referrals']);]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
		$context['yearly'][$row_months['stats_year']]['hits'] += $row_months['hits'];]]></search>
			<add><![CDATA[
		$context['yearly'][$row_months['stats_year']]['referrals'] += $row_months['referrals'];]]></add>
		</operation>

		<operation>
			<search position="before"><![CDATA[
				'num_months' => 0,]]></search>
			<add><![CDATA[
				'referrals' => 0,]]></add>
		</operation>
	</file>

	<file name="$themedir/Display.template.php">
		<operation>
			<search position="after"><![CDATA[
			// Any custom fields?]]></search>
			<add><![CDATA[
			// Show the number of referrals
			if (!isset($context['disabled_fields']['referrals']))
				echo '
							<li>', $txt['referrals_referrals'], ' ', $message['member']['referrals_no'], '</li>';]]></add>
		</operation>
	</file>

	<file name="$themedir/Profile.template.php">
		<operation>
			<search position="after"><![CDATA[
	// Are there any custom profile fields for the summary?]]></search>
			<add><![CDATA[
	// Add the referral/referred user information to the profile summary
	echo '
				<dt>', $txt['referrals_referrals'], '</dt>
				<dd>
					', $context['member']['referrals_no'], '  ';

	// Show in dropdown username 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 '
				</dd>
				<dt>', $txt['referrals_referrals_hits'], '</dd>
				<dd>', $context['member']['referrals_hits'], '</dd>';

	if (!empty($context['member']['referred_by'])){
		echo'
				<dt>', $txt['referrals_referred_by'], '</dt>
				<dd>', $context['member']['referred_by_link'], ' ', $txt['referrals_on'], ' ', timeformat($context['member']['referred_on']), '</dd>';
	}

	// Remove the # on the next line to make the link appear for the profile's owner ONLY!
	# if ($context['user']['id'] == $context['member']['id'])
	echo '
				<dt>', $txt['referrals_link'], '</dt>
				<dd>
					<input type="text" id="referral_link" value="', $scripturl, '?referredby=', $context['member']['id'], '" readonly="true" style="width:250px;" />
					<a href="javascript:void(0);" rel="nofollow" onclick="return smfSelectText("referrallink", true);" title="', $txt['code_select'], '">', $txt['code_select'], '</a>
				</dd>';
]]></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;', $context['session_var'], '=', $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['referrals_posts_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['stats_new_topics'], '</td>
							<td width="15%">', $txt['stats_new_posts'], '</td>
							<td width="15%">', $txt['stats_new_members'], '</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%">', $year['new_topics'], '</th>
							<th align="center" width="15%">', $year['new_posts'], '</th>
							<th align="center" width="15%">', $year['new_members'], '</th>
							<th align="center" width="15%">', $year['most_members_online'], '</th>]]></search>
			<add><![CDATA[
							<th align="center" width="10%">', $year['referrals'], '</th>]]></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>
	</file>

	<file name="$themedir/Xml.template.php">
		<operation>
			<search position="before"><![CDATA[ most_members_online="', $day['most_members_online'], '"]]></search>
			<add><![CDATA[ referrals="', $day['referrals'], '"]]></add>
		</operation>
	</file>
</modification>

