PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.0.2
GiveWP – Donation Plugin and Fundraising Platform v2.0.2
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / payments / class-payment-stats.php
give / includes / payments Last commit date
actions.php 8 years ago backward-compatibility.php 8 years ago class-give-payment.php 8 years ago class-payment-stats.php 8 years ago class-payments-query.php 8 years ago functions.php 8 years ago
class-payment-stats.php
264 lines
1 <?php
2 /**
3 * Earnings / Sales Stats
4 *
5 * @package Give
6 * @subpackage Classes/Stats
7 * @copyright Copyright (c) 2016, WordImpress
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Give_Stats Class
19 *
20 * This class is for retrieving stats for earnings and sales.
21 *
22 * Stats can be retrieved for date ranges and pre-defined periods.
23 *
24 * @since 1.0
25 */
26 class Give_Payment_Stats extends Give_Stats {
27
28 /**
29 * Retrieve sale stats
30 *
31 * @since 1.0
32 * @access public
33 *
34 * @param $form_id int The donation form to retrieve stats for. If false, gets stats for all forms
35 * @param $start_date string|bool The starting date for which we'd like to filter our sale stats. If false, we'll use the default start date of `this_month`
36 * @param $end_date string|bool The end date for which we'd like to filter our sale stats. If false, we'll use the default end date of `this_month`
37 * @param $status string|array The sale status(es) to count. Only valid when retrieving global stats
38 *
39 * @return float|int Total amount of donations based on the passed arguments.
40 */
41 public function get_sales( $form_id = 0, $start_date = false, $end_date = false, $status = 'publish' ) {
42
43 $this->setup_dates( $start_date, $end_date );
44
45 // Make sure start date is valid
46 if ( is_wp_error( $this->start_date ) ) {
47 return $this->start_date;
48 }
49
50 // Make sure end date is valid
51 if ( is_wp_error( $this->end_date ) ) {
52 return $this->end_date;
53 }
54
55 $args = array(
56 'status' => 'publish',
57 'start_date' => $this->start_date,
58 'end_date' => $this->end_date,
59 'fields' => 'ids',
60 'number' => - 1,
61 );
62
63 if ( ! empty( $form_id ) ) {
64 $args['give_forms'] = $form_id;
65 }
66
67 /* @var Give_Payments_Query $payments */
68 $payments = new Give_Payments_Query( $args );
69 $payments = $payments->get_payments();
70
71 return count( $payments );
72 }
73
74
75 /**
76 * Retrieve earning stats
77 *
78 * @since 1.0
79 * @access public
80 *
81 * @param $form_id int The donation form to retrieve stats for. If false, gets stats for all forms.
82 * @param $start_date string|bool The starting date for which we'd like to filter our donation earnings stats. If false, method will use the default start date of `this_month`.
83 * @param $end_date string|bool The end date for which we'd like to filter the donations stats. If false, method will use the default end date of `this_month`.
84 * @param $gateway_id string|bool The gateway to get earnings for such as 'paypal' or 'stripe'.
85 *
86 * @return float|int Total amount of donations based on the passed arguments.
87 */
88 public function get_earnings( $form_id = 0, $start_date = false, $end_date = false, $gateway_id = false ) {
89 $this->setup_dates( $start_date, $end_date );
90
91 // Make sure start date is valid
92 if ( is_wp_error( $this->start_date ) ) {
93 return $this->start_date;
94 }
95
96 // Make sure end date is valid
97 if ( is_wp_error( $this->end_date ) ) {
98 return $this->end_date;
99 }
100
101 $args = array(
102 'status' => 'publish',
103 'give_forms' => $form_id,
104 'start_date' => $this->start_date,
105 'end_date' => $this->end_date,
106 'fields' => 'ids',
107 'number' => - 1,
108 );
109
110
111 // Filter by Gateway ID meta_key
112 if ( $gateway_id ) {
113 $args['meta_query'][] = array(
114 'key' => '_give_payment_gateway',
115 'value' => $gateway_id,
116 );
117 }
118
119 // Filter by Gateway ID meta_key
120 if ( $form_id ) {
121 $args['meta_query'][] = array(
122 'key' => '_give_payment_form_id',
123 'value' => $form_id,
124 );
125 }
126
127 if ( ! empty( $args['meta_query'] ) && 1 < count( $args['meta_query'] ) ) {
128 $args['meta_query']['relation'] = 'AND';
129 }
130
131 $args = apply_filters( 'give_stats_earnings_args', $args );
132 $key = Give_Cache::get_key( 'give_stats', $args );
133
134 // Set transient for faster stats.
135 $earnings = Give_Cache::get( $key );
136
137 if ( false === $earnings ) {
138
139 $this->timestamp = false;
140 $payments = new Give_Payments_Query( $args );
141 $payments = $payments->get_payments();
142 $earnings = 0;
143
144 if ( ! empty( $payments ) ) {
145 foreach ( $payments as $payment ) {
146 $earnings += (float) give_donation_amount( $payment->ID, array( 'type' => 'stats' ) );
147 }
148
149 }
150
151 // Cache the results for one hour.
152 Give_Cache::set( $key, give_sanitize_amount_for_db( $earnings ), 60 * 60 );
153 }
154
155 /**
156 * Filter the earnings.
157 *
158 * @since 1.8.17
159 *
160 * @param float $earnings Earning amount.
161 * @param int $form_id Donation Form ID.
162 * @param string|bool $start_date Earning start date.
163 * @param string|bool $end_date Earning end date.
164 * @param string|bool $gateway_id Payment gateway id.
165 */
166 $earnings = apply_filters( 'give_get_earnings', $earnings, $form_id, $start_date, $end_date, $gateway_id );
167
168 //return earnings
169 return round( $earnings, give_get_price_decimals( $form_id ) );
170
171 }
172
173 /**
174 * Retrieve earning stat transient key
175 *
176 * @since 1.0
177 * @access public
178 *
179 * @param $form_id int The donation form to retrieve stats for. If false, gets stats for all forms
180 * @param $start_date string|bool The starting date for which we'd like to filter our donation earnings stats. If false, we'll use the default start date of `this_month`
181 * @param $end_date string|bool The end date for which we'd like to filter our sale stats. If false, we'll use the default end date of `this_month`
182 * @param $gateway_id string|bool The gateway to get earnings for such as 'paypal' or 'stripe'
183 *
184 * @return float|int Total amount of donations based on the passed arguments.
185 */
186 public function get_earnings_cache_key( $form_id = 0, $start_date = false, $end_date = false, $gateway_id = false ) {
187
188 $this->setup_dates( $start_date, $end_date );
189
190 // Make sure start date is valid
191 if ( is_wp_error( $this->start_date ) ) {
192 return $this->start_date;
193 }
194
195 // Make sure end date is valid
196 if ( is_wp_error( $this->end_date ) ) {
197 return $this->end_date;
198 }
199
200 $args = array(
201 'status' => 'publish',
202 'give_forms' => $form_id,
203 'start_date' => $this->start_date,
204 'end_date' => $this->end_date,
205 'fields' => 'ids',
206 'number' => - 1,
207 );
208
209
210 // Filter by Gateway ID meta_key
211 if ( $gateway_id ) {
212 $args['meta_query'][] = array(
213 'key' => '_give_payment_gateway',
214 'value' => $gateway_id,
215 );
216 }
217
218 // Filter by Gateway ID meta_key
219 if ( $form_id ) {
220 $args['meta_query'][] = array(
221 'key' => '_give_payment_form_id',
222 'value' => $form_id,
223 );
224 }
225
226 if ( ! empty( $args['meta_query'] ) && 1 < count( $args['meta_query'] ) ) {
227 $args['meta_query']['relation'] = 'AND';
228 }
229
230 $args = apply_filters( 'give_stats_earnings_args', $args );
231 $key = Give_Cache::get_key( 'give_stats', $args );
232
233 //return earnings
234 return $key;
235
236 }
237
238 /**
239 * Get the best selling forms
240 *
241 * @since 1.0
242 * @access public
243 * @global wpdb $wpdb
244 *
245 * @param $number int The number of results to retrieve with the default set to 10.
246 *
247 * @return array Best selling forms
248 */
249 public function get_best_selling( $number = 10 ) {
250 global $wpdb;
251
252 $meta_table = __give_v20_bc_table_details( 'form' );
253
254 $give_forms = $wpdb->get_results( $wpdb->prepare(
255 "SELECT {$meta_table['column']['id']} as form_id, max(meta_value) as sales
256 FROM {$meta_table['name']} WHERE meta_key='_give_form_sales' AND meta_value > 0
257 GROUP BY meta_value+0
258 DESC LIMIT %d;", $number
259 ) );
260
261 return $give_forms;
262 }
263
264 }