PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.3.7
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.3.7
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 / TemplateHooks / UserItem / UserCourseTemplate.php

UserCourseTemplate.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.3.7, at inc/TemplateHooks/UserItem/UserCourseTemplate.php

387 lines 10.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Template hooks Single Instructor.
4 *
5 * @since 4.2.3.5
6 * @version 1.0.0
7 */
8
9 namespace LearnPress\TemplateHooks\UserItem;
10
11 use LearnPress\Helpers\Template;
12 use LearnPress\Models\CourseModel;
13 use LearnPress\Models\QuizPostModel;
14 use LearnPress\Models\UserItems\UserCourseModel;
15 use LP_Helper;
16 use WP_Error;
17
18 class UserCourseTemplate extends UserItemBaseTemplate {
19 public static function instance() {
20 static $instance = null;
21 if ( is_null( $instance ) ) {
22 $instance = new self();
23 }
24
25 return $instance;
26 }
27
28 /**
29 * HTML button continue course.
30 *
31 * @param UserCourseModel $userCourseModel
32 *
33 * @return string
34 * @since 4.2.7.5
35 * @version 1.0.1
36 */
37 public function html_btn_continue( UserCourseModel $userCourseModel ): string {
38 $html = '';
39
40 if ( $userCourseModel->can_impact_item() instanceof WP_Error ) {
41 return $html;
42 }
43
44 $courseModel = $userCourseModel->get_course_model();
45 if ( ! $courseModel ) {
46 return $html;
47 }
48
49 $total_items = $courseModel->count_items();
50 if ( empty( $total_items ) ) {
51 return $html;
52 }
53
54 $itemModelContinue = $userCourseModel->get_item_continue();
55 if ( empty( $itemModelContinue ) ) {
56 $link_continue = $courseModel->get_permalink();
57 } else {
58 $link_continue = $courseModel->get_item_link( $itemModelContinue->ID );
59 }
60
61 $html = sprintf(
62 '<a href="%s">%s</a>',
63 esc_url_raw( $link_continue ),
64 sprintf(
65 '<button class="lp-button course-btn-continue">%s</button>',
66 esc_html__( 'Continue', 'learnpress' )
67 )
68 );
69
70 return apply_filters( 'learn-press/user/course/html-button-continue', $html, $userCourseModel );
71 }
72
73 /**
74 * HTML button finish course.
75 *
76 * @param UserCourseModel $userCourseModel
77 *
78 * @return string
79 * @since 4.2.7.5
80 * @version 1.0.0
81 */
82 public function html_btn_finish( UserCourseModel $userCourseModel ): string {
83 $html = '';
84
85 $can_finish = $userCourseModel->can_finish();
86 if ( is_wp_error( $can_finish ) ) {
87 return $html;
88 }
89
90 $section = apply_filters(
91 'learn-press/user/course/html-button-finish',
92 [
93 'form' => sprintf(
94 '<form class="lp-form form-button form-button-finish-course" method="post" data-confirm="%s">',
95 __( 'Do you want to finish the course?', 'learnpress' )
96 ),
97 'btn' => sprintf(
98 '<button class="lp-button btn-finish-course">%s</button>',
99 esc_html__( 'Finish Course', 'learnpress' )
100 ),
101 'input' => sprintf(
102 '<input type="hidden" name="course-id" value="%d"/>',
103 esc_attr( $userCourseModel->item_id )
104 ),
105 'nonce' => sprintf(
106 '<input type="hidden" name="finish-course-nonce" value="%s"/>',
107 esc_attr(
108 wp_create_nonce(
109 sprintf( 'finish-course-%d-%d', $userCourseModel->item_id, $userCourseModel->user_id )
110 )
111 )
112 ),
113 'lpajax' => '<input type="hidden" name="lp-ajax" value="finish-course"/>',
114 'noajax' => '<input type="hidden" name="noajax" value="yes"/>',
115 'form_end' => '</form>',
116 ],
117 $userCourseModel
118 );
119
120 return Template::combine_components( $section );
121 }
122
123 /**
124 * HTML button retake course
125 *
126 * @param UserCourseModel $userCourseModel
127 *
128 * @return string
129 * @since 4.2.7.6
130 * @version 1.0.0
131 */
132 public function html_btn_retake( UserCourseModel $userCourseModel ): string {
133 $retake_remaining = $userCourseModel->can_retake();
134
135 if ( $retake_remaining === 0 ) {
136 return '';
137 }
138
139 $html_btn = sprintf(
140 '<button type="submit" class="lp-button button-retake-course">%s (%d)</button>',
141 __( 'Retake course', 'learnpress' ),
142 $retake_remaining
143 );
144
145 $section = apply_filters(
146 'learn-press/course/html-button-retake',
147 [
148 'form' => sprintf(
149 '<form name="lp-form-retake-course" class="lp-form-retake-course" method="post" data-confirm="%s">',
150 esc_html__( 'Do you want to retake the course', 'learnpress' )
151 ),
152 'input' => sprintf(
153 '<input type="hidden" name="retake-course" value="%d"/>',
154 esc_attr( $userCourseModel->item_id )
155 ),
156 'btn' => $html_btn,
157 'lp-ajax-mess' => '<div class="lp-ajax-message"></div>',
158 'form_end' => '</form>',
159 ],
160 $userCourseModel
161 );
162
163 return Template::combine_components( $section );
164 }
165
166 /**
167 * HTML count items completed of Course.
168 *
169 * @return mixed|string|null
170 * @since 4.2.7.6
171 * @version 1.0.1
172 */
173 public function html_count_items_completed( UserCourseModel $userCourseModel ): string {
174 $html = '';
175
176 // For case Guest user.
177 $userModel = $userCourseModel->get_user_model();
178 if ( ! $userModel ) {
179 return $html;
180 }
181
182 $courseModel = $userCourseModel->get_course_model();
183 $item_types = CourseModel::item_types_support();
184 $count_items_completed = $userCourseModel->count_items_completed();
185 foreach ( $item_types as $item_type ) {
186 $count_item = $courseModel->count_items( $item_type );
187 $count_item_completed = $count_items_completed->{$item_type . '_status_completed'} ?? '';
188 if ( empty( $count_item_completed ) ) {
189 continue;
190 }
191
192 $html .= sprintf(
193 '<div class="item-completed"><span>%s</span><span>%s</span></div>',
194 sprintf(
195 '%s %s: ',
196 LP_Helper::get_i18n_string_plural( $count_item, $item_type, false ),
197 __( 'completed', 'learnpress' )
198 ),
199 sprintf( '%d/%d', $count_item_completed, $count_item )
200 );
201 }
202
203 return apply_filters( 'learn-press/user/course/html-count-items-completed', $html, $userCourseModel );
204 }
205
206 /**
207 * HTMl progress course.
208 *
209 * @param UserCourseModel $userCourseModel
210 *
211 * @return mixed|null
212 * @since 4.2.7.5
213 * @version 1.0.1
214 */
215 public function html_progress( UserCourseModel $userCourseModel ) {
216 $html = '';
217
218 // For case Guest user.
219 $userModel = $userCourseModel->get_user_model();
220 if ( ! $userModel ) {
221 return $html;
222 }
223
224 $courseModel = $userCourseModel->get_course_model();
225 $evaluation_type = $courseModel::get_evaluation_types( $courseModel->get_evaluation_type() );
226 $calculate = $userCourseModel->calculate_course_results();
227 $passing_condition = $courseModel->get_passing_condition();
228 if ( array_key_first( $evaluation_type ) === 'evaluate_final_quiz' ) {
229 $final_quiz = $courseModel->get_final_quiz();
230 if ( $final_quiz ) {
231 $quizModel = QuizPostModel::find( $final_quiz, true );
232 $passing_condition = $quizModel->get_passing_grade();
233 }
234 }
235 $total_items = $courseModel->count_items();
236
237 $progress_items_completed_percent = round(
238 $total_items > 0 ? $calculate['completed_items'] * 100 / $total_items : 0,
239 2
240 );
241
242 $section = [
243 'wrapper' => '<div class="course-progress">',
244 'progress' => sprintf(
245 '<div class="course-progress__label">%s %s</div>',
246 esc_html__( 'Course progress:', 'learnpress' ),
247 sprintf(
248 '<span class="course-progress__number">
249 <span class="number">%s<span class="percentage">%s</span></span>
250 </span>',
251 $progress_items_completed_percent,
252 '%'
253 )
254 ),
255 'line-progress' => $this->html_items_completed_progress_bar( $userCourseModel ),
256 'passing-progress' => sprintf(
257 '<div class="course-progress__label">%s %s
258 <span class="lp-icon-question-circle" title="%s"></span>
259 </div>',
260 esc_html__( 'Passing grade progress:', 'learnpress' ),
261 sprintf(
262 '<span class="course-progress__number">
263 <span class="number">%s<span class="percentage">%s</span></span>
264 </span>',
265 $calculate['result'],
266 '%'
267 ),
268 sprintf(
269 '%s. %s',
270 isset( $evaluation_type['label'] ) ? esc_attr( $evaluation_type['label'] ) : '',
271 esc_attr( sprintf( __( 'Passing condition: %s%%', 'learnpress' ), $passing_condition ) )
272 )
273 ),
274 'wrapper_end' => '</div>',
275 ];
276
277 $html = Template::combine_components( $section );
278
279 return apply_filters( 'learn-press/user/course/html-progress', $html, $userCourseModel );
280 }
281
282 /**
283 * HTML course items completed progress bar.
284 *
285 * @param UserCourseModel $userCourseModel
286 *
287 * @return string
288 *
289 * @since 4.3.2.6
290 * @version 1.0.0
291 */
292 public function html_passing_grade_progress_bar( UserCourseModel $userCourseModel ): string {
293 $courseModel = $userCourseModel->get_course_model();
294 $calculate = $userCourseModel->calculate_course_results();
295 $passing_condition = $courseModel->get_passing_condition();
296
297 $section = [
298 'wrapper' => '<div class="course-passing-grade-progress-bar">',
299 'line-passing-progress' => sprintf(
300 '<div class="course-progress__line">
301 <div class="course-progress__line__active" style="width: %s%%"></div>
302 <div class="course-progress__line__point" style="left: %s%%"></div>
303 </div>',
304 $calculate['result'],
305 $passing_condition
306 ),
307 'wrapper_end' => '</div>',
308 ];
309
310 return Template::combine_components( $section );
311 }
312
313 /**
314 * HTML course items completed progress bar.
315 *
316 * @param UserCourseModel $userCourseModel
317 *
318 * @return string
319 *
320 * @since 4.3.2.6
321 * @version 1.0.0
322 */
323 public function html_items_completed_progress_bar( UserCourseModel $userCourseModel ): string {
324 $courseModel = $userCourseModel->get_course_model();
325 $calculate = $userCourseModel->calculate_course_results();
326 $total_items = $courseModel->count_items();
327
328 $progress_items_completed_percent = round(
329 $total_items > 0 ? $calculate['completed_items'] * 100 / $total_items : 0,
330 2
331 );
332
333 $section = [
334 'wrapper' => sprintf(
335 '<div class="course-items-completed-progress-bar" title="%s">',
336 sprintf(
337 esc_html__( '%1$d of %2$d items completed', 'learnpress' ),
338 $calculate['completed_items'],
339 $total_items
340 )
341 ),
342 'line-progress' => sprintf(
343 '<div class="course-progress__line">
344 <div class="course-progress__line__active" style="width: %s%%"></div>
345 </div>',
346 $progress_items_completed_percent,
347 ),
348 'wrapper_end' => '</div>',
349 ];
350
351 return Template::combine_components( $section );
352 }
353
354 /**
355 * HTMl progress course.
356 *
357 * @param UserCourseModel $userCourseModel
358 *
359 * @return mixed|null
360 * @since 4.2.7.6
361 * @version 1.0.1
362 */
363 public function html_message_lock( UserCourseModel $userCourseModel ): string {
364 $html = '';
365
366 // For case Guest user.
367 $userModel = $userCourseModel->get_user_model();
368 if ( ! $userModel ) {
369 return $html;
370 }
371
372 $courseModel = $userCourseModel->get_course_model();
373
374 if ( $courseModel->enable_block_when_finished() && $userCourseModel->is_finished() ) {
375 $message = __( 'This course is finished.', 'learnpress' );
376 } elseif ( $courseModel->enable_block_when_expire() && $userCourseModel->timestamp_remaining_duration() === 0 ) {
377 $message = __( 'This course is expired.', 'learnpress' );
378 } else {
379 return $html;
380 }
381
382 $html = Template::print_message( $message, 'warning', false );
383
384 return apply_filters( 'learn-press/user/course/html-message-lock', $html, $userCourseModel );
385 }
386 }
387