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