PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.7.5
GiveWP – Donation Plugin and Fundraising Platform v2.7.5
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 5 years ago DonationsVsIncome.php 5 years ago Endpoint.php 5 years ago FormPerformance.php 5 years ago Income.php 5 years ago IncomeBreakdown.php 5 years ago PaymentMethods.php 5 years ago PaymentStatuses.php 5 years ago RecentDonations.php 5 years ago TopDonors.php 5 years ago TotalDonors.php 5 years ago TotalIncome.php 5 years ago TotalRefunds.php 5 years ago
IncomeBreakdown.php
149 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 getReport( $request ) {
20 $start = date_create( $request->get_param( 'start' ) );
21 $end = date_create( $request->get_param( 'end' ) );
22 $diff = date_diff( $start, $end );
23
24 $dataset = [];
25
26 switch ( true ) {
27 case ( $diff->days > 365 ):
28 $data = $this->get_data( $start, $end, 'P1M' );
29 break;
30 case ( $diff->days > 60 ):
31 $data = $this->get_data( $start, $end, 'P1W' );
32 break;
33 case ( $diff->days > 5 ):
34 $data = $this->get_data( $start, $end, 'P1D' );
35 break;
36 case ( $diff->days >= 0 ):
37 $data = $this->get_data( $start, $end, 'PT1H' );
38 break;
39 }
40
41 return $data;
42 }
43
44 public function get_data( $start, $end, $intervalStr ) {
45
46 $data = [];
47
48 $interval = new \DateInterval( $intervalStr );
49
50 $periodStart = clone $start;
51 $periodEnd = clone $start;
52
53 // Subtract interval to set up period start
54 date_sub( $periodStart, $interval );
55
56 while ( $periodStart < $end ) {
57
58 $values = $this->get_values( $periodStart->format( 'Y-m-d H:i:s' ), $periodEnd->format( 'Y-m-d H:i:s' ) );
59
60 $incomeForPeriod = $values['income'];
61 $donorsForPeriod = $values['donors'];
62 $refundsForPeriod = $values['refunds'];
63 $netForPeriod = $values['net'];
64
65 switch ( $intervalStr ) {
66 case 'P1M':
67 $periodLabel = $periodEnd->format( 'F Y' );
68 break;
69 case 'P1D':
70 $periodLabel = $periodStart->format( 'F j, Y' );
71 break;
72 case 'PT1H':
73 $periodLabel = $periodEnd->format( 'l ga' );
74 break;
75 default:
76 $periodLabel = $periodEnd->format( 'F j, Y' );
77 }
78
79 $data[] = [
80 __( 'Date', 'give' ) => $periodLabel,
81 __( 'Donors', 'give' ) => $donorsForPeriod,
82 __( 'Donations', 'give' ) => $incomeForPeriod,
83 __( 'Refunds', 'give' ) => $refundsForPeriod,
84 __( 'Net', 'give' ) => $netForPeriod,
85 ];
86
87 // Add interval to set up next period
88 date_add( $periodStart, $interval );
89 date_add( $periodEnd, $interval );
90 }
91
92 return $data;
93
94 }
95
96 public function get_values( $startStr, $endStr ) {
97
98 $paymentObjects = $this->getPayments( $startStr, $endStr );
99
100 $income = 0;
101 $refundTotal = 0;
102 $refunds = 0;
103 $donors = [];
104
105 foreach ( $paymentObjects as $paymentObject ) {
106 if ( $paymentObject->date > $startStr && $paymentObject->date <= $endStr ) {
107 switch ( $paymentObject->status ) {
108 case 'give_subscription':
109 case 'publish': {
110 $income += $paymentObject->total;
111 $donors[] = $paymentObject->donor_id;
112 break;
113 }
114 case 'refunded': {
115 $refunds += 1;
116 $income += $paymentObject->total;
117 $refundTotal += $paymentObject->total;
118 break;
119 }
120 }
121 }
122 }
123
124 $unique = array_unique( $donors );
125
126 return [
127 'income' => give_currency_filter(
128 give_format_amount( $income ),
129 [
130 'currency_code' => $this->currency,
131 'decode_currency' => true,
132 'sanitize' => false,
133 ]
134 ),
135 'donors' => count( $unique ),
136 'refunds' => $refunds,
137 'net' => give_currency_filter(
138 give_format_amount( $income - $refundTotal ),
139 [
140 'currency_code' => $this->currency,
141 'decode_currency' => true,
142 'sanitize' => false,
143 ]
144 ),
145 ];
146 }
147
148 }
149