<?php
use UAParser\Parser;

#only allow numeric id
$tracker_id = $_GET['t202id']; 
if (!is_numeric($tracker_id)) die();

# check to see if mysql connection works, if not fail over to cached stored redirect urls
include_once(substr(dirname( __FILE__ ), 0,-21) . '/202-config.php'); 

$usedCachedRedirect = false;
if (!$db) $usedCachedRedirect = true;

#the mysql server is down, use the cached redirect
if ($usedCachedRedirect==true) { 

		//if a cached key is found for this id, redirect to that url
		if ($memcacheWorking) {
			$getUrl = $memcache->get(md5("default_url" . $tracker_id . systemHash()));
			if ($getUrl) {			
				header('location: '. $getUrl); 
				die();
			}
		}

	die("<h2>Error establishing a database connection - please contact the webhost</h2>");
}

include_once(str_repeat("../", 2).'202-config/connect2.php');
include_once(str_repeat("../", 2).'202-config/class-dataengine-slim.php');

//grab tracker data
$mysql['tracker_id_public'] = $db->real_escape_string($tracker_id);
$rotator_sql = "SELECT  tr.user_id,
						tr.ppc_account_id,
						tr.rotator_id,
						tr.click_cpc,
						tr.text_ad_id,
						rt.default_url,
						rt.default_campaign,
						rt.default_lp,
						rt.auto_monetizer,
						ca.aff_campaign_id,
						ca.aff_campaign_rotate,
					    ca.aff_campaign_url,
					    ca.aff_campaign_url_2,
					    ca.aff_campaign_url_3,
					    ca.aff_campaign_url_4,
					    ca.aff_campaign_url_5,
					    ca.aff_campaign_payout,
					    ca.aff_campaign_cloaking,
                        2cv.ppc_variable_ids,
						2cv.parameters,
						ur.user_timezone,
					   	up.user_keyword_searched_or_bidded,
                        up.user_pref_dynamic_bid,
                        up.user_pref_referer_data,
						up.ipqs_api_key,
					   	up.maxmind_isp,
					   	lp.landing_page_url,
					   	lp.landing_page_id,
					   	lp.landing_page_id_public
				FROM    202_trackers AS tr
				LEFT JOIN 202_rotators AS rt ON rt.id = tr.rotator_id
				LEFT JOIN 202_aff_campaigns AS ca ON ca.aff_campaign_id = rt.default_campaign
				LEFT JOIN 202_landing_pages AS lp ON lp.landing_page_id = rt.default_lp
				LEFT JOIN 202_users AS ur ON ur.user_id = tr.user_id
				LEFT JOIN 202_users_pref AS up ON up.user_id = tr.user_id
				LEFT JOIN 202_ppc_accounts USING (ppc_account_id)
                LEFT JOIN (SELECT ppc_network_id, GROUP_CONCAT(ppc_variable_id) AS ppc_variable_ids, GROUP_CONCAT(parameter) AS parameters FROM 202_ppc_network_variables GROUP BY ppc_network_id) AS 2cv USING (ppc_network_id)
				WHERE   tracker_id_public='".$mysql['tracker_id_public']."'"; 
$rotator_row = memcache_mysql_fetch_assoc($db, $rotator_sql);
$user_id = $db->real_escape_string($rotator_row['user_id']);
$user_keyword_searched_or_bidded = $db->real_escape_string($rotator_row['user_keyword_searched_or_bidded']);

//grab rules data
$mysql['rotator_id'] = $db->real_escape_string($rotator_row['rotator_id']);
$rule_sql = "SELECT ru.id as rule_id
			 FROM 202_rotator_rules AS ru
			 WHERE rotator_id='".$mysql['rotator_id']."' AND status='1'"; 
$rule_row = foreach_memcache_mysql_fetch_assoc($db, $rule_sql);
if (!$rotator_row) die();

$mysql['ipqs_api_key'] = $db->real_escape_string($rotator_row['ipqs_api_key']);
date_default_timezone_set($rotator_row['user_timezone']);

$referer_url_parsed = @parse_url($_SERVER['HTTP_REFERER']);
$referer_url_query = $referer_url_parsed['query'];

// get publisher id
if (isset($_GET['t202pubid'])) {
    $mysql['public_pub_id'] = $db->real_escape_string($_GET['t202pubid']);

    $mysql['pub_id'] = getPublisher($mysql['public_pub_id']);
    if (isset($mysql['pub_id']) && $mysql['pub_id'] != '1') {
        $mysql['user_id'] = $mysql['pub_id'];
        $user_id = $mysql['pub_id'];
    }
}

@parse_str($referer_url_query, $referer_query);

switch ($user_keyword_searched_or_bidded) { 

	case "bidded":
	      #try to get the bidded keyword first
		if ($_GET['OVKEY']) { //if this is a Y! keyword
			$keyword = $db->real_escape_string($_GET['OVKEY']);   
		}  elseif ($_GET['t202kw']) { 
			$keyword = $db->real_escape_string($_GET['t202kw']);  
		} elseif ($_GET['target_passthrough']) { //if this is a mediatraffic! keyword
			$keyword = $db->real_escape_string($_GET['target_passthrough']);   
		} else { //if this is a zango, or more keyword
			$keyword = $db->real_escape_string($_GET['keyword']);   
		} 
		break;
		case "searched":
		#try to get the searched keyword
		if ($referer_query['q']) { 
			$keyword = $db->real_escape_string($referer_query['q']);
		} elseif ($_GET['OVRAW']) { //if this is a Y! keyword
			$keyword = $db->real_escape_string($_GET['OVRAW']);   
		} elseif ($_GET['target_passthrough']) { //if this is a mediatraffic! keyword
			$keyword = $db->real_escape_string($_GET['target_passthrough']);   
		} elseif ($_GET['keyword']) { //if this is a zango, or more keyword
			$keyword = $db->real_escape_string($_GET['keyword']);   
		} elseif ($_GET['search_word']) { //if this is a eniro, or more keyword
			$keyword = $db->real_escape_string($_GET['search_word']);   
		} elseif ($_GET['query']) { //if this is a naver, or more keyword
			$keyword = $db->real_escape_string($_GET['query']);   
		} elseif ($_GET['encquery']) { //if this is a aol, or more keyword
			$keyword = $db->real_escape_string($_GET['encquery']);   
		} elseif ($_GET['terms']) { //if this is a about.com, or more keyword
			$keyword = $db->real_escape_string($_GET['terms']);   
		} elseif ($_GET['rdata']) { //if this is a viola, or more keyword
			$keyword = $db->real_escape_string($_GET['rdata']);   
		} elseif ($_GET['qs']) { //if this is a virgilio, or more keyword
			$keyword = $db->real_escape_string($_GET['qs']);   
		} elseif ($_GET['wd']) { //if this is a baidu, or more keyword
			$keyword = $db->real_escape_string($_GET['wd']);   
		} elseif ($_GET['text']) { //if this is a yandex, or more keyword
			$keyword = $db->real_escape_string($_GET['text']);   
		} elseif ($_GET['szukaj']) { //if this is a wp.pl, or more keyword
			$keyword = $db->real_escape_string($_GET['szukaj']);   
		} elseif ($_GET['qt']) { //if this is a O*net, or more keyword
			$keyword = $db->real_escape_string($_GET['qt']);   
		} elseif ($_GET['k']) { //if this is a yam, or more keyword
			$keyword = $db->real_escape_string($_GET['k']);   
		} elseif ($_GET['words']) { //if this is a Rambler, or more keyword
			$keyword = $db->real_escape_string($_GET['words']);   
		} else { 
			$keyword = $db->real_escape_string($_GET['t202kw']);
		}
		break;
}

if (substr($keyword, 0, 8) == 't202var_') {
	$t202var = substr($keyword, strpos($keyword, "_") + 1);

	if (isset($_GET[$t202var])) {
		$keyword = $_GET[$t202var];
	}
}

$keyword = str_replace('%20',' ',$keyword);

$utm_vars = array();

//utm_source
$utm_source = str_replace('%20',' ',$_GET['utm_source']);
if($utm_source && !empty($utm_source)) {
	$utm_source_id = INDEXES::get_utm_id($db, $utm_source, 'utm_source');
} else {
    $utm_source_id = 0;
}

$utm_vars['source'] = $utm_source_id;


//utm_medium
$utm_medium = str_replace('%20',' ',$_GET['utm_medium']);
if($utm_medium && !empty($utm_medium)) {
	$utm_medium_id = INDEXES::get_utm_id($db, $utm_medium, 'utm_medium');
} else {
    $utm_medium_id = 0;
}

$utm_vars['medium'] = $utm_medium_id;

//utm_campaign
$utm_campaign = str_replace('%20',' ',$_GET['utm_campaign']);
if($utm_campaign && !empty($utm_campaign)) {
	$utm_campaign_id = INDEXES::get_utm_id($db, $utm_campaign, 'utm_campaign');
} else {
    $utm_campaign_id = 0;
}

$utm_vars['campaign'] = $utm_campaign_id;

//utm_term
$utm_term = str_replace('%20',' ',$_GET['utm_term']);
if($utm_term && !empty($utm_term)) {
	$utm_term_id = INDEXES::get_utm_id($db, $utm_term, 'utm_term');
} else {
    $utm_term_id = 0;
}

$utm_vars['term'] = $utm_term_id;

//utm_content
$utm_content = str_replace('%20',' ',$_GET['utm_content']);
if($utm_content && !empty($utm_content)) {
	$utm_content_id = INDEXES::get_utm_id($db, $utm_content, 'utm_content');
} else {
    $utm_content_id = 0;
}

$utm_vars['content'] = $utm_content_id;

if ($rotator_row['user_pref_referer_data'] == 't202ref') {
    if (isset($_GET['t202ref']) && $_GET['t202ref'] != '') { //check for t202ref value
    	$ref_value = $_GET['t202ref'];
        $click_referer_site_url_id = INDEXES::get_site_url_id($db, $_GET['t202ref']);
    } else { //if not found revert to what we usually do
        if ($referer_query['url']) {
        	$ref_value = $referer_query['url'];
            $click_referer_site_url_id = INDEXES::get_site_url_id($db, $referer_query['url']);
        } else {
        	$ref_value = $_SERVER['HTTP_REFERER'];
            $click_referer_site_url_id = INDEXES::get_site_url_id($db, $_SERVER['HTTP_REFERER']);
        }
    }
} else { //user wants the real referer first

    // now lets get variables for clicks site
    // so this is going to check the REFERER URL, for a ?url=, which is the ACUTAL URL, instead of the google content, pagead2.google....
    if ($referer_query['url']) {
    	$ref_value = $referer_query['url'];
        $click_referer_site_url_id = INDEXES::get_site_url_id($db, $referer_query['url']);
    } else {
    	$ref_value = $_SERVER['HTTP_REFERER'];
        $click_referer_site_url_id = INDEXES::get_site_url_id($db, $_SERVER['HTTP_REFERER']);
    }
}


$ip_id = INDEXES::get_ip_id($db, $ip_address);
$click_filtered = FILTER::startFilter($db, '', $ip_id, $ip_address, $user_id);
 
if ($rotator_row['maxmind_isp'] == '1') {
	$IspData = getIspData($ip_address);
	$IspData = explode(',', $IspData);
	$IspData = $IspData[0];
} else {
	$IspData = null;
}

//GEO Lookup
$GeoData = getGeoData($ip_address);

//User-agent parser
$parser = Parser::create();

//Device type
$detect = new Mobile_Detect;
$ua = $detect->getUserAgent();

$mysql['aff_campaign_id'] = $db->real_escape_string($rotator_row['aff_campaign_id']);
$mysql['ppc_account_id'] = $db->real_escape_string($rotator_row['ppc_account_id']);
$mysql['user_pref_dynamic_bid'] = $db->real_escape_string($rotator_row['user_pref_dynamic_bid']);
// set cpc use dynamic variable if set or the default if not
if (isset ( $_GET ['t202b'] ) && $mysql['user_pref_dynamic_bid'] == '1') {
    $_GET ['t202b']=ltrim($_GET ['t202b'],'$');
    if(is_numeric ( $_GET ['t202b'] )){
        $bid = number_format ( $_GET ['t202b'], 5, '.', '' );
        $mysql ['click_cpc'] = $db->real_escape_string ( $bid );
    }
    else{
        $mysql ['click_cpc'] = $db->real_escape_string ( $rotator_row ['click_cpc'] );
    }
} else
    $mysql ['click_cpc'] = $db->real_escape_string ( $rotator_row ['click_cpc'] );
$default = false;

foreach ($rule_row as $rule) {
	
	$rotate = array();
	$count = 0;

	$mysql['rule_id'] = $db->real_escape_string($rule['rule_id']);
	$criteria_sql = "SELECT type, statement, value
				 FROM 202_rotator_rules_criteria
				 WHERE rule_id='".$mysql['rule_id']."'"; 
	$criteria_row = foreach_memcache_mysql_fetch_assoc($db, $criteria_sql);

	foreach ($criteria_row as $criteria) {
		
		switch ($criteria['statement']) {
			case 'is':
				$statement = true;		
			break;
					
			case 'is_not':
				$statement = false;	
			break;
		}

		$values = explode(',', $criteria['value']);

		if (in_array('ALL', $values) || in_array('all', $values)) {
			
			$rotate[] = true;

		} else {

			switch ($criteria['type']) {
				case 'fraud':
				$config = ['key'=>$mysql['ipqs_api_key'] ,'ip'=>$ip_address,'user_agent'=>$_SERVER['HTTP_USER_AGENT'],'language'=>$_SERVER['HTTP_ACCEPT_LANGUAGE']];
				$ipqs = new FraudDetectionIPQS($config);
				
				try {
					if($ipqs->isFraud($ip_address->address)){
						$fraud = 'true';
					}else{
						$fraud = 'false';
					}
				}
				catch(Exception $e) {
					$fraud = 'false';
				}
					
				if ($statement) {
					if (in_array($fraud, $values)) {
						$rotate[] = true;
					}
				} else {
					if (!in_array($fraud, $values)) {
						$rotate[] = true;
					}
				}
				break;

				
			    case 'eu':
                $eu = $GeoData['is_european_union'];
			   if($eu===true){
			       $eu='true';
			   }
			   elseif($eu===false)
			   {
			       $eu='false';
			   }
			   
			        if ($statement) {
			            if (in_array($eu, $values)) {
			                $rotate[] = true;
			            }
			        } else {
			            if (!in_array($eu, $values)) {
			                $rotate[] = true;
			            }
			        }
			    
			    break;
			        
				case 'country':
					$country = $GeoData['country']."(".$GeoData['country_code'].")";

					if ($statement) {
						if (in_array($country, $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array($country, $values)) {
							$rotate[] = true;
						}
					}
						
				break;
				
				case 'region':
					$region = $GeoData['region']."(".$GeoData['country_code'].")";
					
					if ($statement) {
						if (in_array($region, $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array($region, $values)) {
							$rotate[] = true;
						}
					}

				break;

				case 'city':
					$city = $GeoData['city']."(".$GeoData['country_code'].")";
					
					if ($statement) {
						if (in_array($city, $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array($city, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'isp':
					
					if ($statement) {
						if (in_array($IspData, $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array($IspData, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'ip':
					if ($statement) {
						if (in_array($ip_address, $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array($ip_address, $values)) {
							$rotate[] = true;
						}
					}

				break;

				case 'iprange':
					if ($statement) {
						$inrange = array();
						foreach ($values as $value) {
							if (ip_in_range($ip_address, $value)) {
								$inrange[] = true;
							}
						}
						if(count($inrange) == count($values)) {
							$rotate[] = true;
						}
					} else {
						$outrange = array();
						foreach ($values as $value) {
							if (!ip_in_range($ip_address, $value)) {
								$outrange[] = true;
							}
						}
						if(count($outrange) == count($values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'platform':
					$result = parseUaForRotatorCriteria($detect, $parser, $ua);
					if ($statement) {
						if (in_array($result->os->family, $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array($result->os->family, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'device':
					$result = parseUaForRotatorCriteria($detect, $parser, $ua);
					if ($statement) {
						if (in_array(strtolower($result->device->family), $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array(strtolower($result->device->family), $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'browser':
					$result = parseUaForRotatorCriteria($detect, $parser, $ua);
					if ($statement) {
						if (in_array($result->ua->family, $values)) {
							$rotate[] = true;
						}
					} else {
						if (!in_array($result->ua->family, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'visitor':
					foreach ($values as $key => $value) {
						if (strtoupper($value) == 'FILTERED') {
							if ($click_filtered && $statement) {
								$rotate[] = true;
							} else if (!$statement && !$click_filtered) {
								$rotate[] = true;
							}
						} else if (strtoupper($value) == 'UNIQUE') {
							if (!$click_filtered && $statement) {
								$rotate[] = true;
							} else if (!$statement && $click_filtered) {
								$rotate[] = true;
							}
						}
					}
				break;

				case 'c1':
					$c1 = str_replace('%20',' ',$_GET['c1']);
					if (isset($c1) && !empty($c1)) {
						if ($statement) {
							if(in_array($_GET['c1'], $values)) {
								$rotate[] = true;
							}
						} else {
							if(!in_array($_GET['c1'], $values)) {
								$rotate[] = true;
							}
						}
					}
				break;

				case 'c2':
					$c2 = str_replace('%20',' ',$_GET['c2']);
					if (isset($c2) && !empty($c2)) {
						if ($statement) {
							if(in_array($_GET['c2'], $values)) {
								$rotate[] = true;
							}
						} else {
							if(!in_array($_GET['c2'], $values)) {
								$rotate[] = true;
							}
						}
					}
				break;

				case 'c3':
					$c3 = str_replace('%20',' ',$_GET['c3']);
					if (isset($c3) && !empty($c3)) {
						if ($statement) {
							if(in_array($_GET['c3'], $values)) {
								$rotate[] = true;
							}
						} else {
							if(!in_array($_GET['c3'], $values)) {
								$rotate[] = true;
							}
						}
					}
				break;

				case 'c4':
					$c4 = str_replace('%20',' ',$_GET['c4']);
					if (isset($c4) && !empty($c4)) {
						if ($statement) {
							if(in_array($_GET['c4'], $values)) {
								$rotate[] = true;
							}
						} else {
							if(!in_array($_GET['c4'], $values)) {
								$rotate[] = true;
							}
						}
					}
				break;

				case 't202kw':
					if ($statement) {
						if(in_array($keyword, $values)) {
							$rotate[] = true;
						}
					} else {
						if(!in_array($keyword, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'utm_source':
					if ($statement) {
						if(in_array($utm_source, $values)) {
							$rotate[] = true;
						}
					} else {
						if(!in_array($utm_source, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'utm_medium':
					if ($statement) {
						if(in_array($utm_medium, $values)) {
							$rotate[] = true;
						}
					} else {
						if(!in_array($utm_medium, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'utm_campaign':
					if ($statement) {
						if(in_array($utm_campaign, $values)) {
							$rotate[] = true;
						}
					} else {
						if(!in_array($utm_campaign, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'utm_term':
					if ($statement) {
						if(in_array($utm_term, $values)) {
							$rotate[] = true;
						}
					} else {
						if(!in_array($utm_term, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'utm_content':
					if ($statement) {
						if(in_array($utm_content, $values)) {
							$rotate[] = true;
						}
					} else {
						if(!in_array($utm_content, $values)) {
							$rotate[] = true;
						}
					}
				break;

				case 'referer':
					if ($statement) {
					    foreach ($values AS $this_string) {
	       			        if (preg_match("/(".$this_string.")/i", $ref_value)) {
			     	            $rotate[] = true;
				            } 
    		          	}
					} else {
    					foreach ($values AS $this_string) {
    	       			        if (!preg_match("/(".$this_string.")/i", $ref_value)) {
    			     	            $rotate[] = true;
    				            } 
        		          	}
					}
				break;
			}

			
		}

		$count++;

	}
		
	//If any of the rules maches, redirect to the redirect type.
	if ($count == count($rotate)) {
		$rule_redirects_sql = "SELECT rur.id,
					   rur.redirect_url,
					   rur.redirect_campaign,
					   rur.redirect_lp,
					   rur.auto_monetizer,
					   rur.weight,
					   ca.aff_campaign_id,
					   ca.aff_campaign_rotate,
					   ca.aff_campaign_url,
					   ca.aff_campaign_url_2,
					   ca.aff_campaign_url_3,
					   ca.aff_campaign_url_4,
					   ca.aff_campaign_url_5,
					   ca.aff_campaign_payout,
					   ca.aff_campaign_cloaking,
					   lp.landing_page_url,
		               lp.landing_page_id,
		               lp.landing_page_id_public
				FROM 202_rotator_rules_redirects AS rur
				LEFT JOIN 202_aff_campaigns AS ca ON ca.aff_campaign_id = rur.redirect_campaign
				LEFT JOIN 202_landing_pages AS lp ON lp.landing_page_id = rur.redirect_lp
				WHERE rule_id='".$mysql['rule_id']."'"; 
		$rule_redirects_row = foreach_memcache_mysql_fetch_assoc($db, $rule_redirects_sql);
		$redirects = array();
		$redirect_values = array();

		foreach ($rule_redirects_row as $rule_redirect_row) {
			
			if ($rule_redirect_row['redirect_campaign'] != null) {
				$redirects[] = array('rule_id' => $mysql['rule_id'], 'redirect_id' => $rule_redirect_row['id'], 'type' => 'campaign', 'aff_campaign_url' => $rule_redirect_row['aff_campaign_url'], 'aff_campaign_url_2' => $rule_redirect_row['aff_campaign_url_2'], 'aff_campaign_url_3' => $rule_redirect_row['aff_campaign_url_3'], 'aff_campaign_url_4' => $rule_redirect_row['aff_campaign_url_4'], 'aff_campaign_url_5' => $rule_redirect_row['aff_campaign_url_5'], 'weight' => $rule_redirect_row['weight'], 'aff_campaign_id' => $rule_redirect_row['aff_campaign_id'], 'aff_campaign_payout' => $rule_redirect_row['aff_campaign_payout'], 'aff_campaign_cloaking' => $rule_redirect_row['aff_campaign_cloaking']);
			} else if($rule_redirect_row['redirect_url'] != null) {
				$redirects[] = array('rule_id' => $mysql['rule_id'], 'redirect_id' => $rule_redirect_row['id'], 'type' => 'url', 'redirect_url' => $rule_redirect_row['redirect_url'], 'weight' => $rule_redirect_row['weight'], 'aff_campaign_id' => $rule_redirect_row['aff_campaign_id'], 'aff_campaign_payout' => $rule_redirect_row['aff_campaign_payout'], 'aff_campaign_cloaking' => $rule_redirect_row['aff_campaign_cloaking']);
			} else if ($rule_redirect_row['redirect_lp'] != null) {
				$redirects[] = array('rule_id' => $mysql['rule_id'], 'redirect_id' => $rule_redirect_row['id'], 'type' => 'lp', 'landing_page_id' => $rule_redirect_row['landing_page_id'], 'landing_page_id_public' => $rule_redirect_row['landing_page_id_public'], 'landing_page_url' => $rule_redirect_row['landing_page_url'], 'weight' => $rule_redirect_row['weight'], 'aff_campaign_id' => $rule_redirect_row['aff_campaign_id'], 'aff_campaign_payout' => $rule_redirect_row['aff_campaign_payout'], 'aff_campaign_cloaking' => $rule_redirect_row['aff_campaign_cloaking']);
			} else if ($rule_redirect_row['auto_monetizer'] != null) {
				$redirects[] = array('rule_id' => $mysql['rule_id'], 'redirect_id' => $rule_redirect_row['id'], 'type' => 'monetizer', 'monetizer_url' => 'http://prosper202.com', 'weight' => $rule_redirect_row['weight'], 'aff_campaign_id' => $rule_redirect_row['aff_campaign_id'], 'aff_campaign_payout' => $rule_redirect_row['aff_campaign_payout'], 'aff_campaign_cloaking' => $rule_redirect_row['aff_campaign_cloaking']);
			}
		}
		
		if (count($rule_redirects_row) > 1) {
			$redirect_array = $redirects[getSplitTestValue($redirects)];
		} else {
			$redirect_array = $redirects[0];
		}

		$default = false;
		$redirect = redirect_process($db, $redirect_array, $rotator_row['ppc_account_id'], $mysql ['click_cpc'], $rotator_row['rotator_id'], $GeoData, $ip_address, $rotator_row['text_ad_id'], $user_id, $IspData, $user_keyword_searched_or_bidded, $ip_id, $click_filtered, $keyword, $utm_vars, $click_referer_site_url_id);
		header('location: '.$redirect);
		die();
	} else {
		$default = true;
	}
	
}

if ($default == true) {
	$default = redirect_process($db, $rotator_row, $rotator_row['ppc_account_id'], $mysql ['click_cpc'], $rotator_row['rotator_id'], $GeoData, $ip_address, $rotator_row['text_ad_id'], $user_id, $IspData, $user_keyword_searched_or_bidded, $ip_id, $click_filtered, $keyword, $utm_vars, $click_referer_site_url_id);
	
		if ($usedCachedRedirect==true) { 

			if ($memcacheWorking) {
				$getUrl = $memcache->get(md5("default_url" . $tracker_id . systemHash()));
				if (!$getUrl) {
						setCache(md5('default_url' . $tracker_id . systemHash()), $default, 0);			
				}
			}
		}
		
	header('location: '.$default);
	die();
}


//Redirect process function
function redirect_process($db, $rule, $ppc_account, $cpc, $rotator_id, $GeoData, $ip_address, $text_ad_id, $user_id, $IspData, $keyword_type, $ip_id, $click_filtered, $keyword, $utm_vars, $click_referer_site_url_id){
global $rotator_row;
$mysql['click_time'] = time();
$mysql['aff_campaign_id'] = $db->real_escape_string($rule['aff_campaign_id']);
$mysql['click_cpc'] = $db->real_escape_string($cpc);
$mysql['click_payout'] = $db->real_escape_string($rule['aff_campaign_payout']);
$mysql['rule_id'] = $db->real_escape_string($rule['rule_id']);
$mysql['rule_redirect_id'] = $db->real_escape_string($rule['redirect_id']);
$mysql['ppc_account'] = $db->real_escape_string($ppc_account);
$mysql['cpc'] = $db->real_escape_string($cpc);
$mysql['landing_page_id'] = $db->real_escape_string($rule['landing_page_id']);
$mysql['text_ad_id'] = $db->real_escape_string($text_ad_id);

if ($mysql['aff_campaign_id'] == '') {
	$mysql['aff_campaign_id'] = '0';
}

if ($mysql['landing_page_id'] == '') {
	$mysql['landing_page_id'] = '0';
}

if ($mysql['click_payout'] == '') {
	$mysql['click_payout'] = '0.00000';
}

if ($mysql['rule_redirect_id'] == '') {
	$mysql['rule_redirect_id'] = '0';
}

if ($mysql['rule_id'] == '') {
	$mysql['rule_id'] = '0';
}
/* ok, if $_GET['OVRAW'] that is a yahoo keyword, if on the REFER, there is a $_GET['q], that is a GOOGLE keyword... */
//so this is going to check the REFERER URL, for a ?q=, which is the ACUTAL KEYWORD searched.
  
$keyword_id = INDEXES::get_keyword_id($db, $keyword); 
$mysql['keyword_id'] = $db->real_escape_string($keyword_id); 		  

$c1 = $db->real_escape_string($_GET['c1']);
$c1 = str_replace('%20',' ',$c1);  
$c1_id = INDEXES::get_c1_id($db, $c1); 
$mysql['c1_id'] = $db->real_escape_string($c1_id);

$c2 = $db->real_escape_string($_GET['c2']);
$c2 = str_replace('%20',' ',$c2);
$c2_id = INDEXES::get_c2_id($db, $c2);
$mysql['c2_id'] = $db->real_escape_string($c2_id);

$c3 = $db->real_escape_string($_GET['c3']);
$c3 = str_replace('%20',' ',$c3);  
$c3_id = INDEXES::get_c3_id($db, $c3); 
$mysql['c3_id'] = $db->real_escape_string($c3_id);

$c4 = $db->real_escape_string($_GET['c4']);
$c4 = str_replace('%20',' ',$c4);
$c4_id = INDEXES::get_c4_id($db, $c4);
$mysql['c4_id'] = $db->real_escape_string($c4_id);

$device_id = PLATFORMS::get_device_info($db,$detect,$_GET['ua']);

if(isset($device_id['platform'])){
	$mysql['platform_id'] = $db->real_escape_string($device_id['platform']);
}else{
    $mysql['platform_id'] = 0;
}

if(isset($device_id['browser'])){
$mysql['browser_id'] = $db->real_escape_string($device_id['browser']);
}else{
    $mysql['browser_id'] = 0;
}

if(isset($device_id['device'])){
$mysql['device_id'] = $db->real_escape_string($device_id['device']);
}else{
    $mysql['device_id'] = 0;
}

if (isset($device_id['type']) && $device_id['type'] == '4') {
	$mysql['click_bot'] = '1';
} else {
	$mysql['click_bot'] = '0';
}

$mysql['click_in'] = 1;

if ($rule['type'] == 'lp' || $rule['default_lp'] != null) {
	$mysql['click_out'] = 0; 
} else {
	$mysql['click_out'] = 1; 
}

$mysql['ip_id'] = $db->real_escape_string($ip_id);

$country_id = INDEXES::get_country_id($db, $GeoData['country'], $GeoData['country_code']);
$mysql['country_id'] = $db->real_escape_string($country_id);

$region_id = INDEXES::get_region_id($db, $GeoData['region'], $mysql['country_id']);
$mysql['region_id'] = $db->real_escape_string($region_id);

$city_id = INDEXES::get_city_id($db, $GeoData['city'], $mysql['country_id']);
$mysql['city_id'] = $db->real_escape_string($city_id);

if ($IspData != null) {
	$isp_id = INDEXES::get_isp_id($db, $IspData);
	$mysql['isp_id'] = $db->real_escape_string($isp_id);
} else {
	$mysql['isp_id'] = '0';
}

if ($device_id['type'] == '4') {
	$mysql['click_filtered'] = '1';
} else {
	$mysql['click_filtered'] = $db->real_escape_string($click_filtered);
}

if($_GET['lpr']!='') {
	$click_sql1 = "	SELECT 	202_clicks.click_id,keyword,keyword_id
					FROM 		202_clicks
					LEFT JOIN	202_clicks_advance USING (click_id)
					LEFT JOIN 	202_ips USING (ip_id) 
					LEFT JOIN 	202_keywords USING (keyword_id) 
					WHERE 	202_ips.ip_address='".$ip_address."'
					AND		202_clicks.user_id='".$user_id."'  
					AND		202_clicks.click_time >= '30'
					ORDER BY 	202_clicks.click_id DESC 
					LIMIT 		1";
	$click_result1 = $db->query($click_sql1) or record_mysql_error($click_sql1);
	$click_row1 = $click_result1->fetch_assoc();
	$mysql['click_id'] = $db->real_escape_string($click_row1['click_id']);
	$keyword = $db->real_escape_string($keyword);
	$keyword_id = $db->real_escape_string($click_row1['keyword_id']);
	$mysql['keyword_id'] = $db->real_escape_string($keyword_id);
}
else{
//get click id
$click_id = getClickId();
$mysql['click_id'] = $db->real_escape_string($click_id); 
}
$mysql['click_alp'] = 0;

$mysql['rotator_id'] = $db->real_escape_string($rotator_id); 
$mysql['user_id'] = $db->real_escape_string($user_id);

//ok we have the main data, now insert this row
$click_sql = "REPLACE INTO   202_clicks
			  SET           	click_id='".$mysql['click_id']."',
							user_id = '".$mysql['user_id']."',   
							aff_campaign_id = '".$mysql['aff_campaign_id']."',
							 landing_page_id = '".$mysql['landing_page_id']."',   
							ppc_account_id = '".$mysql['ppc_account']."',   
							click_cpc = '".$mysql['cpc']."',   
							click_payout = '".$mysql['click_payout']."',   
							click_alp = '".$mysql['click_alp']."',
							click_filtered = '".$mysql['click_filtered']."',
							click_bot = '".$mysql['click_bot']."',
							click_time = '".$mysql['click_time']."',
                            rotator_id = '".$mysql['rotator_id']."',
                            rule_id = '".$mysql['rule_id']."'"; 

$click_result = $db->query($click_sql) or record_mysql_error($db, $click_sql);   

$mysql['gclid'] = $db->real_escape_string($_GET['gclid']);
$mysql['msclkid'] = $db->real_escape_string($_GET['msclkid']);
$mysql['fbclid'] = $db->real_escape_string($_GET['fbclid']);

// insert custom variables
insertClicksVariable($mysql, $rotator_row);

// insert gclid and utm vars
insertGclid($mysql);

// insert msclkid and utm vars
insertMsclkid($mysql);

// insert fbclid and utm vars
insertFbclid($mysql);

//now we have the click's advance data, now insert this row
insertClicksAdvance($mysql);

//insert the tracking data
insertClicksTracking($mysql);

$click_sql = "
	REPLACE INTO
		202_clicks_rotator
	SET
		click_id='".$mysql['click_id']."',
		rotator_id='".$mysql['rotator_id']."',
		rule_id='".$mysql['rule_id']."',
		rule_redirect_id = '".$mysql['rule_redirect_id']."'";
$click_result = $db->query($click_sql) or record_mysql_error($db, $click_sql);


//now gather variables for the clicks record db
// get publisher id
if (isset($_GET['t202pubid'])) {
    $mysql['public_pub_id'] = $db->real_escape_string($_GET['t202pubid']);

    $mysql['pub_id'] = getPublisher($mysql['public_pub_id']);
    if (isset($mysql['pub_id']) && $mysql['pub_id'] != '1') {
        $mysql['user_id'] = $mysql['pub_id'];

    }
}

//utm_source
$utm_source = $db->real_escape_string($_GET['utm_source']);
if(isset($utm_source) && $utm_source != '')
{
    $utm_source = str_replace('%20',' ',$utm_source);
    $utm_source_id = INDEXES::get_utm_id($db, $utm_source, 'utm_source');
}
else{
    $utm_source_id=0;
}
$mysql['utm_source_id']=$db->real_escape_string($utm_source_id);
$mysql['utm_source']=$db->real_escape_string($utm_source);

//utm_medium
$utm_medium = $db->real_escape_string($_GET['utm_medium']);
if(isset($utm_medium) && $utm_medium != '')
{
    $utm_medium = str_replace('%20',' ',$utm_medium);
    $utm_medium_id = INDEXES::get_utm_id($db, $utm_medium, 'utm_medium');
}
else{
    $utm_medium_id=0;
}
$mysql['utm_medium_id']=$db->real_escape_string($utm_medium_id);
$mysql['utm_medium']=$db->real_escape_string($utm_medium);

//utm_campaign
$utm_campaign = $db->real_escape_string($_GET['utm_campaign']);
if(isset($utm_campaign) && $utm_campaign != '')
{
    $utm_campaign = str_replace('%20',' ',$utm_campaign);
    $utm_campaign_id = INDEXES::get_utm_id($db, $utm_campaign, 'utm_campaign');
}
else{
    $utm_campaign_id=0;
}
$mysql['utm_campaign_id']=$db->real_escape_string($utm_campaign_id);
$mysql['utm_campaign']=$db->real_escape_string($utm_campaign);

//utm_term
$utm_term = $db->real_escape_string($_GET['utm_term']);
if(isset($utm_term) && $utm_term != '')
{
    $utm_term = str_replace('%20',' ',$utm_term);
    $utm_term_id = INDEXES::get_utm_id($db, $utm_term, 'utm_term');
}
else{
    $utm_term_id=0;
}
$mysql['utm_term_id']=$db->real_escape_string($utm_term_id);
$mysql['utm_term']=$db->real_escape_string($utm_term);

//utm_content
$utm_content = $db->real_escape_string($_GET['utm_content']);
if(isset($utm_content) && $utm_content != '')
{
    $utm_content = str_replace('%20',' ',$utm_content);
    $utm_content_id = INDEXES::get_utm_id($db, $utm_content, 'utm_content');
}
else{
    $utm_content_id=0;
}
$mysql['utm_content_id']=$db->real_escape_string($utm_content_id);
$mysql['utm_content']=$db->real_escape_string($utm_content);

/* ok, if $_GET['OVRAW'] that is a yahoo keyword, if on the REFER, there is a $_GET['q], that is a GOOGLE keyword... */
//so this is going to check the REFERER URL, for a ?q=, which is the ACUTAL KEYWORD searched.
$referer_url_parsed = @parse_url($_SERVER['HTTP_REFERER']);
$referer_url_query = $referer_url_parsed['query'];

@parse_str($referer_url_query, $referer_query);

switch ($rotator_row['user_keyword_searched_or_bidded']) {

    case "bidded":
        #try to get the bidded keyword first
        if ($_GET['OVKEY']) { //if this is a Y! keyword
            $keyword = $db->real_escape_string($_GET['OVKEY']);
        }  elseif ($_GET['t202kw']) {
            $keyword = $db->real_escape_string($_GET['t202kw']);
        } elseif ($_GET['target_passthrough']) { //if this is a mediatraffic! keyword
            $keyword = $db->real_escape_string($_GET['target_passthrough']);
        } else { //if this is a zango, or more keyword
            $keyword = $db->real_escape_string($_GET['keyword']);
        }
        break;
    case "searched":
        #try to get the searched keyword
        if ($referer_query['q']) {
            $keyword = $db->real_escape_string($referer_query['q']);
        } elseif ($_GET['OVRAW']) { //if this is a Y! keyword
            $keyword = $db->real_escape_string($_GET['OVRAW']);
        } elseif ($_GET['target_passthrough']) { //if this is a mediatraffic! keyword
            $keyword = $db->real_escape_string($_GET['target_passthrough']);
        } elseif ($_GET['keyword']) { //if this is a zango, or more keyword
            $keyword = $db->real_escape_string($_GET['keyword']);
        } elseif ($_GET['search_word']) { //if this is a eniro, or more keyword
            $keyword = $db->real_escape_string($_GET['search_word']);
        } elseif ($_GET['query']) { //if this is a naver, or more keyword
            $keyword = $db->real_escape_string($_GET['query']);
        } elseif ($_GET['encquery']) { //if this is a aol, or more keyword
            $keyword = $db->real_escape_string($_GET['encquery']);
        } elseif ($_GET['terms']) { //if this is a about.com, or more keyword
            $keyword = $db->real_escape_string($_GET['terms']);
        } elseif ($_GET['rdata']) { //if this is a viola, or more keyword
            $keyword = $db->real_escape_string($_GET['rdata']);
        } elseif ($_GET['qs']) { //if this is a virgilio, or more keyword
            $keyword = $db->real_escape_string($_GET['qs']);
        } elseif ($_GET['wd']) { //if this is a baidu, or more keyword
            $keyword = $db->real_escape_string($_GET['wd']);
        } elseif ($_GET['text']) { //if this is a yandex, or more keyword
            $keyword = $db->real_escape_string($_GET['text']);
        } elseif ($_GET['szukaj']) { //if this is a wp.pl, or more keyword
            $keyword = $db->real_escape_string($_GET['szukaj']);
        } elseif ($_GET['qt']) { //if this is a O*net, or more keyword
            $keyword = $db->real_escape_string($_GET['qt']);
        } elseif ($_GET['k']) { //if this is a yam, or more keyword
            $keyword = $db->real_escape_string($_GET['k']);
        } elseif ($_GET['words']) { //if this is a Rambler, or more keyword
            $keyword = $db->real_escape_string($_GET['words']);
        } else {
            $keyword = $db->real_escape_string($_GET['t202kw']);
        }
        break;
}

if (substr($keyword, 0, 8) == 't202var_') {
    $t202var = substr($keyword, strpos($keyword, "_") + 1);

    if (isset($_GET[$t202var])) {
        $keyword = $_GET[$t202var];
    }
}

$keyword = str_replace('%20',' ',$keyword);
$keyword_id = INDEXES::get_keyword_id($db, $keyword);
$mysql['keyword_id'] = $db->real_escape_string($keyword_id);
$mysql['keyword'] = $db->real_escape_string($keyword);

$_lGET = array_change_key_case($_GET, CASE_LOWER); //make lowercase copy of get
//Get C1-C4 IDs
for ($i=1;$i<=4;$i++){
    $custom= "c".$i; //create dynamic variable
    $custom_val=$db->real_escape_string($_lGET[$custom]); // get the value
    if(isset($custom_val) && $custom_val !=''){ //if there's a value get an id
        $custom_val = str_replace('%20',' ',$custom_val);
        $custom_id = INDEXES::get_custom_var_id($db, $custom, $custom_val); //get the id
        $mysql[$custom.'_id']=$db->real_escape_string($custom_id); //save it
        $mysql[$custom]=$db->real_escape_string($custom_val); //save it
    }
}

$custom_var_ids = array();

$ppc_variable_ids = explode(',', $rotator_row['ppc_variable_ids']);
$parameters = explode(',', $rotator_row['parameters']);

foreach ($parameters as $key => $value) {
    $variable = $db->real_escape_string($_GET[$value]);

    if (isset($variable) && $variable != '') {
        $variable = str_replace('%20',' ',$variable);
        $variable_id = INDEXES::get_variable_id($db, $variable, $ppc_variable_ids[$key]);
        $custom_var_ids[] = $variable_id;
    }
}

if(isset($device_id['platform'])){
	$mysql['platform_id'] = $db->real_escape_string($device_id['platform']);
}else{
    $mysql['platform_id'] = 0;
}

if(isset($device_id['browser'])){
$mysql['browser_id'] = $db->real_escape_string($device_id['browser']);
}else{
    $mysql['browser_id'] = 0;
}

if(isset($device_id['device'])){
$mysql['device_id'] = $db->real_escape_string($device_id['device']);
}else{
    $mysql['device_id'] = 0;
}

if (isset($device_id['type']) && $device_id['type'] == '4') {
    $mysql['click_bot'] = '1';
} else {
    $mysql['click_bot'] = '0';
}

$mysql['click_in'] = 1;
$mysql['click_out'] = 1;

$ip_id = INDEXES::get_ip_id($db, $ip_address);
$mysql['ip_id'] = $db->real_escape_string($ip_id);

//before we finish filter this click

$user_id = $rotator_row['user_id'];

//GEO Lookup
$GeoData = getGeoData($ip_address);

$country_id = INDEXES::get_country_id($db, $GeoData['country'], $GeoData['country_code']);
$mysql['country_id'] = $db->real_escape_string($country_id);
$mysql['country'] = $db->real_escape_string($GeoData['country']);

$region_id = INDEXES::get_region_id($db, $GeoData['region'], $mysql['country_id']);
$mysql['region_id'] = $db->real_escape_string($region_id);
$mysql['region'] = $db->real_escape_string($GeoData['city']);

$city_id = INDEXES::get_city_id($db, $GeoData['city'], $mysql['country_id']);
$mysql['city_id'] = $db->real_escape_string($city_id);
$mysql['city'] = $db->real_escape_string($GeoData['city']);

if ($rotator_row['maxmind_isp'] == '1') {
    $IspData = getIspData($ip_address);
    $isp_id = INDEXES::get_isp_id($db, $IspData);
    $mysql['isp_id'] = $db->real_escape_string($isp_id);
} else {
    $mysql['isp_id'] = '0';
}

if ($device_id['type'] == '4') {
    $mysql['click_filtered'] = '1';
} else {
    $click_filtered = FILTER::startFilter($db, $click_id,$ip_id,$ip_address,$user_id);
    $mysql['click_filtered'] = $db->real_escape_string($click_filtered);
}

//lets determine if cloaking is on
if ($rule['aff_campaign_cloaking'] == 1) {
	$cloaking_on = true;
	$mysql['click_cloaking'] = 1;
	//if cloaking is on, add in a click_id_public, because we will be forwarding them to a cloaked /cl/xxxx link
} else { 
	$mysql['click_cloaking'] = 0; 
}

$click_id_public = getClickIdPublic($click_id);
$mysql['click_id_public'] = $click_id_public;

//ok we have our click recorded table, now lets insert theses
insertClicksRecord($mysql);

$mysql['click_referer_site_url_id'] = $db->real_escape_string($click_referer_site_url_id); 

$outbound_site_url = 'http://'.$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$click_outbound_site_url_id = INDEXES::get_site_url_id($db, $outbound_site_url); 
$mysql['click_outbound_site_url_id'] = $db->real_escape_string($click_outbound_site_url_id); 

if ($cloaking_on == true) {
	$cloaking_site_url = getScheme().$_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']).'/cl.php?pci=' . $click_id_public;      
}
if ($rule['aff_campaign_id'] != null) {
	//rotate the urls
	$redirect_site_url = rotateTrackerUrl($db, $rule);
} else {
	if ($rule['type'] == 'url') {
		$redirect_site_url = $rule['redirect_url'];
	} else if($rule['type'] == 'campaign') {
		$redirect_site_url = $rule['aff_campaign_url'];
	} else if ($rule['type'] == 'lp') {
		$redirect_site_url = $rule['landing_page_url'];
	} else if ($rule['type'] == 'auto_monetizer') {
		$redirect_site_url = "http://prosper202.com";
	} else if ($rule['default_url'] != null) {
		$redirect_site_url = $rule['default_url'];
	} else if ($rule['default_lp'] != null) {
		$redirect_site_url = $rule['landing_page_url'];
	}
}

$redirect_site_url = replaceTrackerPlaceholders($db, $redirect_site_url,$click_id, $mysql);


$click_redirect_site_url_id = INDEXES::get_site_url_id($db, $redirect_site_url); 
$mysql['click_redirect_site_url_id'] = $db->real_escape_string($click_redirect_site_url_id);

//set landing page type to rotator
$mysql['lp_type'] = "rtr";

//insert this
insertClicksSite($mysql);  

	if ($rule['aff_campaign_id'] != null) {
		//set the cookie
		setClickIdCookie($mysql['click_id'],$rule['aff_campaign_id']);
	}

	if ($rule['type'] == 'lp' || $rule['default_lp'] != null) {
		setClickIdCookieForLp($mysql['click_id_public'], $rule['landing_page_id_public']);
		
		if(!parse_url ($redirect_site_url,PHP_URL_QUERY)){
		
		    //if there is no query url the add a ? to thecVars but before doing that remove case where there may be a ? at the end of the url and nothing else
		    $redirect_site_url = rtrim($redirect_site_url,'?');
		
		    //remove the & from thecVars and put a ? in front of it
		
		    $redirect_site_url .='?t202id='.$_GET['t202id'].'&t202kw='.$_GET['t202kw'].'&lpip='.$rule['landing_page_id_public'];
		
		}
		else {
		
		    $redirect_site_url .='&t202id='.$_GET['t202id'].'&t202kw='.$_GET['t202kw'].'&lpip='.$rule['landing_page_id_public'];
		
		}
		

	}

	//set dirty hour
	setDirtyHour($mysql);

	$urlvars = getPrePopVars($_GET);

	//now we've recorded, now lets redirect them
	if ($cloaking_on == true) {
		//if cloaked, redirect them to the cloaked site. 
		return setPrePopVars($urlvars,$cloaking_site_url,true);  
	} else {
		return setPrePopVars($urlvars,$redirect_site_url,false);       
	} 

}

?>