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 / 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
142 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 $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 > 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 $this->payments = $this->get_payments( $start->format( 'Y-m-d' ), $end->format( 'Y-m-d' ) );
51
52 $tooltips = array();
53 $income = array();
54
55 $interval = new \DateInterval( $intervalStr );
56
57 $periodStart = clone $start;
58 $periodEnd = clone $start;
59
60 // Subtract interval to set up period start
61 date_sub( $periodStart, $interval );
62
63 while ( $periodStart < $end ) {
64
65 $values = $this->get_values( $periodStart->format( 'Y-m-d H:i:s' ), $periodEnd->format( 'Y-m-d H:i:s' ) );
66 $incomeForPeriod = $values['earnings'];
67 $donorsForPeriod = $values['donor_count'];
68 $time = $periodEnd->format( 'Y-m-d H:i:s' );
69
70 switch ( $intervalStr ) {
71 case 'P1D':
72 $time = $periodStart->format( 'Y-m-d H:i:s' );
73 $periodLabel = $periodStart->format( 'l' );
74 break;
75 case 'PT12H':
76 case 'PT3H':
77 case 'PT1H':
78 $periodLabel = $periodStart->format( 'D ga' ) . ' - ' . $periodEnd->format( 'D ga' );
79 break;
80 default:
81 $periodLabel = $periodStart->format( 'M j, Y' ) . ' - ' . $periodEnd->format( 'M j, Y' );
82 }
83
84 $income[] = array(
85 'x' => $time,
86 'y' => $incomeForPeriod,
87 );
88
89 $tooltips[] = array(
90 'title' => give_currency_filter( give_format_amount( $incomeForPeriod ), array( 'decode_currency' => true ) ),
91 'body' => $donorsForPeriod . ' ' . __( 'Donors', 'give' ),
92 'footer' => $periodLabel,
93 );
94
95 // Add interval to set up next period
96 date_add( $periodStart, $interval );
97 date_add( $periodEnd, $interval );
98 }
99
100 if ( $intervalStr === 'P1D' ) {
101 $income = array_slice( $income, 1 );
102 $tooltips = array_slice( $tooltips, 1 );
103 }
104
105 // Create data objec to be returned, with 'highlights' object containing total and average figures to display
106 $data = array(
107 'datasets' => array(
108 array(
109 'data' => $income,
110 'tooltips' => $tooltips,
111 ),
112 ),
113 );
114
115 return $data;
116
117 }
118
119 public function get_values( $startStr, $endStr ) {
120
121 $earnings = 0;
122 $donors = array();
123
124 foreach ( $this->payments as $payment ) {
125 if ( $payment->date > $startStr && $payment->date < $endStr ) {
126 if ( $payment->status == 'publish' || $payment->status == 'give_subscription' ) {
127 $earnings += $payment->total;
128 $donors[] = $payment->donor_id;
129 }
130 }
131 }
132
133 $unique = array_unique( $donors );
134
135 return array(
136 'earnings' => $earnings,
137 'donor_count' => count( $unique ),
138 );
139 }
140
141 }
142