1 <?php
2 3 4 5 6 7 8 9 10
11
12
13 if ( ! defined( 'ABSPATH' ) ) exit;
14
15
16 if ( ! class_exists( 'WP_List_Table' ) ) {
17 require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
18 }
19
20 21 22 23 24 25 26
27 class EDD_Download_Reports_Table extends WP_List_Table {
28 29 30 31
32 public $per_page = 30;
33
34 35 36 37 38 39 40 41
42 public function __construct() {
43 global $status, $page;
44
45
46 parent::__construct( array(
47 'singular' => edd_get_label_singular(),
48 'plural' => edd_get_label_plural(),
49 'ajax' => false
50 ) );
51 }
52
53 54 55 56 57 58 59 60 61 62 63
64 public function column_default( $item, $column_name ) {
65 switch( $column_name ){
66 case 'earnings' :
67 return edd_currency_filter( edd_format_amount( $item[ $column_name ] ) );
68 case 'average_sales' :
69 return round( $item[ $column_name ] );
70 case 'average_earnings' :
71 return edd_currency_filter( edd_format_amount( $item[ $column_name ] ) );
72 default:
73 return $item[ $column_name ];
74 }
75 }
76
77 78 79 80 81 82 83
84 public function get_columns() {
85 $columns = array(
86 'title' => edd_get_label_singular(),
87 'sales' => __( 'Sales', 'edd' ),
88 'earnings' => __( 'Earnings', 'edd' ),
89 'average_sales' => __( 'Monthly Average Sales', 'edd' ),
90 'average_earnings' => __( 'Monthly Average Earnings', 'edd' )
91 );
92
93 return $columns;
94 }
95
96 97 98 99 100 101 102
103 public function get_sortable_columns() {
104 return array(
105 'title' => array( 'title', true ),
106 'sales' => array( 'sales', false ),
107 'earnings' => array( 'earnings', false ),
108 );
109 }
110
111 112 113 114 115 116 117
118 public function get_paged() {
119 return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
120 }
121
122 123 124 125 126 127 128
129 public function get_total_downloads() {
130 $counts = wp_count_posts( 'download' );
131 $total = 0;
132 foreach ( $counts as $count )
133 $total += $count;
134 return $total;
135 }
136
137 138 139 140 141 142 143
144 function bulk_actions() {
145
146 edd_report_views();
147 }
148
149 150 151 152 153 154 155
156 function reports_data() {
157 $reports_data = array();
158
159 $orderby = isset( $_GET['orderby'] ) ? $_GET['orderby'] : 'title';
160 $order = isset( $_GET['order'] ) ? $_GET['order'] : 'DESC';
161
162 $report_args = array(
163 'post_type' => 'download',
164 'post_status' => 'publish',
165 'order' => $order,
166 'posts_per_page'=> $this->per_page,
167 'paged' => $this->get_paged()
168 );
169
170 switch ( $orderby ) :
171 case 'title' :
172 $report_args['orderby'] = 'title';
173 break;
174
175 case 'sales' :
176 $report_args['orderby'] = 'meta_value_num';
177 $report_args['meta_key'] = '_edd_download_sales';
178 break;
179
180 case 'earnings' :
181 $report_args['orderby'] = 'meta_value_num';
182 $report_args['meta_key'] = '_edd_download_earnings';
183 break;
184 endswitch;
185
186 $downloads = get_posts( $report_args );
187 if ( $downloads ) {
188 foreach ( $downloads as $download ) {
189 $reports_data[] = array(
190 'ID' => $download->ID,
191 'title' => get_the_title( $download->ID ),
192 'sales' => edd_get_download_sales_stats( $download->ID ),
193 'earnings' => edd_get_download_earnings_stats( $download->ID ),
194 'average_sales' => edd_get_average_monthly_download_sales( $download->ID ),
195 'average_earnings' => edd_get_average_monthly_download_earnings( $download->ID )
196 );
197 }
198 }
199
200 return $reports_data;
201 }
202
203
204 205 206 207 208 209 210 211 212 213 214 215
216 function prepare_items() {
217 $columns = $this->get_columns();
218
219 $hidden = array();
220
221 $sortable = $this->get_sortable_columns();
222
223 $this->_column_headers = array( $columns, $hidden, $sortable );
224
225 $data = $this->reports_data();
226
227 $current_page = $this->get_pagenum();
228
229 $total_items = $this->get_total_downloads();
230
231 $this->items = $data;
232
233 $this->set_pagination_args( array(
234 'total_items' => $total_items,
235 'per_page' => $this->per_page,
236 'total_pages' => ceil( $total_items / $this->per_page )
237 )
238 );
239 }
240 }