PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.6.2
GiveWP – Donation Plugin and Fundraising Platform v2.6.2
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
137 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 $start = date_create( $request->get_param( 'start' ) );
21 $end = date_create( $request->get_param( 'end' ) );
22 $diff = date_diff( $start, $end );
23
24 $dataset = array();
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 $this->payments = $this->get_payments( $start->format( 'Y-m-d' ), $end->format( 'Y-m-d' ) );
47
48 $tooltips = array();
49 $income = array();
50
51 $interval = new \DateInterval( $intervalStr );
52
53 $periodStart = clone $start;
54 $periodEnd = clone $start;
55
56 // Subtract interval to set up period start
57 date_sub( $periodStart, $interval );
58
59 while ( $periodStart < $end ) {
60
61 $values = $this->get_values( $periodStart->format( 'Y-m-d H:i:s' ), $periodEnd->format( 'Y-m-d H:i:s' ) );
62 $incomeForPeriod = $values['income'];
63 $donorsForPeriod = $values['donors'];
64 $refundsForPeriod = $values['refunds'];
65 $netForPeriod = $values['net'];
66
67 switch ( $intervalStr ) {
68 case 'P1M':
69 $periodLabel = $periodEnd->format( 'F Y' );
70 break;
71 case 'P1D':
72 $periodLabel = $periodStart->format( 'F j, Y' );
73 break;
74 case 'PT1H':
75 $periodLabel = $periodEnd->format( 'l ga' );
76 break;
77 default:
78 $periodLabel = $periodEnd->format( 'F j, Y' );
79 }
80
81 $income[] = array(
82 __( 'Date', 'give' ) => $periodLabel,
83 __( 'Donors', 'give' ) => $donorsForPeriod,
84 __( 'Donations', 'give' ) => $incomeForPeriod,
85 __( 'Refunds', 'give' ) => $refundsForPeriod,
86 __( 'Net', 'give' ) => $netForPeriod,
87 );
88
89 // Add interval to set up next period
90 date_add( $periodStart, $interval );
91 date_add( $periodEnd, $interval );
92 }
93
94 // Create data objec to be returned, with 'highlights' object containing total and average figures to display
95 $data = $income;
96 return $data;
97
98 }
99
100 public function get_values( $startStr, $endStr ) {
101
102 $income = 0;
103 $refundTotal = 0;
104 $refunds = 0;
105 $donors = array();
106
107 foreach ( $this->payments as $payment ) {
108 if ( $payment->date > $startStr && $payment->date < $endStr ) {
109 switch ( $payment->status ) {
110 case 'give_subscription':
111 case 'publish': {
112 $income += $payment->total;
113 $donors[] = $payment->donor_id;
114 break;
115 }
116 case 'refunded': {
117 $refunds += 1;
118 $income += $payment->total;
119 $refundTotal += $payment->total;
120 break;
121 }
122 }
123 }
124 }
125
126 $unique = array_unique( $donors );
127
128 return array(
129 'income' => give_currency_filter( give_format_amount( $income ), array( 'decode_currency' => true ) ),
130 'donors' => count( $unique ),
131 'refunds' => $refunds,
132 'net' => give_currency_filter( give_format_amount( $income - $refundTotal ), array( 'decode_currency' => true ) ),
133 );
134 }
135
136 }
137