PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.0.0
GiveWP – Donation Plugin and Fundraising Platform v4.0.0
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 / Routes / GetCampaignsListTable.php
give / src / Campaigns / Routes Last commit date
DeleteCampaignListTable.php 1 year ago GetCampaignComments.php 1 year ago GetCampaignRevenue.php 1 year ago GetCampaignStatistics.php 1 year ago GetCampaignsListTable.php 1 year ago RegisterCampaignRoutes.php 1 year ago
GetCampaignsListTable.php
218 lines
1 <?php
2
3 namespace Give\Campaigns\Routes;
4
5 use Give\API\RestRoute;
6 use Give\Campaigns\ListTable\CampaignsListTable;
7 use Give\Campaigns\Models\Campaign;
8 use Give\Campaigns\Repositories\CampaignRepository;
9 use Give\Campaigns\Repositories\CampaignsDataRepository;
10 use Give\Campaigns\ValueObjects\CampaignRoute;
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 return new WP_REST_Response(
128 [
129 'items' => $items,
130 'totalItems' => $campaignsCount,
131 'totalPages' => $pageCount,
132 ]
133 );
134 }
135
136 /**
137 * @since 4.0.0
138 */
139 public function getCampaigns(): array
140 {
141 $page = $this->request->get_param('page');
142 $perPage = $this->request->get_param('perPage');
143 $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id');
144 $sortDirection = $this->request->get_param('sortDirection') ?: 'desc';
145
146 $query = give(CampaignRepository::class)->prepareQuery();
147 $query = $this->getWhereConditions($query);
148
149 foreach ($sortColumns as $sortColumn) {
150 $query->orderBy($sortColumn, $sortDirection);
151 }
152
153 $query->limit($perPage)
154 ->offset(($page - 1) * $perPage);
155
156 $campaigns = $query->getAll();
157
158 if ( ! $campaigns) {
159 return [];
160 }
161
162 return $campaigns;
163 }
164
165 /**
166 * @since 4.0.0
167 */
168 public function getTotalCampaignsCount(): int
169 {
170 $query = Campaign::query();
171 $query = $this->getWhereConditions($query);
172
173 return $query->count();
174 }
175
176 /**
177 * @since 4.0.0
178 */
179 private function getWhereConditions(QueryBuilder $query): QueryBuilder
180 {
181 $search = $this->request->get_param('search');
182 $status = $this->request->get_param('status');
183
184 if ($search) {
185 if (ctype_digit($search)) {
186 $query->where('id', $search);
187 } else {
188 $query->whereLike('campaign_title', $search);
189 $query->orWhereLike('short_desc', $search);
190 }
191 }
192
193 if ($status === 'any') {
194 $query->where('status', 'archived', '!=');
195 } elseif ($status === 'inactive') {
196 $query->where('status', 'archived');
197 } elseif ($status) {
198 $query->where('status', $status);
199 }
200
201 return $query;
202 }
203
204 /**
205 * @since 4.0.0
206 *
207 * @return bool|WP_Error
208 */
209 public function permissionsCheck()
210 {
211 return current_user_can('edit_posts') ?: new WP_Error(
212 'rest_forbidden',
213 esc_html__("You don't have permission to view Campaigns", 'give'),
214 ['status' => is_user_logged_in() ? 403 : 401]
215 );
216 }
217 }
218