PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.6.0
GiveWP – Donation Plugin and Fundraising Platform v2.6.0
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 / src / API / Endpoints / Reports / IncomeBreakdown.php
give / src / API / Endpoints / Reports Last commit date
AverageDonation.php 6 years ago DonationsVsIncome.php 6 years ago Endpoint.php 6 years ago FormPerformance.php 6 years ago Income.php 6 years ago IncomeBreakdown.php 6 years ago PaymentMethods.php 6 years ago PaymentStatuses.php 6 years ago RecentDonations.php 6 years ago TopDonors.php 6 years ago TotalDonors.php 6 years ago TotalIncome.php 6 years ago TotalRefunds.php 6 years ago
IncomeBreakdown.php
158 lines
1 <?php
2
3 /**
4 * Income over time endpoint
5 *
6 * @package Give
7 */
8
9 namespace Give\API\Endpoints\Reports;
10
11 class IncomeBreakdown extends Endpoint {
12
13 protected $payments;
14
15 public function __construct() {
16 $this->endpoint = 'income-breakdown';
17 }
18
19 public function get_report( $request ) {
20
21 // Check if a cached version exists
22 $cached_report = $this->get_cached_report( $request );
23 if ( $cached_report !== null ) {
24 // Bail and return the cached version
25 return new \WP_REST_Response(
26 [
27 'data' => $cached_report,
28 ]
29 );
30 }
31
32 $start = date_create( $request['start'] );
33 $end = date_create( $request['end'] );
34 $diff = date_diff( $start, $end );
35
36 $dataset = [];
37
38 switch ( true ) {
39 case ( $diff->days > 365 ):
40 $data = $this->get_data( $start, $end, 'P1M' );
41 break;
42 case ( $diff->days > 60 ):
43 $data = $this->get_data( $start, $end, 'P1W' );
44 break;
45 case ( $diff->days > 5 ):
46 $data = $this->get_data( $start, $end, 'P1D' );
47 break;
48 case ( $diff->days >= 0 ):
49 $data = $this->get_data( $start, $end, 'PT1H' );
50 break;
51 }
52
53 // Cache the report data
54 $result = $this->cache_report( $request, $data );
55 $status = $this->get_give_status();
56
57 return new \WP_REST_Response(
58 [
59 'data' => $data,
60 'status' => $status,
61 ]
62 );
63 }
64
65 public function get_data( $start, $end, $intervalStr ) {
66
67 $this->payments = $this->get_payments( $start->format( 'Y-m-d' ), $end->format( 'Y-m-d' ) );
68
69 $tooltips = [];
70 $income = [];
71
72 $interval = new \DateInterval( $intervalStr );
73
74 $periodStart = clone $start;
75 $periodEnd = clone $start;
76
77 // Subtract interval to set up period start
78 date_sub( $periodStart, $interval );
79
80 while ( $periodStart < $end ) {
81
82 $values = $this->get_values( $periodStart->format( 'Y-m-d H:i:s' ), $periodEnd->format( 'Y-m-d H:i:s' ) );
83 $incomeForPeriod = $values['income'];
84 $donorsForPeriod = $values['donors'];
85 $refundsForPeriod = $values['refunds'];
86 $netForPeriod = $values['net'];
87
88 switch ( $intervalStr ) {
89 case 'P1M':
90 $periodLabel = $periodEnd->format( 'F Y' );
91 break;
92 case 'P1D':
93 $periodLabel = $periodStart->format( 'F j, Y' );
94 break;
95 case 'PT1H':
96 $periodLabel = $periodEnd->format( 'l ga' );
97 break;
98 default:
99 $periodLabel = $periodEnd->format( 'F j, Y' );
100 }
101
102 $income[] = [
103 __( 'Date', 'give' ) => $periodLabel,
104 __( 'Donors', 'give' ) => $donorsForPeriod,
105 __( 'Donations', 'give' ) => $incomeForPeriod,
106 __( 'Refunds', 'give' ) => $refundsForPeriod,
107 __( 'Net', 'give' ) => $netForPeriod,
108 ];
109
110 // Add interval to set up next period
111 date_add( $periodStart, $interval );
112 date_add( $periodEnd, $interval );
113 }
114
115 // Create data objec to be returned, with 'highlights' object containing total and average figures to display
116 $data = $income;
117 return $data;
118
119 }
120
121 public function get_values( $startStr, $endStr ) {
122
123 $income = 0;
124 $refundTotal = 0;
125 $refunds = 0;
126 $donors = [];
127
128 foreach ( $this->payments as $payment ) {
129 if ( $payment->date > $startStr && $payment->date < $endStr ) {
130 switch ( $payment->status ) {
131 case 'give_subscription':
132 case 'publish': {
133 $income += $payment->total;
134 $donors[] = $payment->donor_id;
135 break;
136 }
137 case 'refunded': {
138 $refunds += 1;
139 $income += $payment->total;
140 $refundTotal += $payment->total;
141 break;
142 }
143 }
144 }
145 }
146
147 $unique = array_unique( $donors );
148
149 return [
150 'income' => give_currency_filter( give_format_amount( $income ), [ 'decode_currency' => true ] ),
151 'donors' => count( $unique ),
152 'refunds' => $refunds,
153 'net' => give_currency_filter( give_format_amount( $income - $refundTotal ), [ 'decode_currency' => true ] ),
154 ];
155 }
156
157 }
158