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 / TotalIncome.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
TotalIncome.php
169 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 TotalIncome extends Endpoint {
12
13 protected $payments;
14
15 public function __construct() {
16 $this->endpoint = 'total-income';
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 $data = [];
25
26 switch ( true ) {
27 case ( $diff->days > 12 ):
28 $interval = round( $diff->days / 12 );
29 $data = $this->get_data( $start, $end, 'P' . $interval . 'D' );
30 break;
31 case ( $diff->days > 7 ):
32 $data = $this->get_data( $start, $end, 'PT12H' );
33 break;
34 case ( $diff->days > 2 ):
35 $data = $this->get_data( $start, $end, 'PT3H' );
36 break;
37 case ( $diff->days >= 0 ):
38 $data = $this->get_data( $start, $end, 'PT1H' );
39 break;
40 }
41
42 return $data;
43 }
44
45 public function get_data( $start, $end, $intervalStr ) {
46
47 $this->payments = $this->get_payments( $start->format( 'Y-m-d' ), $end->format( 'Y-m-d' ) );
48
49 $tooltips = array();
50 $income = array();
51
52 $interval = new \DateInterval( $intervalStr );
53
54 $periodStart = clone $start;
55 $periodEnd = clone $start;
56
57 // Subtract interval to set up period start
58 date_sub( $periodStart, $interval );
59
60 while ( $periodStart <= $end ) {
61
62 $incomeForPeriod = $this->get_income( $periodStart->format( 'Y-m-d H:i:s' ), $periodEnd->format( 'Y-m-d H:i:s' ) );
63
64 switch ( $intervalStr ) {
65 case 'PT12H':
66 $periodLabel = $periodStart->format( 'D ga' ) . ' - ' . $periodEnd->format( 'D ga' );
67 break;
68 case 'PT3H':
69 $periodLabel = $periodStart->format( 'D ga' ) . ' - ' . $periodEnd->format( 'D ga' );
70 break;
71 case 'PT1H':
72 $periodLabel = $periodStart->format( 'D ga' ) . ' - ' . $periodEnd->format( 'D ga' );
73 break;
74 default:
75 $periodLabel = $periodStart->format( 'M j, Y' ) . ' - ' . $periodEnd->format( 'M j, Y' );
76 }
77
78 $income[] = array(
79 'x' => $periodEnd->format( 'Y-m-d H:i:s' ),
80 'y' => $incomeForPeriod,
81 );
82
83 $tooltips[] = array(
84 'title' => give_currency_filter( give_format_amount( $incomeForPeriod ), array( 'decode_currency' => true ) ),
85 'body' => __( 'Total Income', 'give' ),
86 'footer' => $periodLabel,
87 );
88
89 // Add interval to set up next period
90 date_add( $periodStart, $interval );
91 date_add( $periodEnd, $interval );
92 }
93
94 $totalIncomeForPeriod = $this->get_earnings( $start->format( 'Y-m-d' ), $end->format( 'Y-m-d' ) );
95 $trend = $this->get_trend( $start, $end, $income );
96
97 $diff = date_diff( $start, $end );
98 $info = $diff->days > 1 ? __( 'VS previous', 'give' ) . ' ' . $diff->days . ' ' . __( 'days', 'give' ) : __( 'VS previous day', 'give' );
99
100 // Create data objec to be returned, with 'highlights' object containing total and average figures to display
101 $data = array(
102 'datasets' => array(
103 array(
104 'data' => $income,
105 'tooltips' => $tooltips,
106 'trend' => $trend,
107 'info' => $info,
108 'highlight' => give_currency_filter( give_format_amount( $totalIncomeForPeriod ), array( 'decode_currency' => true ) ),
109 ),
110 ),
111 );
112
113 return $data;
114
115 }
116
117 public function get_trend( $start, $end, $income ) {
118
119 $interval = $start->diff( $end );
120
121 $prevStart = clone $start;
122 $prevStart = date_sub( $prevStart, $interval );
123
124 $prevEnd = clone $start;
125
126 $prevIncome = $this->get_earnings( $prevStart->format( 'Y-m-d' ), $prevEnd->format( 'Y-m-d' ) );
127 $currentIncome = $this->get_earnings( $start->format( 'Y-m-d' ), $end->format( 'Y-m-d' ) );
128
129 // Set default trend to 0
130 $trend = 0;
131
132 // Check that prev value and current value are > 0 (can't divide by 0)
133 if ( $prevIncome > 0 && $currentIncome > 0 ) {
134
135 // Check if it is a percent decreate, or increase
136 if ( $prevIncome > $currentIncome ) {
137 // Calculate a percent decrease
138 $trend = round( ( ( ( $prevIncome - $currentIncome ) / $prevIncome ) * 100 ), 1 ) * -1;
139 } elseif ( $currentIncome > $prevIncome ) {
140 // Calculate a percent increase
141 $trend = round( ( ( ( $currentIncome - $prevIncome ) / $prevIncome ) * 100 ), 1 );
142 }
143 }
144
145 return $trend;
146 }
147
148 public function get_income( $startStr, $endStr ) {
149
150 $income = 0;
151
152 foreach ( $this->payments as $payment ) {
153 if ( $payment->date > $startStr && $payment->date < $endStr ) {
154 if ( $payment->status === 'publish' || $payment->status === 'give_subscription' ) {
155 $income += $payment->total;
156 }
157 }
158 }
159
160 return $income;
161 }
162
163 public function get_earnings( $startStr, $endStr ) {
164 $stats = new \Give_Payment_Stats();
165 $income = $stats->get_earnings( 0, $startStr, $endStr );
166 return $income;
167 }
168 }
169