function _wpsc_action_update_purchase_log_status($id, $status, $old_status, $purchase_log)
{
    if ($purchase_log->is_order_received() || $purchase_log->is_accepted_payment()) {
        wpsc_send_customer_email($purchase_log);
        wpsc_send_admin_email($purchase_log);
    }
    if (!$purchase_log->is_transaction_completed()) {
        return;
    }
    $already_processed = in_array($old_status, array(WPSC_Purchase_Log::ACCEPTED_PAYMENT, WPSC_Purchase_Log::JOB_DISPATCHED, WPSC_Purchase_Log::CLOSED_ORDER));
    if ($already_processed) {
        return;
    }
    _wpsc_process_transaction_coupon($purchase_log);
    wpsc_decrement_claimed_stock($id);
}
/**
 * Routine that runs when updating a purchase log's status.
 * Currently, only used to send customer and admin emails upon successful purchase.
 *
 * @since  3.8.9
 * @since  4.0    Removed coupons and stocks from email sending.  Much easier now to remove_action() on either
 *                of those functions when desiring to override.
 *
 * @param  int               $id             Purchase Log ID.
 * @param  int               $status         Current status.
 * @param  int               $old_status     Previous status.
 * @param  WPSC_Purchase_Log $purchase_log   Purchase Log Object.
 *
 * @return void
 */
function _wpsc_action_update_purchase_log_status($id, $status, $old_status, $purchase_log)
{
    if ($purchase_log->is_order_received() || $purchase_log->is_accepted_payment()) {
        wpsc_send_customer_email($purchase_log);
        wpsc_send_admin_email($purchase_log);
    }
}
function _wpsc_action_update_purchase_log_status($id, $status, $old_status, $purchase_log)
{
    wpsc_send_customer_email($purchase_log);
    wpsc_send_admin_email($purchase_log);
    if (!$purchase_log->is_transaction_completed()) {
        return;
    }
    _wpsc_process_transaction_coupon($purchase_log);
    wpsc_decrement_claimed_stock($id);
}