PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.2.0
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.2.0
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 / rest-api / v1 / frontend / class-lp-rest-lazy-load-controller.php

class-lp-rest-lazy-load-controller.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.2.0, at inc/rest-api/v1/frontend/class-lp-rest-lazy-load-controller.php

342 lines 10.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class LP_REST_Lazy_Load_Controller
5 */
6 class LP_REST_Lazy_Load_Controller extends LP_Abstract_REST_Controller {
7 public function __construct() {
8 $this->namespace = 'lp/v1';
9 $this->rest_base = 'lazy-load';
10
11 parent::__construct();
12 }
13
14 public function register_routes() {
15 $this->routes = array(
16 'course-progress' => array(
17 array(
18 'methods' => WP_REST_Server::CREATABLE,
19 'callback' => array( $this, 'user_progress' ),
20 'permission_callback' => function () {
21 return is_user_logged_in();
22 },
23 ),
24 ),
25 'course-curriculum' => array(
26 array(
27 'methods' => WP_REST_Server::READABLE,
28 'callback' => array( $this, 'course_curriculum' ),
29 'permission_callback' => '__return_true',
30 ),
31 ),
32 'course-curriculum-items' => array(
33 array(
34 'methods' => WP_REST_Server::READABLE,
35 'callback' => array( $this, 'course_curriculum_items' ),
36 'permission_callback' => '__return_true',
37 ),
38 ),
39 'items-progress' => array(
40 array(
41 'methods' => WP_REST_Server::READABLE,
42 'callback' => array( $this, 'items_progress' ),
43 'permission_callback' => '__return_true',
44 ),
45 ),
46 );
47
48 parent::register_routes();
49 }
50
51 /**
52 * Load items progress in single curriculum items.
53 *
54 * @param [type] $request
55 *
56 * @return WP_REST_Response|WP_Error
57 *
58 * @author Nhamdv <daonham95>
59 */
60 public function items_progress( $request ) {
61 $params = $request->get_params();
62 $course_id = $params['courseId'] ?? 0;
63 $user_id = get_current_user_id();
64 $response = new LP_REST_Response();
65 $response->data = '';
66
67 try {
68 $course = learn_press_get_course( $course_id );
69 if ( ! $course ) {
70 throw new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );
71 }
72
73 if ( $course->is_no_required_enroll() ) {
74 throw new Exception( esc_html__( 'The course is not required to enroll!', 'learnpress' ) );
75 }
76
77 $user = learn_press_get_user( $user_id );
78
79 $check = $user->can_show_finish_course_btn( $course );
80
81 if ( $check['status'] !== 'success' ) {
82 throw new Exception( $check['message'] );
83 }
84
85 $response->status = 'success';
86 $response->data = learn_press_get_template_content(
87 'single-course/buttons/finish.php',
88 array(
89 'course' => $course,
90 'user' => $user,
91 )
92 );
93 } catch ( Exception $e ) {
94 $response->message = $e->getMessage();
95 }
96
97 return rest_ensure_response( $response );
98 }
99
100 /**
101 * Load user_progress in single course.
102 *
103 * @param WP_REST_Request $request
104 *
105 * @return LP_REST_Response
106 * @author Nhamdv <email@email.com>
107 * @editor tungnx
108 * @version 1.0.1
109 * @sicne 4.0.0
110 */
111 public function user_progress( WP_REST_Request $request ): LP_REST_Response {
112 $params = $request->get_params();
113 $course_id = $params['courseId'] ?? false;
114 $user_id = $params['userId'] ?? false;
115 $response = new LP_REST_Response();
116 $response->data = '';
117
118 try {
119 if ( ! $course_id || ! $user_id ) {
120 throw new Exception( __( 'Params is invalid!', 'learnpress' ) );
121 }
122
123 $course = learn_press_get_course( $course_id );
124 if ( ! $course ) {
125 throw new Exception( __( 'The course is invalid!', 'learnpress' ) );
126 }
127
128 $user = learn_press_get_user( $user_id );
129 if ( ! $user || $user->is_guest() ) {
130 throw new Exception( __( 'You are a Guest', 'learnpress' ) );
131 }
132
133 $course_data = $user->get_course_data( $course->get_id() );
134 if ( ! $course_data ) {
135 throw new Exception( __( 'You are a not enroll course', 'learnpress' ) );
136 }
137
138 $course_results = $course_data->calculate_course_results();
139
140 $response->status = 'success';
141 $response->data = learn_press_get_template_content(
142 'single-course/sidebar/user-progress',
143 compact( 'user', 'course', 'course_data', 'course_results' )
144 );
145 } catch ( Throwable $e ) {
146 ob_end_clean();
147 $response->message = $e->getMessage();
148 }
149
150 return $response;
151 }
152
153 /**
154 * Load sections of single course
155 *
156 * @param WP_REST_Request $request
157 *
158 * @return LP_REST_Response
159 * @author nhamdv
160 * @since 4.1.5
161 * @version 1.0.1
162 */
163 public function course_curriculum( WP_REST_Request $request ): LP_REST_Response {
164 $response = new LP_REST_Response();
165 $params = $request->get_params();
166 $content = '';
167
168 $course_id = absint( $params['courseId'] ?? 0 );
169 $per_page = LP_Settings::instance()->get( 'section_per_page', 2 );
170 $page = absint( $params['page'] ?? 1 );
171 $order = wp_unslash( $params['order'] ?? 'ASC' );
172 $search = wp_unslash( $params['search'] ?? '' );
173 $include = wp_unslash( $params['include'] ?? array() );
174 $exclude = wp_unslash( $params['exclude'] ?? array() );
175 $section_id = wp_unslash( $params['sectionID'] ?? false );
176
177 try {
178 if ( empty( $course_id ) ) {
179 throw new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );
180 }
181
182 $course = learn_press_get_course( $course_id );
183 if ( ! $course ) {
184 throw new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );
185 }
186
187 $filters = new LP_Section_Filter();
188 $filters->section_course_id = $course_id;
189 $filters->limit = $per_page;
190 $filters->page = $page;
191 $filters->order = $order;
192 $filters->search_section = $search;
193 $filters->section_ids = $include;
194 $filters->section_not_ids = $exclude;
195
196 $sections = LP_Section_DB::getInstance()->get_sections_by_course_id( $filters );
197
198 if ( is_wp_error( $sections ) ) {
199 throw new Exception( $sections->get_error_message() );
200 }
201
202 ob_start();
203
204 if ( ! empty( $params['loadMore'] ) ) {
205 foreach ( $sections['results'] as $section ) {
206 learn_press_get_template(
207 'loop/single-course/loop-section',
208 compact( 'sections', 'section', 'course_id', 'filters' )
209 );
210 }
211 } else {
212 learn_press_get_template(
213 'single-course/tabs/curriculum-v2',
214 compact( 'sections', 'course_id', 'filters' )
215 );
216 }
217
218 if ( $section_id ) {
219 $response->data->section_ids = wp_list_pluck( $sections['results'], 'section_id' );
220 }
221
222 $response->status = 'success';
223 $response->data->pages = $sections['pages'];
224 $response->data->page = $filters->page;
225 $response->data->content = ob_get_clean();
226
227 // For old value use on theme Eduma <= v4.6.0 - deprecated 4.1.6.1
228 // Comment from v4.2.0 - Theme must update
229 /*if ( defined( 'THIM_THEME_VERSION' ) && version_compare( THIM_THEME_VERSION, '4.6.3', '<=' ) ) {
230 $response->pages = $sections['pages'];
231 $response->data = $content;
232 $response->section_ids = wp_list_pluck( $sections['results'], 'section_id' );
233 }*/
234 } catch ( Throwable $e ) {
235 ob_end_clean();
236 $response->message = $e->getMessage();
237 }
238
239 return $response;
240 }
241
242 /**
243 * Load items' section on the single course
244 *
245 * @param WP_REST_Request $request
246 *
247 * @author nhamdv
248 * @since 4.1.5
249 * @version 1.0.1
250 * @return WP_REST_Response|WP_Error
251 */
252 public function course_curriculum_items( WP_REST_Request $request ) {
253 $params = $request->get_params();
254
255 $section_id = absint( $params['sectionId'] ?? 0 );
256 $per_page = LP_Settings::instance()->get( 'course_item_per_page', 5 );
257 $page = absint( $params['page'] ?? 1 );
258 $order = LP_Helper::sanitize_params_submitted( $params['order'] ?? 'ASC' );
259 $search = LP_Helper::sanitize_params_submitted( $params['search'] ?? '' );
260 $include = LP_Helper::sanitize_params_submitted( $params['include'] ?? array() );
261 $exclude = LP_Helper::sanitize_params_submitted( $params['exclude'] ?? array() );
262
263 $response = new LP_REST_Response();
264
265 try {
266 if ( empty( $section_id ) ) {
267 throw new Exception( esc_html__( 'The section is invalid!', 'learnpress' ) );
268 }
269
270 $filters = new LP_Section_Items_Filter();
271 $filters->section_id = $section_id;
272 $filters->limit = $per_page;
273 $filters->page = $page;
274 $filters->order = $order;
275 $filters->search_title = $search;
276 $filters->item_ids = $include;
277 $filters->item_not_ids = $exclude;
278
279 $section_items = LP_Section_DB::getInstance()->get_section_items_by_section_id( $filters );
280
281 if ( is_wp_error( $section_items ) ) {
282 throw new Exception( $section_items->get_error_message() );
283 }
284
285 ob_start();
286
287 $content = '';
288
289 foreach ( $section_items['results'] as $key => $section_item ) {
290 $course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $section_id );
291
292 if ( $course_id ) {
293 $course = learn_press_get_course( $course_id );
294
295 if ( ! $course ) {
296 throw new Exception( 'Course is not exists!' );
297 }
298
299 $course_item = $course->get_item( absint( $section_item['ID'] ?? 0 ) );
300
301 $can_view_item = new LP_Model_User_Can_View_Course_Item();
302
303 $user = learn_press_get_user( get_current_user_id() );
304
305 if ( $user ) {
306 $can_view_content_course = $user->can_view_content_course( absint( $course_id ) );
307 $can_view_item = $user->can_view_item( $section_item['ID'], $can_view_content_course );
308 }
309
310 // Ordinal numbers
311 $key = absint( ( ( $page - 1 ) * $per_page ) + $key + 1 );
312
313 learn_press_get_template(
314 'loop/single-course/loop-section-item',
315 compact( 'section_item', 'course_item', 'can_view_item', 'course_id', 'user', 'key' )
316 );
317 }
318 }
319
320 $response->data->pages = $section_items['pages'];
321 $response->data->page = $filters->page;
322 $response->data->content = ob_get_clean();
323 $response->data->item_ids = wp_list_pluck( $section_items['results'], 'ID' );
324
325 $response->status = 'success';
326 // For old value use on theme Eduma <= v4.6.0 - deprecated 4.1.6.1
327 // Comment from v4.2.0 - Theme must update
328 /*if ( defined( 'THIM_THEME_VERSION' ) && version_compare( THIM_THEME_VERSION, '4.6.3', '<=' ) ) {
329 $response->pages = $section_items['pages'];
330 $response->page = $filters->page;
331 $response->data = $content;
332 $response->item_ids = wp_list_pluck( $section_items['results'], 'ID' );
333 }*/
334 } catch ( \Throwable $e ) {
335 ob_end_clean();
336 $response->message = $e->getMessage();
337 }
338
339 return rest_ensure_response( $response );
340 }
341 }
342