PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.1
GiveWP – Donation Plugin and Fundraising Platform v3.0.1
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 4 years ago DonationsVsIncome.php 4 years ago Endpoint.php 4 years ago FormPerformance.php 4 years ago Income.php 4 years ago IncomeBreakdown.php 4 years ago PaymentMethods.php 4 years ago PaymentStatuses.php 4 years ago RecentDonations.php 4 years ago TopDonors.php 4 years ago TotalDonors.php 4 years ago TotalIncome.php 4 years ago TotalRefunds.php 4 years ago
Income.php
150 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
14 protected $payments;
15
16 public function __construct()
17 {
18 $this->endpoint = 'income';
19 }
20
21 public function getReport($request)
22 {
23 $start = date_create($request->get_param('start'));
24 $end = date_create($request->get_param('end'));
25 $diff = date_diff($start, $end);
26
27 $dataset = [];
28
29 switch (true) {
30 case ($diff->days > 12):
31 $interval = round($diff->days / 12);
32 $data = $this->get_data($start, $end, 'P' . $interval . 'D');
33 break;
34 case ($diff->days > 5):
35 $data = $this->get_data($start, $end, 'P1D');
36 break;
37 case ($diff->days > 4):
38 $data = $this->get_data($start, $end, 'PT12H');
39 break;
40 case ($diff->days > 2):
41 $data = $this->get_data($start, $end, 'PT3H');
42 break;
43 case ($diff->days >= 0):
44 $data = $this->get_data($start, $end, 'PT1H');
45 break;
46 }
47
48 return $data;
49 }
50
51 public function get_data($start, $end, $intervalStr)
52 {
53 $tooltips = [];
54 $income = [];
55
56 $interval = new \DateInterval($intervalStr);
57
58 $periodStart = clone $start;
59 $periodEnd = clone $start;
60
61 // Subtract interval to set up period start
62 date_sub($periodStart, $interval);
63
64 while ($periodStart < $end) {
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');
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[] = [
85 'x' => $time,
86 'y' => $incomeForPeriod,
87 ];
88
89 $tooltips[] = [
90 'title' => give_currency_filter(
91 give_format_amount($incomeForPeriod),
92 [
93 'currency_code' => $this->currency,
94 'decode_currency' => true,
95 'sanitize' => false,
96 ]
97 ),
98 'body' => $donorsForPeriod . ' ' . __('Donors', 'give'),
99 'footer' => $periodLabel,
100 ];
101
102 // Add interval to set up next period
103 date_add($periodStart, $interval);
104 date_add($periodEnd, $interval);
105 }
106
107 if ($intervalStr === 'P1D') {
108 $income = array_slice($income, 1);
109 $tooltips = array_slice($tooltips, 1);
110 }
111
112 // Create data object to be returned, with 'highlights' object containing total and average figures to display
113 $data = [
114 'datasets' => [
115 [
116 'data' => $income,
117 'tooltips' => $tooltips,
118 ],
119 ],
120 ];
121
122 return $data;
123 }
124
125 public function get_values($startStr, $endStr)
126 {
127 $paymentObjects = $this->getPayments($startStr, $endStr);
128
129 $earnings = 0;
130 $donors = [];
131
132 foreach ($paymentObjects as $paymentObject) {
133 if ($paymentObject->date >= $startStr && $paymentObject->date < $endStr) {
134 if ($paymentObject->status == 'publish' || $paymentObject->status == 'give_subscription') {
135 $earnings += $paymentObject->total;
136 $donors[] = $paymentObject->donor_id;
137 }
138 }
139 }
140
141 $unique = array_unique($donors);
142
143 return [
144 'earnings' => $earnings,
145 'donor_count' => count($unique),
146 ];
147 }
148
149 }
150