PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7
4.4.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 All 140 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.1.7, at inc/rest-api/v1/frontend/class-lp-rest-lazy-load-controller.php

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