PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.57
Timetics – Appointment Booking Calendar & Scheduling v1.0.57
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 1.0.57, at core/services/api-service.php

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