| @@ -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 | +} | |