#!/usr/bin/perl

# ULTIMATE AFFILIATE - SQL EDITION
# VERSION: 2.0

# AUTHOR: Steve Miles
# COMPANY: Groundbreak.com
# CONTACT: smiles@groundbreak.com

# SCRIPT NAME: clickthru.cgi
# FUNCTION: Process the affiliate clicks

# (c) 1998-present Groundbreak.com
# This is not freeware or open source code.
# Please visit http://www.groundbreak.com to view the
# software license agreement and registration details.

# Installation Instructions and User Guide:
#    http://www.groundbreak.com/support

#--------------------------------------------------------------
# DO NOT EDIT BELOW THIS LINE
#--------------------------------------------------------------

use CGI; $q = new CGI;
use CGI::Carp qw(fatalsToBrowser);
foreach ($q->param) {${$_} = $q->param($_); ${$_} =~ s/\;//ig;}
# YOU MUST PUT IN THE FULL PATH TO THESE TWO FILES IF YOU PLACE CLICKTHRU.CGI IN A DIFFERENT DIRECTORY
require "config.cgi";
require "common.cgi";
&Create_DB_Connection;

###########
# GRAB SOME NECESSARY INFO
###########
$referer = $q->referer();
$ip = $q->remote_addr();
if ($referer eq "") {$referer = "(unknown)";}
$time = time();

###########
# PARSE THE QUERY STRING
###########
if ($clickthru_as_a_dir) {
$id = "$ENV{PATH_INFO}";
($junk,$id,$page) = split(/\//, $id, 3);
if ($page) { $page =~ s!^(http:)?/*!http://!i; }
}
if (@extra_sites && $use_page && $page) {
	foreach $item (@extra_sites) {
	$i++; if ($page eq $i) { $page = $item; }
	$item =~ s/www\.//ig;
		if ($page =~ /$item/ig && $item) { $goahead = "OK"; }
	}
}

if ($referer eq "") {$referer = "(unknown)";}
if ($campaign) { $referer = "$campaign"; }

###########
# ESTABLISH WHETHER THE HIT IS UNIQUE OR NOT
###########
$getcookie = $q->cookie(-name=>$cookiename);
if (!$getcookie || $write_over_cookie) { $setcookie++;}
$cookie = $q->cookie(-name=>$cookiename, -value=>$id, -expires=>$cookietime, -path=>'/', -domain=>"$basedomain");
$unique++;
if ($getcookie) { $unique = 0; }
if (!$getcookie) { 
	$SQL = "SELECT * FROM ua_hits WHERE Ip LIKE \'$ip\' && Id LIKE \'$id\'"; &Do_SQL;
	if ($sth->fetchrow_hashref) { $unique = 0; }
}

###########
# PREPARE COOKIES AND VERIFY THAT THE AFFILIATE ID EXISTS
###########
$SQL = "SELECT * FROM users WHERE Username = '$id'";
&Do_SQL;
$home =~ s/<username>/$id/ig;
  
###########
# DO ALL THE MAJOR HIT, CAMPAIGN, AND REFERRER LOGGING
###########
if ($sth->fetchrow_hashref && $id) {
  
  &date; $temp1 = $day . "day"; $temp2 = $day . "u_day"; 
  $SQL = "UPDATE ua_primary_hits SET $temp1 = ($temp1 + 1), $temp2 = ($temp2 + $unique), Month_Total = (Month_Total + 1), Month_Unique = (Month_Unique + $unique) WHERE Id = '$id' && Month LIKE '$month' && Year LIKE '$year'";&Do_SQL;
  if(!$sth->rows) {
  $SQL = "INSERT INTO ua_primary_hits (Id,Year,Month) VALUES ('$id','$year','$month')";&Do_SQL;
  $SQL = "UPDATE ua_primary_hits SET $temp1 = ($temp1 + 1), $temp2 = ($temp2 + $unique), Month_Total = (Month_Total + 1), Month_Unique = (Month_Unique + $unique) WHERE Id = '$id' && Month LIKE '$month' && Year LIKE '$year'";&Do_SQL;
  }
  
  if ($write_over_cookie) {
  $SQL = "UPDATE ua_hits SET Id = '$id' WHERE Ip LIKE '$ip'"; &Do_SQL;
  }
  
  if ($hit_time_on) {
  $SQL = "INSERT INTO ua_hits (Date,Id,Ip) VALUES ('$time','$id','$ip')"; &Do_SQL;
  if ($hit_time < $sth->{insertid}) { $SQL = "DELETE FROM ua_hits"; &Do_SQL; }
  }
  
  if ($referers_on) {
  $SQL = "UPDATE ua_referers SET Total = (Total + 1), Unique_hits = (Unique_hits + $unique) WHERE Id = '$id' && Referer = '$referer'"; &Do_SQL;
  if(!$sth->rows) {
  $SQL = "INSERT INTO ua_referers (Id,Referer,Total,Unique_hits) VALUES ('$id','$referer','1','$unique')"; &Do_SQL;
  }}

}

###########
# SEND OFF AN IMAGE FOR THOSE WITH REPLICATED WEBSITES
###########
if ($click_as_image eq 1) {
if (!$getcookie || $write_over_cookie) { print $q->header(-type=>"image/gif", -cookie=>$cookie, -p3p=>"policyref=\"$p3purl\", CP=\"$p3pabbr\""); }
else { print $q->header(-type=>"image/gif"); }
			open (FILE, "$invis_graphic_path");
			flock(FILE, 2);
			print <FILE>;
			flock(FILE, 8);
			close (FILE);
$sth->finish;
$dbh->disconnect;
exit;
}

###########
# REDIRECT THE CLICK TO THE APPROPRIATE SITE AND SET THE COOKIE
###########
if ($windows) {
if ($setcookie) {
	if ($page =~ /$page_domain/ig && $use_page eq 1 || $goahead eq "OK") { 
		print $q->header(-cookie=>$cookie, -p3p=>"policyref=\"$p3purl\", CP=\"$p3pabbr\"");
		print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=$page\">";
	} else {
		print $q->header(-cookie=>$cookie, -p3p=>"policyref=\"$p3purl\", CP=\"$p3pabbr\"");
		print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=$home\">";
	}
} else {	
	if ($page =~ /$page_domain/ig && $use_page eq 1 || $goahead eq "OK") { 
		print $q->header(-p3p=>"policyref=\"$p3purl\", CP=\"$p3pabbr\"");
		print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=$page\">";
	} else {
		print $q->header(-p3p=>"policyref=\"$p3purl\", CP=\"$p3pabbr\"");
		print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=$home\">";
	}
}}
else {
if ($setcookie) {
	if ($page =~ /$page_domain/ig && $use_page eq 1 || $goahead eq "OK") { 
		print $q->redirect(-cookie=>$cookie, -p3p=>"policyref=$p3purl, CP=$p3pabbr", -url=>$page);
	} else {
		print $q->redirect(-cookie=>$cookie, -p3p=>"policyref=$p3purl, CP=$p3pabbr", -url=>$home);
	}
} else {	
	if ($page =~ /$page_domain/ig && $use_page eq 1 || $goahead eq "OK") { 
	print $q->redirect(-p3p=>"policyref=$p3purl, CP=$p3pabbr", -url=>$page);
	} else {
	print $q->redirect(-p3p=>"policyref=$p3purl, CP=$p3pabbr", -url=>$home); 
	}
}}

$sth->finish;
$dbh->disconnect;
exit;

sub date {
    ($sec, $min, $hour, $day, $mon, $year, $dweek, $dyear, $daylight) = localtime($time);
    $month = $mon + 1;
    $year = $year + 1900;
}
