| 1 |
<?php |
| 2 |
|
| 3 |
namespace LearnPress\Shortcodes\Courses; |
| 4 |
|
| 5 |
use LearnPress\Databases\DataBase; |
| 6 |
use LearnPress\Filters\Course\CourseJsonFilter; |
| 7 |
use LearnPress\Helpers\Singleton; |
| 8 |
use LearnPress\Helpers\Template; |
| 9 |
use LearnPress\Models\CourseModel; |
| 10 |
use LearnPress\Models\Courses; |
| 11 |
use LearnPress\Shortcodes\AbstractShortcode; |
| 12 |
use LearnPress\TemplateHooks\Course\ListCoursesTemplate; |
| 13 |
use LP_Debug; |
| 14 |
use LP_Helper; |
| 15 |
use Throwable; |
| 16 |
|
| 17 |
/** |
| 18 |
* Shortcode display list courses. |
| 19 |
* |
| 20 |
* @since 4.3.2.3 |
| 21 |
* @version 1.0.1 |
| 22 |
*/ |
| 23 |
class ListCoursesShortcode extends AbstractShortcode { |
| 24 |
use singleton; |
| 25 |
|
| 26 |
protected $shortcode_name = 'courses'; |
| 27 |
|
| 28 |
/** |
| 29 |
* Show single instructor |
| 30 |
* |
| 31 |
* @param $attrs [ 'limit', 'c_status', 'order_by', 'order', '' ] |
| 32 |
* |
| 33 |
* @return string |
| 34 |
*/ |
| 35 |
public function render( $attrs ): string { |
| 36 |
$content = ''; |
| 37 |
wp_enqueue_style( 'learnpress' ); |
| 38 |
wp_enqueue_script( 'lp-courses-v2' ); |
| 39 |
|
| 40 |
try { |
| 41 |
if ( empty( $attrs ) ) { |
| 42 |
$attrs = []; |
| 43 |
} |
| 44 |
|
| 45 |
$attrs['c_status'] = LP_Helper::sanitize_params_submitted( $attrs['c_status'] ?? 'publish' ); |
| 46 |
$filter = new CourseJsonFilter(); |
| 47 |
Courses::handle_params_for_query_list_courses( $filter, $attrs ); |
| 48 |
$filter->only_fields = [ CourseJsonFilter::COL_ID ]; |
| 49 |
|
| 50 |
$total_rows = 0; |
| 51 |
$courses = Courses::get_list_courses( $filter, $total_rows ); |
| 52 |
$total_pages = DataBase::get_total_pages( $filter->limit, $total_rows ); |
| 53 |
$attrs['total_pages'] = $total_pages; |
| 54 |
$attrs['total_rows'] = $total_rows; |
| 55 |
$attrs['courses_per_page'] = $filter->limit; |
| 56 |
$skin = LP_Helper::sanitize_params_submitted( $attrs['skin'] ?? 'list' ); |
| 57 |
$paged = $attrs['paged'] ?? 1; |
| 58 |
$attrs['paged'] = $paged; |
| 59 |
$listCoursesTemplate = self::instance(); |
| 60 |
|
| 61 |
// HTML section courses. |
| 62 |
$html_courses = ''; |
| 63 |
if ( empty( $courses ) ) { |
| 64 |
$html_courses = Template::print_message( __( 'No courses found', 'learnpress' ), 'info', false ); |
| 65 |
} else { |
| 66 |
foreach ( $courses as $courseObj ) { |
| 67 |
$course = CourseModel::find( $courseObj->ID, true ); |
| 68 |
$html_courses .= ListCoursesTemplate::render_course( $course, $attrs ); |
| 69 |
} |
| 70 |
} |
| 71 |
|
| 72 |
$section_courses = apply_filters( |
| 73 |
'learn-press/layout/list-courses/shortcode/section', |
| 74 |
[ |
| 75 |
'wrap' => sprintf( |
| 76 |
'<ul class="learn-press-courses lp-list-courses-no-css %1$s learn-press-courses-shortcode" data-layout="%1$s">', |
| 77 |
esc_attr( $skin ) |
| 78 |
), |
| 79 |
'courses' => wp_kses_post( $html_courses ), |
| 80 |
'wrap_end' => '</ul>', |
| 81 |
], |
| 82 |
$courses, |
| 83 |
$attrs |
| 84 |
); |
| 85 |
|
| 86 |
$content = Template::combine_components( $section_courses ); |
| 87 |
} catch ( Throwable $e ) { |
| 88 |
LP_Debug::error_log( $e ); |
| 89 |
} |
| 90 |
|
| 91 |
return $content; |
| 92 |
} |
| 93 |
} |
| 94 |
|