PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.9
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.9
4.4.9 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 All 140 releases
← All changes | inc/ExternalPlugin/Elementor/Widgets/Course/Skins/SkinCoursesBase.php +237 -237 4.3.8 → 4.4.9 View file →
@@ -1,237 +1,237 @@
1 -<?php
2 -/**
3 - * Class SkinCoursesBase
4 - *
5 - * For render course in list course
6 - *
7 - * @since 4.2.5.7
8 - * @version 1.0.1
9 - */
10 -
11 -namespace LearnPress\ExternalPlugin\Elementor\Widgets\Course\Skins;
12 -
13 -use Elementor\Plugin;
14 -use Elementor\Widget_Base;
15 -use LearnPress\ExternalPlugin\Elementor\LPSkinBase;
16 -use LearnPress\Helpers\Template;
17 -use LearnPress\Models\Courses;
18 -use LearnPress\TemplateHooks\Course\ListCoursesTemplate;
19 -use LearnPress\TemplateHooks\Course\SingleCourseTemplate;
20 -use LearnPress\TemplateHooks\TemplateAJAX;
21 -use LP_Course;
22 -use LP_Course_Filter;
23 -use LP_Database;
24 -use LP_Helper;
25 -use stdClass;
26 -use Throwable;
27 -
28 -class SkinCoursesBase extends LPSkinBase {
29 - protected function _register_controls_actions() {
30 - add_action(
31 - 'elementor/element/learnpress_list_courses_by_page/section_skin/before_section_end',
32 - [ $this, 'controls_on_section_skin' ],
33 - 10,
34 - 2
35 - );
36 - }
37 -
38 - public function controls_on_section_skin( Widget_Base $widget, $args ) {
39 - // Only add controls here
40 - }
41 -
42 - /**
43 - * Render content list courses. (Grid/List)
44 - * @override elementor
45 - *
46 - * @return void
47 - */
48 - public function render() {
49 - try {
50 - $settings = $this->parent->get_settings_for_display();
51 - $is_load_restapi = $settings['courses_rest'] ?? 0;
52 - $courses_rest_no_load_page = $settings['courses_rest_no_load_page'] ?? 0;
53 - $settings['url_current'] = LP_Helper::getUrlCurrent();
54 -
55 - // Merge params filter form url
56 - $settings = array_merge(
57 - $settings,
58 - lp_archive_skeleton_get_args()
59 - );
60 -
61 - $html_wrapper_widget = [
62 - '<div class="list-courses-elm-wrapper">' => '</div>',
63 - ];
64 -
65 - // No load AJAX
66 - if ( 'yes' !== $is_load_restapi || Plugin::$instance->editor->is_edit_mode() ) {
67 - $templateObj = self::render_courses( $settings );
68 - $content = $templateObj->content;
69 - } elseif ( 'yes' === $courses_rest_no_load_page ) {
70 - $callback = [
71 - 'class' => get_class( $this ),
72 - 'method' => 'render_courses',
73 - ];
74 - $content_obj = static::render_courses( $settings );
75 - $settings['html_no_load_ajax_first'] = $content_obj->content;
76 - $content = TemplateAJAX::load_content_via_ajax( $settings, $callback );
77 - } else { // Load AJAX
78 - $callback = [
79 - 'class' => get_class( $this ),
80 - 'method' => 'render_courses',
81 - ];
82 - $content = TemplateAJAX::load_content_via_ajax( $settings, $callback );
83 - }
84 -
85 - echo Template::instance()->nest_elements( $html_wrapper_widget, $content );
86 - } catch ( Throwable $e ) {
87 - echo $e->getMessage();
88 - }
89 - }
90 -
91 - /**
92 - * Render template list courses with settings param.
93 - *
94 - * @param array $settings
95 - *
96 - * @return stdClass { content: string_html }
97 - * @since 4.2.5.7
98 - * @version 1.0.1
99 - */
100 - public static function render_courses( array $settings = [] ): stdClass {
101 - $listCoursesTemplate = ListCoursesTemplate::instance();
102 - $skin = $settings['skin'] ?? 'grid';
103 - $courses_limit = $settings['courses_limit'] ?? 0;
104 - $courses_per_page = $settings['courses_per_page'] ?? 8;
105 - $courses_order_by = $settings['order_by'] ?? $settings['courses_order_by_default'] ?? 'post_date';
106 - $total_pages = 0;
107 - $paged = $settings['paged'] ?? 1;
108 - $show_el_sorting = ( $settings['el_sorting'] ?? 'yes' ) === 'yes';
109 - $show_el_result_count = ( $settings['el_result_count'] ?? 'yes' ) === 'yes';
110 - $pagination_type = $settings['pagination_type'] ?? 'number';
111 - $courses_category_ids = $settings['courses_category_ids'] ?? [];
112 -
113 - if ( $courses_limit > 0 ) {
114 - if ( $courses_per_page > $courses_limit ) {
115 - $courses_per_page = $courses_limit;
116 - } elseif ( $courses_per_page === 0 ) {
117 - $courses_per_page = $courses_limit;
118 - }
119 -
120 - $total_pages = LP_Database::get_total_pages( $courses_per_page, $courses_limit );
121 - }
122 -
123 - if ( $courses_per_page === 0 ) {
124 - $courses_per_page = - 1;
125 - }
126 -
127 - $filter = new LP_Course_Filter();
128 - $settings['order_by'] = $courses_order_by;
129 - Courses::handle_params_for_query_courses( $filter, $settings );
130 - // Term
131 - $filter->term_ids = array_merge( $filter->term_ids, $courses_category_ids );
132 - // End term
133 - $total_rows = 0;
134 - $filter->limit = $courses_per_page;
135 - $courses = Courses::get_courses( $filter, $total_rows );
136 - $total_pages_result = LP_Database::get_total_pages( $courses_per_page, $total_rows );
137 - if ( $total_pages > 0 ) {
138 - if ( $total_pages_result > $total_pages ) {
139 - if ( $paged === $total_pages && $total_pages > 1 ) {
140 - $number_courses_residual = $courses_limit - $courses_per_page * ( $paged - 1 );
141 - $courses = array_slice( $courses, 0, $number_courses_residual );
142 - }
143 -
144 - $total_rows = $courses_limit;
145 - } else {
146 - $total_pages = $total_pages_result;
147 - }
148 - } else {
149 - $total_pages = $total_pages_result;
150 - }
151 -
152 - // Handle layout
153 - ob_start();
154 - $data_rs = [
155 - 'total_rows' => $total_rows,
156 - 'paged' => $paged,
157 - 'courses_per_page' => $courses_per_page,
158 - ];
159 -
160 - $section_top = [
161 - 'wrapper' => '<div class="learn-press-elms-courses-top">',
162 - 'el_result_count' => $show_el_result_count ? $listCoursesTemplate->html_courses_page_result( $data_rs ) : '',
163 - 'el_sorting' => $show_el_sorting ? $listCoursesTemplate->html_order_by( $courses_order_by ) : '',
164 - 'close_wrapper' => '</div>',
165 - ];
166 - echo Template::combine_components( $section_top );
167 -
168 - $html_lis = '';
169 - foreach ( $courses as $courseObj ) {
170 - $course = learn_press_get_course( $courseObj->ID );
171 - $html_lis .= static::render_course( $course, $settings );
172 - }
173 - $section_list = [
174 - 'wrapper' => sprintf( '<ul class="learn-press-courses lp-list-courses-no-css %s">', esc_attr( $skin ) ),
175 - 'list' => $html_lis,
176 - 'wrapper_end' => '</ul>',
177 - ];
178 - echo Template::combine_components( $section_list );
179 -
180 - $data_pagination = [
181 - 'total_pages' => $total_pages,
182 - 'type' => $pagination_type,
183 - 'base' => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),
184 - 'paged' => (int) ( $settings['paged'] ?? 1 ),
185 - ];
186 - echo $listCoursesTemplate->html_pagination( $data_pagination );
187 -
188 - $content = new stdClass();
189 - $content->content = ob_get_clean();
190 -
191 - return $content;
192 - }
193 -
194 - /**
195 - * Render single item course
196 - *
197 - * @param LP_Course $course
198 - * @param array $settings
199 - *
200 - * @return string
201 - */
202 - public static function render_course( LP_Course $course, array $settings = [] ): string {
203 - $html_item = '';
204 - $singleCourseTemplate = SingleCourseTemplate::instance();
205 -
206 - try {
207 - $html_wrapper = [
208 - '<li class="course-item">' => '</li>',
209 - ];
210 -
211 - $title = sprintf( '<a href="%s">%s</a>', $course->get_permalink(), $course->get_title() );
212 -
213 - $section = [
214 - 'image' => [ 'text_html' => $singleCourseTemplate->html_image( $course ) ],
215 - 'author' => [ 'text_html' => sprintf( '<div>%s</div>', $course->get_instructor_html() ) ],
216 - 'title' => [ 'text_html' => $title ],
217 - 'price' => [ 'text_html' => sprintf( '<div>%s</div>', $singleCourseTemplate->html_price( $course ) ) ],
218 - 'button' => [
219 - 'text_html' => sprintf(
220 - '<div><a href="%s">%s</a></div>',
221 - $course->get_permalink(),
222 - __( 'View More', 'learnpress' )
223 - ),
224 - ],
225 - ];
226 -
227 - ob_start();
228 - Template::instance()->print_sections( $section );
229 - $html_item = ob_get_clean();
230 - $html_item = Template::instance()->nest_elements( $html_wrapper, $html_item );
231 - } catch ( Throwable $e ) {
232 - $html_item = $e->getMessage();
233 - }
234 -
235 - return $html_item;
236 - }
237 -}
1 +<?php
2 +/**
3 + * Class SkinCoursesBase
4 + *
5 + * For render course in list course
6 + *
7 + * @since 4.2.5.7
8 + * @version 1.0.1
9 + */
10 +
11 +namespace LearnPress\ExternalPlugin\Elementor\Widgets\Course\Skins;
12 +
13 +use Elementor\Plugin;
14 +use Elementor\Widget_Base;
15 +use LearnPress\ExternalPlugin\Elementor\LPSkinBase;
16 +use LearnPress\Helpers\Template;
17 +use LearnPress\Models\Courses;
18 +use LearnPress\TemplateHooks\Course\ListCoursesTemplate;
19 +use LearnPress\TemplateHooks\Course\SingleCourseTemplate;
20 +use LearnPress\TemplateHooks\TemplateAJAX;
21 +use LP_Course;
22 +use LP_Course_Filter;
23 +use LP_Database;
24 +use LP_Helper;
25 +use stdClass;
26 +use Throwable;
27 +
28 +class SkinCoursesBase extends LPSkinBase {
29 + protected function _register_controls_actions() {
30 + add_action(
31 + 'elementor/element/learnpress_list_courses_by_page/section_skin/before_section_end',
32 + [ $this, 'controls_on_section_skin' ],
33 + 10,
34 + 2
35 + );
36 + }
37 +
38 + public function controls_on_section_skin( Widget_Base $widget, $args ) {
39 + // Only add controls here
40 + }
41 +
42 + /**
43 + * Render content list courses. (Grid/List)
44 + * @override elementor
45 + *
46 + * @return void
47 + */
48 + public function render() {
49 + try {
50 + $settings = $this->parent->get_settings_for_display();
51 + $is_load_restapi = $settings['courses_rest'] ?? 0;
52 + $courses_rest_no_load_page = $settings['courses_rest_no_load_page'] ?? 0;
53 + $settings['url_current'] = LP_Helper::getUrlCurrent();
54 +
55 + // Merge params filter form url
56 + $settings = array_merge(
57 + $settings,
58 + lp_archive_skeleton_get_args()
59 + );
60 +
61 + $html_wrapper_widget = [
62 + '<div class="list-courses-elm-wrapper">' => '</div>',
63 + ];
64 +
65 + // No load AJAX
66 + if ( 'yes' !== $is_load_restapi || Plugin::$instance->editor->is_edit_mode() ) {
67 + $templateObj = self::render_courses( $settings );
68 + $content = $templateObj->content;
69 + } elseif ( 'yes' === $courses_rest_no_load_page ) {
70 + $callback = [
71 + 'class' => get_class( $this ),
72 + 'method' => 'render_courses',
73 + ];
74 + $content_obj = static::render_courses( $settings );
75 + $settings['html_no_load_ajax_first'] = $content_obj->content;
76 + $content = TemplateAJAX::load_content_via_ajax( $settings, $callback );
77 + } else { // Load AJAX
78 + $callback = [
79 + 'class' => get_class( $this ),
80 + 'method' => 'render_courses',
81 + ];
82 + $content = TemplateAJAX::load_content_via_ajax( $settings, $callback );
83 + }
84 +
85 + echo Template::instance()->nest_elements( $html_wrapper_widget, $content );
86 + } catch ( Throwable $e ) {
87 + echo $e->getMessage();
88 + }
89 + }
90 +
91 + /**
92 + * Render template list courses with settings param.
93 + *
94 + * @param array $settings
95 + *
96 + * @return stdClass { content: string_html }
97 + * @since 4.2.5.7
98 + * @version 1.0.1
99 + */
100 + public static function render_courses( array $settings = [] ): stdClass {
101 + $listCoursesTemplate = ListCoursesTemplate::instance();
102 + $skin = $settings['skin'] ?? 'grid';
103 + $courses_limit = $settings['courses_limit'] ?? 0;
104 + $courses_per_page = $settings['courses_per_page'] ?? 8;
105 + $courses_order_by = $settings['order_by'] ?? $settings['courses_order_by_default'] ?? 'post_date';
106 + $total_pages = 0;
107 + $paged = $settings['paged'] ?? 1;
108 + $show_el_sorting = ( $settings['el_sorting'] ?? 'yes' ) === 'yes';
109 + $show_el_result_count = ( $settings['el_result_count'] ?? 'yes' ) === 'yes';
110 + $pagination_type = $settings['pagination_type'] ?? 'number';
111 + $courses_category_ids = $settings['courses_category_ids'] ?? [];
112 +
113 + if ( $courses_limit > 0 ) {
114 + if ( $courses_per_page > $courses_limit ) {
115 + $courses_per_page = $courses_limit;
116 + } elseif ( $courses_per_page === 0 ) {
117 + $courses_per_page = $courses_limit;
118 + }
119 +
120 + $total_pages = LP_Database::get_total_pages( $courses_per_page, $courses_limit );
121 + }
122 +
123 + if ( $courses_per_page === 0 ) {
124 + $courses_per_page = - 1;
125 + }
126 +
127 + $filter = new LP_Course_Filter();
128 + $settings['order_by'] = $courses_order_by;
129 + Courses::handle_params_for_query_courses( $filter, $settings );
130 + // Term
131 + $filter->term_ids = array_merge( $filter->term_ids, $courses_category_ids );
132 + // End term
133 + $total_rows = 0;
134 + $filter->limit = $courses_per_page;
135 + $courses = Courses::get_courses( $filter, $total_rows );
136 + $total_pages_result = LP_Database::get_total_pages( $courses_per_page, $total_rows );
137 + if ( $total_pages > 0 ) {
138 + if ( $total_pages_result > $total_pages ) {
139 + if ( $paged === $total_pages && $total_pages > 1 ) {
140 + $number_courses_residual = $courses_limit - $courses_per_page * ( $paged - 1 );
141 + $courses = array_slice( $courses, 0, $number_courses_residual );
142 + }
143 +
144 + $total_rows = $courses_limit;
145 + } else {
146 + $total_pages = $total_pages_result;
147 + }
148 + } else {
149 + $total_pages = $total_pages_result;
150 + }
151 +
152 + // Handle layout
153 + ob_start();
154 + $data_rs = [
155 + 'total_rows' => $total_rows,
156 + 'paged' => $paged,
157 + 'courses_per_page' => $courses_per_page,
158 + ];
159 +
160 + $section_top = [
161 + 'wrapper' => '<div class="learn-press-elms-courses-top">',
162 + 'el_result_count' => $show_el_result_count ? $listCoursesTemplate->html_courses_page_result( $data_rs ) : '',
163 + 'el_sorting' => $show_el_sorting ? $listCoursesTemplate->html_order_by( $courses_order_by ) : '',
164 + 'close_wrapper' => '</div>',
165 + ];
166 + echo Template::combine_components( $section_top );
167 +
168 + $html_lis = '';
169 + foreach ( $courses as $courseObj ) {
170 + $course = learn_press_get_course( $courseObj->ID );
171 + $html_lis .= static::render_course( $course, $settings );
172 + }
173 + $section_list = [
174 + 'wrapper' => sprintf( '<ul class="learn-press-courses lp-list-courses-no-css %s">', esc_attr( $skin ) ),
175 + 'list' => $html_lis,
176 + 'wrapper_end' => '</ul>',
177 + ];
178 + echo Template::combine_components( $section_list );
179 +
180 + $data_pagination = [
181 + 'total_pages' => $total_pages,
182 + 'type' => $pagination_type,
183 + 'base' => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),
184 + 'paged' => (int) ( $settings['paged'] ?? 1 ),
185 + ];
186 + echo $listCoursesTemplate->html_pagination( $data_pagination );
187 +
188 + $content = new stdClass();
189 + $content->content = ob_get_clean();
190 +
191 + return $content;
192 + }
193 +
194 + /**
195 + * Render single item course
196 + *
197 + * @param LP_Course $course
198 + * @param array $settings
199 + *
200 + * @return string
201 + */
202 + public static function render_course( LP_Course $course, array $settings = [] ): string {
203 + $html_item = '';
204 + $singleCourseTemplate = SingleCourseTemplate::instance();
205 +
206 + try {
207 + $html_wrapper = [
208 + '<li class="course-item">' => '</li>',
209 + ];
210 +
211 + $title = sprintf( '<a href="%s">%s</a>', $course->get_permalink(), $course->get_title() );
212 +
213 + $section = [
214 + 'image' => [ 'text_html' => $singleCourseTemplate->html_image( $course ) ],
215 + 'author' => [ 'text_html' => sprintf( '<div>%s</div>', $course->get_instructor_html() ) ],
216 + 'title' => [ 'text_html' => $title ],
217 + 'price' => [ 'text_html' => sprintf( '<div>%s</div>', $singleCourseTemplate->html_price( $course ) ) ],
218 + 'button' => [
219 + 'text_html' => sprintf(
220 + '<div><a href="%s">%s</a></div>',
221 + $course->get_permalink(),
222 + __( 'View More', 'learnpress' )
223 + ),
224 + ],
225 + ];
226 +
227 + ob_start();
228 + Template::instance()->print_sections( $section );
229 + $html_item = ob_get_clean();
230 + $html_item = Template::instance()->nest_elements( $html_wrapper, $html_item );
231 + } catch ( Throwable $e ) {
232 + $html_item = $e->getMessage();
233 + }
234 +
235 + return $html_item;
236 + }
237 +}