PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.6.9
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.6.9
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / inc / jwt / rest-api / version1 / class-lp-rest-sections-v1-controller.php

class-lp-rest-sections-v1-controller.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.6.9, at inc/jwt/rest-api/version1/class-lp-rest-sections-v1-controller.php

194 lines 6.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 class LP_Jwt_Sections_V1_Controller extends LP_REST_Jwt_Controller {
3 protected $namespace = 'learnpress/v1';
4
5 protected $rest_base = 'sections';
6
7 public function register_routes() {
8 register_rest_route(
9 $this->namespace,
10 '/' . $this->rest_base . '/sections-by-course-id/(?P<course_id>[\d]+)',
11 array(
12 'args' => array(
13 'course_id' => array(
14 'description' => esc_html__( 'Course ID.', 'learnpress' ),
15 'type' => 'integer',
16 ),
17 ),
18 array(
19 'methods' => WP_REST_Server::READABLE,
20 'callback' => array( $this, 'get_sections_by_course' ),
21 'permission_callback' => array( $this, 'get_items_permissions_check' ),
22 'args' => $this->get_collection_params(),
23 ),
24 'schema' => array( $this, 'get_public_item_schema' ),
25 )
26 );
27 }
28
29 public function get_items_permissions_check( $request ) {
30 if ( empty( $request['course_id'] ) ) {
31 return new WP_Error( 'lp_section_not_course_id', __( 'Sorry, Invalid course ID param.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );
32 }
33
34 $course_id = absint( $request['course_id'] );
35 $post = get_post( $course_id );
36
37 $post_status_obj = get_post_status_object( $post->post_status );
38
39 if ( ! $post_status_obj || ! $post_status_obj->public ) {
40 return new WP_Error( 'lp_section_not_public', __( 'Course is not public', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );
41 }
42
43 return true;
44 }
45
46 public function get_sections_by_course( $request ) {
47 $filters = new LP_Section_Filter();
48 $filters->section_course_id = $request['course_id'];
49 $filters->limit = $request['per_page'];
50 $filters->page = $request['page'];
51 $filters->order = $request['order'];
52 $filters->search_section = $request['search'];
53 $filters->section_ids = $request['include'];
54 $filters->section_not_ids = $request['exclude'];
55
56 $query_results = LP_Section_DB::getInstance()->get_sections_by_course_id( $filters );
57
58 if ( is_wp_error( $query_results ) ) {
59 return $query_results;
60 }
61
62 $results = $query_results['results'];
63
64 $return = array();
65
66 foreach ( $results as $result ) {
67 $data = $this->prepare_object_for_response( $result, $request );
68 $return[] = $this->prepare_response_for_collection( $data );
69 }
70
71 $response = rest_ensure_response( $return );
72
73 $response->header( 'X-WP-Total', $query_results['total'] );
74 $response->header( 'X-WP-TotalPages', (int) $query_results['pages'] );
75
76 return $response;
77 }
78
79 public function prepare_object_for_response( $section_data, $request ) {
80 $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
81
82 $data = $this->get_sections_data( $section_data, $context, $request );
83
84 $response = rest_ensure_response( $data );
85
86 return apply_filters( 'lp_jwt_rest_prepare_sections_object', $response, $section_data, $request );
87 }
88
89 public function get_sections_data( $section_data, $context, $request ) {
90 $fields = $this->get_fields_for_response( $request );
91
92 foreach ( $fields as $field ) {
93 switch ( $field ) {
94 case 'id':
95 $data['id'] = $section_data['section_id'] ?? 0;
96 break;
97 case 'name':
98 $data['name'] = $section_data['section_name'] ?? '';
99 break;
100 case 'description':
101 $data['description'] = $section_data['section_description'] ?? '';
102 break;
103 }
104 }
105
106 return $data;
107 }
108
109 public function get_item_schema() {
110 $schema = array(
111 '$schema' => 'http://json-schema.org/draft-04/schema#',
112 'title' => 'learnpress_sections',
113 'type' => 'object',
114 'properties' => array(
115 'id' => array(
116 'description' => __( 'Unique identifier for the resource.', 'learnpress' ),
117 'type' => 'integer',
118 'context' => array( 'view', 'edit' ),
119 'readonly' => true,
120 ),
121 'name' => array(
122 'description' => __( 'Section name.', 'learnpress' ),
123 'type' => 'string',
124 'context' => array( 'view', 'edit' ),
125 ),
126 'description' => array(
127 'description' => __( 'Section description.', 'learnpress' ),
128 'type' => 'string',
129 'context' => array( 'view', 'edit' ),
130 ),
131 ),
132 );
133
134 return $this->add_additional_fields_schema( $schema );
135 }
136
137 public function get_collection_params() {
138 $params = array();
139 $params['context'] = $this->get_context_param();
140 $params['context']['default'] = 'view';
141
142 $params['page'] = array(
143 'description' => __( 'Current page of the collection.', 'learnpress' ),
144 'type' => 'integer',
145 'default' => 1,
146 'sanitize_callback' => 'absint',
147 'validate_callback' => 'rest_validate_request_arg',
148 'minimum' => 1,
149 );
150 $params['per_page'] = array(
151 'description' => __( 'Maximum number of items to be returned in result set.', 'learnpress' ),
152 'type' => 'integer',
153 'default' => 10,
154 'minimum' => 1,
155 'maximum' => 100,
156 'sanitize_callback' => 'absint',
157 'validate_callback' => 'rest_validate_request_arg',
158 );
159 $params['order'] = array(
160 'description' => __( 'Order sort attribute ascending or descending.', 'learnpress' ),
161 'type' => 'string',
162 'default' => 'asc',
163 'enum' => array( 'asc', 'desc' ),
164 'validate_callback' => 'rest_validate_request_arg',
165 );
166 $params['search'] = array(
167 'description' => __( 'Limit results to those matching a string.', 'learnpress' ),
168 'type' => 'string',
169 'sanitize_callback' => 'sanitize_text_field',
170 'validate_callback' => 'rest_validate_request_arg',
171 );
172 $params['exclude'] = array(
173 'description' => __( 'Ensure result set excludes specific IDs.', 'learnpress' ),
174 'type' => 'array',
175 'items' => array(
176 'type' => 'integer',
177 ),
178 'default' => array(),
179 'sanitize_callback' => 'wp_parse_id_list',
180 );
181 $params['include'] = array(
182 'description' => __( 'Limit result set to specific ids.', 'learnpress' ),
183 'type' => 'array',
184 'items' => array(
185 'type' => 'integer',
186 ),
187 'default' => array(),
188 'sanitize_callback' => 'wp_parse_id_list',
189 );
190
191 return apply_filters( 'lp_rest_sections_collection_params', $params );
192 }
193 }
194