示例#1
0
/**
 * 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;
    }
}
示例#7
0
/**
 * 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;
}