YaBB Referral System - SP1 2.0 Original Author: MaDD Hatter Original Author's URL: http://www.ghostcdr.com *** Original Description *** This hack allows you to keep track of how many people each member of your forums refers, who they referred, and who they were referred by. It also creates a memberlist option so you can view a list of the top referrers on your board and how many referrals they've made. To give a referral, the user gives the new registrant the url http://www.yoursite.comYaBB.pl?action=register&refid=username replacing 'username' with their username. You MUST enable referrals in the Forums Preferences before it will become active. Thanks to DaveB for all his help and LukeA for the testing :) *** SP1 Modifications *** Rewritten for SP1. No major changes. Use the following URL syntax to make a referral: http://www.yoursite.com/cgi-bin/YaBB.pl/?action=register&refid=your-user-id-here As before, you must enable this feature in Forums Preferences and Settings before it can be used. Big thanks to throesch and chrishartmann for helping with the conversion of this mod! *** Installation: *** Apply Mod Copy the 6 modified files to your site Activate, and send the url to your referrals Zone http://www.pcandnetworking.com english.lng 1; $reftxt{'01'} = "(Not Referred)"; $reftxt{'02'} = "Referred By: "; $reftxt{'03'} = "Number of Refers: "; $reftxt{'04'} = "Names of Refers: "; $reftxt{'05'} = "Who have they referred?"; $reftxt{'06'} = "This person has not referred anyone."; $reftxt{'07'} = "Refer List"; $reftxt{'08'} = "Referrals"; $reftxt{'09'} = "Enable Referring?"; $reftxt{'10'} = "Allow members and guests to view others' referring details?"; $reftxt{'11'} = "Who have they referred?"; $reftxt{'12'} = "Top Referrers"; $reftxt{'13'} = "View list of top referrers."; $reftxt{'14'} = "Top Referrers"; $reftxt{'15'} = "You are not authorized to view this page."; $reftxt{'16'} = "Show 'Referred By:' box on register page?"; YaBB.pl elsif( $fastfind eq 'n' ) { if ($action eq 'notify') { require "$sourcedir/Notify.pl"; &Notify; } elsif ($action eq 'namelist') { require "$sourcedir/Profile.pl"; &NameList; } elsif( $fastfind eq 'r' ) { if ($action eq 'register') { require "$sourcedir/Register.pl"; &Register; } elsif ($action eq 'reflist') { require "$sourcedir/Memberlist.pl"; &reflist; } Sources/Register.pl $yymain .= qq~ if($enable_refers eq "0") { $INFO{'refid'} = ""; } unless( $emailpassword ) { if($enable_showrefer) { $yymain .= qq~ * $reftxt{'02'} ~; } fopen(FILE, ">$memberdir/memberlist.txt", 1); ## REFER HACK ## if($member{'refer'} = 0) { $member{'refer'} = "(not referred)"; } fopen(FILE, ">$memberdir/$member{'username'}.ref"); print FILE "$FORM{'refer'}\n"; fclose(FILE); if(($enable_refers) && ($FORM{'refer'}) && (-e "$memberdir/$FORM{'refer'}.dat")) { if (-e "$memberdir/$FORM{'refer'}.ref") { fopen(FILE, ">>$memberdir/$FORM{'refer'}.ref"); print FILE "$FORM{'username'}\n"; fclose(FILE); } else { fopen(FILE, ">$memberdir/$FORM{'refer'}.ref"); print FILE "(not referred)\n"; print FILE "$FORM{'username'}\n"; fclose(FILE); } } ## REFER HACK ## $member{'username'} =~ s/\s/_/g; $FORM{'refer'} =~ s/\s/_/g; Sources/Profile.pl sub ViewProfile { if (-e "$memberdir/$INFO{'username'}.ref") { fopen(FILE, "$memberdir/$INFO{'username'}.ref"); @names=; $numbercount = @names; fclose(FILE); } if($names[0] eq "0") {$names[0] eq "(not referred)"} $number = $numbercount - 1; if ($number < 0) { $number = 0; } $txt{'227'}: $memsettings[15] ~; ## REFER HACK ## if(-e "$memberdir/$INFO{'username'}.ref") { fopen(FILE, "$memberdir/$INFO{'username'}.ref"); @referred = ; fclose(FILE); $referredby = $referred[0]; } else { $referredby = "(not referred)"; } if (($enable_memrefers) || ($settings[7] eq 'Administrator') && ($enable_refers)) { $yymain .= qq~ $reftxt{'02'} $referredby $reftxt{'03'} $number $reftxt{'04'} $reftxt{'05'} $reftxt{'12'} $reftxt{'12'} ~; } ## END REFER HACK ## $yymain .= qq~ 1; sub NameList { if (-e "$memberdir/$INFO{'username'}.ref") { fopen(FILE, "$memberdir/$INFO{'username'}.ref"); @names=; $number = @names; fclose(FILE); for ($i = 1; $i < @names; $i++) { $namelist .= "$names[$i]
"; $namelist .= "
"; } } $name1 = $names[0]; if($namelist eq "") { $namelist = "$reftxt{'06'}"; } $yymain .= qq~
$reftxt{'07'}

$namelist


~; &template; exit; }
Sources/Memberlist.pl 1; sub reflist { if($username eq "Guest") { &fatal_error("$txt{'223'}"); } unless(($enable_memrefers) || ($settings[7] eq 'Administrator')) {&fatal_error("$reftxt{'15'}"); } $yytitle = "$txt{'313'} $TopAmmount $reftxt{'14'}"; $TableHeader2 .= qq~ ~; if($LetterLinks ne "") { $TableHeader2 .= qq~ ~; } $TableHeader2 .= qq~ ~; %TopMembers = (); fopen(MEMBERLISTREAD,"$memberdir/memberlist.txt"); @member = (); while(chomp($membername=)) { fopen(MEMBERFILE,"$memberdir/$membername.dat"); @member = ; fclose(MEMBERFILE); fopen(FILE,"$memberdir/$membername.ref"); @names = ; $number = @names; fclose(FILE); chomp @member; $TopMembers{$membername} = $number; } fclose(MEMBERLISTREAD); my @toplist = sort {$TopMembers{$a} <=> $TopMembers{$b}} keys %TopMembers; @toplist = reverse @toplist; $TopListNum = $TopAmmount - 1; $yymain .=qq~$TableHeader2~; # foreach $membername(@toplist) { for ($i=0;$i<=$TopListNum;$i++) { @member = (); $Bar = ""; $ICQ = ""; $membername = @toplist[$i]; fopen(MEMBERFILEREAD,"$memberdir/$membername.dat"); @member = ; fclose(MEMBERFILEREAD); fopen(FILE,"$memberdir/$membername.ref"); @names = ; $number = @names; fclose(FILE); $numbercount = $number - 1; if ($numbercount < 0) { $numbercount = 0; } &FormatUserName($membername); chomp @member; if($member[1] ne "") { $barchart = ($member[6] / 5); if ($barchart < 1) {$Bar = "$Bar";} elsif ($barchart > 100) {$Bar = qq~~;} else { $Bar = qq~~; } $member[8] =~ s/[\n\r]//g; if($member[8] ne "") { $ICQ = qq~$member[8]~; } if ($Bar eq "") { $Bar=" "; } if($member[6] > 100000) { $member[6] = "$txt{'683'}"; } $yymain .= qq~ ~; if ($member[19] eq "checked" && $settings[7] ne "Administrator" && $allow_hide_email eq 1) { $yymain .= qq~ ~; } else { $yymain .= qq~ ~; } $yymain .= qq~ ~; } } $yymain .= qq~$TableFooter~; &template; exit; } Sources/AdminEdit.pl my($snfchecked, $fls1, $fls2, $fls3, $utfchecked, $truncchecked, $mts1, $mts2, $mts3, $tsl6, $tsl5, $tsl4, $tsl3, $tsl2, $tsl1); my($referchecked, $memreferchecked, $showreferchecked); if ($enable_ubbc) { $ubbcchecked = ' checked'; } if ($enable_refers) {$referchecked = ' checked';} if ($enable_memrefers) {$memreferchecked = ' checked';} if ($enable_showrefer) {$showreferchecked = ' checked';} \$enable_ubbc = $enable_ubbc; # Set to 1 if you want to enable UBBC (Uniform Bulletin Board Code) \$enable_refers = $enable_refers; # Set to 1 if you want to enable referring \$enable_memrefers = $enable_memrefers; # Set to 1 if you want to allow members to view other members referring details \$enable_showrefer = $enable_showrefer; # Set to 1 if you want to show the "Referred By:" section on the register page # If empty fields are submitted, set them to default-values to save yabb from crashing $enable_refers = $FORM{'enable_refers'} || 0; $enable_memrefers = $FORM{'enable_memrefers'} || 0; # Set as 0 or 1 if box was checked or not push(@onoff, "enable_refers"); push(@onoff, "enable_memrefers"); push(@onoff, "enable_showrefer");
$Sort
$LetterLinks
$txt{'35'} $txt{'307'} $txt{'96'} $txt{'86'} $reftxt{'08'} $txt{'87'} $txt{'513'} $txt{'21'}
$member[1]$txt{'722'}$member[2]$member[3]  $member[6]  $numbercount $member[7]  $ICQ  $Bar
$txt{'521'}
$reftxt{'09'}
$reftxt{'10'}
$reftxt{'16'}