PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.1
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 4.2.1 All 138 releases
learnpress / inc / TemplateHooks / UserItem / UserCourseTemplate.php

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

393 lines 10.8 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 if ( $progress_items_completed_percent > 100 ) {
242 $progress_items_completed_percent = 100;
243 }
244
245 $section = [
246 'wrapper' => '<div class="course-progress">',
247 'progress' => sprintf(
248 '<div class="course-progress__label">%s %s</div>',
249 esc_html__( 'Course progress:', 'learnpress' ),
250 sprintf(
251 '<span class="course-progress__number">
252 <span class="number">%s<span class="percentage">%s</span></span>
253 </span>',
254 $progress_items_completed_percent,
255 '%'
256 )
257 ),
258 'line-progress' => $this->html_items_completed_progress_bar( $userCourseModel ),
259 'passing-progress' => sprintf(
260 '<div class="course-progress__label">%s %s
261 <span class="lp-icon-question-circle" title="%s"></span>
262 </div>',
263 esc_html__( 'Passing grade progress:', 'learnpress' ),
264 sprintf(
265 '<span class="course-progress__number">
266 <span class="number">%s<span class="percentage">%s</span></span>
267 </span>',
268 $calculate['result'],
269 '%'
270 ),
271 sprintf(
272 '%s. %s',
273 isset( $evaluation_type['label'] ) ? esc_attr( $evaluation_type['label'] ) : '',
274 esc_attr( sprintf( __( 'Passing condition: %s%%', 'learnpress' ), $passing_condition ) )
275 )
276 ),
277 'wrapper_end' => '</div>',
278 ];
279
280 $html = Template::combine_components( $section );
281
282 return apply_filters( 'learn-press/user/course/html-progress', $html, $userCourseModel );
283 }
284
285 /**
286 * HTML course items completed progress bar.
287 *
288 * @param UserCourseModel $userCourseModel
289 *
290 * @return string
291 *
292 * @since 4.3.2.6
293 * @version 1.0.0
294 */
295 public function html_passing_grade_progress_bar( UserCourseModel $userCourseModel ): string {
296 $courseModel = $userCourseModel->get_course_model();
297 $calculate = $userCourseModel->calculate_course_results();
298 $passing_condition = $courseModel->get_passing_condition();
299
300 $section = [
301 'wrapper' => '<div class="course-passing-grade-progress-bar">',
302 'line-passing-progress' => sprintf(
303 '<div class="course-progress__line">
304 <div class="course-progress__line__active" style="width: %s%%"></div>
305 <div class="course-progress__line__point" style="left: %s%%"></div>
306 </div>',
307 $calculate['result'],
308 $passing_condition
309 ),
310 'wrapper_end' => '</div>',
311 ];
312
313 return Template::combine_components( $section );
314 }
315
316 /**
317 * HTML course items completed progress bar.
318 *
319 * @param UserCourseModel $userCourseModel
320 *
321 * @return string
322 *
323 * @since 4.3.2.6
324 * @version 1.0.0
325 */
326 public function html_items_completed_progress_bar( UserCourseModel $userCourseModel ): string {
327 $courseModel = $userCourseModel->get_course_model();
328 $calculate = $userCourseModel->calculate_course_results();
329 $total_items = $courseModel->count_items();
330
331 $progress_items_completed_percent = round(
332 $total_items > 0 ? $calculate['completed_items'] * 100 / $total_items : 0,
333 2
334 );
335 if ( $progress_items_completed_percent > 100 ) {
336 $progress_items_completed_percent = 100;
337 }
338
339 $section = [
340 'wrapper' => sprintf(
341 '<div class="course-items-completed-progress-bar" title="%s">',
342 sprintf(
343 esc_html__( '%1$d of %2$d items completed', 'learnpress' ),
344 $calculate['completed_items'],
345 $total_items
346 )
347 ),
348 'line-progress' => sprintf(
349 '<div class="course-progress__line">
350 <div class="course-progress__line__active" style="width: %s%%"></div>
351 </div>',
352 $progress_items_completed_percent,
353 ),
354 'wrapper_end' => '</div>',
355 ];
356
357 return Template::combine_components( $section );
358 }
359
360 /**
361 * HTMl progress course.
362 *
363 * @param UserCourseModel $userCourseModel
364 *
365 * @return mixed|null
366 * @since 4.2.7.6
367 * @version 1.0.1
368 */
369 public function html_message_lock( UserCourseModel $userCourseModel ): string {
370 $html = '';
371
372 // For case Guest user.
373 $userModel = $userCourseModel->get_user_model();
374 if ( ! $userModel ) {
375 return $html;
376 }
377
378 $courseModel = $userCourseModel->get_course_model();
379
380 if ( $courseModel->enable_block_when_finished() && $userCourseModel->is_finished() ) {
381 $message = __( 'This course is finished.', 'learnpress' );
382 } elseif ( $courseModel->enable_block_when_expire() && $userCourseModel->timestamp_remaining_duration() === 0 ) {
383 $message = __( 'This course is expired.', 'learnpress' );
384 } else {
385 return $html;
386 }
387
388 $html = Template::print_message( $message, 'warning', false );
389
390 return apply_filters( 'learn-press/user/course/html-message-lock', $html, $userCourseModel );
391 }
392 }
393