PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.3.13
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.3.13
1.17.9 1.17.8 1.17.7 1.17.6 1.17.5 1.17.4 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.3.0 1.3.1 1.3.11 1.3.12 1.3.13 1.3.14 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 All 143 releases
erp / modules / hrm / includes / api / class-leave-holidays-controller.php

class-leave-holidays-controller.php in ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce 1.3.13, at modules/hrm/includes/api/class-leave-holidays-controller.php

311 lines 10.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace WeDevs\ERP\HRM\API;
3
4 use WP_REST_Server;
5 use WP_REST_Response;
6 use WP_Error;
7 use WeDevs\ERP\API\REST_Controller;
8
9 class Leave_Holidays_Controller extends REST_Controller {
10 /**
11 * Endpoint namespace.
12 *
13 * @var string
14 */
15 protected $namespace = 'erp/v1';
16
17 /**
18 * Route base.
19 *
20 * @var string
21 */
22 protected $rest_base = 'hrm/leaves/holidays';
23
24 /**
25 * Register the routes for the objects of the controller.
26 */
27 public function register_routes() {
28 register_rest_route( $this->namespace, '/' . $this->rest_base, [
29 [
30 'methods' => WP_REST_Server::READABLE,
31 'callback' => [ $this, 'get_holidays' ],
32 'args' => $this->get_collection_params(),
33 'permission_callback' => function ( $request ) {
34 return current_user_can( 'erp_view_list' );
35 },
36 ],
37 [
38 'methods' => WP_REST_Server::CREATABLE,
39 'callback' => [ $this, 'create_holiday' ],
40 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
41 'permission_callback' => function ( $request ) {
42 return current_user_can( 'erp_leave_manage' );
43 },
44 ],
45 'schema' => [ $this, 'get_public_item_schema' ],
46 ] );
47
48 register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<id>[\d]+)', [
49 [
50 'methods' => WP_REST_Server::READABLE,
51 'callback' => [ $this, 'get_holiday' ],
52 'args' => [
53 'context' => $this->get_context_param( [ 'default' => 'view' ] ),
54 ],
55 'permission_callback' => function ( $request ) {
56 return current_user_can( 'erp_view_list' );
57 },
58 ],
59 [
60 'methods' => WP_REST_Server::EDITABLE,
61 'callback' => [ $this, 'update_holiday' ],
62 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
63 'permission_callback' => function ( $request ) {
64 return current_user_can( 'erp_leave_manage' );
65 },
66 ],
67 [
68 'methods' => WP_REST_Server::DELETABLE,
69 'callback' => [ $this, 'delete_holiday' ],
70 'permission_callback' => function ( $request ) {
71 return current_user_can( 'erp_leave_manage' );
72 },
73 ],
74 'schema' => [ $this, 'get_public_item_schema' ],
75 ] );
76 }
77
78 /**
79 * Get a collection of holidays
80 *
81 * @param WP_REST_Request $request
82 *
83 * @return WP_Error|WP_REST_Response
84 */
85 public function get_holidays( $request ) {
86 $args = [
87 'number' => $request['per_page'],
88 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
89 ];
90
91 $items = erp_hr_get_holidays( $args );
92 $total_items = erp_hr_count_holidays();
93
94 $formated_items = [];
95 foreach ( $items as $item ) {
96 $data = $this->prepare_item_for_response( $item, $request );
97 $formated_items[] = $this->prepare_response_for_collection( $data );
98 }
99
100 $response = rest_ensure_response( $formated_items );
101 $response = $this->format_collection_response( $response, $request, $total_items );
102
103 return $response;
104 }
105
106 /**
107 * Get a specific holiday
108 *
109 * @param WP_REST_Request $request
110 *
111 * @return WP_Error|WP_REST_Response
112 */
113 public function get_holiday( $request ) {
114 $id = (int) $request['id'];
115 $item = \WeDevs\ERP\HRM\Models\Leave_Holiday::find( $id );
116
117 if ( empty( $id ) || empty( $item->id ) ) {
118 return new WP_Error( 'rest_holiday_invalid_id', __( 'Invalid resource id.' ), [ 'status' => 404 ] );
119 }
120
121 $item = $this->prepare_item_for_response( $item, $request );
122 $response = rest_ensure_response( $item );
123
124 return $response;
125 }
126
127 /**
128 * Create a holiday
129 *
130 * @param WP_REST_Request $request
131 *
132 * @return WP_Error|WP_REST_Request
133 */
134 public function create_holiday( $request ) {
135 $item = $this->prepare_item_for_database( $request );
136
137 $holiday_id = erp_hr_leave_insert_holiday( $item );
138 $holiday = \WeDevs\ERP\HRM\Models\Leave_Holiday::find( $holiday_id );
139
140 $request->set_param( 'context', 'edit' );
141 $response = $this->prepare_item_for_response( $holiday, $request );
142 $response = rest_ensure_response( $response );
143 $response->set_status( 201 );
144 $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $id ) ) );
145
146 return $response;
147 }
148
149 /**
150 * Update a holiday
151 *
152 * @param WP_REST_Request $request
153 *
154 * @return WP_Error|WP_REST_Request
155 */
156 public function update_holiday( $request ) {
157 $id = (int) $request['id'];
158
159 $holiday = \WeDevs\ERP\HRM\Models\Leave_Holiday::find( $id );
160 if ( empty( $id ) || empty( $holiday->id ) ) {
161 return new WP_Error( 'rest_holiday_invalid_id', __( 'Invalid resource id.' ), [ 'status' => 400 ] );
162 }
163
164 $item = $this->prepare_item_for_database( $request );
165
166 $holiday_id = erp_hr_leave_insert_holiday( $item );
167 $holiday = \WeDevs\ERP\HRM\Models\Leave_Holiday::find( $holiday_id );
168
169 $request->set_param( 'context', 'edit' );
170 $response = $this->prepare_item_for_response( $holiday, $request );
171 $response = rest_ensure_response( $response );
172 $response->set_status( 201 );
173 $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $id ) ) );
174
175 return $response;
176 }
177
178 /**
179 * Delete a holiday
180 *
181 * @param WP_REST_Request $request
182 *
183 * @return WP_Error|WP_REST_Request
184 */
185 public function delete_holiday( $request ) {
186 $id = (int) $request['id'];
187
188 erp_hr_delete_holidays( $id );
189
190 return new WP_REST_Response( true, 204 );
191 }
192
193 /**
194 * Prepare a single item for create or update
195 *
196 * @param WP_REST_Request $request Request object.
197 *
198 * @return array $prepared_item
199 */
200 protected function prepare_item_for_database( $request ) {
201 $prepared_item = [];
202
203 // required arguments.
204 if ( isset( $request['name'] ) ) {
205 $prepared_item['title'] = $request['name'];
206 }
207
208 if ( isset( $request['start_date'] ) ) {
209 $prepared_item['start'] = date( 'Y-m-d', strtotime( $request['start_date'] ) );
210 }
211
212 // optional arguments.
213 if ( isset( $request['id'] ) ) {
214 $prepared_item['id'] = absint( $request['id'] );
215 }
216
217 $prepared_item['end'] = isset( $request['end_date'] ) ? date( 'Y-m-d', strtotime( $request['end_date'] ) ) : date( 'Y-m-d', strtotime( $request['start_date'] . "+1 days" ) );
218
219 if ( isset( $request['description'] ) ) {
220 $prepared_item['description'] = $request['description'];
221 }
222
223 return $prepared_item;
224 }
225
226 /**
227 * Prepare a single user output for response
228 *
229 * @param object $item
230 * @param WP_REST_Request $request Request object.
231 * @param array $additional_fields (optional)
232 *
233 * @return WP_REST_Response $response Response data.
234 */
235 public function prepare_item_for_response( $item, $request, $additional_fields = [] ) {
236 $data = [
237 'id' => (int) $item->id,
238 'name' => $item->title,
239 'start_date' => date( 'Y-m-d', strtotime( $item->start ) ),
240 'end_date' => date( 'Y-m-d', strtotime( $item->end ) ),
241 'description' => $item->description,
242 ];
243
244 $data = array_merge( $data, $additional_fields );
245
246 // Wrap the data in a response object
247 $response = rest_ensure_response( $data );
248
249 $response = $this->add_links( $response, $item );
250
251 return $response;
252 }
253
254 /**
255 * Get the User's schema, conforming to JSON Schema
256 *
257 * @return array
258 */
259 public function get_item_schema() {
260 $schema = [
261 '$schema' => 'http://json-schema.org/draft-04/schema#',
262 'title' => 'holiday',
263 'type' => 'object',
264 'properties' => [
265 'id' => [
266 'description' => __( 'Unique identifier for the resource.' ),
267 'type' => 'integer',
268 'context' => [ 'embed', 'view', 'edit' ],
269 'readonly' => true,
270 ],
271 'name' => [
272 'description' => __( 'Name for the resource.' ),
273 'type' => 'string',
274 'context' => [ 'edit' ],
275 'arg_options' => [
276 'sanitize_callback' => 'sanitize_text_field',
277 ],
278 'required' => true,
279 ],
280 'start_date' => [
281 'description' => __( 'Start date for the resource.' ),
282 'type' => 'string',
283 'context' => [ 'edit' ],
284 'arg_options' => [
285 'sanitize_callback' => 'sanitize_text_field',
286 ],
287 'required' => true,
288 ],
289 'end_date' => [
290 'description' => __( 'End date for the resource.' ),
291 'type' => 'string',
292 'context' => [ 'edit' ],
293 'arg_options' => [
294 'sanitize_callback' => 'sanitize_text_field',
295 ],
296 ],
297 'description' => [
298 'description' => __( 'Description for the resource.' ),
299 'type' => 'string',
300 'context' => [ 'edit' ],
301 'arg_options' => [
302 'sanitize_callback' => 'sanitize_text_field',
303 ],
304 ],
305 ],
306 ];
307
308 return $schema;
309 }
310 }
311