PluginProbe
Tutor LMS – eLearning and online course solution / 2.0.1
Tutor LMS – eLearning and online course solution v2.0.1
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
tutor / classes / Course_Filter.php

Course_Filter.php in Tutor LMS – eLearning and online course solution 2.0.1, at classes/Course_Filter.php

170 lines 5.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace TUTOR;
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit;
6 }
7
8 class Course_Filter {
9 private $category = 'course-category';
10 private $tag = 'course-tag';
11 private $current_term_id = null;
12
13 function __construct() {
14 add_action( 'wp_ajax_tutor_course_filter_ajax', array( $this, 'load_listing' ) );
15 add_action( 'wp_ajax_nopriv_tutor_course_filter_ajax', array( $this, 'load_listing' ) );
16 }
17
18 public function load_listing() {
19 tutils()->checking_nonce();
20 $_post = tutor_sanitize_data( $_POST );
21
22 $default_per_page = tutils()->get_option( 'courses_per_page', 12 );
23 $courses_per_page = (int) tutils()->array_get( 'course_per_page', $_post, $default_per_page );
24
25 $page = ( isset( $_post['page'] ) && is_numeric( $_post['page'] ) && $_post['page'] > 0 ) ? sanitize_text_field( $_post['page'] ) : 1;
26 $args = array(
27 'post_status' => 'publish',
28 'post_type' => 'courses',
29 'posts_per_page' => $courses_per_page,
30 'paged' => $page,
31 'tax_query' => array(
32 'relation' => 'OR',
33 ),
34 );
35
36 // Prepare taxonomy
37 foreach ( array( 'category', 'tag' ) as $taxonomy ) {
38
39 $term_array = tutils()->array_get( 'tutor-course-filter-' . $taxonomy, $_post, array() );
40 ! is_array( $term_array ) ? $term_array = array( $term_array ) : 0;
41
42 $term_array = array_filter(
43 $term_array,
44 function( $term_id ) {
45 return is_numeric( $term_id );
46 }
47 );
48
49 if ( count( $term_array ) > 0 ) {
50 $tax_query = array(
51 'taxonomy' => $this->$taxonomy,
52 'field' => 'term_id',
53 'terms' => $term_array,
54 'operator' => 'IN',
55 );
56 array_push( $args['tax_query'], $tax_query );
57 }
58 }
59
60 // Prepare level and price type
61 $is_membership = get_tutor_option( 'monetize_by' ) == 'pmpro' && tutils()->has_pmpro();
62 $level_price = array();
63 foreach ( array( 'level', 'price' ) as $type ) {
64
65 if ( $is_membership && 'price' === $type ) {
66 continue;
67 }
68
69 $type_array = tutils()->array_get( 'tutor-course-filter-' . $type, $_post, array() );
70 $type_array = array_map( 'sanitize_text_field', ( is_array( $type_array ) ? $type_array : array( $type_array ) ) );
71
72 if ( count( $type_array ) > 0 ) {
73 $level_price[] = array(
74 'key' => 'level' === $type ? '_tutor_course_level' : '_tutor_course_price_type',
75 'value' => $type_array,
76 'compare' => 'IN',
77 );
78 }
79 }
80 count( $level_price ) ? $args['meta_query'] = $level_price : 0;
81
82 $search_key = sanitize_text_field( tutils()->array_get( 'keyword', $_post, null ) );
83 $search_key ? $args['s'] = $search_key : 0;
84
85 if ( isset( $_post['tutor_course_filter'] ) ) {
86 switch ( $_post['tutor_course_filter'] ) {
87 case 'newest_first':
88 $args['orderby'] = 'ID';
89 $args['order'] = 'desc';
90 break;
91 case 'oldest_first':
92 $args['orderby'] = 'ID';
93 $args['order'] = 'asc';
94 break;
95 case 'course_title_az':
96 $args['orderby'] = 'post_title';
97 $args['order'] = 'asc';
98 break;
99 case 'course_title_za':
100 $args['orderby'] = 'post_title';
101 $args['order'] = 'desc';
102 break;
103 }
104 }
105
106 query_posts( apply_filters( 'tutor_course_filter_args', $args ) );
107 $col_per_row = (int) tutils()->array_get( 'column_per_row', $_post, 3 );
108 $GLOBALS['tutor_shortcode_arg'] = array(
109 'column_per_row' => $col_per_row <= 0 ? 3 : $col_per_row,
110 'course_per_page' => $courses_per_page,
111 'shortcode_enabled' => isset($_post['page_shortcode'])?true:false,
112 );
113
114 tutor_load_template( 'archive-course-init' );
115 exit;
116 }
117
118 private function get_current_term_id() {
119
120 if ( $this->current_term_id === null ) {
121 $queried = get_queried_object();
122 $this->current_term_id = ( is_object( $queried ) && property_exists( $queried, 'term_id' ) ) ? $queried->term_id : false;
123 }
124
125 return $this->current_term_id;
126 }
127
128 private function sort_terms_hierarchically( $terms, $parent_id = 0 ) {
129 $term_array = array();
130
131 foreach ( $terms as $term ) {
132 if ( $term->parent == $parent_id ) {
133 $term->children = $this->sort_terms_hierarchically( $terms, $term->term_id );
134 $term_array[] = $term;
135 }
136 }
137
138 return $term_array;
139 }
140
141 private function render_terms_hierarchically( $terms, $taxonomy ) {
142
143 $term_id = $this->get_current_term_id();
144
145 foreach($terms as $term){
146 ?>
147 <div class="tutor-form-check tutor-mb-20">
148
149 <input type="checkbox" class="tutor-form-check-input" id="<?php echo $term->term_id; ?>" name="tutor-course-filter-<?php echo $taxonomy; ?>" value="<?php echo $term->term_id; ?>" <?php echo $term->term_id==$term_id ? 'checked="checked"' : ''; ?>/>&nbsp;
150
151 <label for="<?php echo $term->term_id; ?>">
152 <?php echo $term->name; ?>
153 </label>
154 </div>
155 <?php isset($term->children) ? $this->render_terms_hierarchically($term->children, $taxonomy) : 0; ?>
156 <?php
157 }
158 }
159
160 public function render_terms( $taxonomy ) {
161 $terms = get_terms(
162 array(
163 'taxonomy' => $this->$taxonomy,
164 'hide_empty' => true,
165 )
166 );
167 $this->render_terms_hierarchically( $this->sort_terms_hierarchically( $terms ), $taxonomy );
168 }
169 }
170