function proceed_old($data) { // Default account currency id: 16; RUB $main_currency_id = 16; $lead = ''; $sale = ''; if (isset($data['s'])) { $arr_currencies = get_active_currencies(); $conversion_currency_code = strtoupper($data['c']); if ($conversion_currency_code == 'RUB') { $conversion_currency_code = 'RUR'; } $conversion_currency_id = 0; foreach ($arr_currencies as $id => $cur) { if ($cur['code'] == $conversion_currency_code) { $conversion_currency_id = $id; } } // Currency is not found in active, use default currency if ($conversion_currency_id == 0) { $conversion_currency_id = $main_currency_id; } if ($conversion_currency_id == $main_currency_id) { $conversion_profit = $data['a']; } else { $conversion_profit = convert_currency($data['a'], $conversion_currency_id, $main_currency_id, date('Y-m-d')); } $conversion_profit_currency = $data['a']; $r = mysql_query('SELECT `id` FROM `tbl_clicks` WHERE `subid` = "' . mysql_real_escape_string($data['s']) . '"'); if (mysql_num_rows($r) > 0) { $f = mysql_fetch_assoc($r); switch ($data['t']) { case 'lead': $lead = ',`is_lead` = 1'; break; case 'sale': $sale = ', `is_sale` = 1'; break; } if (($sale != '' || $lead != '') && isset($data['a'])) { mysql_query("UPDATE `tbl_clicks` SET\n `conversion_currency_sum`='" . mysql_real_escape_string($conversion_profit_currency) . "',\n `conversion_currency_id`='" . mysql_real_escape_string($conversion_currency_id) . "',\n `conversion_price_main` = '" . mysql_real_escape_string($conversion_profit) . "' " . $lead . $sale . ' WHERE `id` = ' . $f['id']); } } $r = mysql_query('SELECT `id` FROM `tbl_conversions` WHERE `subid` = "' . mysql_real_escape_string($data['s']) . '"'); if (mysql_num_rows($r) > 0) { $f = mysql_fetch_assoc($r); if (isset($data['a'])) { mysql_query("UPDATE `tbl_conversions` SET\n `currency_id`='" . mysql_real_escape_string($conversion_currency_id) . "',\n `profit_currency`='" . mysql_real_escape_string($conversion_profit_currency) . "',\n `profit` = '" . mysql_real_escape_string($conversion_profit) . "'\n WHERE\n `id` = '" . mysql_real_escape_string($f['id']) . "'"); } } else { mysql_query("INSERT INTO `tbl_conversions` (`network`, `currency_id`, `profit_currency`, `profit`, `subid`, `status`, `t20`, `date_add`) " . "VALUES\n (\n '" . mysql_real_escape_string($data['n']) . "',\n '" . mysql_real_escape_string($conversion_currency_id) . "',\n '" . mysql_real_escape_string($conversion_profit_currency) . "',\n '" . mysql_real_escape_string($conversion_profit) . "',\n '" . mysql_real_escape_string($data['s']) . "',\n 1,\n '" . mysql_real_escape_string($data['c']) . "', NOW()\n )"); } } }
<?php if (!$include_flag) { exit; } echo '<script src="' . _HTML_LIB_PATH . '/chartjs/Chart.js"></script>'; echo '<script src="' . _HTML_LIB_PATH . '/mustache/mustache.js"></script>'; include _TRACK_SHOW_COMMON_PATH . '/lib/mustache/Autoloader.php'; Mustache_Autoloader::register(_TRACK_SHOW_COMMON_PATH . '/lib/mustache'); $mTemplate = new Mustache_Engine(array('loader' => new Mustache_Loader_FilesystemLoader(_TRACK_SHOW_COMMON_PATH . '/templates/views'))); $arr_currencies_list = get_active_currencies(); $selected_currency = current($arr_currencies_list); $arr_report_data = prepare_report('main-report', $_REQUEST + array('report_params' => array('act' => 'reports'), 'type' => 'sales', 'main_column' => 'source_name')); list($more, $arr_flow_data, $s, $s1) = get_sales_flow_data($_REQUEST, 'flow_report'); $arr_report_data['flow_rows'] = $arr_flow_data; $arr_report_data['show_more'] = $more; // Fill sales table header names $arr_report_data['flow-table-header']['values'] = array('short_date' => array('caption' => 'Дата'), 'offer_name' => array('caption' => 'Оффер'), 'network' => array('caption' => 'Сеть'), 'source_name' => array('caption' => 'Источник'), 'campaign_name' => array('caption' => 'Кампания'), 'placement' => array('caption' => 'Площадка'), 'profit' => array('caption' => 'Сумма'), 'status' => array('caption' => 'Статус')); // ******************************************************************************** // Prepare data for sales chart $i = 0; $arr_sales_chart_data = array(); foreach ($arr_report_data['table-columns'] as $cur) { if ($i++ == 0) { continue; } $arr_sales_chart_data['captions'][] = "'" . $cur['caption'] . "'"; } $i = 0; $total_sales = 0; foreach ($arr_report_data['table-total']['values'] as $cur) {
function get_sales_flow_data($request_parameters, $report_name, $limit = 20, $offset = 0) { // Default currency for this account: RUB (16) $main_currency_id = 16; // Fill currency list global $arr_currencies_list; if (!(is_array($arr_currencies_list) && count($arr_currencies_list) > 0)) { $arr_currencies_list = get_active_currencies(); } $allowed_report_in_params = array('report_type' => 'actions_count', 'range_type' => 'daily', 'main_column' => 'source_name', 'filter_actions' => 'actions', 'filter_by' => '', 'filter_value' => '', 'currency_id' => '16', 'timezone_offset' => get_current_timezone_shift(), 'date_start' => get_current_day('-7 days'), 'date_end' => get_current_day(), 'report_period' => 'lastweek'); // Remove empty values and get only allowed keys $IN = array_replace($allowed_report_in_params, array_intersect_key(array_filter($request_parameters), $allowed_report_in_params)); // Add default report params $IN['report_params'] = isset($request_parameters['report_params']) ? $request_parameters['report_params'] : null; // Fill report range report_period_to_dates($IN); $sql_select = array(); $sql_join = array(); $sql_where = array(); $sql_order = array(); $sql_limit = 'LIMIT ' . _str($limit + 1) . ' OFFSET ' . _str($offset); // Apply timezone offset $date_add_tz = "CONVERT_TZ(tbl_conversions.date_add, '+00:00', '" . _str($IN['timezone_offset']) . "') as click_date"; if (in_array($IN['timezone_offset'], array('+00:00', '-00:00', '00:00'))) { $date_add_tz = 'tbl_conversions.date_add as click_date'; } $sql_select[] = $date_add_tz; if (in_array($IN['timezone_offset'], array('+00:00', '-00:00', '00:00'))) { // Same timezones in DB and report $sql_date_start = "'" . _str($IN['date_start']) . " 00:00:00'"; $sql_date_end = "'" . _str($IN['date_end']) . " 23:59:59'"; } else { $timezone_offset_inverted = timezone_shift_invert($IN['timezone_offset']); $sql_date_start = "CONVERT_TZ('" . _str($IN['date_start']) . " 00:00:00', '+00:00', '" . _str($timezone_offset_inverted) . "')"; $sql_date_end = "CONVERT_TZ('" . _str($IN['date_end']) . " 23:59:59', '+00:00', '" . _str($timezone_offset_inverted) . "')"; } if ($IN['filter_by'] == 'subid' && $IN['filter_value'] != '') { // Looking for sale, no need to limit search by date range $sql_where[] = "tbl_conversions.subid='" . _str($IN['filter_value']) . "'"; } else { $sql_where[] = "tbl_conversions.date_add BETWEEN {$sql_date_start} AND {$sql_date_end}"; } $sql_select[] = 'tbl_conversions.*'; $sql_order[] = 'date_add desc'; // 1. Get sales list $sql = 'SELECT ' . implode(', ', $sql_select) . ' FROM tbl_conversions ' . implode(' ', $sql_join) . ' WHERE ' . implode(' AND ', $sql_where) . ' ORDER BY ' . implode(', ', $sql_order) . "\n {$sql_limit}"; $result = mysql_query($sql); $arr_sales = array(); while ($row = mysql_fetch_assoc($result)) { $arr_sales["'" . _str($row['subid']) . "'"] = $row; } // 2. Get clicks for sales $arr_sales_clicks = array(); $arr_sales_subids = array_keys($arr_sales); $subids = implode(',', $arr_sales_subids); $sql = "select\n tbl_clicks.*,\n tbl_offers.offer_name\n FROM\n tbl_clicks\n left join\n tbl_offers on tbl_clicks.out_id=tbl_offers.id\n where\n subid in ({$subids})"; $result = mysql_query($sql); $arr_parent_ids = array(); while ($row = mysql_fetch_assoc($result)) { if ($row['parent_id'] > 0) { $arr_parent_ids[] = "'" . _str($row['parent_id']) . "'"; } $arr_sales_clicks["'" . _str($row['subid']) . "'"] = $row; } $parent_ids = implode(',', $arr_parent_ids); $sql = "select tbl_clicks.* from tbl_clicks where id in ({$parent_ids})"; $result = mysql_query($sql); $arr_parent_clicks = array(); while ($row = mysql_fetch_assoc($result)) { $arr_parent_clicks[$row['id']] = $row; } $arr_report_data = array(); function net_loader($class) { include_once _TRACK_LIB_PATH . '/postback/' . $class . '.php'; } spl_autoload_register('net_loader'); include _TRACK_LIB_PATH . "/class/common.php"; include _TRACK_LIB_PATH . "/class/custom.php"; $arr_default_network_params = array('date_add', 'profit', 'status', 'subid', 'txt_status', 'type'); $i = 0; $more = 0; foreach ($arr_sales as $subid => $row) { if ($i == $limit) { $more = 1; break; } $arr_report_data[$i]['short_date'] = mysqldate2short($row['click_date']); $arr_report_data[$i]['offer_name'] = $arr_sales_clicks[$subid]['offer_name']; // Network name $class_name = $row['network']; if (class_exists($class_name, true)) { $t = new $class_name(); if (method_exists($t, 'get_params_info')) { $arr_class_params = $t->get_params_info(); $arr_report_data[$i]['network_params'] = array(); foreach ($row as $key => $val) { if (isset($arr_class_params[$key]) && !in_array($key, $arr_default_network_params)) { if (trim($val) != '') { $arr_report_data[$i]['network_params']['values'][] = array('caption' => $arr_class_params[$key]['caption'], 'value' => $val); } } } } } $arr_report_data[$i]['network_name'] = $row['network']; $arr_report_data[$i]['source_name'] = $arr_sales_clicks[$subid]['source_name'] == '' ? '' : format_cell_value('source_name', $arr_sales_clicks[$subid]['source_name']); // Campaign name $arr_report_data[$i]['campaign_name'] = implode(' — ', array_filter(array($arr_sales_clicks[$subid]['campaign_name'], $arr_sales_clicks[$subid]['ads_name']))); $arr_report_data[$i]['placement'] = format_cell_value('referer_domain', $arr_sales_clicks[$subid]['referer_domain']); $arr_report_data[$i]['subid'] = $row['subid']; if ($row['currency_id'] == $IN['currency_id']) { $arr_report_data[$i]['profit'] = format_cell_value('profit', $row['profit_currency'], $IN); } else { $arr_report_data[$i]['profit'] = format_cell_value('profit', convert_currency($row['profit'], $main_currency_id, $IN['currency_id'], date('Y-m-d')), $IN); } // $arr_report_data[$i]['status']=$row['txt_status']; switch ($row['txt_status']) { case 'approved': $arr_report_data[$i]['status-icon'] = "fa fa-check"; $arr_report_data[$i]['status-title'] = "Подтвержден"; break; case 'waiting': $arr_report_data[$i]['status-icon'] = "fa fa-hourglass-o"; $arr_report_data[$i]['status-title'] = "В обработке"; break; case 'rejected': $arr_report_data[$i]['status-icon'] = "fa fa-close"; $arr_report_data[$i]['status-title'] = "Отклонен"; break; default: $arr_report_data[$i]['status'] = mb_strtolower($row['txt_status'], 'UTF-8'); break; } if (isset($arr_parent_clicks[$arr_sales_clicks[$subid]['parent_id']])) { // Fill sale parameters from parent click $arr_report_data[$i]['source_name'] = $arr_parent_clicks[$arr_sales_clicks[$subid]['parent_id']]['source_name']; } // FILL CLICK INFO if (isset($arr_parent_clicks[$subid])) { $click_info = $arr_parent_clicks[$subid]; } else { $click_info = $arr_sales_clicks[$subid]; } // Conversion ID $arr_report_data[$i]['conversion_id'] = $row['id']; // Date $arr_report_data[$i]['date'] = mysqldate2string($row['click_date']); // Location $arr_report_data[$i]['country'] = format_cell_value('country', $click_info['country']); $arr_report_data[$i]['location'] = implode(', ', array_filter(array($arr_report_data[$i]['country'], $click_info['state'], $click_info['city']))); // ISP $arr_report_data[$i]['isp'] = $click_info['isp']; // IP $arr_report_data[$i]['ip'] = $click_info['user_ip']; // Subaccount $arr_report_data[$i]['subaccount'] = $click_info['subaccount']; // SubID $arr_report_data[$i]['subid'] = $click_info['subid']; // OS $arr_report_data[$i]['os'] = implode(' ', array_filter(array($click_info['user_os'], $click_info['user_os_version']))); // Device $arr_report_data[$i]['device'] = implode(' ', array_filter(array($click_info['user_platform'], $click_info['user_platform_info'], $click_info['user_platform_info_extra']))); // Device type if ($click_info['is_phone'] == 1) { $arr_report_data[$i]['tablet_icon'] = 'phone'; } elseif ($click_info['is_tablet'] == 1) { $arr_report_data[$i]['tablet_icon'] = 'tablet'; } else { $arr_report_data[$i]['tablet_icon'] = ''; } // User-agent $arr_report_data[$i]['user_agent'] = $click_info['user_agent']; // Browser $arr_report_data[$i]['browser'] = implode(' ', array_filter(array($click_info['user_browser'], $click_info['user_browser_version']))); // Referer $referer_host = parse_url($click_info['referer'], PHP_URL_HOST); $referer = str_replace($referer_host, idn_to_utf8($referer_host), $click_info['referer']); $arr_report_data[$i]['full_referer'] = urldecode(str_replace(array('http://www.', 'www.'), '', $referer)); // Keyword $arr_report_data[$i]['keyword'] = $click_info['search_string']; // Link params campaign_param1, campaign_param2, campaign_param3, campaign_param4, campaign_param5 $campaign_params = params_list($click_info, 'campaign_param'); if (!empty($campaign_params)) { $arr_report_data[$i]['link_params'] = join('; ', $campaign_params); } // Visit params click_param_name1, click_param_value1, …, click_param_name15, click_param_value15 $click_params = params_list($click_info, 'click_param_value', $click_info['source_name']); if (!empty($click_params)) { $arr_report_data[$i]['click_params'] = join('; ', $click_params); } $i++; } return array($more, $arr_report_data, $offset); }
<label class="control-label">Currency<?php echo text_danger_template('*'); ?> </label> <div class="controls"> <select id="currency" class="span6 " data-placeholder="Choose a Category" tabindex="1"> <option value="<?php echo get_procurement_plan_entry_info($entry_id, 'currency_id'); ?> "><?php echo get_procurement_plan_entry_info($entry_id, 'currency'); ?> </option> <?php foreach (get_active_currencies() as $currency) { ?> <option value="<?php echo $currency['id']; ?> "><?php echo $currency['abbr']; ?> </option> <?php } ?> </select> </div> </div>
function process_conversion($data) { // Default account currency id: 16; RUB $main_currency_id = 16; $cnt = count($this->params); $i = 0; $is_lead = isset($data['is_lead']) ? 1 : 0; $is_sale = isset($data['is_sale']) ? 1 : 0; unset($data['is_lead']); unset($data['is_sale']); $arr_currencies = get_active_currencies(); $conversion_currency_code = strtoupper($data['txt_param20']); if ($conversion_currency_code == 'RUB') { $conversion_currency_code = 'RUR'; } $conversion_currency_id = 0; foreach ($arr_currencies as $id => $cur) { if ($cur['code'] == $conversion_currency_code) { $conversion_currency_id = $id; } } // Currency is not found in active, use default currency if ($conversion_currency_id == 0) { $conversion_currency_id = $main_currency_id; } if ($conversion_currency_id == $main_currency_id) { $conversion_profit = $data['profit']; } else { $conversion_profit = convert_currency($data['profit'], $conversion_currency_id, $main_currency_id, date('Y-m-d')); } $conversion_profit_currency = $data['profit']; // Специальная обработка "статусного постбэка" от сети CTR. // В этом случае приходит только статус, связанный с остальными данными через order_id (i3) // и нужно поменять статус соостветствующей конвертации. $ctr_order = false; // флаг, о том, что некоторые операции (замену логов) выполнять не нужно, // так как это не полный запрос, а только статус if ($data['network'] == 'CTR' and !empty($data['status'])) { $q = 'SELECT * FROM `tbl_conversions` WHERE (`i3` = "' . mysql_real_escape_string($data['i3']) . '" AND `network` = "CTR") LIMIT 1'; if ($rs = db_query($q) and mysql_num_rows($rs) > 0) { $r = mysql_fetch_assoc($rs); $data['subid'] = $r['subid']; } dmp($data); foreach ($data as $k => $v) { if (!in_array($k, array('network', 'i3', 'status', 'txt_status', 'ak', 'date_add', 'subid'))) { unset($data[$k]); } } $ctr_order = true; } if (isset($data['subid']) && $data['subid'] != '') { $table = 'tbl_clicks'; $subid = $data['subid']; // мы скоро обнулим массив data, а subid нам ещё понадобится $status = $data['status']; // Проверяем есть ли клик с этим SibID $q = 'SELECT `id`, `is_sale`, `is_lead` FROM `' . $table . '` WHERE `subid` = "' . mysql_real_escape_string($subid) . '"'; $r = mysql_query($q) or die($q . '<br />' . mysql_error()); if (mysql_num_rows($r) > 0) { $f = mysql_fetch_assoc($r); $click_id = $f['id']; if ($data['profit'] > 0) { $is_lead = $f['is_lead'] > 0 ? 1 : 0; $is_sale = 1; } else { $is_lead = 1; $is_sale = $f['is_sale'] > 0 ? 1 : 0; } $q = "UPDATE `" . $table . "` SET\n `is_sale` = " . intval($is_sale) . ",\n `is_lead` = " . intval($is_lead) . ",\n `conversion_currency_sum` = '" . mysql_real_escape_string($conversion_profit_currency) . "',\n `conversion_currency_id` = '" . mysql_real_escape_string($conversion_currency_id) . "',\n `conversion_price_main` = '" . mysql_real_escape_string($conversion_profit) . "'\n WHERE `id` = '" . mysql_real_escape_string($click_id) . "'"; mysql_query($q) or die(mysql_error()); } // ---------------------------- // Готовим данные для конверсии // ---------------------------- $upd = array(); // Инициализируем массив для запроса на обновление // Дополнительные поля, которых нет в $params, но которые нам нужны в БД $additional_fields = array('date_add', 'txt_status', 'status', 'network', 'type'); foreach ($data as $name => $value) { if (array_key_exists($name, $this->params) or in_array($name, $additional_fields)) { $upd[$name] = $value; unset($data[$name]); } } $upd['date_add'] = mysql_now(); // date('Y-m-d H:i:s'); $upd['profit'] = $conversion_profit; $upd['currency_id'] = $conversion_currency_id; $upd['profit_currency'] = $conversion_profit_currency; // Проверяем, есть ли уже конверсия с таким SubID $q = "SELECT * FROM `tbl_conversions` WHERE `subid` = '" . mysql_real_escape_string($subid) . "' LIMIT 1"; $r = db_query($q) or die(mysql_error()); if (mysql_num_rows($r) > 0) { $f = mysql_fetch_assoc($r); $upd['id'] = $conv_id = $f['id']; $q = updatesql($upd, 'tbl_conversions', 'id'); db_query($q); // Чистим логи if (!$ctr_order) { db_query('DELETE FROM `tbl_postback_params` WHERE `conv_id` = ' . $f['id']) or die(mysql_error()); } } else { $q = insertsql($upd, 'tbl_conversions'); db_query($q); $conv_id = mysql_insert_id(); } // Нужно ли нам отменить продажу? if ($status == 2) { delete_sale($click_id, $conv_id, 'sale'); } // Пишем postback логи foreach ($data as $name => $value) { if (strpos($name, 'pbsave_') !== false) { $name = str_replace('pbsave_', '', $name); $ins = array('conv_id' => $conv_id, 'name' => $name, 'value' => value); $q = insertsql($ins, 'tbl_postback_params'); db_query($q); } } } }
</div> </div> <div class="control-group <?php echo in_array('estimated_amount', $requiredfields) ? 'error' : ''; ?> "> <label class="control-label">Estimated amount <?php echo text_danger_template('*'); ?> </label> <div class="controls"> <select id="currency" class="input-small m-wrap" name="currency"> <?php echo get_select_options(get_active_currencies(), 'id', 'title', !empty($formdata['currency']) ? $formdata['currency'] : '1'); ?> </select> <input style="display:none" class=" input-small numbercommas" value="<?php echo !empty($formdata['exchange_rate']) ? addCommas($formdata['exchange_rate'], 0) : ''; ?> " name="exchange_rate" placeholder="Exchange rate" type="text" /> <input type="text" name="estimated_amount" value="<?php echo !empty($formdata['estimated_amount']) ? addCommas($formdata['estimated_amount'], 0) : ''; ?> " class="input-medium numbercommas" /> </div> </div>