2013-06-26 14:11:33 +00:00
< ? php
2014-09-20 19:58:32 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // Exit if accessed directly
}
2014-02-14 13:02:37 +00:00
2013-06-26 14:11:33 +00:00
/**
* Admin Report
*
* Extended by reports to show charts and stats in admin .
*
2014-08-31 07:19:13 +00:00
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Admin / Reports
2013-06-26 14:11:33 +00:00
* @ version 2.1 . 0
*/
class WC_Admin_Report {
2014-02-12 12:26:32 +00:00
public $chart_interval ;
public $group_by_query ;
public $barwidth ;
public $chart_groupby ;
2013-06-26 14:11:33 +00:00
public $start_date ;
public $end_date ;
/**
* Get report totals such as order totals and discount amounts .
*
* Data example :
*
* '_order_total' => array (
2014-08-31 07:19:13 +00:00
* 'type' => 'meta' ,
* 'function' => 'SUM' ,
* 'name' => 'total_sales'
2013-06-26 14:11:33 +00:00
* )
*
* @ param array $args
2014-02-11 13:47:46 +00:00
* @ return array | string depending on query_type
2013-06-26 14:11:33 +00:00
*/
public function get_order_report_data ( $args = array () ) {
global $wpdb ;
2014-10-07 09:48:44 +00:00
$default_args = array (
2014-10-14 15:39:57 +00:00
'data' => array (),
'where' => array (),
'where_meta' => array (),
'query_type' => 'get_row' ,
'group_by' => '' ,
'order_by' => '' ,
'limit' => '' ,
'filter_range' => false ,
2014-10-14 16:01:15 +00:00
'nocache' => false ,
2014-10-14 15:39:57 +00:00
'debug' => false ,
'order_types' => wc_get_order_types ( 'reports' ),
'order_status' => array ( 'completed' , 'processing' , 'on-hold' ),
'parent_order_status' => false ,
2013-06-26 14:11:33 +00:00
);
2014-10-07 09:48:44 +00:00
$args = apply_filters ( 'woocommerce_reports_get_order_report_data_args' , $args );
$args = wp_parse_args ( $args , $default_args );
2013-06-26 14:11:33 +00:00
extract ( $args );
2014-05-28 14:19:16 +00:00
if ( empty ( $data ) ) {
2014-10-07 09:32:38 +00:00
return '' ;
2014-05-28 14:19:16 +00:00
}
2013-06-26 14:11:33 +00:00
2014-10-14 15:39:57 +00:00
$order_status = apply_filters ( 'woocommerce_reports_order_statuses' , $order_status );
2014-10-07 09:31:07 +00:00
$query = array ();
2013-06-26 14:11:33 +00:00
$select = array ();
foreach ( $data as $key => $value ) {
$distinct = '' ;
2014-10-07 09:48:44 +00:00
if ( isset ( $value [ 'distinct' ] ) ) {
2013-06-26 14:11:33 +00:00
$distinct = 'DISTINCT' ;
2014-10-07 09:48:44 +00:00
}
2013-06-26 14:11:33 +00:00
2014-08-31 07:19:13 +00:00
if ( $value [ 'type' ] == 'meta' ) {
2013-06-28 16:33:37 +00:00
$get_key = " meta_ { $key } .meta_value " ;
2014-08-31 07:19:13 +00:00
} elseif ( $value [ 'type' ] == 'post_data' ) {
2013-06-28 16:33:37 +00:00
$get_key = " posts. { $key } " ;
2014-08-31 07:19:13 +00:00
} elseif ( $value [ 'type' ] == 'order_item_meta' ) {
2013-06-28 16:33:37 +00:00
$get_key = " order_item_meta_ { $key } .meta_value " ;
2014-08-31 07:19:13 +00:00
} elseif ( $value [ 'type' ] == 'order_item' ) {
2013-06-28 16:33:37 +00:00
$get_key = " order_items. { $key } " ;
2014-10-07 09:48:44 +00:00
} else {
continue ;
2014-08-31 07:19:13 +00:00
}
2013-06-28 16:33:37 +00:00
2014-08-31 07:19:13 +00:00
if ( $value [ 'function' ] ) {
2013-06-28 16:33:37 +00:00
$get = " { $value [ 'function' ] } ( { $distinct } { $get_key } ) " ;
2014-08-31 07:19:13 +00:00
} else {
2013-06-28 16:33:37 +00:00
$get = " { $distinct } { $get_key } " ;
2014-08-31 07:19:13 +00:00
}
2013-06-28 16:33:37 +00:00
$select [] = " { $get } as { $value [ 'name' ] } " ;
2013-06-26 14:11:33 +00:00
}
$query [ 'select' ] = " SELECT " . implode ( ',' , $select );
$query [ 'from' ] = " FROM { $wpdb -> posts } AS posts " ;
// Joins
2014-08-31 07:19:13 +00:00
$joins = array ();
2013-06-26 14:11:33 +00:00
foreach ( $data as $key => $value ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
if ( $value [ 'type' ] == 'meta' ) {
$joins [ " meta_ { $key } " ] = " LEFT JOIN { $wpdb -> postmeta } AS meta_ { $key } ON posts.ID = meta_ { $key } .post_id " ;
} elseif ( $value [ 'type' ] == 'order_item_meta' ) {
2014-04-08 14:46:55 +00:00
$joins [ " order_items " ] = " LEFT JOIN { $wpdb -> prefix } woocommerce_order_items AS order_items ON posts.ID = order_items.order_id " ;
2013-06-28 16:33:37 +00:00
$joins [ " order_item_meta_ { $key } " ] = " LEFT JOIN { $wpdb -> prefix } woocommerce_order_itemmeta AS order_item_meta_ { $key } ON order_items.order_item_id = order_item_meta_ { $key } .order_item_id " ;
} elseif ( $value [ 'type' ] == 'order_item' ) {
2014-04-08 14:46:55 +00:00
$joins [ " order_items " ] = " LEFT JOIN { $wpdb -> prefix } woocommerce_order_items AS order_items ON posts.ID = order_items.order_id " ;
2013-06-26 14:11:33 +00:00
}
}
if ( ! empty ( $where_meta ) ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
foreach ( $where_meta as $value ) {
2014-08-31 07:19:13 +00:00
if ( ! is_array ( $value ) ) {
2013-07-18 13:04:18 +00:00
continue ;
2014-08-31 07:19:13 +00:00
}
2013-07-18 13:04:18 +00:00
2014-02-24 17:10:04 +00:00
$key = is_array ( $value [ 'meta_key' ] ) ? $value [ 'meta_key' ][ 0 ] . '_array' : $value [ 'meta_key' ];
2013-07-25 14:00:23 +00:00
2013-06-26 14:11:33 +00:00
if ( isset ( $value [ 'type' ] ) && $value [ 'type' ] == 'order_item_meta' ) {
2014-04-08 14:46:55 +00:00
$joins [ " order_items " ] = " LEFT JOIN { $wpdb -> prefix } woocommerce_order_items AS order_items ON posts.ID = order_items.order_id " ;
2013-07-25 14:00:23 +00:00
$joins [ " order_item_meta_ { $key } " ] = " LEFT JOIN { $wpdb -> prefix } woocommerce_order_itemmeta AS order_item_meta_ { $key } ON order_items.order_item_id = order_item_meta_ { $key } .order_item_id " ;
2013-06-26 14:11:33 +00:00
} else {
// If we have a where clause for meta, join the postmeta table
2013-07-25 14:00:23 +00:00
$joins [ " meta_ { $key } " ] = " LEFT JOIN { $wpdb -> postmeta } AS meta_ { $key } ON posts.ID = meta_ { $key } .post_id " ;
2013-06-26 14:11:33 +00:00
}
}
}
2014-10-14 15:39:57 +00:00
if ( ! empty ( $parent_order_status ) ) {
$joins [ " parent " ] = " LEFT JOIN { $wpdb -> posts } AS parent ON posts.post_parent = parent.ID " ;
}
2013-06-26 14:11:33 +00:00
$query [ 'join' ] = implode ( ' ' , $joins );
$query [ 'where' ] = "
2014-07-24 14:55:06 +00:00
WHERE posts . post_type IN ( '" . implode( "' , '", $order_types ) . "' )
2013-06-26 14:11:33 +00:00
" ;
2014-10-14 15:39:57 +00:00
if ( ! empty ( $order_status ) ) {
$query [ 'where' ] .= "
AND posts . post_status IN ( 'wc-" . implode( "' , 'wc-", $order_status ) . "' )
" ;
}
if ( ! empty ( $parent_order_status ) ) {
$query [ 'where' ] .= "
AND parent . post_status IN ( 'wc-" . implode( "' , 'wc-", $parent_order_status ) . "' )
" ;
}
2013-06-26 14:11:33 +00:00
if ( $filter_range ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
$query [ 'where' ] .= "
2014-10-14 15:39:57 +00:00
AND posts . post_date >= '" . date(' Y - m - d ', $this->start_date ) . "'
AND posts . post_date < '" . date(' Y - m - d ', strtotime( ' + 1 DAY ', $this->end_date ) ) . "'
2013-06-26 14:11:33 +00:00
" ;
}
foreach ( $data as $key => $value ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
if ( $value [ 'type' ] == 'meta' ) {
$query [ 'where' ] .= " AND meta_ { $key } .meta_key = ' { $key } ' " ;
} elseif ( $value [ 'type' ] == 'order_item_meta' ) {
2013-06-28 16:33:37 +00:00
$query [ 'where' ] .= " AND order_items.order_item_type = ' { $value [ 'order_item_type' ] } ' " ;
2013-06-26 14:11:33 +00:00
$query [ 'where' ] .= " AND order_item_meta_ { $key } .meta_key = ' { $key } ' " ;
}
}
if ( ! empty ( $where_meta ) ) {
2014-08-31 07:19:13 +00:00
2013-07-18 13:04:18 +00:00
$relation = isset ( $where_meta [ 'relation' ] ) ? $where_meta [ 'relation' ] : 'AND' ;
$query [ 'where' ] .= " AND ( " ;
foreach ( $where_meta as $index => $value ) {
2014-08-31 07:19:13 +00:00
if ( ! is_array ( $value ) ) {
2013-07-18 13:04:18 +00:00
continue ;
2014-08-31 07:19:13 +00:00
}
2013-07-18 13:04:18 +00:00
2014-02-24 17:10:04 +00:00
$key = is_array ( $value [ 'meta_key' ] ) ? $value [ 'meta_key' ][ 0 ] . '_array' : $value [ 'meta_key' ];
2013-07-25 14:00:23 +00:00
2013-06-26 14:11:33 +00:00
if ( strtolower ( $value [ 'operator' ] ) == 'in' ) {
2014-08-31 07:19:13 +00:00
if ( is_array ( $value [ 'meta_value' ] ) ) {
2013-06-26 14:11:33 +00:00
$value [ 'meta_value' ] = implode ( " ',' " , $value [ 'meta_value' ] );
2014-08-31 07:19:13 +00:00
}
if ( ! empty ( $value [ 'meta_value' ] ) ) {
2013-07-08 15:36:09 +00:00
$where_value = " IN (' { $value [ 'meta_value' ] } ') " ;
2014-08-31 07:19:13 +00:00
}
2013-06-26 14:11:33 +00:00
} else {
$where_value = " { $value [ 'operator' ] } ' { $value [ 'meta_value' ] } ' " ;
}
2013-07-08 15:36:09 +00:00
if ( ! empty ( $where_value ) ) {
2014-08-31 07:19:13 +00:00
if ( $index > 0 ) {
2013-07-18 13:04:18 +00:00
$query [ 'where' ] .= ' ' . $relation ;
2014-08-31 07:19:13 +00:00
}
2013-07-18 13:04:18 +00:00
2013-07-08 15:36:09 +00:00
if ( isset ( $value [ 'type' ] ) && $value [ 'type' ] == 'order_item_meta' ) {
2014-08-31 07:19:13 +00:00
if ( is_array ( $value [ 'meta_key' ] ) ) {
2013-07-25 14:00:23 +00:00
$query [ 'where' ] .= " ( order_item_meta_ { $key } .meta_key IN (' " . implode ( " ',' " , $value [ 'meta_key' ] ) . " ') " ;
2014-08-31 07:19:13 +00:00
} else {
2013-07-25 14:00:23 +00:00
$query [ 'where' ] .= " ( order_item_meta_ { $key } .meta_key = ' { $value [ 'meta_key' ] } ' " ;
2014-08-31 07:19:13 +00:00
}
2013-07-25 14:00:23 +00:00
$query [ 'where' ] .= " AND order_item_meta_ { $key } .meta_value { $where_value } ) " ;
2013-07-08 15:36:09 +00:00
} else {
2014-08-31 07:19:13 +00:00
if ( is_array ( $value [ 'meta_key' ] ) ) {
2013-07-25 14:00:23 +00:00
$query [ 'where' ] .= " ( meta_ { $key } .meta_key IN (' " . implode ( " ',' " , $value [ 'meta_key' ] ) . " ') " ;
2014-08-31 07:19:13 +00:00
} else {
2013-07-25 14:00:23 +00:00
$query [ 'where' ] .= " ( meta_ { $key } .meta_key = ' { $value [ 'meta_key' ] } ' " ;
2014-08-31 07:19:13 +00:00
}
2013-07-25 14:00:23 +00:00
$query [ 'where' ] .= " AND meta_ { $key } .meta_value { $where_value } ) " ;
2013-07-08 15:36:09 +00:00
}
2013-06-26 14:11:33 +00:00
}
}
2013-07-18 13:04:18 +00:00
$query [ 'where' ] .= " ) " ;
2013-06-26 14:11:33 +00:00
}
if ( ! empty ( $where ) ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
foreach ( $where as $value ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
if ( strtolower ( $value [ 'operator' ] ) == 'in' ) {
2014-08-31 07:19:13 +00:00
if ( is_array ( $value [ 'value' ] ) ) {
2013-06-26 14:11:33 +00:00
$value [ 'value' ] = implode ( " ',' " , $value [ 'value' ] );
2014-08-31 07:19:13 +00:00
}
if ( ! empty ( $value [ 'value' ] ) ) {
2013-07-08 15:36:09 +00:00
$where_value = " IN (' { $value [ 'value' ] } ') " ;
2014-08-31 07:19:13 +00:00
}
2013-06-26 14:11:33 +00:00
} else {
$where_value = " { $value [ 'operator' ] } ' { $value [ 'value' ] } ' " ;
}
2013-07-08 15:36:09 +00:00
if ( ! empty ( $where_value ) )
$query [ 'where' ] .= " AND { $value [ 'key' ] } { $where_value } " ;
2013-06-26 14:11:33 +00:00
}
}
if ( $group_by ) {
$query [ 'group_by' ] = " GROUP BY { $group_by } " ;
}
if ( $order_by ) {
$query [ 'order_by' ] = " ORDER BY { $order_by } " ;
}
if ( $limit ) {
$query [ 'limit' ] = " LIMIT { $limit } " ;
}
2014-03-20 11:10:25 +00:00
$query = apply_filters ( 'woocommerce_reports_get_order_report_query' , $query );
$query = implode ( ' ' , $query );
$query_hash = md5 ( $query_type . $query );
$cached_results = get_transient ( strtolower ( get_class ( $this ) ) );
2013-06-26 14:11:33 +00:00
2014-03-20 11:10:25 +00:00
if ( $debug ) {
2014-10-07 09:30:17 +00:00
echo '<pre>' ;
print_r ( $query );
echo '</pre>' ;
2014-03-20 11:10:25 +00:00
}
2013-07-08 15:36:09 +00:00
2014-03-20 11:10:25 +00:00
if ( $debug || $nocache || false === $cached_results || ! isset ( $cached_results [ $query_hash ] ) ) {
$cached_results [ $query_hash ] = apply_filters ( 'woocommerce_reports_get_order_report_data' , $wpdb -> $query_type ( $query ), $data );
set_transient ( strtolower ( get_class ( $this ) ), $cached_results , DAY_IN_SECONDS );
2013-06-26 14:11:33 +00:00
}
2014-03-20 11:10:25 +00:00
$result = $cached_results [ $query_hash ];
2013-06-26 14:11:33 +00:00
return $result ;
}
/**
* Put data with post_date ' s into an array of times
*
* @ param array $data array of your data
* @ param string $date_key key for the 'date' field . e . g . 'post_date'
* @ param string $data_key key for the data you are charting
* @ param int $interval
* @ param string $start_date
* @ param string $group_by
* @ return string
*/
public function prepare_chart_data ( $data , $date_key , $data_key , $interval , $start_date , $group_by ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
$prepared_data = array ();
2014-02-11 16:03:02 +00:00
$time = '' ;
2014-07-23 17:17:01 +00:00
2013-06-26 14:11:33 +00:00
// Ensure all days (or months) have values first in this range
for ( $i = 0 ; $i <= $interval ; $i ++ ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
switch ( $group_by ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
case 'day' :
2014-02-28 14:51:37 +00:00
$time = strtotime ( date ( 'Ymd' , strtotime ( " + { $i } DAY " , $start_date ) ) ) . '000' ;
2013-06-26 14:11:33 +00:00
break ;
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
case 'month' :
2014-02-28 14:51:37 +00:00
$time = strtotime ( date ( 'Ym' , strtotime ( " + { $i } MONTH " , $start_date ) ) . '01' ) . '000' ;
2013-06-26 14:11:33 +00:00
break ;
}
2014-07-23 17:17:01 +00:00
2014-08-31 07:19:13 +00:00
if ( ! isset ( $prepared_data [ $time ] ) ) {
2013-06-26 14:11:33 +00:00
$prepared_data [ $time ] = array ( esc_js ( $time ), 0 );
2014-08-31 07:19:13 +00:00
}
2013-06-26 14:11:33 +00:00
}
foreach ( $data as $d ) {
switch ( $group_by ) {
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
case 'day' :
2014-02-28 14:51:37 +00:00
$time = strtotime ( date ( 'Ymd' , strtotime ( $d -> $date_key ) ) ) . '000' ;
2013-06-26 14:11:33 +00:00
break ;
2014-08-31 07:19:13 +00:00
2013-06-26 14:11:33 +00:00
case 'month' :
2014-02-28 14:51:37 +00:00
$time = strtotime ( date ( 'Ym' , strtotime ( $d -> $date_key ) ) . '01' ) . '000' ;
2013-06-26 14:11:33 +00:00
break ;
}
2014-08-31 07:19:13 +00:00
if ( ! isset ( $prepared_data [ $time ] ) ) {
2013-06-26 14:11:33 +00:00
continue ;
2014-08-31 07:19:13 +00:00
}
2013-06-26 14:11:33 +00:00
2014-08-31 07:19:13 +00:00
if ( $data_key ) {
2013-07-09 14:31:22 +00:00
$prepared_data [ $time ][ 1 ] += $d -> $data_key ;
2014-08-31 07:19:13 +00:00
} else {
2013-07-09 14:31:22 +00:00
$prepared_data [ $time ][ 1 ] ++ ;
2014-08-31 07:19:13 +00:00
}
2013-06-26 14:11:33 +00:00
}
return $prepared_data ;
}
/**
* Prepares a sparkline to show sales in the last X days
*
2013-07-25 14:00:23 +00:00
* @ param int $id ID of the product to show . Blank to get all orders .
* @ param int $days Days of stats to get .
* @ param string $type Type of sparkline to get . Ignored if ID is not set .
* @ return string
2013-06-26 14:11:33 +00:00
*/
2013-07-25 14:00:23 +00:00
public function sales_sparkline ( $id = '' , $days = 7 , $type = 'sales' ) {
if ( $id ) {
$meta_key = $type == 'sales' ? '_line_total' : '_qty' ;
$data = $this -> get_order_report_data ( array (
'data' => array (
'_product_id' => array (
'type' => 'order_item_meta' ,
'order_item_type' => 'line_item' ,
'function' => '' ,
'name' => 'product_id'
),
$meta_key => array (
'type' => 'order_item_meta' ,
'order_item_type' => 'line_item' ,
'function' => 'SUM' ,
'name' => 'sparkline_value'
),
'post_date' => array (
'type' => 'post_data' ,
'function' => '' ,
'name' => 'post_date'
),
2013-06-26 14:11:33 +00:00
),
2013-07-25 14:00:23 +00:00
'where' => array (
array (
'key' => 'post_date' ,
'value' => date ( 'Y-m-d' , strtotime ( 'midnight -' . ( $days - 1 ) . ' days' , current_time ( 'timestamp' ) ) ),
'operator' => '>'
),
array (
'key' => 'order_item_meta__product_id.meta_value' ,
'value' => $id ,
'operator' => '='
)
2013-06-26 14:11:33 +00:00
),
2014-10-14 15:39:57 +00:00
'group_by' => 'YEAR(posts.post_date), MONTH(posts.post_date), DAY(posts.post_date)' ,
2013-07-25 14:00:23 +00:00
'query_type' => 'get_results' ,
'filter_range' => false
) );
} else {
2014-08-31 07:19:13 +00:00
2013-07-25 14:00:23 +00:00
$data = $this -> get_order_report_data ( array (
'data' => array (
'_order_total' => array (
'type' => 'meta' ,
'function' => 'SUM' ,
'name' => 'sparkline_value'
),
'post_date' => array (
'type' => 'post_data' ,
'function' => '' ,
'name' => 'post_date'
),
2013-06-26 14:11:33 +00:00
),
2013-07-25 14:00:23 +00:00
'where' => array (
array (
'key' => 'post_date' ,
'value' => date ( 'Y-m-d' , strtotime ( 'midnight -' . ( $days - 1 ) . ' days' , current_time ( 'timestamp' ) ) ),
'operator' => '>'
)
2013-06-26 14:11:33 +00:00
),
2014-10-14 15:39:57 +00:00
'group_by' => 'YEAR(posts.post_date), MONTH(posts.post_date), DAY(posts.post_date)' ,
2013-07-25 14:00:23 +00:00
'query_type' => 'get_results' ,
'filter_range' => false
) );
}
2013-06-26 14:11:33 +00:00
$total = 0 ;
2014-08-31 07:19:13 +00:00
foreach ( $data as $d ) {
2013-07-25 14:00:23 +00:00
$total += $d -> sparkline_value ;
2014-08-31 07:19:13 +00:00
}
2013-06-26 14:11:33 +00:00
if ( $type == 'sales' ) {
2013-11-25 13:34:21 +00:00
$tooltip = sprintf ( __ ( 'Sold %s worth in the last %d days' , 'woocommerce' ), strip_tags ( wc_price ( $total ) ), $days );
2013-06-26 14:11:33 +00:00
} else {
2013-07-25 14:00:23 +00:00
$tooltip = sprintf ( _n ( 'Sold 1 item in the last %d days' , 'Sold %d items in the last %d days' , $total , 'woocommerce' ), $total , $days );
2013-06-26 14:11:33 +00:00
}
2013-07-25 14:00:23 +00:00
$sparkline_data = array_values ( $this -> prepare_chart_data ( $data , 'post_date' , 'sparkline_value' , $days - 1 , strtotime ( 'midnight -' . ( $days - 1 ) . ' days' , current_time ( 'timestamp' ) ), 'day' ) );
2013-06-26 14:11:33 +00:00
2013-11-21 13:28:09 +00:00
return '<span class="wc_sparkline ' . ( $type == 'sales' ? 'lines' : 'bars' ) . ' tips" data-color="#777" data-tip="' . esc_attr ( $tooltip ) . '" data-barwidth="' . 60 * 60 * 16 * 1000 . '" data-sparkline="' . esc_attr ( json_encode ( $sparkline_data ) ) . '"></span>' ;
2013-06-26 14:11:33 +00:00
}
2013-07-30 10:12:42 +00:00
/**
* Get the current range and calculate the start and end dates
*
* @ param string $current_range
*/
public function calculate_current_range ( $current_range ) {
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
switch ( $current_range ) {
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
case 'custom' :
$this -> start_date = strtotime ( sanitize_text_field ( $_GET [ 'start_date' ] ) );
$this -> end_date = strtotime ( 'midnight' , strtotime ( sanitize_text_field ( $_GET [ 'end_date' ] ) ) );
2014-08-31 07:19:13 +00:00
if ( ! $this -> end_date ) {
2013-07-30 10:12:42 +00:00
$this -> end_date = current_time ( 'timestamp' );
2014-08-31 07:19:13 +00:00
}
2013-07-30 10:12:42 +00:00
$interval = 0 ;
$min_date = $this -> start_date ;
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
while ( ( $min_date = strtotime ( " +1 MONTH " , $min_date ) ) <= $this -> end_date ) {
2014-08-31 07:19:13 +00:00
$interval ++ ;
2013-07-30 10:12:42 +00:00
}
// 3 months max for day view
2014-08-31 07:19:13 +00:00
if ( $interval > 3 ) {
$this -> chart_groupby = 'month' ;
} else {
$this -> chart_groupby = 'day' ;
}
2013-07-30 10:12:42 +00:00
break ;
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
case 'year' :
$this -> start_date = strtotime ( date ( 'Y-01-01' , current_time ( 'timestamp' ) ) );
$this -> end_date = strtotime ( 'midnight' , current_time ( 'timestamp' ) );
$this -> chart_groupby = 'month' ;
break ;
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
case 'last_month' :
2014-08-31 07:19:13 +00:00
$this -> start_date = strtotime ( date ( 'Y-m-01' , strtotime ( '-1 MONTH' , current_time ( 'timestamp' ) ) ) );
$this -> end_date = strtotime ( date ( 'Y-m-t' , strtotime ( '-1 MONTH' , current_time ( 'timestamp' ) ) ) );
$this -> chart_groupby = 'day' ;
2013-07-30 10:12:42 +00:00
break ;
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
case 'month' :
2014-08-31 07:19:13 +00:00
$this -> start_date = strtotime ( date ( 'Y-m-01' , current_time ( 'timestamp' ) ) );
$this -> end_date = strtotime ( 'midnight' , current_time ( 'timestamp' ) );
$this -> chart_groupby = 'day' ;
2013-07-30 10:12:42 +00:00
break ;
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
case '7day' :
2014-08-31 07:19:13 +00:00
$this -> start_date = strtotime ( '-6 days' , current_time ( 'timestamp' ) );
$this -> end_date = strtotime ( 'midnight' , current_time ( 'timestamp' ) );
$this -> chart_groupby = 'day' ;
2013-07-30 10:12:42 +00:00
break ;
}
// Group by
switch ( $this -> chart_groupby ) {
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
case 'day' :
2014-10-14 15:39:57 +00:00
$this -> group_by_query = 'YEAR(posts.post_date), MONTH(posts.post_date), DAY(posts.post_date)' ;
2014-08-31 07:19:13 +00:00
$this -> chart_interval = ceil ( max ( 0 , ( $this -> end_date - $this -> start_date ) / ( 60 * 60 * 24 ) ) );
$this -> barwidth = 60 * 60 * 24 * 1000 ;
2013-07-30 10:12:42 +00:00
break ;
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
case 'month' :
2014-10-14 15:39:57 +00:00
$this -> group_by_query = 'YEAR(posts.post_date), MONTH(posts.post_date)' ;
2013-07-30 10:12:42 +00:00
$this -> chart_interval = 0 ;
$min_date = $this -> start_date ;
2014-08-31 07:19:13 +00:00
2013-07-30 10:12:42 +00:00
while ( ( $min_date = strtotime ( " +1 MONTH " , $min_date ) ) <= $this -> end_date ) {
$this -> chart_interval ++ ;
}
2014-08-31 07:19:13 +00:00
$this -> barwidth = 60 * 60 * 24 * 7 * 4 * 1000 ;
2013-07-30 10:12:42 +00:00
break ;
}
}
2014-09-19 07:23:58 +00:00
/**
* Return currency tooltip JS based on WooCommerce currency position settings .
*
* @ return string
*/
public function get_currency_tooltip () {
switch ( get_option ( 'woocommerce_currency_pos' ) ) {
case 'right' :
$currency_tooltip = 'append_tooltip: "' . get_woocommerce_currency_symbol () . '"' ; break ;
case 'right_space' :
$currency_tooltip = 'append_tooltip: " ' . get_woocommerce_currency_symbol () . '"' ; break ;
2014-10-16 06:56:28 +00:00
case 'left' :
$currency_tooltip = 'prepend_tooltip: "' . get_woocommerce_currency_symbol () . '"' ; break ;
case 'left_space' :
default :
$currency_tooltip = 'prepend_tooltip: "' . get_woocommerce_currency_symbol () . ' "' ; break ;
2014-09-19 07:23:58 +00:00
}
return $currency_tooltip ;
}
2013-06-26 14:11:33 +00:00
/**
* Get the main chart
2014-08-31 07:19:13 +00:00
*
2013-06-26 14:11:33 +00:00
* @ return string
*/
public function get_main_chart () {}
/**
* Get the legend for the main chart sidebar
2014-08-31 07:19:13 +00:00
*
2013-06-26 14:11:33 +00:00
* @ return array
*/
public function get_chart_legend () {
return array ();
}
/**
* [ get_chart_widgets description ]
2014-08-31 07:19:13 +00:00
*
2013-06-26 14:11:33 +00:00
* @ return array
*/
public function get_chart_widgets () {
return array ();
}
2013-07-18 11:56:12 +00:00
/**
* Get an export link if needed
*/
public function get_export_button () {}
2013-06-26 14:11:33 +00:00
/**
* Output the report
*/
public function output_report () {}
2013-11-21 13:28:09 +00:00
}