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