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 / Income.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
Income.php
163 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 Income extends Endpoint {
12
13 protected $payments;
14
15 public function __construct() {
16 $this->endpoint = 'income';
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 > 12 ):
40 $interval = round( $diff->days / 12 );
41 $data = $this->get_data( $start, $end, 'P' . $interval . 'D' );
42 break;
43 case ( $diff->days > 5 ):
44 $data = $this->get_data( $start, $end, 'P1D' );
45 break;
46 case ( $diff->days > 4 ):
47 $data = $this->get_data( $start, $end, 'PT12H' );
48 break;
49 case ( $diff->days > 2 ):
50 $data = $this->get_data( $start, $end, 'PT3H' );
51 break;
52 case ( $diff->days >= 0 ):
53 $data = $this->get_data( $start, $end, 'PT1H' );
54 break;
55 }
56
57 // Cache the report data
58 $result = $this->cache_report( $request, $data );
59 $status = $this->get_give_status();
60
61 return new \WP_REST_Response(
62 [
63 'data' => $data,
64 'status' => $status,
65 ]
66 );
67 }
68
69 public function get_data( $start, $end, $intervalStr ) {
70
71 $this->payments = $this->get_payments( $start->format( 'Y-m-d' ), $end->format( 'Y-m-d' ) );
72
73 $tooltips = [];
74 $income = [];
75
76 $interval = new \DateInterval( $intervalStr );
77
78 $periodStart = clone $start;
79 $periodEnd = clone $start;
80
81 // Subtract interval to set up period start
82 date_sub( $periodStart, $interval );
83
84 while ( $periodStart < $end ) {
85
86 $values = $this->get_values( $periodStart->format( 'Y-m-d H:i:s' ), $periodEnd->format( 'Y-m-d H:i:s' ) );
87 $incomeForPeriod = $values['earnings'];
88 $donorsForPeriod = $values['donor_count'];
89 $time = $periodEnd->format( 'Y-m-d H:i:s' );
90
91 switch ( $intervalStr ) {
92 case 'P1D':
93 $time = $periodStart->format( 'Y-m-d H:i:s' );
94 $periodLabel = $periodStart->format( 'l' );
95 break;
96 case 'PT12H':
97 case 'PT3H':
98 case 'PT1H':
99 $periodLabel = $periodStart->format( 'D ga' ) . ' - ' . $periodEnd->format( 'D ga' );
100 break;
101 default:
102 $periodLabel = $periodStart->format( 'M j, Y' ) . ' - ' . $periodEnd->format( 'M j, Y' );
103 }
104
105 $income[] = [
106 'x' => $time,
107 'y' => $incomeForPeriod,
108 ];
109
110 $tooltips[] = [
111 'title' => give_currency_filter( give_format_amount( $incomeForPeriod ), [ 'decode_currency' => true ] ),
112 'body' => $donorsForPeriod . ' ' . __( 'Donors', 'give' ),
113 'footer' => $periodLabel,
114 ];
115
116 // Add interval to set up next period
117 date_add( $periodStart, $interval );
118 date_add( $periodEnd, $interval );
119 }
120
121 if ( $intervalStr === 'P1D' ) {
122 $income = array_slice( $income, 1 );
123 $tooltips = array_slice( $tooltips, 1 );
124 }
125
126 // Create data objec to be returned, with 'highlights' object containing total and average figures to display
127 $data = [
128 'datasets' => [
129 [
130 'data' => $income,
131 'tooltips' => $tooltips,
132 ],
133 ],
134 ];
135
136 return $data;
137
138 }
139
140 public function get_values( $startStr, $endStr ) {
141
142 $earnings = 0;
143 $donors = [];
144
145 foreach ( $this->payments as $payment ) {
146 if ( $payment->date > $startStr && $payment->date < $endStr ) {
147 if ( $payment->status == 'publish' || $payment->status == 'give_subscription' ) {
148 $earnings += $payment->total;
149 $donors[] = $payment->donor_id;
150 }
151 }
152 }
153
154 $unique = array_unique( $donors );
155
156 return [
157 'earnings' => $earnings,
158 'donor_count' => count( $unique ),
159 ];
160 }
161
162 }
163