PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.13.1
GiveWP – Donation Plugin and Fundraising Platform v4.13.1
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 / EventTickets / Routes / GetEventsListTable.php
give / src / EventTickets / Routes Last commit date
CreateEvent.php 1 year ago CreateEventTicketType.php 1 year ago DeleteEventTicketType.php 1 year ago DeleteEventsListTable.php 1 year ago GetEventForms.php 1 year ago GetEventTicketTypeTickets.php 1 year ago GetEventTicketTypes.php 1 year ago GetEventTickets.php 1 year ago GetEvents.php 1 year ago GetEventsListTable.php 1 year ago UpdateEvent.php 1 year ago UpdateEventTicketType.php 1 year ago
GetEventsListTable.php
174 lines
1 <?php
2
3 namespace Give\EventTickets\Routes;
4
5 use Give\EventTickets\ListTable\EventTicketsListTable;
6 use Give\Framework\Database\DB;
7 use Give\Framework\QueryBuilder\QueryBuilder;
8 use WP_REST_Request;
9 use WP_REST_Response;
10 use WP_REST_Server;
11
12 /**
13 * @since 3.6.0
14 */
15 class GetEventsListTable
16 {
17 /**
18 * @var string
19 */
20 protected $endpoint = 'events-tickets/events/list-table';
21
22 /**
23 * @var WP_REST_Request
24 */
25 protected $request;
26
27 /**
28 * @var EventTicketsListTable
29 */
30 protected $listTable;
31
32 /**
33 * @inheritDoc
34 *
35 * @since 3.20.0 Set the permission callback to "read".
36 * @since 3.6.0
37 */
38 public function registerRoute(): void
39 {
40 register_rest_route(
41 'give-api/v2',
42 $this->endpoint,
43 [
44 [
45 'methods' => WP_REST_Server::READABLE,
46 'callback' => [$this, 'handleRequest'],
47 'permission_callback' => function () {
48 return current_user_can('edit_give_forms');
49 },
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 'sortColumn' => [
68 'type' => 'string',
69 'default' => 'id',
70 'sanitize_callback' => 'sanitize_text_field',
71 ],
72 'sortDirection' => [
73 'type' => 'string',
74 'default' => 'asc',
75 'enum' => ['asc', 'desc'],
76 ],
77 'locale' => [
78 'type' => 'string',
79 'required' => false,
80 'default' => get_locale(),
81 ],
82 ],
83 ]
84 );
85 }
86
87 /**
88 * @since 3.6.0
89 */
90 public function handleRequest(WP_REST_Request $request): WP_REST_Response
91 {
92 $this->request = $request;
93 $this->listTable = give(EventTicketsListTable::class);
94
95 $events = $this->getEvents();
96 $eventsCount = $this->getTotalEventsCount();
97 $pageCount = (int)ceil($eventsCount / $request->get_param('perPage'));
98
99 if ('model' === $this->request->get_param('return')) {
100 $items = $events;
101 } else {
102 $this->listTable->items($events, $this->request->get_param('locale') ?? '');
103 $items = $this->listTable->getItems();
104 }
105
106 return new WP_REST_Response(
107 [
108 'items' => $items,
109 'totalItems' => $eventsCount,
110 'totalPages' => $pageCount
111 ]
112 );
113 }
114
115 /**
116 * @since 3.6.0
117 */
118 public function getEvents(): array
119 {
120 $page = $this->request->get_param('page');
121 $perPage = $this->request->get_param('perPage');
122 $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id');
123 $sortDirection = $this->request->get_param('sortDirection') ?: 'desc';
124
125 $query = give()->events->prepareQuery();
126 $query = $this->getWhereConditions($query);
127
128 foreach ($sortColumns as $sortColumn) {
129 $query->orderBy($sortColumn, $sortDirection);
130 }
131
132 $query->limit($perPage)
133 ->offset(($page - 1) * $perPage);
134
135 $events = $query->getAll();
136
137 if (!$events) {
138 return [];
139 }
140
141 return $events;
142 }
143
144 /**
145 * @since 3.6.0
146 */
147 public function getTotalEventsCount(): int
148 {
149 $query = DB::table('give_events');
150 $query = $this->getWhereConditions($query);
151
152 return $query->count();
153 }
154
155 /**
156 * @since 3.6.0
157 */
158 private function getWhereConditions(QueryBuilder $query): QueryBuilder
159 {
160 $search = $this->request->get_param('search');
161
162 if ($search) {
163 if (ctype_digit($search)) {
164 $query->where('id', $search);
165 } else {
166 $query->whereLike('title', $search);
167 $query->orWhereLike('description', $search);
168 }
169 }
170
171 return $query;
172 }
173 }
174