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-designations-controller.php

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

287 lines 9.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 use WeDevs\ERP\API\REST_Controller;
4 use WP_REST_Server;
5 use WP_REST_Response;
6 use WP_Error;
7
8 class Designations_Controller extends REST_Controller {
9 /**
10 * Endpoint namespace.
11 *
12 * @var string
13 */
14 protected $namespace = 'erp/v1';
15
16 /**
17 * Route base.
18 *
19 * @var string
20 */
21 protected $rest_base = 'hrm/designations';
22
23 /**
24 * Register the routes for the objects of the controller.
25 */
26 public function register_routes() {
27 register_rest_route( $this->namespace, '/' . $this->rest_base, [
28 [
29 'methods' => WP_REST_Server::READABLE,
30 'callback' => [ $this, 'get_designations' ],
31 'args' => $this->get_collection_params(),
32 'permission_callback' => function ( $request ) {
33 return current_user_can( 'erp_view_list' );
34 },
35 ],
36 [
37 'methods' => WP_REST_Server::CREATABLE,
38 'callback' => [ $this, 'create_designation' ],
39 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
40 'permission_callback' => function ( $request ) {
41 return current_user_can( 'erp_manage_designation' );
42 },
43 ],
44 'schema' => [ $this, 'get_public_item_schema' ],
45 ] );
46
47 register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<id>[\d]+)', [
48 [
49 'methods' => WP_REST_Server::READABLE,
50 'callback' => [ $this, 'get_designation' ],
51 'args' => [
52 'context' => $this->get_context_param( [ 'default' => 'view' ] ),
53 ],
54 'permission_callback' => function ( $request ) {
55 return current_user_can( 'erp_view_list' );
56 },
57 ],
58 [
59 'methods' => WP_REST_Server::EDITABLE,
60 'callback' => [ $this, 'update_designation' ],
61 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
62 'permission_callback' => function ( $request ) {
63 return current_user_can( 'erp_manage_designation' );
64 },
65 ],
66 [
67 'methods' => WP_REST_Server::DELETABLE,
68 'callback' => [ $this, 'delete_designation' ],
69 'permission_callback' => function ( $request ) {
70 return current_user_can( 'erp_manage_designation' );
71 },
72 ],
73 'schema' => [ $this, 'get_public_item_schema' ],
74 ] );
75 }
76
77 /**
78 * Get a collection of designations
79 *
80 * @param WP_REST_Request $request
81 *
82 * @return WP_Error|WP_REST_Response
83 */
84 public function get_designations( $request ) {
85 $args = [
86 'number' => $request['per_page'],
87 'offset' => ( $request['per_page'] * ( $request['page'] - 1 ) ),
88 's' => $request['s'] ? $request['s'] : '',
89 ];
90
91 $items = erp_hr_get_designations( $args );
92 $total_items = erp_hr_count_designation();
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 designation
108 *
109 * @param WP_REST_Request $request
110 *
111 * @return WP_Error|WP_REST_Response
112 */
113 public function get_designation( $request ) {
114 $id = (int) $request['id'];
115 $item = new \WeDevs\ERP\HRM\Designation( $id );
116
117 if ( empty( $id ) || empty( $item->id ) ) {
118 return new WP_Error( 'rest_designation_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 designation
129 *
130 * @param WP_REST_Request $request
131 *
132 * @return WP_Error|WP_REST_Request
133 */
134 public function create_designation( $request ) {
135 $item = $this->prepare_item_for_database( $request );
136 $id = erp_hr_create_designation( $item );
137
138 $designation = new \WeDevs\ERP\HRM\Designation( $id );
139
140 $request->set_param( 'context', 'edit' );
141 $response = $this->prepare_item_for_response( $designation, $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 designation
151 *
152 * @param WP_REST_Request $request
153 *
154 * @return WP_Error|WP_REST_Request
155 */
156 public function update_designation( $request ) {
157 $id = (int) $request['id'];
158
159 $designation = new \WeDevs\ERP\HRM\Designation( $id );
160 if ( ! $designation ) {
161 return new WP_Error( 'rest_designation_invalid_id', __( 'Invalid resource id.' ), [ 'status' => 400 ] );
162 }
163
164 $item = $this->prepare_item_for_database( $request );
165 $id = erp_hr_create_designation( $item );
166
167 $request->set_param( 'context', 'edit' );
168 $response = $this->prepare_item_for_response( $designation, $request );
169 $response = rest_ensure_response( $response );
170 $response->set_status( 201 );
171 $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $id ) ) );
172
173 return $response;
174 }
175
176 /**
177 * Delete a designation
178 *
179 * @param WP_REST_Request $request
180 *
181 * @return WP_Error|WP_REST_Request
182 */
183 public function delete_designation( $request ) {
184 $id = (int) $request['id'];
185
186 erp_hr_delete_designation( $id );
187
188 return new WP_REST_Response( true, 204 );
189 }
190
191 /**
192 * Prepare a single item for create or update
193 *
194 * @param WP_REST_Request $request Request object.
195 *
196 * @return array $prepared_item
197 */
198 protected function prepare_item_for_database( $request ) {
199 $prepared_item = [];
200
201 // required arguments.
202 if ( isset( $request['title'] ) ) {
203 $prepared_item['title'] = $request['title'];
204 }
205
206 // optional arguments.
207 if ( isset( $request['id'] ) ) {
208 $prepared_item['id'] = absint( $request['id'] );
209 }
210
211 if ( isset( $request['description'] ) ) {
212 $prepared_item['description'] = $request['description'];
213 }
214
215 return $prepared_item;
216 }
217
218 /**
219 * Prepare a single user output for response
220 *
221 * @param object $item
222 * @param WP_REST_Request $request Request object.
223 * @param array $additional_fields (optional)
224 *
225 * @return WP_REST_Response $response Response data.
226 */
227 public function prepare_item_for_response( $item, $request, $additional_fields = [] ) {
228 $total_employees = \WeDevs\ERP\HRM\Models\Employee::where( array( 'status' => 'active', 'designation' => $item->id ) )->count();
229
230 $data = [
231 'id' => (int) $item->id,
232 'title' => $item->title,
233 'description' => $item->description,
234 'total_employees' => $total_employees,
235 ];
236
237 $data = array_merge( $data, $additional_fields );
238
239 // Wrap the data in a response object
240 $response = rest_ensure_response( $data );
241
242 $response = $this->add_links( $response, $item );
243
244 return $response;
245 }
246
247 /**
248 * Get the User's schema, conforming to JSON Schema
249 *
250 * @return array
251 */
252 public function get_item_schema() {
253 $schema = [
254 '$schema' => 'http://json-schema.org/draft-04/schema#',
255 'title' => 'designation',
256 'type' => 'object',
257 'properties' => [
258 'id' => [
259 'description' => __( 'Unique identifier for the resource.' ),
260 'type' => 'integer',
261 'context' => [ 'embed', 'view', 'edit' ],
262 'readonly' => true,
263 ],
264 'title' => [
265 'description' => __( 'Title for the resource.' ),
266 'type' => 'string',
267 'context' => [ 'edit' ],
268 'arg_options' => [
269 'sanitize_callback' => 'sanitize_text_field',
270 ],
271 'required' => true,
272 ],
273 'description' => [
274 'description' => __( 'Description for the resource.' ),
275 'type' => 'string',
276 'context' => [ 'edit' ],
277 'arg_options' => [
278 'sanitize_callback' => 'sanitize_text_field',
279 ],
280 ],
281 ],
282 ];
283
284 return $schema;
285 }
286 }
287