PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
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 4.2.0 All 139 releases
learnpress / inc / ExternalPlugin / Elementor / Widgets / Course / Skins / SkinCoursesBase.php

SkinCoursesBase.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.4.8, at inc/ExternalPlugin/Elementor/Widgets/Course/Skins/SkinCoursesBase.php

238 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
238