public function clearDataAction() { BTApp::importModel("ClickModel"); BTApp::importModel("ClickSiteModel"); BTApp::importModel("ClickAdvancedModel"); BTApp::importModel("ClickPassthroughModel"); ClickSiteModel::model()->deleteOldData(); ClickAdvancedModel::model()->deleteOldData(); ClickModel::model()->deleteOldData(); ClickPassthroughModel::model()->deleteOldData(); }
public function cloakerAction() { if (!($ip = $_POST['ip'])) { echo '0'; exit; } if (!($slug = $_POST['slug'])) { echo '0'; exit; } $row = DB::getRow("select * from bt_u_campaigns camp left join bt_u_cloakers cloak on cloak.cloaker_id=camp.cloaker_id\nwhere ((cloak.slug > '' and concat('/',cloak.slug,'/',camp.slug)='" . DB::quote($slug) . "')\nor (cloak.slug = '' and concat('/',camp.slug)='" . DB::quote($slug) . "'))"); $campaign = CampaignModel::model()->getRowFromPk($row['campaign_id']); $cloaker = $campaign->cloaker; if (!$campaign) { echo '0'; exit; } $ip_id = INDEXES::get_ip_id($ip); $referer = isset($_POST['referer']) ? $_POST['referer'] : ''; $user_agent = isset($_POST['user_agent']) ? $_POST['user_agent'] : ''; $hostname = gethostbyaddr($ip); $_SERVER['REMOTE_ADDR'] = $ip; $_SERVER['HTTP_REFERER'] = $referer; $_SERVER['HTTP_USER_AGENT'] = $user_agent; $_GET = array(); parse_str($_POST['query'], $_GET); $paused_redir = false; if ($campaign->option('advanced_redirect_status')->value) { $num_prev_visits = ClickAdvancedModel::getNumPreviousClicks($campaign->id(), $ip_id); $options = $cloaker->options; foreach ($options as $opt) { $opts[$opt->name] = $opt->value; } $opts = array_merge(CloakerOptionModel::defaultOptions(), $opts); $url = ''; //Check 1: blank referer? /*if(!trim($referer)) { $url = $opts['exclude_url']; }*/ $ip = DB::quote(ip2long($ip)); $referer = DB::quote($referer); $user_agent = DB::quote($user_agent); $hostname = DB::quote($hostname); $cloaker_id = DB::quote($cloaker->cloaker_id); if (!$url) { if (!($row = DB::getRow("select url from bt_u_cloaker_ips where cloaker_id='{$cloaker_id}' and ip_from <= '{$ip}' and ip_to >= '{$ip}'", null))) { if (!($row = DB::getRow("select url from bt_u_cloaker_referers where cloaker_id='{$cloaker_id}' and '{$referer}' REGEXP referer", null))) { if (!($row = DB::getRow("select url from bt_u_cloaker_hostnames where cloaker_id='{$cloaker_id}' and '{$hostname}' REGEXP hostname", null))) { $row = DB::getRow("select url from bt_u_cloaker_user_agents where cloaker_id='{$cloaker_id}' and '{$user_agent}' REGEXP user_agent", null); } } } } /******** ORG CHECK ***********/ // We always check the server too, in case the visitor is a known super-bad guy who should be // avoided, at all costs. if (!isset($opts['organizations'])) { $opts['organizations'] = '[]'; } $orgs_data = json_decode($opts['organizations']); $orgs = array(); foreach ($orgs_data as $data) { $orgs[] = $data[0]; } //CHECK BALLISTIC API SERVER $payload = array('ip' => getArrayVar($_POST, 'ip'), 'user_agent' => getArrayVar($_POST, 'user_agent'), 'orgs' => implode(',', $orgs), 'has_referer' => $_SERVER['HTTP_REFERER'] ? '1' : '0', 'version' => '1.0'); $ch = curl_init(API_SERVER . '/check.php?' . http_build_query($payload)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($ch); $org_url = ''; if ($ret != 0) { foreach ($orgs_data as $data) { if ($data[0] == $ret) { $org_url = $data[1]; } } if (!$org_url) { $org_url = $opts['exclude_url']; } } /****** END ORG CHECK *********/ if (!$url) { if (!$row) { //only use org url if it did not match any filtets locally $url = $org_url; } else { // found local match $url = $row['url'] ? $row['url'] : $opts['exclude_url']; } } //handle expiration first if (!$url && $campaign->option('adv_redir_clicks')->value < $opts['expiration']) { $is_cloaked = 1; $url = $opts['exclude_url']; } elseif (!$url && ($opts['clickfrequency'] && $num_prev_visits >= $opts['clickfrequency'])) { $is_cloaked = 1; $url = $opts['exclude_url']; } elseif (!isset($url) || !$url) { //redirect to offer, no cloak $is_cloaked = 0; $url = ''; } else { $is_cloaked = 1; } //Uptick click count, regardless of cloak status $clicks = $campaign->option('adv_redir_clicks'); $clicks->value = $clicks->value + 1; $clicks->save(); } else { $options = $cloaker->options; foreach ($options as $opt) { $opts[$opt->name] = $opt->value; } $opts = array_merge(CloakerOptionModel::defaultOptions(), $opts); //if the adv. redirect is paused $is_cloaked = 0; $url = $opts['exclude_url']; $paused_redir = true; } //save click data, this will also set the clickid cookie :) $tracker_controller = new TrackerController(); $url = $tracker_controller->saveData($campaign, $is_cloaked, $url); if (!$is_cloaked && !$paused_redir) { //record uncloaked (normal) visitors. First we redirect through the tracking system $click_id = $_COOKIE['btclickid']; $type = $campaign->option('redirect_method')->value; echo getBTUrl() . "/tracker/advRedirect/?click_id={$click_id}&t={$type}"; } else { if (!$is_cloaked && $paused_redir) { echo $url; } else { echo $url; } } exit; }
public function saveData($campaign, $cloaked = 0, $outbound_url = '') { $offer_id = 0; $landing_page_id = 0; if ($campaign->type == 2) { $campoffer = rotateDirectCampaign($campaign); if (!$campoffer) { BTApp::log("Direct Link: Invalid Offers For Tracker: " . $campaign->id(), 'direct', BT_SYSLOG_CRITICAL); } $payout = $campoffer->offer->payout; $offer_id = $campoffer->offer->id(); } else { if ($campaign->type == 1) { $camplp = rotateLPCampaign($campaign); $payout = 0; $landing_page = $camplp->landing_page; $landing_page_id = $landing_page->id(); if (!$landing_page) { BTApp::log("Landing Page: Invalid Landing Page ID: " . $landing_page_id . " For Tracker: " . $campaign->id(), 'direct', BT_SYSLOG_CRITICAL); } } } $ip_id = INDEXES::get_ip_id($_SERVER['REMOTE_ADDR']); $click = new ClickModel(); $click->offer_id = $offer_id; $click->landing_page_id = $landing_page_id; $click->traffic_source_id = $campaign->traffic_source_id; $click->payout = $payout; $click->filtered = FILTER::startFilter($ip_id); $click->user_id = $campaign->user_id; $click->cloaked = $cloaked; $click->campaign_id = $campaign->id(); $click->useRuleSet("track"); $click->save(); $vars = saveTrackingVariables($campaign); //if behind cloaker scripts, we use $_POST. Otherwise (normally) use HTTP_REFERER $referer = isset($_POST['referer']) ? $_POST['referer'] : getArrayVar($_SERVER, 'HTTP_REFERER'); $keyword = getArrayVar($_GET, $campaign->option('var_kw')->value); if (!$keyword) { $keyword = getArrayVar($_GET, 'kw'); if (!$keyword) { $keyword = getArrayVar($_GET, 'keyword'); } } $keyword_id = INDEXES::get_keyword_id($keyword); $platform = INDEXES::get_platform_and_browser_id(); $organization_id = 0; $geo_block_id = 0; $device_id = 0; require BT_ROOT . '/private/includes/traffic/devices_detect_inc.php'; $adv = new ClickAdvancedModel(); $adv->click_id = $click->id(); $adv->keyword_id = $keyword_id; $adv->ip_id = $ip_id; $adv->platform_id = $platform['platform']; $adv->browser_id = $platform['browser']; $adv->org_id = $organization_id; $adv->device_id = $device_id; $adv->v1_id = $vars['v1_id']; $adv->v2_id = $vars['v2_id']; $adv->v3_id = $vars['v3_id']; $adv->v4_id = $vars['v4_id']; $adv->location_id = $geo_block_id; $adv->campaign_id = $campaign->id(); $adv->useRuleSet('track'); $adv->save(); $data = $vars; $data['keyword'] = $keyword; $data['clickid'] = base_convert($click->click_id, 10, 36); if ($offer_id) { if ($outbound_url) { $redirect_url = $outbound_url; } else { $redirect_url = $campoffer->offer->url; $redirect_url = replaceTrackerPlaceholders($redirect_url, $data); } $landing_url = ''; } else { $redirect_url = ''; if ($outbound_url) { $landing_url = $outbound_url; } else { $landing_url = $landing_page->url; } } //set the cookie setClickIdCookie(base_convert($click->click_id, 10, 36)); $site = new ClickSiteModel(); $site->click_id = $click->id(); $site->referer_url = $referer; $site->referer_domain = getUrlDomain($referer); $site->offer_url = $redirect_url; $site->landing_url = $landing_url; $site->useRuleSet('track'); $site->save(); $pass_vars = array(); $to_append = ''; if ($landing_page_id) { $type = 'lp'; } else { $type = 'offer'; } foreach ($campaign->options as $option) { if (strpos($option->name, 'pass_') === 0) { $var_name = substr($option->name, 5); $val = getArrayVar($_GET, $var_name, ''); $pass = new ClickPassthroughModel(); $pass->click_id = $click->click_id; $pass->name = $var_name; $pass->value = $val; $pass->useRuleSet('track'); $pass->save(); $pass_vars[$var_name] = $pass; } } $to_append = http_build_query($this->getPassthroughsToAppend($campaign, $pass_vars, $type)); if ($offer_id) { //direct return appendQueryString($redirect_url, $to_append); } else { //lp return appendQueryString($landing_url, $to_append); } }