PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.6.7
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.6.7
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.6.7, at modules/hrm/includes/api/class-designations-controller.php

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