YaBB Referral System 1.1a 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 :) MADD Hatter http://www.ghostcdr.com english.lng 1; keys(%reftxt) = 16; $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 ($action eq 'notify4') { require "$sourcedir/Notify.pl"; &Notify4; } elsif ($action eq 'namelist') { require "$sourcedir/Profile.pl"; &NameList; } elsif ($action eq 'rebuildmemlist') { require "$sourcedir/Admin.pl"; &RebuildMemList; } elsif ($action eq 'reflist') { require "$sourcedir/Memberlist.pl"; &reflist; } Sources/Register.pl &header; if($enable_refers eq "0") { $INFO{'refid'} = ""; } unless( $emailpassword ) { if($enable_showrefer) { print <<"EOT"; * $reftxt{'02'} EOT } 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] EOT ## 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)) { print<<"EOT"; $reftxt{'02'} $referredby $reftxt{'03'} $number $reftxt{'04'} $reftxt{'05'} $reftxt{'12'} $reftxt{'12'} EOT } ## END REFER HACK ## print<<"EOT"; 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'}"; } &header; print <<"EOT";
$reftxt{'07'}

$namelist


EOT &footer; 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'}"; &header; $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; print $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'}"; } print qq( ); if ($member[19] eq "checked" && $settings[7] ne "Administrator" && $allow_hide_email eq 1) { print qq( ); } else { print qq( ); } print qq( ); } } print qq~$TableFooter~; &footer; exit; } Sources/Admin.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'}