PluginProbe
Tutor LMS – eLearning and online course solution / 1.8.10
Tutor LMS – eLearning and online course solution v1.8.10
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 All 191 releases
← All changes | classes/Shortcode.php +210 -21 1.0.41.8.10 View file →
@@ -7,17 +7,31 @@
7 7 */
8 8
9 9 namespace TUTOR;
10 10
11 -if ( ! defined( 'ABSPATH' ) )
11 +if (!defined('ABSPATH'))
12 12 exit;
13 13
14 14 class Shortcode {
15 15
16 + private $instructor_layout = array(
17 + 'pp-top-full',
18 + 'pp-cp',
19 + 'pp-top-left',
20 + 'pp-left-middle',
21 + 'pp-left-full'
22 + );
23 +
16 24 public function __construct() {
17 25 add_shortcode('tutor_student_registration_form', array($this, 'student_registration_form'));
18 - add_shortcode('tutor_student_dashboard', array($this, 'tutor_student_dashboard'));
26 + add_shortcode('tutor_dashboard', array($this, 'tutor_dashboard'));
19 27 add_shortcode('tutor_instructor_registration_form', array($this, 'instructor_registration_form'));
28 + add_shortcode('tutor_course', array($this, 'tutor_course'));
29 +
30 + add_shortcode('tutor_instructor_list', array($this, 'tutor_instructor_list'));
31 + add_action('tutor_options_after_instructors', array($this, 'tutor_instructor_layout'));
32 + add_action( 'wp_ajax_load_filtered_instructor', array($this, 'load_filtered_instructor') );
33 + add_action( 'wp_ajax_nopriv_load_filtered_instructor', array($this, 'load_filtered_instructor') );
20 34 }
21 35
22 36 /**
23 37 * @return mixed
@@ -25,16 +39,16 @@
25 39 * Instructor Registration Shortcode
26 40 *
27 41 * @since v.1.0.0
28 42 */
29 - public function student_registration_form(){
43 + public function student_registration_form() {
30 44 ob_start();
31 - if (is_user_logged_in()){
32 - tutor_load_template( 'dashboard.student.logged-in' );
33 - }else{
34 - tutor_load_template( 'dashboard.student.registration' );
45 + if (is_user_logged_in()) {
46 + tutor_load_template('dashboard.logged-in');
47 + } else {
48 + tutor_load_template('dashboard.registration');
35 49 }
36 - return apply_filters( 'tutor/student/register', ob_get_clean() );
50 + return apply_filters('tutor/student/register', ob_get_clean());
37 51 }
38 52
39 53 /**
40 54 * @return mixed
@@ -42,16 +56,25 @@
42 56 * Tutor Dashboard for students
43 57 *
44 58 * @since v.1.0.0
45 59 */
46 - public function tutor_student_dashboard(){
60 + public function tutor_dashboard() {
61 + global $wp_query;
62 +
47 63 ob_start();
48 - if (is_user_logged_in()){
49 - tutor_load_template( 'dashboard.student.index' );
50 - }else{
51 - tutor_load_template( 'global.login' );
64 + if (is_user_logged_in()) {
65 + /**
66 + * Added isset() Condition to avoid infinite loop since v.1.5.4
67 + * This has cause error by others plugin, Such AS SEO
68 + */
69 +
70 + if (!isset($wp_query->query_vars['tutor_dashboard_page'])) {
71 + tutor_load_template('dashboard.index');
72 + }
73 + } else {
74 + tutor_load_template('global.login');
52 75 }
53 - return apply_filters( 'tutor_dashboard/student/index', ob_get_clean() );
76 + return apply_filters('tutor_dashboard/index', ob_get_clean());
54 77 }
55 78
56 79 /**
57 80 * @return mixed
@@ -59,15 +82,181 @@
59 82 * Instructor Registration Shortcode
60 83 *
61 84 * @since v.1.0.0
62 85 */
63 - public function instructor_registration_form(){
86 + public function instructor_registration_form() {
64 87 ob_start();
65 - if (is_user_logged_in()){
66 - tutor_load_template( 'dashboard.instructor.logged-in' );
67 - }else{
68 - tutor_load_template( 'dashboard.instructor.registration' );
88 + if (is_user_logged_in()) {
89 + tutor_load_template('dashboard.instructor.logged-in');
90 + } else {
91 + tutor_load_template('dashboard.instructor.registration');
69 92 }
70 - return apply_filters( 'tutor_dashboard/student/index', ob_get_clean() );
93 + return apply_filters('tutor_dashboard/student/index', ob_get_clean());
71 94 }
72 95
73 -}
96 + /**
97 + * @param $atts
98 + *
99 + * @return string
100 + *
101 + * Shortcode for getting course
102 + */
103 + public function tutor_course($atts) {
104 + $course_post_type = tutor()->course_post_type;
105 +
106 + $a = shortcode_atts(array(
107 + 'post_type' => $course_post_type,
108 + 'post_status' => 'publish',
109 +
110 + 'id' => '',
111 + 'exclude_ids' => '',
112 + 'category' => '',
113 +
114 + 'orderby' => 'ID',
115 + 'order' => 'DESC',
116 + 'count' => 6,
117 + ), $atts);
118 +
119 + if (!empty($a['id'])) {
120 + $ids = (array) explode(',', $a['id']);
121 + $a['post__in'] = $ids;
122 + }
123 +
124 + if (!empty($a['exclude_ids'])) {
125 + $exclude_ids = (array) explode(',', $a['exclude_ids']);
126 + $a['post__not_in'] = $exclude_ids;
127 + }
128 + if (!empty($a['category'])) {
129 + $category = (array) explode(',', $a['category']);
130 +
131 + $a['tax_query'] = array(
132 + array(
133 + 'taxonomy' => 'course-category',
134 + 'field' => 'term_id',
135 + 'terms' => $category,
136 + 'operator' => 'IN',
137 + ),
138 + );
139 + }
140 + $a['posts_per_page'] = (int) $a['count'];
141 +
142 + wp_reset_query();
143 + query_posts($a);
144 + ob_start();
145 +
146 + $GLOBALS['tutor_shortcode_arg'] = array(
147 + 'include_course_filter' => isset($atts['course_filter']) ? $atts['course_filter'] === 'on' : null,
148 + 'column_per_row' => isset($atts['column_per_row']) ? $atts['column_per_row'] : null,
149 + 'course_per_page' => $a['posts_per_page']
150 + );
151 +
152 + tutor_load_template('shortcode.tutor-course');
153 + $output = ob_get_clean();
154 + wp_reset_query();
155 +
156 + return $output;
157 + }
158 +
159 + private function prepare_instructor_list($current_page, $atts, $cat_ids = array(), $keyword = '') {
160 +
161 + $limit = (int)sanitize_text_field(tutils()->array_get('count', $atts, 9));
162 + $page = $current_page - 1;
163 +
164 + $instructors = tutor_utils()->get_instructors($limit*$page, $limit, $keyword, 'approved', $cat_ids);
165 + $next_instructors = tutor_utils()->get_instructors($limit*$current_page, $limit, $keyword, 'approved', $cat_ids);
166 +
167 + $previous_page = $page>0 ? $current_page-1 : null;
168 + $next_page = (is_array($next_instructors) && count($next_instructors)>0) ? $current_page+1 : null;
169 +
170 + $layout = sanitize_text_field(tutils()->array_get('layout', $atts, ''));
171 + $layout = in_array($layout, $this->instructor_layout) ? $layout : tutor_utils()->get_option('instructor_list_layout', $this->instructor_layout[0]);
172 +
173 + $payload=array(
174 + 'instructors' => is_array($instructors) ? $instructors : array(),
175 + 'next_page' => $next_page,
176 + 'previous_page' => $previous_page,
177 + 'column_count' => sanitize_text_field(tutils()->array_get('column_per_row', $atts, 3)),
178 + 'layout' => $layout,
179 + 'limit' => $limit,
180 + 'current_page' => $current_page
181 + );
182 +
183 + return $payload;
184 + }
185 +
186 + /**
187 + * @param $atts
188 + *
189 + * @return string
190 + *
191 + * Shortcode for getting instructors
192 + */
193 + public function tutor_instructor_list($atts) {
194 +
195 + !is_array( $atts ) ? $atts = array() : 0;
196 +
197 + $current_page = (int)tutor_utils()->array_get('instructor-page', $_GET, 1);
198 + $current_page = $current_page>=1 ? $current_page : 1;
199 +
200 + $show_filter = isset( $atts['filter'] ) ? $atts['filter']=='on' : tutor_utils()->get_option( 'instructor_list_show_filter', false );
201 +
202 + // Get instructor list to sow
203 + $payload = $this->prepare_instructor_list($current_page, $atts);
204 + $payload['show_filter'] = $show_filter;
205 +
206 + ob_start();
207 + tutor_load_template('shortcode.tutor-instructor', $payload);
208 + $content = ob_get_clean();
209 +
210 + if($show_filter) {
211 +
212 + $course_cats = get_terms( array(
213 + 'taxonomy' => 'course-category',
214 + 'hide_empty' => true,
215 + 'childless' => true
216 + ) );
217 +
218 + $attributes = $payload;
219 + unset( $attributes['instructors'] );
220 +
221 + $payload = array(
222 + 'show_filter' => $show_filter,
223 + 'content' => $content,
224 + 'categories' => $course_cats,
225 + 'attributes' => array_merge( $atts, $attributes )
226 + );
227 +
228 + ob_start();
229 +
230 + tutor_load_template('shortcode.instructor-filter', $payload);
231 +
232 + $content = ob_get_clean();
233 + }
234 +
235 + return $content;
236 + }
237 +
238 + public function load_filtered_instructor() {
239 + tutor_utils()->checking_nonce();
240 +
241 + $attributes = (array)tutils()->array_get('attributes', $_POST, array());
242 + $current_page = (int)sanitize_text_field(tutils()->array_get('current_page', $attributes, 1));
243 + $keyword = (string)sanitize_text_field(tutils()->array_get('keyword', $_POST, ''));
244 +
245 + $category = (array)tutils()->array_get('category', $_POST, array());
246 + $category = array_filter($category, function($cat) {
247 + return is_numeric($cat);
248 + });
249 +
250 + $payload = $this->prepare_instructor_list($current_page, $attributes, $category, $keyword);
251 +
252 + tutor_load_template('shortcode.tutor-instructor', $payload);
253 + exit;
254 + }
255 +
256 + /**
257 + * Show layout selection dashboard in instructor setting
258 + */
259 + public function tutor_instructor_layout(){
260 + tutor_load_template('instructor-setting', array('templates'=>$this->instructor_layout));
261 + }
262 +}