$id = rq('id', 2); delete_offer($id); cache_links_update(); exit; break; case 'restore_link': $id = rq('id', 2); delete_offer($id, 0); cache_links_update(); exit; break; case 'delete_sale': $type = $_REQUEST['type']; $click_id = rq('click_id', 2); $conversion_id = rq('conversion_id', 2); delete_sale($click_id, $conversion_id, $type); exit; break; case 'get_sales': $sales = get_sales($_POST['sType'], $_POST['sStart'], $_POST['sEnd']); echo json_encode($sales); exit; break; case 'delete_rule': $rule_id = $_REQUEST['id']; delete_rule($rule_id); exit; break; case 'restore_rule': $rule_id = intval($_POST['id']); restore_rule($rule_id);
function process_conversion($data) { $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']); switch ($data['txt_param20']) { case 'UAH': case 'uah': $data['profit'] = convert_to_usd('uah', $data['profit']); break; case 'USD': case 'usd': $data['profit'] = convert_to_usd('usd', $data['profit']); break; default: $data['profit'] = convert_to_usd('rub', $data['profit']); break; } // Специальная обработка "статусного постбэка" от сети CTR. В этом случае приходит только статус, связанный с остальными данными через order_id (i3) и нужно поменять статус соостветствующей конвертации. // https://uniquedesign.teamworkpm.net/tasks/3679474 $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; } dmp($data); if (isset($data['subid']) && $data['subid'] != '') { //to_log('data', $data); $subid = $data['subid']; // мы скоро обнулим массив data, а subid нам ещё понадобится $status = $data['status']; $click_info = array(); // информация о клике //Проверяем есть ли клик с этим SibID $q = 'SELECT * FROM `tbl_clicks` WHERE `subid` = "' . mysql_real_escape_string($subid) . '"'; $r = mysql_query($q) or die(mysql_error()); if (mysql_num_rows($r) > 0) { $click_info = mysql_fetch_assoc($r); $click_id = $click_info['id']; if ($data['profit'] > 0) { $is_lead = $click_info['is_lead'] > 0 ? 1 : 0; $is_sale = 1; } else { $is_lead = 1; $is_sale = $click_info['is_sale'] > 0 ? 1 : 0; } mysql_query('UPDATE `tbl_clicks` SET `is_sale` = ' . $is_sale . ', `is_lead` = ' . intval($is_lead) . ', `conversion_price_main` = "' . mysql_real_escape_string($data['profit']) . '" WHERE `id` = ' . $click_id) 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]); } } //if (empty($upd['date_add'])) { $upd['date_add'] = mysql_now(); // date('Y-m-d H:i:s'); //} // Проверяем, есть ли уже конверсия с таким 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'); //return false; } // S2S сети // https://uniquedesign.teamworkpm.net/tasks/4160565 $q = "select * \n \tfrom `tbl_adnets` \n \twhere `status` = '0' \n \tand `name` = '" . mysql_real_escape_string($data['n']) . "'"; if ($rs = db_query($q) and mysql_num_rows($rs) > 0) { // Подставляем переменные в ссылку $replace = array('[SUBID]' => $subid, '[PROFIT_USD]' => $this->source_data['profit'], '[PROFIT_RUB]' => convert_usd_to('rub', $this->source_data['profit']), '[PROFIT_EUR]' => convert_usd_to('eur', $this->source_data['profit']), '[PROFIT_UAH]' => convert_usd_to('uah', $this->source_data['profit'])); // Добавляем параметры Postback foreach ($this->source_data as $name => $value) { $replace['[POSTBACK_' . $name . ']'] = $value; } // Добавляем параметры перехода for ($i = 1; $i <= 15; $i++) { if (!empty($click_info['click_param_name' . $i])) { $replace['[CLICK_' . $click_info['click_param_name' . $i] . ']'] = $click_info['click_param_value' . $i]; } } dmp($replace); while ($r = mysql_fetch_assoc($rs)) { $url = $r['url']; // Поставляем все переменные foreach ($replace as $k => $v) { $url = str_ireplace($k, $v, $url); } // Cleaning not used []-params $url = preg_replace('/\\ = (\\[[a-z\\_0-9]+\\])/i', ' = ', $url); $result = send_post_request($url, array()); // Сохраняем S2S лог $str = date('Y-m-d H:i:s') . ' SubID: ' . $subid . "\nURL:" . $url . "\\Result:" . $result[1] . "\n\n"; dmp(htmlspecialchars($str)); file_put_contents(_CACHE_PATH . '/log/' . '.s2s_' . date('Y-m-d'), $str, FILE_APPEND | LOCK_EX); } } // Пишем 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); } } } }
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); } } } }
function delete_sale_by_id($conversion_id) { $sql = "select type, subid from tbl_conversions where id='" . _str($conversion_id) . "' limit 1"; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); $type = $row['type']; $subid = $row['subid']; $sql = "select id from tbl_clicks where subid='" . _str($subid) . "' limit 1"; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); $click_id = $row['id']; delete_sale($click_id, $conversion_id, $type); return; }