/** * Upgrades all commission records to use a taxonomy for tracking the status of the commission * * @since 2.8 * @return void */ function eddc_upgrade_commission_statuses() { if (!current_user_can('manage_shop_settings')) { return; } define('EDDC_DOING_UPGRADES', true); ignore_user_abort(true); if (!edd_is_func_disabled('set_time_limit') && !ini_get('safe_mode')) { set_time_limit(0); } $step = isset($_GET['step']) ? absint($_GET['step']) : 1; $args = array('posts_per_page' => 20, 'paged' => $step, 'status' => 'any', 'order' => 'ASC', 'post_type' => 'edd_commission', 'fields' => 'ids'); $commissions = get_posts($args); if ($commissions) { // Commissions found so upgrade them foreach ($commissions as $commission_id) { $status = get_post_meta($commission_id, '_commission_status', true); if ('paid' !== $status) { $status = 'unpaid'; } eddc_set_commission_status($commission_id, $status); } $step++; $redirect = add_query_arg(array('page' => 'edd-upgrades', 'edd-upgrade' => 'upgrade_commission_statuses', 'step' => $step), admin_url('index.php')); wp_safe_redirect($redirect); exit; } else { // No more commissions found, finish up update_option('eddc_version', EDD_COMMISSIONS_VERSION); // No more commissions found, finish up wp_redirect(admin_url()); exit; } }
private function get_users() { $commissions = eddc_get_unpaid_commissions(array('number' => -1)); if (empty($commissions)) { return false; } $due_amounts = array(); foreach ($commissions as $commission) { $commission_meta = get_post_meta($commission->ID, '_edd_commission_info', true); $user_id = $commission_meta['user_id']; $user = get_userdata($user_id); $custom_paypal = get_user_meta($user_id, 'eddc_user_paypal', true); $email = is_email($custom_paypal) ? $custom_paypal : $user->user_email; $due_amounts[$user_id][] = $commission_meta['amount']; eddc_set_commission_status($commission->ID, 'paid'); } foreach ($due_amounts as $vendor_id => $totals_due) { $due_amounts[$vendor_id] = array_sum($totals_due); } foreach ($due_amounts as $vendor_id => $total_due) { $commission_due = $total_due; $custom_paypal = get_user_meta($vendor_id, 'eddc_user_paypal', true); $user = get_userdata($vendor_id); $paypal_email = is_email($custom_paypal) ? $custom_paypal : $user->user_email; // Skip vendors that haven't filled a paypal address // Or that don't have an outstanding balance if (empty($paypal_email) || empty($commission_due)) { continue; } // Who knows if it exists more than once. Let's not take a risk // Therefore, we add the total due to perhaps a previously existing one $vendors = array(); $vendors[$paypal_email] = array('user_id' => $user_id, 'total_due' => !empty($vendors[$paypal_email][$vendor_id]['total_due']) ? $vendors[$paypal_email][$vendor_id]['total_due'] + $commission_due : $commission_due); } return $vendors; }
/** * Print the CSV rows for the current step * * @access public * @since 3.2 * @return string|false */ public function print_csv_rows() { $data = $this->get_data(); if (!empty($data)) { return $this->stash_temp_data($data); } else { $this->get_temp_file(); $temp_data = @file_get_contents($this->temp_file); $data = json_decode($temp_data); $row_data = ''; if ($data) { // Output each row foreach ($data as $row) { if (!empty($this->minimum) && $this->minimum > $row->amount) { continue; } $i = 1; foreach ($row as $col_id => $column) { if ('ids' === $col_id) { continue; } switch ($col_id) { case 'amount': $column = edd_format_amount($column, 2); break; } $row_data .= '"' . addslashes($column) . '"'; $row_data .= $i == 3 ? '' : ','; $i++; } $row_data .= "\r\n"; foreach ($row->ids as $id) { eddc_set_commission_status($id, 'paid'); } } $this->stash_step_data($row_data); @unlink($this->temp_file); return false; } } return false; }
/** * Mark commissions as paid immediately since they are paid at the time of purchase * * @since 2.7 * @return void */ function eddc_override_commission_status($recipient, $commission_amount, $rate, $download_id, $commission_id, $payment_id) { if (!edd_get_option('edd_commissions_autopay_pa') || 'paypal_adaptive_payments' != edd_get_payment_gateway($payment_id)) { return; } eddc_set_commission_status($commission_id, 'paid'); }
function process_bulk_action() { $ids = isset($_GET['commission']) ? $_GET['commission'] : false; if (!is_array($ids)) { $ids = array($ids); } foreach ($ids as $id) { // Detect when a bulk action is being triggered... if ('delete' === $this->current_action()) { wp_delete_post($id); } if ('mark_as_paid' === $this->current_action()) { eddc_set_commission_status($id, 'paid'); } if ('mark_as_unpaid' === $this->current_action()) { eddc_set_commission_status($id, 'unpaid'); } if ('mark_as_revoked' === $this->current_action()) { eddc_set_commission_status($id, 'revoked'); } if ('mark_as_accepted' === $this->current_action()) { eddc_set_commission_status($id, 'unpaid'); } } }
function eddc_generate_payout_file($data) { if (wp_verify_nonce($data['eddc-payout-nonce'], 'eddc-payout-nonce')) { $from = !empty($data['from']) ? sanitize_text_field($data['from']) : date('m/d/Y', strtotime('-1 month')); $to = !empty($data['to']) ? sanitize_text_field($data['to']) : date('m/d/Y'); $from = explode('/', $from); $to = explode('/', $to); $args = array('number' => -1, 'query_args' => array('date_query' => array('after' => array('year' => $from[2], 'month' => $from[0], 'day' => $from[1]), 'before' => array('year' => $to[2], 'month' => $to[0], 'day' => $to[1]), 'inclusive' => true))); $commissions = eddc_get_unpaid_commissions($args); if ($commissions) { header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=edd-commission-payout-' . date('m-d-Y') . '.csv'); header("Pragma: no-cache"); header("Expires: 0"); $payouts = array(); foreach ($commissions as $commission) { $commission_meta = get_post_meta($commission->ID, '_edd_commission_info', true); $user_id = $commission_meta['user_id']; $user = get_userdata($user_id); $custom_paypal = get_user_meta($user_id, 'eddc_user_paypal', true); $email = is_email($custom_paypal) ? $custom_paypal : $user->user_email; if (array_key_exists($email, $payouts)) { $payouts[$email]['amount'] += $commission_meta['amount']; } else { $payouts[$email] = array('amount' => $commission_meta['amount'], 'currency' => $commission_meta['currency']); } eddc_set_commission_status($commission->ID, 'paid'); } if ($payouts) { foreach ($payouts as $key => $payout) { echo $key . ","; echo edd_sanitize_amount(number_format($payout['amount'], 2)) . ","; echo $payout['currency']; echo "\r\n"; } } } else { wp_die(__('No commissions to be paid', 'eddc'), __('Error')); } die; } }
/** * Add a Commission * * @access private * @since 2.9 * @return void */ function eddc_add_manual_commission($data) { if (!wp_verify_nonce($data['eddc_add_nonce'], 'eddc_add_nonce')) { return; } if (!current_user_can('edit_shop_payments')) { wp_die(__('You do not have permission to record commissions', 'eddc')); } $user_info = get_userdata($data['user_id']); $download_id = absint($data['download_id']); $payment_id = isset($data['payment_id']) ? absint($data['payment_id']) : 0; $amount = edd_sanitize_amount($data['amount']); $rate = sanitize_text_field($data['rate']); $commission = array('post_type' => 'edd_commission', 'post_title' => $user_info->user_email . ' - ' . get_the_title($download_id), 'post_status' => 'publish'); $commission_id = wp_insert_post(apply_filters('edd_commission_post_data', $commission)); $commission_info = apply_filters('edd_commission_info', array('user_id' => absint($data['user_id']), 'rate' => $rate, 'amount' => $amount, 'currency' => edd_get_currency()), $commission_id, $payment_id, $download_id); eddc_set_commission_status($commission_id, 'unpaid'); update_post_meta($commission_id, '_edd_commission_info', $commission_info); update_post_meta($commission_id, '_download_id', $download_id); update_post_meta($commission_id, '_user_id', absint($data['user_id'])); update_post_meta($commission_id, '_edd_commission_payment_id', $payment_id); do_action('eddc_insert_commission', absint($data['user_id']), $amount, $rate, $download_id, $commission_id, $payment_id); wp_redirect(admin_url('edit.php?post_type=download&page=edd-commissions')); exit; }