PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / trunk
Timetics – Appointment Booking Calendar & Scheduling vtrunk
1.0.61 1.0.60 1.0.59 1.0.58 1.0.57 1.0.56 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.2 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 All 62 releases
timetics / core / services / api-service.php

api-service.php in Timetics – Appointment Booking Calendar & Scheduling trunk, at core/services/api-service.php

338 lines 8.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Service Api
4 *
5 * @package Timetics
6 */
7 namespace Timetics\Core\Services;
8
9 defined( 'ABSPATH' ) || exit;
10
11 use Timetics\Base\Api;
12 use Timetics\Utils\Singleton;
13 use WP_REST_Request;
14
15 class Api_Service extends Api {
16 use Singleton;
17
18 /**
19 * Store api namespace
20 *
21 * @var string
22 */
23 protected $namespace = 'timetics/v1';
24
25 /**
26 * Store rest base
27 *
28 * @var string
29 */
30 protected $rest_base = 'services';
31
32 /**
33 * Register rest routes
34 *
35 * @return void
36 */
37 public function register_routes() {
38 /**
39 * Register route
40 *
41 * @var void
42 */
43 register_rest_route(
44 $this->namespace, $this->rest_base, [
45 [
46 'methods' => \WP_REST_Server::READABLE,
47 'callback' => [ $this, 'get_items' ],
48 'permission_callback' => function () {
49 return current_user_can( 'manage_options' );
50 },
51 ],
52 [
53 'methods' => \WP_REST_Server::CREATABLE,
54 'callback' => [ $this, 'create_item' ],
55 'permission_callback' => function () {
56 return current_user_can( 'manage_options' );
57 },
58 ],
59 ]
60 );
61
62 /**
63 * Register route
64 *
65 * @var void
66 */
67 register_rest_route(
68 $this->namespace, '/' . $this->rest_base . '/(?P<service_id>[\d]+)', [
69 [
70 'methods' => \WP_REST_Server::READABLE,
71 'callback' => [ $this, 'get_item' ],
72 'permission_callback' => function () {
73 return current_user_can( 'manage_options' );
74 },
75 ],
76 [
77 'methods' => \WP_REST_Server::EDITABLE,
78 'callback' => [ $this, 'update_item' ],
79 'permission_callback' => function () {
80 return current_user_can( 'manage_options' );
81 },
82 ],
83 [
84 'methods' => \WP_REST_Server::DELETABLE,
85 'callback' => [ $this, 'delete_item' ],
86 'permission_callback' => function () {
87 return current_user_can( 'manage_options' );
88 },
89 ],
90 ]
91 );
92 }
93
94 /**
95 * Get all services
96 *
97 * @param WP_Rest_Request $request
98 *
99 * @return JSON
100 */
101 public function get_items( $request ) {
102 $per_page = ! empty( $request['per_page'] ) ? intval( $request['per_page'] ) : 20;
103 $paged = ! empty( $request['paged'] ) ? intval( $request['paged'] ) : 1;
104
105 $services = Service::all(
106 [
107 'per_page' => $per_page,
108 'paged' => $paged,
109 ]
110 );
111
112 $items = [];
113
114 foreach ( $services as $item ) {
115 $items[] = $this->prepare_item( $item->term_id );
116 }
117
118 $data = [
119 'success' => 1,
120 'data' => [
121 'total' => $this->count(),
122 'items' => $items,
123 ],
124 ];
125
126 return rest_ensure_response( $data );
127 }
128
129 /**
130 * Create service
131 *
132 * @param WP_Rest_Request $request
133 *
134 * @return JSON Newly created service data
135 */
136 public function create_item( $request ) {
137 return $this->save_service( $request );
138 }
139
140 /**
141 * Update service
142 *
143 * @param WP_Rest_Request $request
144 *
145 * @return JSON Updated service data
146 */
147 public function update_item( $request ) {
148 $service_id = (int) $request['service_id'];
149 $service = new Service( $service_id );
150
151 if ( ! $service->is_service() ) {
152 return [
153 'message' => esc_html__( 'Invalid service id.', 'timetics' ),
154 'data' => [
155 'status' => 404,
156 ],
157 ];
158 }
159
160 return $this->save_service( $request, $service_id );
161 }
162
163 /**
164 * Get single service
165 *
166 * @param WP_Rest_Requesr $request
167 *
168 * @return JSON Single service data
169 */
170 public function get_item( $request ) {
171 $service_id = (int) $request['service_id'];
172 $service = new Service( $service_id );
173
174 if ( ! $service->is_service() ) {
175 return [
176 'message' => esc_html__( 'Invalid service id.', 'timetics' ),
177 'data' => [
178 'status' => 404,
179 ],
180 ];
181 }
182
183 $response = [
184 'status_code' => 200,
185 'data' => $this->prepare_item( $service ),
186 ];
187
188 return rest_ensure_response( $response );
189 }
190
191 /**
192 * Delete single service
193 *
194 * @param WP_Rest_Request $request
195 *
196 * @return
197 */
198 public function delete_item( $request ) {
199 $service_id = (int) $request['service_id'];
200 $service = new Service( $service_id );
201
202 if ( ! $service->is_service() ) {
203 return [
204 'message' => esc_html__( 'Invalid service id.', 'timetics' ),
205 'data' => [
206 'status' => 404,
207 ],
208 ];
209 }
210
211 $service->delete();
212
213 $response = [
214 'message' => esc_html__( 'Successfully deleted service', 'timetics' ),
215 'data' => [
216 'status' => 200,
217 ],
218 ];
219
220 return rest_ensure_response( $response );
221 }
222
223 /**
224 * Save service
225 *
226 * @param WP_Rest_Request $request
227 * @param integer $id Service Id
228 *
229 * @return JSON Updated service data
230 */
231 public function save_service( $request, $id = 0 ) {
232 $data = json_decode( $request->get_body(), true );
233
234 $name = ! empty( $data['name'] ) ? sanitize_text_field( $data['name'] ) : '';
235 $parent = ! empty( $data['parent'] ) ? sanitize_text_field( $data['parent'] ) : '';
236 $staff = ! empty( $data['staff'] ) ? sanitize_text_field( $data['staff'] ) : '';
237 $location = ! empty( $data['location'] ) ? sanitize_text_field( $data['location'] ) : '';
238 $duration = ! empty( $data['duration'] ) ? sanitize_text_field( $data['duration'] ) : '';
239 $price = ! empty( $data['price'] ) ? sanitize_text_field( $data['price'] ) : '';
240 $seat = ! empty( $data['seat'] ) ? intval( $data['seat'] ) : 0;
241 $color = ! empty( $data['color'] ) ? sanitize_text_field( $data['color'] ) : '';
242
243 // Validate input data.
244 $validate = $this->validate(
245 $data, [
246 'name',
247 ]
248 );
249
250 if ( is_wp_error( $validate ) ) {
251 return [
252 'success' => 0,
253 'message' => $validate->get_error_messages(),
254 'data' => [],
255 ];
256 }
257
258 // Save service.
259 $service = new Service( $id );
260
261 $service->set_props(
262 [
263 'name' => $name,
264 'parent' => $parent,
265 'location' => $location,
266 'duration' => $duration,
267 'price' => $price,
268 'seat' => $seat,
269 'color' => $color,
270 ]
271 );
272
273 $service->save();
274
275 if ( is_wp_error( $service->error ) ) {
276 return [
277 'message' => $service->error->get_error_message(),
278 'data' => [
279 'status' => 409,
280 ],
281 ];
282 }
283
284 // Prepare response data.
285 $item = $this->prepare_item( $service );
286
287 $response = [
288 'success' => 1,
289 'message' => esc_html__( 'Succssfully created service', 'timetics' ),
290 'data' => $item,
291 ];
292
293 return rest_ensure_response( $response );
294 }
295
296 /**
297 * Prepare item for response
298 *
299 * @param integer $service_id
300 *
301 * @return array
302 */
303 public function prepare_item( $service_id ) {
304 $service = new Service( $service_id );
305
306 return [
307 'id' => $service->get_id(),
308 'name' => $service->get_name(),
309 'parent' => $service->get_parent(),
310 'duration' => $service->get_duration(),
311 'location' => $service->get_location(),
312 'staff' => $service->get_staff(),
313 'seat' => $service->get_seat(),
314 'price' => $service->get_price(),
315 'color' => $service->get_color(),
316 ];
317 }
318
319 /**
320 * Count total term
321 *
322 * @return integer
323 */
324 public function count() {
325 $total_term = wp_count_terms(
326 [
327 'taxonomy' => 'timetics-service',
328 ]
329 );
330
331 if ( is_wp_error( $total_term ) ) {
332 return 0;
333 }
334
335 return $total_term;
336 }
337 }
338