singleCourseTemplate = SingleCourseTemplate::instance();
add_action(
'learn-press/single-course/offline/layout',
[ $this, 'course_offline_layout' ]
);
}
/**
* Offline course layout
*
* @param $course
*
* @return void
*/
public function course_offline_layout( $course ) {
if ( ! $course instanceof CourseModel ) {
return;
}
if ( ! $course->is_offline() ) {
return;
}
$user = UserModel::find( get_current_user_id(), true );
// Author
$singleInstructorTemplate = SingleInstructorTemplate::instance();
$author = $course->get_author_model();
$html_author = '';
if ( $author ) {
$html_author = sprintf(
'%s %s',
__( 'By', 'learnpress' ),
sprintf( '%s', $author->get_url_instructor(), $singleInstructorTemplate->html_display_name( $author ) )
);
}
// End author
// Instructor
$html_instructor = '';
if ( $author ) {
$html_instructor_image = sprintf(
'%s',
$author->get_url_instructor(),
$author->get_display_name(),
$singleInstructorTemplate->html_avatar( $author )
);
$section_instructor_meta = [
'wrapper' => '
',
];
$html_instructor_meta = Template::combine_components( $section_instructor_meta );
$section_instructor_right = apply_filters(
'learn-press/single-course/offline/section-instructor/right',
[
'wrapper' => '',
'name' => sprintf(
'
%s',
$author->get_url_instructor(),
$singleInstructorTemplate->html_display_name( $author )
),
'meta' => $html_instructor_meta,
'description' => $singleInstructorTemplate->html_description( $author ),
'social' => $singleInstructorTemplate->html_social( $author ),
'wrapper_end' => '
',
],
$course,
$user
);
$html_instructor_right = Template::combine_components( $section_instructor_right );
$section_instructor = apply_filters(
'learn-press/single-course/offline/section-instructor',
[
'wrapper' => '',
'header' => sprintf( '
%s
', __( 'Instructor', 'learnpress' ) ),
'wrapper_info' => '
',
'image' => $html_instructor_image,
'instructor_right' => $html_instructor_right,
'wrapper_info_end' => '
',
'wrapper_end' => '
',
],
$course,
$user
);
$html_instructor = Template::combine_components( $section_instructor );
}
// End instructor
// Info one
$html_address = $this->html_address( $course );
$section_info_one = apply_filters(
'learn-press/single-course/offline/info-bar',
[
'wrapper' => '',
'author' => sprintf( '
%s
', $html_author ),
'address' => ! empty( $html_address ) ? sprintf( '
%s
', $html_address ) : '',
'wrapper_end' => '
',
],
$course,
$user
);
// Section left
$section_left = apply_filters(
'learn-press/single-course/offline/section-left',
[
'wrapper' => '',
'breadcrumb' => Template::html_breadcrumb(),
'title' => $this->singleCourseTemplate->html_title( $course, 'h1' ),
'info_one' => Template::combine_components( $section_info_one ),
'image' => $this->singleCourseTemplate->html_image( $course, [ 'size' => 'full' ] ),
'info_main_mobile' => $this->render_html_info_main( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),
'description' => $this->singleCourseTemplate->html_description( $course ),
'features' => $this->singleCourseTemplate->html_features( $course ),
'target' => $this->singleCourseTemplate->html_target( $course ),
'requirements' => $this->singleCourseTemplate->html_requirements( $course ),
'material' => $this->singleCourseTemplate->html_material( $course ),
'faqs' => $this->singleCourseTemplate->html_faqs( $course ),
'instructor' => $html_instructor,
'featured_review_mobile' => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),
'wrapper_end' => '
',
],
$course,
$user
);
// Section right
$section_right = apply_filters(
'learn-press/single-course/offline/section-right',
[
'wrapper' => '',
'wrapper_inner' => '
',
'info_main' => $this->render_html_info_main( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),
'featured_review' => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),
'sidebar' => $this->singleCourseTemplate->html_sidebar( $course ),
'wrapper_inner_end' => '
',
'wrapper_end' => '
',
],
$course,
$user
);
// End section right
// Related courses
ob_start();
do_action( 'learn-press/single-course/courses-related/layout', $course, 4 );
$html_courses_related = ob_get_clean();
// End related courses
$sections = apply_filters(
'learn-press/single-course/offline/sections',
[
'wrapper_container' => '',
'wrapper' => '
',
'wrapper_main' => '
',
'section_left' => Template::combine_components( $section_left ),
'section_right' => Template::combine_components( $section_right ),
'wrapper_main_end' => '
',
'related_courses' => $html_courses_related,
'wrapper_end' => '
',
'wrapper_container_end' => '
',
]
);
echo Template::combine_components( $sections );
}
/**
* Render html info main
* Price, deliver type, capacity, level, duration, lessons
* Buttons: Contact, Buy, Enroll
*
* @param CourseModel $courseModel
* @param UserModel|false $userModel
* @param array $data
*
* @return string
* @since 4.2.7.6
* @version 1.0.1
*/
public function render_html_info_main( CourseModel $courseModel, $userModel, array $data = [] ): string {
// Info two
$data_info_meta = [
'price' => [
'label' => sprintf( '%s %s', learn_press_get_currency_symbol(), __( 'Price', 'learnpress' ) ),
'value' => $this->singleCourseTemplate->html_price( $courseModel ),
],
'deliver_type' => [
'label' => sprintf( ' %s', __( 'Delivery type', 'learnpress' ) ),
'value' => $this->html_deliver_type( $courseModel ),
],
'capacity' => [
'label' => sprintf( ' %s', __( 'Capacity', 'learnpress' ) ),
'value' => $this->singleCourseTemplate->html_capacity( $courseModel ),
],
'level' => [
'label' => sprintf( ' %s', __( 'Level', 'learnpress' ) ),
'value' => $this->singleCourseTemplate->html_level( $courseModel ),
],
'duration' => [
'label' => sprintf( ' %s', __( 'Duration', 'learnpress' ) ),
'value' => $this->singleCourseTemplate->html_duration( $courseModel ),
],
];
$html_lesson = $this->html_lesson_info( $courseModel );
if ( ! empty( $html_lesson ) ) {
$data_info_meta['lessons'] = [
'label' => sprintf( ' %s', __( 'Lessons', 'learnpress' ) ),
'value' => $html_lesson,
];
}
$data_info_meta = apply_filters( 'learn-press/single-course/offline/info-meta', $data_info_meta, $courseModel, $userModel );
$html_info_meta = '';
if ( ! empty( $data_info_meta ) ) {
foreach ( $data_info_meta as $info_meta ) {
$label = $info_meta['label'];
$value = $info_meta['value'];
$html_info_two_item = sprintf(
'
%s
%s
',
$label,
$value
);
$html_info_meta .= $html_info_two_item;
}
}
$section_buttons = apply_filters(
'learn-press/single-course/offline/section-right/info-meta/buttons',
[
'wrapper' => '',
'btn_contact' => $this->singleCourseTemplate->html_btn_external( $courseModel, $userModel ),
'btn_buy' => $this->singleCourseTemplate->html_btn_purchase_course( $courseModel, $userModel ),
'btn_enroll' => $this->singleCourseTemplate->html_btn_enroll_course( $courseModel, $userModel ),
'wrapper_end' => '
',
],
$courseModel,
$userModel
);
$html_buttons = Template::combine_components( $section_buttons );
$section = apply_filters(
'learn-press/single-course/offline/section-right/info-meta',
[
'wrapper' => sprintf(
'',
$data['lp_display_on'] ?? ''
),
'meta' => $html_info_meta,
'buttons' => $html_buttons,
'wrapper_end' => '
',
],
$courseModel,
$userModel
);
return Template::combine_components( $section );
}
/**
* Html lesson info
*
* @param CourseModel $course
* @param bool $show_label
*
* @return string
*/
public function html_lesson_info( CourseModel $course, bool $show_label = false ): string {
if ( ! $course->is_offline() ) {
return '';
}
$lesson_count = $course->get_meta_value_by_key( CoursePostModel::META_KEY_OFFLINE_LESSON_COUNT, 10 );
if ( ! $lesson_count ) {
return '';
}
$html = sprintf(
'%s %s',
$lesson_count,
$show_label ? __( 'lessons', 'learnpress' ) : ''
);
return $html;
}
/**
* Get html address of course offline
*
* @param CourseModel $course
*
* @return string
* @since 4.2.7.3
* @version 1.0.0
*/
public function html_address( CourseModel $course ): string {
$content = '';
try {
if ( ! $course->is_offline() ) {
return $content;
}
$address = $course->get_meta_value_by_key( CoursePostModel::META_KEY_ADDRESS, '' );
if ( empty( $address ) ) {
return $content;
}
$html_wrapper = [
'' => '',
];
$content = Template::instance()->nest_elements( $html_wrapper, $address );
apply_filters( 'learn-press/single-course/html-address', $content, $course );
} catch ( Throwable $e ) {
error_log( __METHOD__ . ': ' . $e->getMessage() );
}
return $content;
}
/**
* Get deliver type
*
* @param CourseModel $course
*
* @return string
* @since 4.2.7.3
* @version 1.0.0
*/
public function html_deliver_type( CourseModel $course ): string {
$content = '';
if ( ! $course->is_offline() ) {
return $content;
}
$html_wrapper = [
'' => '',
];
$deliver_type_options = Config::instance()->get( 'course-deliver-type' );
$key = $course->get_meta_value_by_key( CoursePostModel::META_KEY_DELIVER, 'private_1_1' );
$content = $deliver_type_options[ $key ] ?? '';
return Template::instance()->nest_elements( $html_wrapper, $content );
}
}