202 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Payments Export Class
 | |
|  *
 | |
|  * This class handles payment export
 | |
|  *
 | |
|  * @package     EDD
 | |
|  * @subpackage  Admin/Reports
 | |
|  * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | |
|  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | |
|  * @since       1.4.4
 | |
|  */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /**
 | |
|  * EDD_Payments_Export Class
 | |
|  *
 | |
|  * @since 1.4.4
 | |
|  */
 | |
| class EDD_Payments_Export extends EDD_Export {
 | |
| 	/**
 | |
| 	 * Our export type. Used for export-type specific filters/actions
 | |
| 	 * @var string
 | |
| 	 * @since 1.4.4
 | |
| 	 */
 | |
| 	public $export_type = 'payments';
 | |
| 
 | |
| 	/**
 | |
| 	 * Set the export headers
 | |
| 	 *
 | |
| 	 * @since 1.6
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	public function headers() {
 | |
| 		edd_set_time_limit();
 | |
| 
 | |
| 		$month = isset( $_POST['month'] ) ? absint( $_POST['month'] ) : date( 'n' );
 | |
| 		$year  = isset( $_POST['year']  ) ? absint( $_POST['year']  ) : date( 'Y' );
 | |
| 
 | |
| 		nocache_headers();
 | |
| 		header( 'Content-Type: text/csv; charset=utf-8' );
 | |
| 		header( 'Content-Disposition: attachment; filename="' . apply_filters( 'edd_payments_export_filename', 'edd-export-' . $this->export_type . '-' . $month . '-' . $year ) . '.csv"' );
 | |
| 		header( 'Expires: 0' );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set the CSV columns
 | |
| 	 *
 | |
| 	 * @since 1.4.4
 | |
| 	 * @return array $cols All the columns
 | |
| 	 */
 | |
| 	public function csv_cols() {
 | |
| 		$cols = array(
 | |
| 			'id'       => __( 'ID',   'easy-digital-downloads' ), // unaltered payment ID (use for querying)
 | |
| 			'seq_id'   => __( 'Payment Number',   'easy-digital-downloads' ), // sequential payment ID
 | |
| 			'email'    => __( 'Email', 'easy-digital-downloads' ),
 | |
| 			'first'    => __( 'First Name', 'easy-digital-downloads' ),
 | |
| 			'last'     => __( 'Last Name', 'easy-digital-downloads' ),
 | |
| 			'address1' => __( 'Address', 'easy-digital-downloads' ),
 | |
| 			'address2' => __( 'Address (Line 2)', 'easy-digital-downloads' ),
 | |
| 			'city'     => __( 'City', 'easy-digital-downloads' ),
 | |
| 			'state'    => __( 'State', 'easy-digital-downloads' ),
 | |
| 			'country'  => __( 'Country', 'easy-digital-downloads' ),
 | |
| 			'zip'      => __( 'Zip / Postal Code', 'easy-digital-downloads' ),
 | |
| 			'products' => __( 'Products', 'easy-digital-downloads' ),
 | |
| 			'skus'     => __( 'SKUs', 'easy-digital-downloads' ),
 | |
| 			'currency' => __( 'Currency', 'easy-digital-downloads' ),
 | |
| 			'amount'   => __( 'Amount', 'easy-digital-downloads' ),
 | |
| 			'tax'      => __( 'Tax', 'easy-digital-downloads' ),
 | |
| 			'discount' => __( 'Discount Code', 'easy-digital-downloads' ),
 | |
| 			'gateway'  => __( 'Payment Method', 'easy-digital-downloads' ),
 | |
| 			'trans_id' => __( 'Transaction ID', 'easy-digital-downloads' ),
 | |
| 			'key'      => __( 'Purchase Key', 'easy-digital-downloads' ),
 | |
| 			'date'     => __( 'Date', 'easy-digital-downloads' ),
 | |
| 			'user'     => __( 'User', 'easy-digital-downloads' ),
 | |
| 			'status'   => __( 'Status', 'easy-digital-downloads' )
 | |
| 		);
 | |
| 
 | |
| 		if( ! edd_use_skus() ){
 | |
| 			unset( $cols['skus'] );
 | |
| 		}
 | |
| 		if ( ! edd_get_option( 'enable_sequential' ) ) {
 | |
| 			unset( $cols['seq_id'] );
 | |
| 		}
 | |
| 
 | |
| 		return $cols;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the Export Data
 | |
| 	 *
 | |
| 	 * @since 1.4.4
 | |
| 	 * @global object $wpdb Used to query the database using the WordPress
 | |
| 	 *   Database API
 | |
| 	 * @return array $data The data for the CSV file
 | |
| 	 */
 | |
| 	public function get_data() {
 | |
| 		global $wpdb;
 | |
| 
 | |
| 		$data = array();
 | |
| 
 | |
| 		$payments = edd_get_payments( array(
 | |
| 			'offset' => 0,
 | |
| 			'number' => 9999999,
 | |
| 			'mode'   => edd_is_test_mode() ? 'test' : 'live',
 | |
| 			'status' => isset( $_POST['edd_export_payment_status'] ) ? $_POST['edd_export_payment_status'] : 'any',
 | |
| 			'month'  => isset( $_POST['month'] ) ? absint( $_POST['month'] ) : date( 'n' ),
 | |
| 			'year'   => isset( $_POST['year'] ) ? absint( $_POST['year'] ) : date( 'Y' )
 | |
| 		) );
 | |
| 
 | |
| 		foreach ( $payments as $payment ) {
 | |
| 			$payment_meta   = edd_get_payment_meta( $payment->ID );
 | |
| 			$user_info      = edd_get_payment_meta_user_info( $payment->ID );
 | |
| 			$downloads      = edd_get_payment_meta_cart_details( $payment->ID );
 | |
| 			$total          = edd_get_payment_amount( $payment->ID );
 | |
| 			$user_id        = isset( $user_info['id'] ) && $user_info['id'] != -1 ? $user_info['id'] : $user_info['email'];
 | |
| 			$products       = '';
 | |
| 			$skus           = '';
 | |
| 
 | |
| 			if ( $downloads ) {
 | |
| 				foreach ( $downloads as $key => $download ) {
 | |
| 					// Download ID
 | |
| 					$id = isset( $payment_meta['cart_details'] ) ? $download['id'] : $download;
 | |
| 
 | |
| 					// If the download has variable prices, override the default price
 | |
| 					$price_override = isset( $payment_meta['cart_details'] ) ? $download['price'] : null;
 | |
| 
 | |
| 					$price = edd_get_download_final_price( $id, $user_info, $price_override );
 | |
| 
 | |
| 					// Display the Downoad Name
 | |
| 					$products .= get_the_title( $id ) . ' - ';
 | |
| 
 | |
| 					if ( edd_use_skus() ) {
 | |
| 						$sku = edd_get_download_sku( $id );
 | |
| 
 | |
| 						if ( ! empty( $sku ) )
 | |
| 							$skus .= $sku;
 | |
| 					}
 | |
| 
 | |
| 					if ( isset( $downloads[ $key ]['item_number'] ) && isset( $downloads[ $key ]['item_number']['options'] ) ) {
 | |
| 						$price_options = $downloads[ $key ]['item_number']['options'];
 | |
| 
 | |
| 						if ( isset( $price_options['price_id'] ) ) {
 | |
| 							$products .= edd_get_price_option_name( $id, $price_options['price_id'], $payment->ID ) . ' - ';
 | |
| 						}
 | |
| 					}
 | |
| 					$products .= html_entity_decode( edd_currency_filter( $price ) );
 | |
| 
 | |
| 					if ( $key != ( count( $downloads ) -1 ) ) {
 | |
| 						$products .= ' / ';
 | |
| 
 | |
| 						if( edd_use_skus() )
 | |
| 							$skus .= ' / ';
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			if ( is_numeric( $user_id ) ) {
 | |
| 				$user = get_userdata( $user_id );
 | |
| 			} else {
 | |
| 				$user = false;
 | |
| 			}
 | |
| 
 | |
| 			$currency_code = edd_get_payment_currency_code( $payment->ID );
 | |
| 
 | |
| 			$data[] = array(
 | |
| 				'id'       => $payment->ID,
 | |
| 				'seq_id'   => edd_get_payment_number( $payment->ID ),
 | |
| 				'email'    => $payment_meta['email'],
 | |
| 				'first'    => $user_info['first_name'],
 | |
| 				'last'     => $user_info['last_name'],
 | |
| 				'address1' => isset( $user_info['address']['line1'] ) ? $user_info['address']['line1'] : '',
 | |
| 				'address2' => isset( $user_info['address']['line2'] ) ? $user_info['address']['line2'] : '',
 | |
| 				'city'     => isset( $user_info['address']['city'] ) ? $user_info['address']['city'] : '',
 | |
| 				'state'    => isset( $user_info['address']['state'] ) ? $user_info['address']['state'] : '',
 | |
| 				'country'  => isset( $user_info['address']['country'] ) ? $user_info['address']['country'] : '',
 | |
| 				'zip'      => isset( $user_info['address']['zip'] ) ? $user_info['address']['zip'] : '',
 | |
| 				'products' => $products,
 | |
| 				'skus'     => $skus,
 | |
| 				'currency' => $currency_code,
 | |
| 				'amount'   => html_entity_decode( edd_format_amount( $total, $currency_code ) ),
 | |
| 				'tax'      => html_entity_decode( edd_format_amount( edd_get_payment_tax( $payment->ID, $payment_meta ), $currency_code ) ),
 | |
| 				'discount' => isset( $user_info['discount'] ) && $user_info['discount'] != 'none' ? $user_info['discount'] : __( 'none', 'easy-digital-downloads' ),
 | |
| 				'gateway'  => edd_get_gateway_admin_label( edd_get_payment_meta( $payment->ID, '_edd_payment_gateway', true ) ),
 | |
| 				'trans_id' => edd_get_payment_transaction_id( $payment->ID ),
 | |
| 				'key'      => $payment_meta['key'],
 | |
| 				'date'     => $payment->post_date,
 | |
| 				'user'     => $user ? $user->display_name : __( 'guest', 'easy-digital-downloads' ),
 | |
| 				'status'   => edd_get_payment_status( $payment, true )
 | |
| 			);
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		$data = apply_filters( 'edd_export_get_data', $data );
 | |
| 		$data = apply_filters( 'edd_export_get_data_' . $this->export_type, $data );
 | |
| 
 | |
| 		return $data;
 | |
| 	}
 | |
| }
 |