299 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			299 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Download Reports Table Class
 | 
						|
 *
 | 
						|
 * @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.5
 | 
						|
 */
 | 
						|
 | 
						|
// Exit if accessed directly
 | 
						|
defined( 'ABSPATH' ) || exit;
 | 
						|
 | 
						|
use EDD\Admin\List_Table;
 | 
						|
 | 
						|
/**
 | 
						|
 * EDD_Download_Reports_Table Class
 | 
						|
 *
 | 
						|
 * Renders the Download Reports table
 | 
						|
 *
 | 
						|
 * @since 1.5
 | 
						|
 */
 | 
						|
class EDD_Download_Reports_Table extends List_Table {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @var object Query results
 | 
						|
	 * @since 1.5.2
 | 
						|
	 */
 | 
						|
	private $products;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get things started
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 * @see WP_List_Table::__construct()
 | 
						|
	 */
 | 
						|
	public function __construct() {
 | 
						|
		parent::__construct( array(
 | 
						|
			'singular' => 'report-download',
 | 
						|
			'plural'   => 'report-downloads',
 | 
						|
			'ajax'     => false
 | 
						|
		) );
 | 
						|
 | 
						|
		add_action( 'edd_report_view_actions', array( $this, 'category_filter' ) );
 | 
						|
 | 
						|
		$this->query();
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Gets the name of the primary column.
 | 
						|
	 *
 | 
						|
	 * @since 2.5
 | 
						|
	 * @access protected
 | 
						|
	 *
 | 
						|
	 * @return string Name of the primary column.
 | 
						|
	 */
 | 
						|
	protected function get_primary_column_name() {
 | 
						|
		return 'title';
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * This function renders most of the columns in the list table.
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 *
 | 
						|
	 * @param array $item Contains all the data of the downloads
 | 
						|
	 * @param string $column_name The name of the column
 | 
						|
	 *
 | 
						|
	 * @return string Column Name
 | 
						|
	 */
 | 
						|
	public function column_default( $item, $column_name ) {
 | 
						|
		switch( $column_name ){
 | 
						|
			case 'earnings' :
 | 
						|
				return edd_currency_filter( edd_format_amount( $item[ $column_name ] ) );
 | 
						|
			case 'average_sales' :
 | 
						|
				return round( $item[ $column_name ] );
 | 
						|
			case 'average_earnings' :
 | 
						|
				return edd_currency_filter( edd_format_amount( $item[ $column_name ] ) );
 | 
						|
			case 'details' :
 | 
						|
				$url = edd_get_admin_url(
 | 
						|
					array(
 | 
						|
						'page'        => 'edd-reports',
 | 
						|
						'view'        => 'downloads',
 | 
						|
						'download-id' => absint( $item['ID'] ),
 | 
						|
					)
 | 
						|
				);
 | 
						|
				return '<a href="' . esc_url( $url ) . '">' . __( 'View Detailed Report', 'easy-digital-downloads' ) . '</a>';
 | 
						|
			default:
 | 
						|
				return $item[ $column_name ];
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Retrieve the table columns
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 * @return array $columns Array of all the list table columns
 | 
						|
	 */
 | 
						|
	public function get_columns() {
 | 
						|
		return array(
 | 
						|
			'title'            => edd_get_label_singular(),
 | 
						|
			'sales'            => __( 'Sales',                    'easy-digital-downloads' ),
 | 
						|
			'earnings'         => __( 'Earnings',                 'easy-digital-downloads' ),
 | 
						|
			'average_sales'    => __( 'Monthly Average Sales',    'easy-digital-downloads' ),
 | 
						|
			'average_earnings' => __( 'Monthly Average Earnings', 'easy-digital-downloads' ),
 | 
						|
			'details'          => __( 'Detailed Report',          'easy-digital-downloads' )
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Retrieve the sortable columns
 | 
						|
	 *
 | 
						|
	 * @since 1.4
 | 
						|
	 * @return array Array of all the sortable columns
 | 
						|
	 */
 | 
						|
	public function get_sortable_columns() {
 | 
						|
		return array(
 | 
						|
			'title'    => array( 'title',    true  ),
 | 
						|
			'sales'    => array( 'sales',    false ),
 | 
						|
			'earnings' => array( 'earnings', false )
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Retrieve the category being viewed
 | 
						|
	 *
 | 
						|
	 * @since 1.5.2
 | 
						|
	 * @return int Category ID
 | 
						|
	 */
 | 
						|
	public function get_category() {
 | 
						|
		return absint( $this->get_request_var( 'category', 0 ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Retrieve the total number of downloads
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 * @return int $total Total number of downloads
 | 
						|
	 */
 | 
						|
	public function get_total_downloads() {
 | 
						|
		$total  = 0;
 | 
						|
		$counts = wp_count_posts( 'download', 'readable' );
 | 
						|
 | 
						|
		foreach( $counts as $count ) {
 | 
						|
			$total += $count;
 | 
						|
		}
 | 
						|
 | 
						|
		return $total;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Outputs the reporting views
 | 
						|
	 *
 | 
						|
	 * These aren't really bulk actions but this outputs the markup in the
 | 
						|
	 * right place.
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	public function bulk_actions( $which = '' ) {
 | 
						|
		edd_report_views();
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Attaches the category filter to the log views
 | 
						|
	 *
 | 
						|
	 * @since 1.5.2
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	public function category_filter() {
 | 
						|
		if ( get_terms( 'download_category' ) ) {
 | 
						|
			echo EDD()->html->category_dropdown( 'category', $this->get_category() );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Performs the products query
 | 
						|
	 *
 | 
						|
	 * @since 1.5.2
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	public function query() {
 | 
						|
 | 
						|
		$orderby  = sanitize_text_field( $this->get_request_var( 'orderby', 'title' ) );
 | 
						|
		$order    = sanitize_text_field( $this->get_request_var( 'order',   'DESC'  ) );
 | 
						|
		$category = $this->get_category();
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'post_type'        => 'download',
 | 
						|
			'post_status'      => 'publish',
 | 
						|
			'order'            => $order,
 | 
						|
			'fields'           => 'ids',
 | 
						|
			'posts_per_page'   => $this->per_page,
 | 
						|
			'paged'            => $this->get_paged(),
 | 
						|
			'suppress_filters' => true
 | 
						|
		);
 | 
						|
 | 
						|
		if ( ! empty( $category ) ) {
 | 
						|
			$args['tax_query'] = array(
 | 
						|
				array(
 | 
						|
					'taxonomy' => 'download_category',
 | 
						|
					'terms'    => $category
 | 
						|
				)
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		switch ( $orderby ) {
 | 
						|
			case 'title' :
 | 
						|
				$args['orderby'] = 'title';
 | 
						|
				break;
 | 
						|
 | 
						|
			case 'sales' :
 | 
						|
				$args['orderby']  = 'meta_value_num';
 | 
						|
				$args['meta_key'] = '_edd_download_sales';
 | 
						|
				break;
 | 
						|
 | 
						|
			case 'earnings' :
 | 
						|
				$args['orderby']  = 'meta_value_num';
 | 
						|
				$args['meta_key'] = '_edd_download_earnings';
 | 
						|
				break;
 | 
						|
		}
 | 
						|
 | 
						|
		$r = apply_filters( 'edd_download_reports_prepare_items_args', $args, $this );
 | 
						|
 | 
						|
		$this->products = new WP_Query( $r );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Build and retrieves all of the download reports data.
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 * @deprecated 3.0 Use get_data()
 | 
						|
	 *
 | 
						|
	 * @return array All the data for customer reports.
 | 
						|
	 */
 | 
						|
	public function reports_data() {
 | 
						|
		_edd_deprecated_function( __METHOD__, '3.0', 'EDD_Download_Reports_Table::get_data()' );
 | 
						|
 | 
						|
		return $this->get_data();
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Retrieves all of the download reports data.
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @return array Download reports table data.
 | 
						|
	 */
 | 
						|
	public function get_data() {
 | 
						|
		$reports_data = array();
 | 
						|
 | 
						|
		$downloads = $this->products->posts;
 | 
						|
 | 
						|
		if ( $downloads ) {
 | 
						|
			foreach ( $downloads as $download ) {
 | 
						|
				$reports_data[] = array(
 | 
						|
					'ID'               => $download,
 | 
						|
					'title'            => get_the_title( $download ),
 | 
						|
					'sales'            => edd_get_download_sales_stats( $download ),
 | 
						|
					'earnings'         => edd_get_download_earnings_stats( $download ),
 | 
						|
					'average_sales'    => edd_get_average_monthly_download_sales( $download ),
 | 
						|
					'average_earnings' => edd_get_average_monthly_download_earnings( $download ),
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return $reports_data;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Setup the final data for the table
 | 
						|
	 *
 | 
						|
	 * @since 1.5
 | 
						|
	 * @uses EDD_Download_Reports_Table::get_columns()
 | 
						|
	 * @uses EDD_Download_Reports_Table::get_sortable_columns()
 | 
						|
	 * @uses EDD_Download_Reports_Table::get_total_downloads()
 | 
						|
	 * @uses EDD_Download_Reports_Table::get_data()
 | 
						|
	 * @uses EDD_Download_Reports_Table::set_pagination_args()
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	public function prepare_items() {
 | 
						|
		$this->_column_headers = array(
 | 
						|
			$this->get_columns(),
 | 
						|
			array(),
 | 
						|
			$this->get_sortable_columns()
 | 
						|
		);
 | 
						|
 | 
						|
		$total_items = $this->get_total_downloads();
 | 
						|
		$this->items = $this->get_data();
 | 
						|
 | 
						|
		$this->set_pagination_args( array(
 | 
						|
			'total_pages' => ceil( $total_items / $this->per_page ),
 | 
						|
			'total_items' => $total_items,
 | 
						|
			'per_page'    => $this->per_page,
 | 
						|
		) );
 | 
						|
	}
 | 
						|
}
 |