public function indexAction()
 {
     //get the aff_camapaign_id
     $mysql['use_pixel_payout'] = 0;
     //see if it has the cookie in the campaign id, then the general match, then do whatever we can to grab SOMETHING to tie this lead to
     if ($_COOKIE['btclickid']) {
         $click_pid = $_COOKIE['btclickid'];
     } else {
         //ok grab the last click from this ip_id
         $mysql['ip_address'] = DB::quote($_SERVER['REMOTE_ADDR']);
         $daysago = time() - 2592000;
         // 30 days ago
         $click_sql1 = "\tSELECT \tbt_s_clicks.click_id\n\t\t\t\t\t\t\tFROM \t\tbt_s_clicks\n\t\t\t\t\t\t\tLEFT JOIN\tbt_s_clicks_advanced USING (click_id)\n\t\t\t\t\t\t\tLEFT JOIN \tbt_s_ips USING (ip_id)\n\t\t\t\t\t\t\tWHERE \tbt_s_ips.ip_address='" . $mysql['ip_address'] . "'\n\t\t\t\t\t\t\tAND\t\tbt_s_clicks.time >= '" . $daysago . "'\n\t\t\t\t\t\t\tORDER BY \tbt_s_clicks.click_id DESC\n\t\t\t\t\t\t\tLIMIT \t\t1";
         $click_row1 = DB::getRow($click_sql1);
         $click_pid = base_convert($click_row1['click_id'], 10, 36);
         $mysql['ad_account_id'] = DB::quote($click_row1['ad_account_id']);
     }
     $click = ClickModel::model()->getRow(array('conditions' => array('click_id' => base_convert($click_pid, 36, 10))));
     if (!$click) {
         BTApp::end();
     }
     if ($click->get('ad_account_id')) {
         if (getArrayVar($_GET, 'amount') && is_numeric($_GET['amount'])) {
             $mysql['use_pixel_payout'] = 1;
         }
         if ($mysql['use_pixel_payout'] == 1) {
             $click->convert(0, $_GET['amount']);
         } else {
             $click->convert();
         }
         if ($click->campaign->option('pixel_type')->value) {
             $sql = "select v1.var_value as v1, v2.var_value as v2, v3.var_value as v3, v4.var_value as v4 from bt_s_clicks_advanced adv\n\t\t\t\t\tleft join bt_s_variables v1 on (v1.var_id=adv.v1_id)\n\t\t\t\t\tleft join bt_s_variables v2 on (v2.var_id=adv.v2_id)\n\t\t\t\t\tleft join bt_s_variables v3 on (v3.var_id=adv.v3_id)\n\t\t\t\t\tleft join bt_s_variables v4 on (v4.var_id=adv.v4_id)\n\t\t\t\t\twhere adv.click_id=?";
             $st = DB::prepare($sql);
             $st->execute(array($click->id()));
             $row = $st->fetch();
             $data['v1'] = $row['v1'];
             $data['v2'] = $row['v2'];
             $data['v3'] = $row['v3'];
             $data['v4'] = $row['v4'];
             $data['clickid'] = $click->id();
             $data['keyword'] = '';
             $data['amount'] = $click->payout;
             $code = replaceTrackerPlaceholders($click->campaign->option('pixel_code')->value, $data);
             $code = str_replace('[[amount]]', $data['amount'], $code);
             switch ($click->campaign->option('pixel_type')->value) {
                 case 1:
                 case 2:
                 case 3:
                     echo $code;
                     break;
                 case 4:
                     $ch = curl_init($code);
                     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 Postback-Bot v1.0');
                     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                     curl_exec($ch);
                     break;
             }
         }
     }
 }
 public function afterDataSet()
 {
     parent::afterDataSet();
     $default = getArrayVar(self::$_defaultOpts, $this->name);
     if ($this->value == null) {
         $this->value = $default;
     }
 }
function getUrlDomain($url)
{
    if (!$url) {
        return '';
    }
    $parsed_url = @parse_url($url);
    $domain_host = getArrayVar($parsed_url, 'host');
    $domain_host = str_replace('www.', '', $domain_host);
    return $domain_host;
}
Пример #4
0
function saveTrackingVariables($campaign)
{
    $mysql = array();
    $v1 = DB::quote(getArrayVar($_GET, $campaign->option('var_v1')->value));
    $v2 = DB::quote(getArrayVar($_GET, $campaign->option('var_v2')->value));
    $v3 = DB::quote(getArrayVar($_GET, $campaign->option('var_v3')->value));
    $v4 = DB::quote(getArrayVar($_GET, $campaign->option('var_v4')->value));
    if (!$v1) {
        $v1 = DB::quote(getArrayVar($_GET, 'subid1'));
    }
    if (!$v2) {
        $v2 = DB::quote(getArrayVar($_GET, 'subid2'));
    }
    if (!$v3) {
        $v3 = DB::quote(getArrayVar($_GET, 'subid3'));
    }
    if (!$v4) {
        $v4 = DB::quote(getArrayVar($_GET, 'subid4'));
    }
    $v1 = strtolower($v1);
    $v2 = strtolower($v2);
    $v3 = strtolower($v3);
    $v4 = strtolower($v4);
    $row = DB::getRows("select var_id,LOWER(var_value) as var_value from bt_s_variables where var_value IN ('{$v1}','{$v2}','{$v3}','{$v4}')", 'var_value');
    if (!isset($row[$v1])) {
        DB::query("insert into bt_s_variables set var_value='{$v1}'");
        $row[$v1] = array('var_id' => DB::insertId(), 'var_value' => $v1);
    }
    if (!isset($row[$v2])) {
        DB::query("insert into bt_s_variables set var_value='{$v2}'");
        $row[$v2] = array('var_id' => DB::insertId(), 'var_value' => $v2);
    }
    if (!isset($row[$v3])) {
        DB::query("insert into bt_s_variables set var_value='{$v3}'");
        $row[$v3] = array('var_id' => DB::insertId(), 'var_value' => $v3);
    }
    if (!isset($row[$v4])) {
        DB::query("insert into bt_s_variables set var_value='{$v4}'");
        $row[$v4] = array('var_id' => DB::insertId(), 'var_value' => $v4);
    }
    $mysql['v1'] = $row[$v1]['var_value'];
    $mysql['v1_id'] = $row[$v1]['var_id'];
    $mysql['v2'] = $row[$v2]['var_value'];
    $mysql['v2_id'] = $row[$v2]['var_id'];
    $mysql['v3'] = $row[$v3]['var_value'];
    $mysql['v3_id'] = $row[$v3]['var_id'];
    $mysql['v4'] = $row[$v4]['var_value'];
    $mysql['v4_id'] = $row[$v4]['var_id'];
    return $mysql;
}
 public function IndexAction()
 {
     if (!getArrayVar($_GET, 'clickid')) {
         BTApp::log("No SubID", 'postback_pixel', BT_SYSLOG_CRITICAL);
     }
     $click_pid = getArrayVar($_GET, 'clickid');
     $mysql['click_id'] = DB::quote(base_convert($click_pid, 36, 10));
     $mysql['pixel_id'] = 0;
     $mysql['use_pixel_payout'] = 0;
     if ($click_pid) {
         if ($_GET['amount'] && is_numeric($_GET['amount'])) {
             $mysql['use_pixel_payout'] = 1;
             $mysql['payout'] = DB::quote($_GET['amount']);
         }
         $click = ClickModel::model()->getRow(array('conditions' => array('click_id' => $mysql['click_id'])));
         if (!$click) {
             BTApp::end();
         }
         if ($mysql['use_pixel_payout'] == 1) {
             $click->convert(0, $mysql['payout']);
         } else {
             $click->convert();
         }
         if ($click->campaign->option('pixel_type')->value == 4) {
             $data = array();
             $sql = "select v1.var_value as v1, v2.var_value as v2, v3.var_value as v3, v4.var_value as v4 from bt_s_clicks_advanced adv\n\t\t\t\t\tleft join bt_s_variables v1 on (v1.var_id=adv.v1_id)\n\t\t\t\t\tleft join bt_s_variables v2 on (v2.var_id=adv.v2_id)\n\t\t\t\t\tleft join bt_s_variables v3 on (v3.var_id=adv.v3_id)\n\t\t\t\t\tleft join bt_s_variables v4 on (v4.var_id=adv.v4_id)\n\t\t\t\t\twhere adv.click_id=?";
             $st = DB::prepare($sql);
             $st->execute(array($click->id()));
             $row = $st->fetch();
             $data['v1'] = $row['v1'];
             $data['v2'] = $row['v2'];
             $data['v3'] = $row['v3'];
             $data['v4'] = $row['v4'];
             $data['clickid'] = $click->id();
             $data['keyword'] = '';
             $data['amount'] = $click->payout;
             $pb_url = replaceTrackerPlaceholders($click->campaign->option('pixel_code')->value, $data);
             $pb_url = str_replace('[[amount]]', $data['amount'], $pb_url);
             $ch = curl_init($pb_url);
             curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 Postback-Bot v1.0');
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
             curl_exec($ch);
         }
     }
 }
Пример #6
0
function doReportExport($name, $callback, $type, $column_labels)
{
    if ($type != 'csv') {
        return false;
    }
    $file_name = BT_ROOT . '/bt-config/cache/' . $name . '_' . getUserID() . '.' . $type;
    $fh = fopen($file_name, 'w+');
    $page_cnt = 1000;
    $_GET['iDisplayStart'] = 0;
    $_GET['iDisplayLength'] = $page_cnt;
    extract(call_user_func($callback));
    fputcsv($fh, explode(',', $column_labels));
    if ($data) {
        do {
            switch ($type) {
                case 'csv':
                    foreach ($data as $row) {
                        $real_row = array();
                        foreach ($cols as $col) {
                            $value = getArrayVar($row, $col);
                            //if it has spaces, for example mobile breakdown
                            $value = str_replace(' ', ' ', $value);
                            $real_row[] = formatColumnValue($col, $value);
                        }
                        fputcsv($fh, $real_row);
                    }
            }
            $_GET['iDisplayStart'] += $page_cnt;
            extract(call_user_func($callback));
        } while ($data);
    }
    fclose($fh);
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $name . '.' . $type);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    $content = file_get_contents($file_name);
    echo $content;
}
 public function ajaxAction($command = '', $params = array())
 {
     switch ($command) {
         case 'data_spending':
             $start = getArrayVar($_GET, 'iDisplayStart', 0);
             $limit = getArrayVar($_GET, 'iDisplayLength', 10);
             $total_spends = SpendingModel::model()->count();
             $spends = SpendingModel::model()->getRows(array('order' => ' date desc, campaign_id asc '));
             $sEcho = $_GET['sEcho'];
             $data = array('sEcho' => (int) $sEcho, 'iTotalRecords' => (int) $total_spends, 'iTotalDisplayRecords' => (int) $total_spends, 'aaData' => array());
             foreach ($spends as $spend) {
                 $arr = array();
                 $arr[] = $spend->date;
                 $arr[] = $spend->campaign_id . ' - ' . $spend->campaign->name;
                 $arr[] = $spend->amount;
                 $arr[] = '<input type="hidden" class="spending_id" value="' . $spend->spending_id . '" /> <a href="#" class="delete_spend button small grey tooltip"><i class="icon-remove"></i></a>';
                 $data['aaData'][] = $arr;
             }
             echo json_encode($data);
             break;
     }
 }
Пример #8
0
 public static function logged_in()
 {
     $cookie = getArrayVar($_COOKIE, 'bt_auth');
     if (!$cookie) {
         return false;
     }
     $split = explode('|', $cookie);
     if (!is_array($split) || count($split) < 2) {
         self::set_auth_cookie('', time() - 3600);
         return false;
     }
     $key = DB::quote($split[0]);
     $user_id = DB::quote($split[1]);
     $cur_time = DB::quote(date('Y-m-d H:i:s', time()));
     //$session = DB::getRow("select session_id,expire, fingerprint from bt_s_authsessions where `success`='1' and `user_id`='$user_id' and `key`='$key' and `expire` > '$cur_time' order by session_id desc");
     $session = DB::getRow("select session_id,expire, fingerprint from bt_s_authsessions where `success`='1' and `user_id`='{$user_id}' and `key`='{$key}' order by session_id desc");
     if (!$session) {
         self::set_auth_cookie('', time() - 3600);
         return false;
     }
     $fingerprint = sha1($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR'] . $key);
     if ($session['fingerprint'] != $fingerprint) {
         self::set_auth_cookie('', time() - 3600);
         return false;
     }
     self::$expire = $session['expire'];
     self::$_authUserId = $split[1];
     //extend cookie length if non-ajax request
     if (!IS_AJAX) {
         $expire = time() + AUTH_SESSION_LENGTH * 60;
         $expire_format = DB::quote(date('Y-m-d H:i:s', $expire));
         self::set_auth_cookie($_COOKIE['bt_auth'], $expire);
         DB::query("update bt_s_authsessions set expire='" . $expire_format . "' where session_id='" . DB::quote($session['session_id']) . "'");
     }
     return true;
 }
 />
	</td>
	<td>
		<input type="text" name="exclude_hostname[]" style="width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;" value="<?php 
echo getArrayVar($_GET, 'hostname');
?>
" />
	</td>
	
	<td style="width: 7px; vertical-align: middle;">
		<span class="icon icon-double-angle-right"></span>
	</td>
	
	<td>
		<input type="text" class="exclude_url" name="exclude_hostname_url[]" style="width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;" value="<?php 
echo getArrayVar($_GET, 'url');
?>
" />
	</td>
	
	<td>
		<input type="text" name="exclude_hostname_memo[]" style="width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;" value="<?php 
echo getArrayVar($_GET, 'memo');
?>
" />
	</td>
	
	<td style="vertical-align: middle; width: 30px;">
		<img src="/theme/img/icons/16x16/delete.png" onclick="deleteDataRow(this);" style="cursor: pointer; width: 16px; height: 16px;" class="delete_hostname" /> 
	</td>
</tr>
 public function postPrefsAction()
 {
     $error = array();
     $mysql['campaign_type'] = @$_POST['campaign_type'];
     $mysql['click_filter'] = @$_POST['click_filter'];
     $mysql['user_mobile_breakdown_1'] = @$_POST['user_mobile_breakdown_1'];
     $mysql['user_mobile_breakdown_2'] = @$_POST['user_mobile_breakdown_2'];
     $mysql['user_mobile_breakdown_3'] = @$_POST['user_mobile_breakdown_3'];
     $mysql['user_mobile_breakdown_4'] = @$_POST['user_mobile_breakdown_4'];
     $mysql['traffic_source_id'] = @$_POST['traffic_source_id'];
     $mysql['breakdown'] = @$_POST['breakdown'];
     $mysql['campaign_id'] = @$_POST['campaign_id'];
     //predefined timelimit set, set the options
     if (@$_POST['time_predefined'] != '') {
         switch (@$_POST['time_predefined']) {
             case 'today':
             case 'yesterday':
             case 'last7':
             case 'last14':
             case 'last30':
             case 'thismonth':
             case 'lastmonth':
             case 'thisyear':
             case 'lastyear':
             case 'alltime':
                 $clean['time_predefined'] = @$_POST['time_predefined'];
                 break;
         }
         if (!isset($clean['time_predefined'])) {
             $error['time_predefined'] = '<div class="error">You choose an incorrect time user_preference</div>';
             echo $error['time_predefined'];
         }
     } else {
         $from = explode(' ', @$_POST['from']);
         $from = explode('/', $from[0]);
         $from_month = trim($from[0]);
         $from_day = trim($from[1]);
         $from_year = trim($from[2]);
         $to = explode(' ', @$_POST['to']);
         $to = explode('/', $to[0]);
         $to_month = trim($to[0]);
         $to_day = trim($to[1]);
         $to_year = trim($to[2]);
         //if from or to, validate, and if validated, set it accordingly
         if ($from != '' and checkdate($from_month, $from_day, $from_year) == false) {
             $error['date'] = '<div class="error">Wrong date format, you must use the following time format:   <strong>mm/dd/yyyy</strong></div>';
             echo $error['date'];
         } else {
             $clean['time_from'] = mktime(0, 0, 0, $from_month, $from_day, $from_year);
         }
         if ($to != '' and checkdate($to_month, $to_day, $to_year) == false) {
             $error['date'] = '<div class="error">Wrong date format, you must use the following time format:   <strong>mm/dd/yyyy</strong></div>';
             echo $error['date'];
         } else {
             $clean['time_to'] = mktime(23, 59, 59, $to_month, $to_day, $to_year);
         }
         if (!$error && $clean['time_to'] < $clean['time_from']) {
             $error['date'] = '<div class="error">The end date must be <strong>after</strong> the start date.</div>';
             echo $error['date'];
         }
     }
     if (!$error) {
         $mysql['time_predefined'] = getArrayVar($clean, 'time_predefined');
         $mysql['time_from'] = getArrayVar($clean, 'time_from');
         $mysql['time_to'] = getArrayVar($clean, 'time_to');
         $fields = getReportFieldsForPage($_POST['opt_setting']);
         DB::startTransaction();
         //Only add fields that should be on this page, so we don't overwrite other options
         foreach ($fields as $field => $val) {
             BTAuth::user()->setPref($field, $mysql[$field]);
         }
         DB::commit();
     }
 }
 protected function newCampaign()
 {
     $this->setupUser();
     DB::startTransaction();
     $traffic_source_id = getArrayVar($_POST, 'traffic_source_id');
     $cloaker_id = getArrayVar($_POST, 'cloaker_id');
     $slug = getArrayVar($_POST, 'slug');
     $name = getArrayVar($_POST, 'name');
     $type = getArrayVar($_POST, 'tracker_type');
     if (!$name) {
         echo json_encode(array('message' => 'Please name your campaign'));
         DB::rollback();
         BTApp::end();
     }
     if (!$traffic_source_id) {
         echo json_encode(array('message' => "You must select a network account"));
         DB::rollback();
         BTApp::end();
     }
     $campaign = CampaignModel::model();
     $campaign->traffic_source_id = $traffic_source_id;
     $campaign->cloaker_id = $cloaker_id;
     $campaign->name = $name;
     if ($cloaker_id) {
         if (!$slug) {
             echo json_encode(array('message' => 'Enter a URL slug'));
             DB::rollback();
             BTApp::end();
         }
         $campaign->slug = $slug;
     } else {
         $campaign->slug = '';
     }
     $offer_prepend = '';
     switch ($type) {
         case 'lp':
             $campaign->type = 1;
             $offer_prepend = 'lp';
             break;
         case 'direct':
             $campaign->type = 2;
             break;
     }
     $campaign->save();
     $position = 0;
     for ($i = 0, $cnt = count($_POST[$offer_prepend . 'offer_name']); $i < $cnt; $i++) {
         if ($_POST[$offer_prepend . 'offer_id'][$i]) {
             $offer = OfferModel::model()->getRowFromPk($_POST[$offer_prepend . 'offer_id'][$i]);
         } else {
             $offer = OfferModel::model();
         }
         $offer->aff_network_id = $_POST[$offer_prepend . 'offer_aff_network_id'][$i];
         $offer->name = $_POST[$offer_prepend . 'offer_name'][$i];
         $offer->url = $_POST[$offer_prepend . 'offer_url'][$i];
         $offer->payout = $_POST[$offer_prepend . 'offer_payout'][$i];
         if (!$offer->save()) {
             echo json_encode(array('message' => 'Could not save offers'));
             DB::rollback();
             BTApp::end();
         }
         $campoffer = CampaignOfferModel::model();
         $campoffer->campaign_id = $campaign->id();
         $campoffer->offer_id = $offer->id();
         switch ($type) {
             case 'lp':
                 //Todo: add in LP offer rotation here. Same position, multiple entries & weights.
                 $campoffer->position = $position;
                 $campoffer->weight = 0;
                 //$lp = LandingPageModel::model();
                 $position++;
                 break;
             case 'direct':
                 $campoffer->position = 0;
                 $campoffer->weight = $_POST['offer_weight'][$i];
                 break;
         }
         if (!$campoffer->save()) {
             echo json_encode(array('message' => 'Could not save campaign offers'));
             DB::rollback();
             BTApp::end();
         }
     }
     switch ($type) {
         case 'lp':
             for ($i = 0, $cnt = count($_POST['lp_name']); $i < $cnt; $i++) {
                 $lp = LandingPageModel::model();
                 $lp->name = $_POST['lp_name'][$i];
                 $lp->url = $_POST['lp_url'][$i];
                 if (!$lp->save()) {
                     echo json_encode(array('message' => 'Could not save LPs'));
                     DB::rollback();
                     BTApp::end();
                 }
                 $camp_lp = CampaignLPModel::model();
                 $camp_lp->campaign_id = $campaign->id();
                 $camp_lp->landing_page_id = $lp->id();
                 $camp_lp->weight = $_POST['lp_weight'][$i];
                 if (!$camp_lp->save()) {
                     echo json_encode(array('message' => 'Could not save campaign LPs'));
                     DB::rollback();
                     BTApp::end();
                 }
             }
             break;
     }
     foreach ($_POST['opt'] as $name => $val) {
         if (!$campaign->addOption($name, $val)) {
             DB::rollback();
             echo json_encode(array('message' => 'Could not save options'));
             BTApp::end();
         }
     }
     for ($j = 0, $cnt = count($_POST['variable_name']); $j < $cnt; $j++) {
         $name = $_POST['variable_name'][$j];
         $pass_lp = $_POST['variable_lp'][$j];
         $pass_offer = $_POST['variable_offer'][$j];
         $name = 'pass_' . $name;
         if ($campaign->type == 1) {
             $val = json_encode(array('lp' => $pass_lp, 'offer' => $pass_offer));
         } else {
             $val = json_encode(array('offer' => '1'));
         }
         if (!$campaign->addOption($name, $val)) {
             DB::rollback();
             echo json_encode(array('message' => 'Could not save Variables Passthroughs'));
             BTApp::end();
         }
     }
     DB::commit();
     echo json_encode(array('message' => '1', 'campaign_id' => $campaign->id()));
 }
Пример #12
0
function runBreakdown($user_pref)
{
    //grab time
    $time = grab_timeframe();
    //get breakdown pref
    $mysql['user_id'] = DB::quote(getUserID());
    $filtered = getFilteredCondition();
    //breakdown should be hour, day, month, or year.
    $breakdown = BTAuth::user()->getPref('breakdown');
    //first delete old report
    $breakdown_sql = "\n\t\t\tDELETE\n\t\t\tFROM bt_c_statcache\n\t\t\tWHERE user_id='" . $mysql['user_id'] . "' and type='breakdown'\n\t\t";
    DB::query($breakdown_sql);
    //($breakdown_sql);
    //find where to start from.
    $datetype = '';
    //breakdown format
    if ($breakdown == 'day') {
        $datetype = '%Y-%m-%d';
    } else {
        if ($breakdown == 'month') {
            $datetype = '%Y-%m';
        } else {
            if ($breakdown == 'year') {
                $datetype = '%Y';
            }
        }
    }
    //BTApp::end();
    $start = $time['from'];
    $end = $time['to'];
    $spend_from = date("Y-m-d", $start);
    $spend_to = date("Y-m-d", $end);
    /****GET SPENDING****/
    $sql = "select sum(amount) as cost, FROM_UNIXTIME(UNIX_TIMESTAMP(date),'{$datetype}') as date from bt_u_spending \n\t\t\t\twhere date >= '{$spend_from}' and date <= '{$spend_to}' ";
    $sql .= getSpendingReportFilters('bt_u_spending', getReportOptionsForPage('overview/breakdown'));
    $sql .= "group by date";
    $spending_data = DB::getRows($sql, 'date');
    /****END SPENDING****/
    $offset = date('Z');
    $bulk = new DB_Bulk_Insert('bt_c_statcache', array('user_id', 'time_from', 'time_to', 'type'));
    $x = 0;
    while ($end > $start) {
        if ($breakdown == 'day') {
            $yr = date('Y', $start);
            $mo = date('m', $start);
            $dy = date('d', $start);
            $from = mktime(0, 0, 0, $mo, $dy, $yr);
            $to = mktime(23, 59, 59, $mo, $dy, $yr);
            $start = $to + 1;
        } elseif ($breakdown == 'month') {
            $yr = date('Y', $start);
            $mo = date('m', $start);
            $from = mktime(0, 0, 0, $mo, 1, $yr);
            $to = mktime(23, 59, 59, $mo + 1, 0, $yr);
            $start = $to + 1;
        } elseif ($breakdown == 'year') {
            $yr = date('Y', $start);
            $from = mktime(0, 0, 0, 1, 1, $yr);
            $to = mktime(23, 59, 59, 1, 0, $yr + 1);
            $start = $to + 1;
        }
        $bulk->insert(array($mysql['user_id'], "FROM_UNIXTIME('" . $from . "','{$datetype}')", "FROM_UNIXTIME('" . $to . "','{$datetype}')", "'breakdown'"));
    }
    $bulk->execute();
    $user_id = DB::quote(getUserID());
    $start = DB::quote($time['from']);
    $end = DB::quote($time['to']);
    $sql = "\n\t\tSELECT COUNT(*) AS clicks, (SUM(click.payout*click.lead) / sum(click.lead)) as payout, SUM(click.lead) AS leads, SUM(click.payout*click.lead) AS income, \n\t\tFROM_UNIXTIME(click.time + {$offset},'{$datetype}') as date\n\n\t\tFROM \n\t\t";
    $sql .= getReportFilters('overview/breakdown');
    $sql .= "\n\t\tgroup by date\n\t\torder by null\n\t\t";
    //echo $sql . "<br>";
    //echo $click_sql;
    $click_rows = DB::getRows($sql);
    foreach ($click_rows as $click_row) {
        //get the stats
        $clicks = 0;
        $clicks = $click_row['clicks'];
        $mysql['date'] = $click_row['date'];
        if ($clicks) {
            $cost = getArrayVar($spending_data, $click_row['date'], array('cost' => 0));
            $cost = $cost['cost'];
            $avg_cpc = calculate_cpc($clicks, $cost);
        } else {
            $avg_cpc = 0;
            $cost = 0;
        }
        //leads
        $leads = $click_row['leads'];
        //signup ratio
        $conv = calculate_conv($clicks, $leads);
        //were not using payout
        //current payout
        $payout = $click_row['payout'];
        //income
        $income = 0;
        $income = $click_row['income'];
        //grab the EPC
        $epc = calculate_epc($clicks, $income);
        //net income
        $net = 0;
        $net = $income - $cost;
        //roi
        $roi = calculate_roi($income, $cost);
        //html escape vars
        $mysql['clicks'] = DB::quote($clicks);
        $mysql['leads'] = DB::quote($leads);
        $mysql['conv'] = DB::quote($conv);
        $mysql['epc'] = DB::quote($epc);
        $mysql['avg_cpc'] = DB::quote($avg_cpc);
        $mysql['income'] = DB::quote($income);
        $mysql['cost'] = DB::quote($cost);
        $mysql['net'] = DB::quote($net);
        $mysql['roi'] = DB::quote($roi);
        $mysql['payout'] = DB::quote($payout);
        //insert chart
        $sort_breakdown_sql = "\n\t\t\t\tupdate\n\t\t\t\t\tbt_c_statcache\n\t\t\t\tSET\n\t\t\t\t\tclicks='" . $mysql['clicks'] . "',\n\t\t\t\t\tleads='" . $mysql['leads'] . "',\n\t\t\t\t\tconv='" . $mysql['conv'] . "',\n\t\t\t\t\tpayout='" . $mysql['payout'] . "',\n\t\t\t\t\tepc='" . $mysql['epc'] . "',\n\t\t\t\t\tcpc='" . $mysql['avg_cpc'] . "',\n\t\t\t\t\tincome='" . $mysql['income'] . "',\n\t\t\t\t\tcost='" . $mysql['cost'] . "',\n\t\t\t\t\tnet='" . $mysql['net'] . "',\n\t\t\t\t\troi='" . $mysql['roi'] . "'\n\t\t\t\t\t\n\t\t\t\t\twhere\n\t\t\t\t\t\n\t\t\t\t\ttime_from='" . $mysql['date'] . "' and\n\t\t\t\t\tuser_id='" . $mysql['user_id'] . "' and\n\t\t\t\t\ttype='breakdown'";
        DB::query($sort_breakdown_sql);
        //($sort_breakdown_sql);
    }
}
Пример #13
0
 public static function getBrowserName($id)
 {
     $browsers = self::getBrowsers();
     return getArrayVar($browsers, $id);
 }
 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);
     }
 }
Пример #15
0
 public function get($val)
 {
     return getArrayVar($this->_data, $val);
 }
 public function affNetworksAction()
 {
     $this->useActionAsCurrentNav();
     $add_success = false;
     $delete_success = false;
     $error = '';
     if (isset($_POST['name'])) {
         if (isset($_POST['aff_network_id']) && $_POST['aff_network_id']) {
             $network = AffNetworkModel::model()->getRow(array('conditions' => array('aff_network_id' => $_POST['aff_network_id'])));
             $network->useRuleSet("edit");
         } else {
             $network = AffNetworkModel::model();
             $network->useRuleSet("new");
         }
         $network->name = $_POST['name'];
         if ($network->save()) {
             $this->setVar("success", "Network Saved");
         } else {
             $this->setVar('error', $network->getErrors());
         }
     } else {
         if (isset($_GET['delete_aff_network_id'])) {
             $network = AffNetworkModel::model()->getRow(array('conditions' => array('aff_network_id' => $_GET['delete_aff_network_id'])));
             if ($network) {
                 $network->delete();
                 $this->setVar("success", "Network Deleted");
             }
         }
     }
     $id = getArrayVar($_GET, 'aff_network_id', 0);
     if (!($network = AffNetworkModel::model()->getRowFromPk($id))) {
         $network = AffNetworkModel::model();
     }
     $this->setVar("title", "Affiliate Networks");
     $aff_networks = AffNetworkModel::model()->getRows(array('order' => 'name asc'));
     $this->setVar('network', $network);
     $this->setVar('aff_networks', $aff_networks);
     $this->render("offers/aff_networks");
 }
Пример #17
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;
 }
Пример #18
0
function getDatatablesReportJson($report_data, $total_entries, $cols)
{
    $sEcho = $_GET['sEcho'];
    $data = array('sEcho' => (int) $sEcho, 'iTotalRecords' => $total_entries, 'iTotalDisplayRecords' => $total_entries, 'aaData' => array());
    foreach ($report_data as $row) {
        $html = array();
        foreach ($cols as $col) {
            $value = getArrayVar($row, $col, null);
            if ($value === null) {
                $html[] = '';
            } else {
                switch ($col) {
                    case 'label':
                    case 'actions':
                        $html[] = formatColumnValue($col, $value);
                        break;
                    default:
                        $html[] = BTHtml::encode(formatColumnValue($col, $value));
                        break;
                }
            }
        }
        $data['aaData'][] = $html;
    }
    return json_encode($data);
}