return; } if (!empty($auth['user_id'])) { $partner_data = fn_get_partner_data($auth['user_id']); if (!empty($partner_data)) { $titles = fn_get_static_data_section('T'); if (!empty($titles) && is_array($titles)) { foreach ($titles as $t) { if (!empty($t['param']) && $t['param'] == @$partner_data['title']) { $partner_data['title_descr'] = $t['descr']; } } } $partner_data['total_payouts'] = db_get_field("SELECT SUM(amount) FROM ?:affiliate_payouts WHERE partner_id = ?i", $auth['user_id']); $cnt_period = Registry::if_get('addons.affiliate.number_last_periods', 10); $start_date = fn_get_date_of_payment_period($cnt_period); if (!empty($start_date)) { $last_payouts = array(); $k = $cnt_period; $max_amount = 0; $cur_date = getdate(TIME); $checkpoint_1 = 1; $checkpoint_2 = 16; $checkpoint_return = $cur_date['mday'] < $checkpoint_2 ? false : true; while (!empty($k)) { switch (Registry::get('addons.affiliate.payment_period')) { case '1w': $end_date = $start_date + 7 * 24 * 3600; break; case '2w': if ($checkpoint_return) {
function fn_pay_affiliates($params, $do_pagination = false, $page = 1) { // Init filter $params = fn_init_view('pay_affiliates', $params); // Set default values to input params $params['page'] = empty($params['page']) ? 1 : $params['page']; // default page is 1 // Define sort fields $sortings = array('username' => 'user_login', 'email' => 'email', 'partner' => 'firstname', 'amount' => 'amount', 'awaiting_amount' => 'awaiting_amount', 'date' => 'date'); $directions = array('asc' => 'asc', 'desc' => 'desc'); if (empty($params['sort_order']) || empty($directions[$params['sort_order']])) { $params['sort_order'] = 'desc'; } $sorting_direction = $directions[$params['sort_order']]; if (empty($params['sort_by']) || empty($sortings[$params['sort_by']])) { $params['sort_by'] = 'username'; } $sort_by = $params['sort_by']; if ($sort_by == 'date' || $sort_by == 'awaiting_amount') { $sort_by = 'username'; } $sorting = (is_array($sortings[$sort_by]) ? implode(' ' . $sorting_direction . ', ', $sortings[$sort_by]) : $sortings[$sort_by]) . " " . $sorting_direction; // Reverse sorting (for usage in view) $params['sort_order'] = $params['sort_order'] == 'asc' ? 'desc' : 'asc'; $pay_filter = array(); $pay_filter['min_payment'] = empty($params['min_payment']) ? '' : 'Y'; $pay_filter['last_payout'] = empty($params['last_payout']) ? '' : 'Y'; $pay_filter['amount_from'] = empty($params['amount_from']) ? '' : floatval($params['amount_from']); $pay_filter['amount_to'] = empty($params['amount_to']) ? '' : floatval($params['amount_to']); $_SESSION['pay_filter'] = $pay_filter; $join = $condition = $group = ''; $having = array(); if (!empty($params['min_payment'])) { $having[] = 'SUM(pa.amount) >= AVG(ap.min_payment)'; } if (isset($params['amount_from']) && fn_is_numeric($params['amount_from'])) { $having[] = db_quote("SUM(pa.amount) >= ?d", $params['amount_from']); } if (isset($params['amount_to']) && fn_is_numeric($params['amount_to'])) { $having[] = db_quote("SUM(pa.amount) <= ?d", $params['amount_to']); } if (!empty($params['last_payout'])) { $condition .= db_quote(" AND pa.date < ?i", fn_parse_date(fn_get_date_of_payment_period(), true)); } $group = 'GROUP BY pa.partner_id' . (empty($having) ? ' ' : ' HAVING (' . implode(') AND (', $having) . ') '); if ($do_pagination) { if (empty($page)) { $page = 1; } $cnt_list_stats = db_get_fields("SELECT DISTINCT(pa.partner_id) FROM ?:aff_partner_actions as pa LEFT JOIN ?:aff_partner_profiles as pp ON pa.partner_id = pp.user_id LEFT JOIN ?:affiliate_plans as ap ON ap.plan_id = pp.plan_id WHERE pa.approved = 'Y' AND pa.payout_id = 0 ?p ?p", $condition, $group); $limit = fn_paginate($page, count($cnt_list_stats)); } else { $limit = ''; } $partner_balances = db_get_hash_array("SELECT pa.partner_id, u.user_login, u.firstname, u.lastname, u.email, SUM(amount) as amount FROM ?:aff_partner_actions as pa LEFT JOIN ?:users as u ON pa.partner_id = u.user_id LEFT JOIN ?:aff_partner_profiles as pp ON pa.partner_id = pp.user_id LEFT JOIN ?:affiliate_plans as ap ON ap.plan_id = pp.plan_id WHERE pa.approved = 'Y' AND payout_id = 0 ?p ?p ORDER BY {$sorting} {$limit}", 'partner_id', $condition, $group); $_partners = db_get_hash_array("SELECT pa.partner_id, SUM(amount) as amount FROM ?:aff_partner_actions as pa LEFT JOIN ?:aff_partner_profiles as pp ON pa.partner_id = pp.user_id LEFT JOIN ?:affiliate_plans as ap ON ap.plan_id = pp.plan_id WHERE pa.approved = 'N' AND payout_id = 0 GROUP BY pa.partner_id ORDER BY amount {$sorting_direction}", 'partner_id'); $last_payout_dates = db_get_hash_array("SELECT partner_id, MAX(date) as date FROM ?:affiliate_payouts GROUP BY partner_id ORDER BY date {$sorting_direction}", 'partner_id'); if ($params['sort_by'] != 'date' && $params['sort_by'] != 'awaiting_amount') { foreach ($partner_balances as $_partner_id => $_partner_data) { $partner_balances[$_partner_id]['awaiting_amount'] = empty($_partners[$_partner_id]['amount']) ? '' : floatval($_partners[$_partner_id]['amount']); $partner_balances[$_partner_id]['last_payout_date'] = @$last_payout_dates[$_partner_id]['date']; } } else { $temp_balances = array(); if ($params['sort_by'] == 'awaiting_amount') { foreach ($_partners as $_partner_id => $_partner_data) { if (!empty($partner_balances[$_partner_id])) { $temp_balances[$_partner_id] = $partner_balances[$_partner_id]; $temp_balances[$_partner_id]['awaiting_amount'] = floatval($_partner_data['amount']); $temp_balances[$_partner_id]['last_payout_date'] = @$last_payout_dates[$_partner_id]['date']; unset($partner_balances[$_partner_id]); } } } else { foreach ($last_payout_dates as $_partner_id => $_date) { if (!empty($partner_balances[$_partner_id])) { $temp_balances[$_partner_id] = $partner_balances[$_partner_id]; $temp_balances[$_partner_id]['awaiting_amount'] = empty($_partners[$_partner_id]['amount']) ? '' : floatval($_partners[$_partner_id]['amount']); $temp_balances[$_partner_id]['last_payout_date'] = $_date['date']; unset($partner_balances[$_partner_id]); } } } $temp_balances2 = array(); foreach ($partner_balances as $_partner_id => $_partner_data) { $temp_balances2[$_partner_id] = $_partner_data; $temp_balances2[$_partner_id]['awaiting_amount'] = empty($_partners[$_partner_id]['amount']) ? '' : floatval($_partners[$_partner_id]['amount']); $temp_balances2[$_partner_id]['last_payout_date'] = @$last_payout_dates[$_partner_id]['date']; } $partner_balances = $sorting_direction == 'desc' ? $temp_balances + $temp_balances2 : $temp_balances2 + $temp_balances; } return array($partner_balances, $params); }