PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.6.1
GiveWP – Donation Plugin and Fundraising Platform v4.6.1
4.16.4 4.16.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 / Campaigns / ListTable / Routes / GetCampaignsListTable.php
give / src / Campaigns / ListTable / Routes Last commit date
DeleteCampaignListTable.php 1 year ago GetCampaignsListTable.php 1 year ago
GetCampaignsListTable.php
227 lines
1 <?php
2
3 namespace Give\Campaigns\ListTable\Routes;
4
5 use Give\API\REST\V3\Routes\Campaigns\ValueObjects\CampaignRoute;
6 use Give\API\RestRoute;
7 use Give\Campaigns\ListTable\CampaignsListTable;
8 use Give\Campaigns\Models\Campaign;
9 use Give\Campaigns\Repositories\CampaignRepository;
10 use Give\Campaigns\Repositories\CampaignsDataRepository;
11 use Give\Framework\QueryBuilder\QueryBuilder;
12 use WP_Error;
13 use WP_REST_Request;
14 use WP_REST_Response;
15 use WP_REST_Server;
16
17 /**
18 * @since 4.0.0
19 */
20 class GetCampaignsListTable implements RestRoute
21 {
22 /**
23 * @var string
24 */
25 protected $endpoint = 'campaigns/list-table';
26
27 /**
28 * @var WP_REST_Request
29 */
30 protected $request;
31
32 /**
33 * @var CampaignsListTable
34 */
35 protected $listTable;
36
37 /**
38 * @since 4.0.0
39 */
40 public function registerRoute(): void
41 {
42 register_rest_route(
43 CampaignRoute::NAMESPACE,
44 $this->endpoint,
45 [
46 [
47 'methods' => WP_REST_Server::READABLE,
48 'callback' => [$this, 'handleRequest'],
49 'permission_callback' => [$this, 'permissionsCheck'],
50 ],
51 'args' => [
52 'page' => [
53 'type' => 'integer',
54 'default' => 1,
55 'minimum' => 1,
56 ],
57 'perPage' => [
58 'type' => 'integer',
59 'default' => 30,
60 'minimum' => 1,
61 ],
62 'search' => [
63 'type' => 'string',
64 'required' => false,
65 'sanitize_callback' => 'sanitize_text_field',
66 ],
67 'status' => [
68 'type' => 'string',
69 'required' => false,
70 'sanitize_callback' => 'sanitize_text_field',
71 ],
72 'sortColumn' => [
73 'type' => 'string',
74 'default' => 'id',
75 'sanitize_callback' => 'sanitize_text_field',
76 ],
77 'sortDirection' => [
78 'type' => 'string',
79 'default' => 'asc',
80 'enum' => ['asc', 'desc'],
81 ],
82 'locale' => [
83 'type' => 'string',
84 'required' => false,
85 'default' => get_locale(),
86 ],
87 ],
88 ]
89 );
90 }
91
92 /**
93 * @since 4.0.0
94 */
95 public function handleRequest(WP_REST_Request $request): WP_REST_Response
96 {
97 $this->request = $request;
98 $this->listTable = give(CampaignsListTable::class);
99
100 $campaignsCount = $this->getTotalCampaignsCount();
101
102 if ($campaignsCount === 0) {
103 return new WP_REST_Response(
104 [
105 'items' => [],
106 'totalItems' => 0,
107 'totalPages' => 0,
108 ]
109 );
110 }
111
112 $campaigns = $this->getCampaigns();
113 $pageCount = (int)ceil($campaignsCount / $request->get_param('perPage'));
114
115 $ids = array_map(function (Campaign $campaign) {
116 return $campaign->id;
117 }, $campaigns);
118
119 $campaignsData = CampaignsDataRepository::campaigns($ids);
120
121 $this->listTable
122 ->setData($campaignsData)
123 ->items($campaigns, $this->request->get_param('locale') ?? '');
124
125 $items = $this->listTable->getItems();
126
127 foreach ($items as $i => $item) {
128 $items[$i]['titleRaw'] = $campaigns[$i]->title;
129 }
130
131 return new WP_REST_Response(
132 [
133 'items' => $items,
134 'totalItems' => $campaignsCount,
135 'totalPages' => $pageCount,
136 ]
137 );
138 }
139
140 /**
141 * @since 4.0.0
142 */
143 public function getCampaigns(): array
144 {
145 $page = $this->request->get_param('page');
146 $perPage = $this->request->get_param('perPage');
147 $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id');
148 $sortDirection = $this->request->get_param('sortDirection') ?: 'desc';
149
150 $query = give(CampaignRepository::class)->prepareQuery();
151 $query = $this->getWhereConditions($query);
152
153 foreach ($sortColumns as $sortColumn) {
154 $query->orderBy($sortColumn, $sortDirection);
155 }
156
157 $query->limit($perPage)
158 ->offset(($page - 1) * $perPage);
159
160 $campaigns = $query->getAll();
161
162 if ( ! $campaigns) {
163 return [];
164 }
165
166 return $campaigns;
167 }
168
169 /**
170 * @since 4.0.0
171 */
172 public function getTotalCampaignsCount(): int
173 {
174 $query = Campaign::query();
175 $query = $this->getWhereConditions($query);
176
177 return $query->count();
178 }
179
180 /**
181 * @since 4.0.0
182 */
183 private function getWhereConditions(QueryBuilder $query): QueryBuilder
184 {
185 $search = $this->request->get_param('search');
186 $status = $this->request->get_param('status');
187
188 if ($search) {
189 if (ctype_digit($search)) {
190 $query->where('id', $search);
191 } else {
192 $query->whereLike('campaign_title', $search);
193 $query->orWhereLike('short_desc', $search);
194 }
195 }
196
197 if ($status === 'any') {
198 $query->where('status', 'archived', '!=');
199 } elseif ($status === 'inactive') {
200 $query->where('status', 'archived');
201 } elseif ($status) {
202 $query->where('status', $status);
203 }
204
205 return $query;
206 }
207
208 /**
209 * @since 4.3.1 update permissions
210 * @since 4.0.0
211 *
212 * @return bool|WP_Error
213 */
214 public function permissionsCheck()
215 {
216 if (current_user_can('manage_options') || current_user_can('edit_give_forms')) {
217 return true;
218 }
219
220 return new WP_Error(
221 'rest_forbidden',
222 esc_html__("You don't have permission to view Campaigns", 'give'),
223 ['status' => is_user_logged_in() ? 403 : 401]
224 );
225 }
226 }
227