| 1 |
<?php |
| 2 |
/** |
| 3 |
* Class ProfileCoursesTemplate. |
| 4 |
* |
| 5 |
* @since 4.3.0 |
| 6 |
* @version 1.0.0 |
| 7 |
*/ |
| 8 |
|
| 9 |
namespace LearnPress\TemplateHooks\Profile; |
| 10 |
|
| 11 |
use LearnPress\CourseBuilder\CourseBuilder; |
| 12 |
use LearnPress\Helpers\Singleton; |
| 13 |
use LearnPress\Helpers\Template; |
| 14 |
use LP_Profile; |
| 15 |
|
| 16 |
class ProfileCoursesTemplate { |
| 17 |
use Singleton; |
| 18 |
|
| 19 |
public function init() { |
| 20 |
add_action( 'learn-press/profile/layout/courses', [ $this, 'layout' ] ); |
| 21 |
} |
| 22 |
|
| 23 |
/** |
| 24 |
* @param array $args |
| 25 |
*/ |
| 26 |
public function layout( array $args = [] ) { |
| 27 |
$courses_created_tab = $args['courses_created_tab'] ?? []; |
| 28 |
$args_query_user_courses_created = $args['args_query_user_courses_created'] ?? []; |
| 29 |
$args_query_user_courses_statistic = $args['args_query_user_courses_statistic'] ?? []; |
| 30 |
|
| 31 |
// Check permission to view courses tab. |
| 32 |
$profile = LP_Profile::instance(); |
| 33 |
$user_can_view = $profile->current_user_can( 'view-tab-courses' ); |
| 34 |
if ( ! $user_can_view ) { |
| 35 |
return; |
| 36 |
} |
| 37 |
|
| 38 |
ob_start(); |
| 39 |
lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); |
| 40 |
$html_skeleton = ob_get_clean(); |
| 41 |
|
| 42 |
$html_li_tabs = ''; |
| 43 |
$html_filter_contents = ''; |
| 44 |
foreach ( $courses_created_tab as $key => $created ) { |
| 45 |
$html_li_tabs .= sprintf( |
| 46 |
'<li><a class="%s" data-tab="%s">%s</a></li>', |
| 47 |
esc_attr( $key === '' ? 'active' : '' ), |
| 48 |
esc_attr( $key === '' ? 'all' : $key ), |
| 49 |
esc_html( $created ) |
| 50 |
); |
| 51 |
|
| 52 |
$html_filter_contents .= sprintf( |
| 53 |
'<div class="learn-press-course-tab__filter__content" data-tab="%s" style="%s">%s</div>', |
| 54 |
esc_attr( $key === '' ? 'all' : $key ), |
| 55 |
esc_attr( $key !== '' ? 'display: none' : '' ), |
| 56 |
$html_skeleton |
| 57 |
); |
| 58 |
} |
| 59 |
|
| 60 |
$show_course_builder_link = $profile->is_current_user() && CourseBuilder::can_view_course_builder(); |
| 61 |
$tabs_classes = [ 'learn-press-tabs' ]; |
| 62 |
$course_builder_link = ''; |
| 63 |
|
| 64 |
if ( $show_course_builder_link ) { |
| 65 |
$tabs_classes[] = 'learn-press-tabs--with-course-builder'; |
| 66 |
$course_builder_link = sprintf( |
| 67 |
'<a class="learn-press-course-builder-link" href="%1$s" target="_blank" rel="noopener noreferrer">%2$s</a>', |
| 68 |
esc_url( CourseBuilder::get_link_course_builder() ), |
| 69 |
esc_html__( 'Course Builder', 'learnpress' ) |
| 70 |
); |
| 71 |
} |
| 72 |
|
| 73 |
$section_tabs = [ |
| 74 |
'wrap' => sprintf( '<div class="%s">', esc_attr( implode( ' ', $tabs_classes ) ) ), |
| 75 |
'ul' => '<ul class="learn-press-filters">', |
| 76 |
'content' => $html_li_tabs, |
| 77 |
'ul-end' => '</ul>', |
| 78 |
'course-builder' => $course_builder_link, |
| 79 |
'wrap-end' => '</div>', |
| 80 |
]; |
| 81 |
|
| 82 |
$section_contents = [ |
| 83 |
'wrap' => '<div class="learn-press-profile-course__progress">', |
| 84 |
'content' => $html_filter_contents, |
| 85 |
'input' => sprintf( |
| 86 |
'<input class="lp_profile_tab_input_param" |
| 87 |
type="hidden" name="args_query_user_courses_created" |
| 88 |
value="%s">', |
| 89 |
sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_created ) ) ) |
| 90 |
), |
| 91 |
'wrap-end' => '</div>', |
| 92 |
]; |
| 93 |
|
| 94 |
$section_courses_statistic = apply_filters( |
| 95 |
'learn-press/profile/layout/courses/sections/statistic', |
| 96 |
[ |
| 97 |
'wrap' => '<div class="learn-press-profile-course__statistic">', |
| 98 |
'skeleton' => $html_skeleton, |
| 99 |
'input' => sprintf( |
| 100 |
'<input type="hidden" name="args_query_user_courses_statistic" value="%s">', |
| 101 |
sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_statistic ) ) ) |
| 102 |
), |
| 103 |
'wrap-end' => '</div>', |
| 104 |
], |
| 105 |
$args |
| 106 |
); |
| 107 |
|
| 108 |
$section_courses_list = apply_filters( |
| 109 |
'learn-press/profile/layout/courses/sections/course-list', |
| 110 |
[ |
| 111 |
'wrap' => '<div class="learn-press-profile-course__tab">', |
| 112 |
'filter' => '<div class="learn-press-course-tab-created learn-press-course-tab-filters" data-tab="created">', |
| 113 |
'tabs' => Template::combine_components( $section_tabs ), |
| 114 |
'progress' => Template::combine_components( $section_contents ), |
| 115 |
'filter-end' => '</div>', |
| 116 |
'wrap-end' => '</div>', |
| 117 |
], |
| 118 |
$args |
| 119 |
); |
| 120 |
|
| 121 |
$section = apply_filters( |
| 122 |
'learn-press/profile/layout/courses/sections', |
| 123 |
[ |
| 124 |
'wrap' => '<div class="learn-press-profile-course__tab">', |
| 125 |
'statistic' => Template::combine_components( $section_courses_statistic ), |
| 126 |
'course-list' => Template::combine_components( $section_courses_list ), |
| 127 |
'wrap-end' => '</div>', |
| 128 |
], |
| 129 |
$args |
| 130 |
); |
| 131 |
|
| 132 |
echo Template::combine_components( $section ); |
| 133 |
} |
| 134 |
} |
| 135 |
|