コード例 #1
0
 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();
 }
コード例 #2
0
 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;
 }
コード例 #3
0
 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);
     }
 }