-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget-results-range.php
103 lines (87 loc) · 4.46 KB
/
get-results-range.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
/**
* Get results, optional from a specific range
*
* @param array $dates
* @param string|array $asset_type
* @param array $asset_group
* @param bool $show_all
*
* @return array|object|stdClass[]|null
*/
function bp_get_results_range( array $dates, string|array $asset_type, string|array $asset_group = [], $show_all = false ) {
global $wpdb;
$results = [];
$table_assets = $wpdb->prefix . 'asset_data';
$table_groups = $wpdb->prefix . 'asset_groups';
$table_types = $wpdb->prefix . 'asset_types';
if ( 1 == count( $dates ) ) {
// pie chart
// possible bar chart
if ( ! empty( $asset_type ) ) {
if ( 'all' == $asset_type ) {
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %i WHERE date = %s ORDER BY date, type ASC", $table_assets, $dates[0] ) );
} else {
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %i WHERE type IN (" . implode( ',', $asset_type ) . ") AND date = %s ORDER BY date, type ASC", $table_assets, $dates[0] ) );
}
} elseif ( ! empty( $asset_group ) ) {
$types = $wpdb->get_results( $wpdb->prepare( "SELECT id FROM %i WHERE asset_group IN (" . implode( ',', $asset_group ) . ")", $table_types ) );
if ( ! empty( $types ) ) {
foreach( $types as $type ) {
$asset_types[] = (int) $type->id;
}
}
if ( ! empty( $asset_types ) ) {
if ( 1 == count( $asset_group ) ) {
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %i WHERE type IN (" . implode( ',', $asset_types ) . ") AND date = %s ORDER BY type ASC", $table_assets, $dates[0] ) );
} elseif ( 1 < count( $asset_group ) ) {
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %i INNER JOIN %i ON %i.type = %i.id WHERE type IN (" . implode( ',', $asset_types ) . ") AND date = %s ORDER BY date, type ASC", $table_assets, $table_types, $table_assets, $table_types, $dates[0] ) );
}
}
// @TODO: group by asset_group
// @TODO: format results
} else {
// get pie chart for totals on this date
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * from %i WHERE date = %s", $table_assets, $dates[0] ) );
}
return $results;
} elseif ( 2 == count( $dates ) ) {
if ( 'all' == $asset_type || 'all' == $asset_group ) {
// dashboard/shortcode
if ( $show_all ) {
// dashboard
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %i WHERE date BETWEEN %s AND %s ORDER BY date ASC", $table_assets, $dates[0], $dates[1] ) );
} else {
foreach( $dates as $date ) {
$day_results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %i WHERE date = %s", $table_assets, $date ) );
if ( ! empty( $day_results ) ) {
$results = array_merge( $results, $day_results );
}
}
}
} elseif ( ! empty( $asset_type ) ) {
// only for graphs
foreach( $dates as $date ) {
$day_results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %i WHERE type IN (" . implode( ',', $asset_type ) . ") AND date = %s ORDER BY date, type ASC", $table_assets, $date ) );
if ( ! empty( $day_results ) ) {
$results = array_merge( $results, $day_results );
}
}
return $results;
} elseif ( ! empty( $asset_group ) ) {
// @TODO
}
$grouped_data = [];
if ( ! empty( $results ) ) {
foreach( $results as $row ) {
if ( ! array_key_exists( $row->date, $grouped_data ) ) {
$grouped_data[ $row->date ] = [];
}
$grouped_data[ $row->date ][] = $row;
}
return $grouped_data;
}
} elseif ( 2 < count( $dates ) ) {
}
return [];
}