PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.23.2
GiveWP – Donation Plugin and Fundraising Platform v2.23.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 / Donations / Controllers / DonationsRequestController.php
give / src / Donations / Controllers Last commit date
DonationsRequestController.php 4 years ago
DonationsRequestController.php
155 lines
1 <?php
2
3 namespace Give\Donations\Controllers;
4
5 use Give\Donations\ValueObjects\DonationMetaKeys;
6 use Give\Framework\Database\DB;
7 use Give\Framework\QueryBuilder\QueryBuilder;
8 use WP_REST_Request;
9
10 /**
11 * Donations Request Controller class
12 *
13 * @since 2.21.0
14 */
15 class DonationsRequestController
16 {
17 /**
18 * @var WP_REST_Request
19 */
20 private $request;
21
22 /**
23 * @param WP_REST_Request $request
24 */
25 public function __construct(WP_REST_Request $request)
26 {
27 $this->request = $request;
28 }
29
30 /**
31 * @since 2.21.0
32 *
33 * @return array
34 */
35 public function getDonations(): array
36 {
37 $page = $this->request->get_param('page');
38 $perPage = $this->request->get_param('perPage');
39
40 $query = DB::table('posts')
41 ->distinct()
42 ->select(
43 'id',
44 ['post_date', 'createdAt'],
45 ['post_status', 'status']
46 )
47 ->attachMeta(
48 'give_donationmeta',
49 'id',
50 'donation_id',
51 ...DonationMetaKeys::getColumnsForAttachMetaQuery()
52 )
53 ->where('post_type', 'give_payment');
54
55 $query = $this->getWhereConditions($query);
56
57 $query->limit($perPage)
58 ->orderBy('id', 'DESC')
59 ->offset(($page - 1) * $perPage);
60
61 $donations = $query->getAll();
62
63 if (!$donations) {
64 return [];
65 }
66
67 return $donations;
68 }
69
70 /**
71 * @since 2.21.0
72 *
73 * @return int
74 */
75 public function getTotalDonationsCount(): int
76 {
77 $query = DB::table('posts')
78 ->where('post_type', 'give_payment');
79
80 $query = $this->getWhereConditions($query);
81
82 return $query->count();
83 }
84
85 /**
86 * @param QueryBuilder $query
87 * @since 2.21.0
88 *
89 * @return QueryBuilder
90 */
91 private function getWhereConditions(QueryBuilder $query): QueryBuilder
92 {
93 $search = $this->request->get_param('search');
94 $start = $this->request->get_param('start');
95 $end = $this->request->get_param('end');
96 $form = $this->request->get_param('form');
97 $donor = $this->request->get_param('donor');
98
99 if ($form || $donor || ($search && !ctype_digit($search))) {
100 $query->leftJoin(
101 'give_donationmeta',
102 'id',
103 'metaTable.donation_id',
104 'metaTable'
105 );
106 }
107
108 if ($search) {
109 if (ctype_digit($search)) {
110 $query->where('id', $search);
111 } else if (strpos($search, '@') !== false) {
112 $query
113 ->where('metaTable.meta_key', DonationMetaKeys::EMAIL)
114 ->whereLike('metaTable.meta_value', $search);
115 } else {
116 $query
117 ->where('metaTable.meta_key', DonationMetaKeys::FIRST_NAME)
118 ->whereLike('metaTable.meta_value', $search)
119 ->orWhere('metaTable.meta_key', DonationMetaKeys::LAST_NAME)
120 ->whereLike('metaTable.meta_value', $search);
121 }
122 }
123
124 if ($donor) {
125 if (ctype_digit($donor)) {
126 $query
127 ->where('metaTable.meta_key', DonationMetaKeys::DONOR_ID)
128 ->where('metaTable.meta_value', $donor);
129 } else {
130 $query
131 ->where('metaTable.meta_key', DonationMetaKeys::FIRST_NAME)
132 ->whereLike('metaTable.meta_value', $donor)
133 ->orWhere('metaTable.meta_key', DonationMetaKeys::LAST_NAME)
134 ->whereLike('metaTable.meta_value', $donor);
135 }
136 }
137
138 if ($form) {
139 $query
140 ->where('metaTable.meta_key', DonationMetaKeys::FORM_ID)
141 ->where('metaTable.meta_value', $form);
142 }
143
144 if ($start && $end) {
145 $query->whereBetween('post_date', $start, $end);
146 } else if ($start) {
147 $query->where('post_date', $start, '>=');
148 } else if ($end) {
149 $query->where('post_date', $end, '<=');
150 }
151
152 return $query;
153 }
154 }
155