PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.1
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 / external-plugin / polylang / class-lp-polylang.php

class-lp-polylang.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7.1, at inc/external-plugin/polylang/class-lp-polylang.php

213 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * @class LP_Polylang
5 *
6 * @since 4.1.5
7 * @version 1.0.0
8 * @author tungnx
9 */
10
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit; // Exit if accessed directly
13 }
14
15 class LP_Polylang {
16 protected static $instance;
17
18 protected function __construct() {
19 $this->hooks();
20 }
21
22 public function hooks() {
23 add_filter( 'learn-press/general-settings-fields', [ $this, 'general_settings_fields' ], 10, 2 );
24 add_filter( 'learn_press_get_page_id', [ $this, 'get_page_id' ], 10, 2 );
25 add_filter( 'lp/template/archive-course/skeleton/args', [ $this, 'wpml_arg_query_course' ] );
26 add_filter( 'lp/profile/args/user_courses_attend', [ $this, 'wpml_arg_query_course' ] );
27 add_filter( 'lp/profile/args/user_courses_created', [ $this, 'wpml_arg_query_course' ] );
28 add_filter( 'lp/profile/args/user_courses_statistic', [ $this, 'wpml_arg_query_course' ] );
29 add_filter( 'learnpress/rest/frontend/profile/course_tab/query', [ $this, 'args_query_user_courses' ], 10, 2 );
30 add_filter( 'lp/course/query/filter', [ $this, 'filter_query_courses' ], 10 );
31 add_filter( 'lp/user/course/query/filter', [ $this, 'filter_query_user_courses' ], 10 );
32 add_filter( 'pll_the_language_link', [ $this, 'get_link_switcher' ], 10, 3 );
33 }
34
35 /**
36 * Get page_id config on LP Settings
37 *
38 * @param int $page_id
39 * @param string $name
40 *
41 * @return int
42 */
43 public function get_page_id( int $page_id = 0, string $name = '' ): int {
44 if ( ! is_callable( 'pll_default_language' ) ) {
45 return $page_id;
46 }
47
48 $lang_default = pll_default_language();
49 $lang_current = pll_current_language();
50
51 if ( $lang_current != $lang_default ) {
52 $page_id = absint( LP_Settings::get_option( "{$name}_page_id_{$lang_current}" ) );
53 }
54
55 return $page_id;
56 }
57
58 /**
59 * @param array $args
60 *
61 * @return array
62 */
63 public function wpml_arg_query_course( array $args ): array {
64 if ( ! function_exists( 'pll_current_language' ) ) {
65 return $args;
66 }
67
68 $args['pll-current-lang'] = pll_current_language();
69
70 return $args;
71 }
72
73 /**
74 * Query get course by current language
75 *
76 * @param LP_Course_Filter $filter
77 *
78 * @return LP_Course_Filter
79 */
80 public function filter_query_courses( LP_Course_Filter $filter ): LP_Course_Filter {
81 $pll_current_lang = LP_Helper::sanitize_params_submitted( $_REQUEST['pll-current-lang'] ?? '' );
82
83 if ( empty( $pll_current_lang ) ) {
84 return $filter;
85 }
86
87 $lp_db = LP_Database::getInstance();
88
89 $filter->join[] = "INNER JOIN $lp_db->tb_term_relationships AS r_term ON p.ID = r_term.object_id";
90 $filter->join[] = "INNER JOIN $lp_db->tb_terms AS term ON r_term.term_taxonomy_id = term.term_id";
91 $filter->where[] = $lp_db->wpdb->prepare( 'AND term.slug = %s', $pll_current_lang );
92
93 return $filter;
94 }
95
96 /**
97 * Profile filter query get user course by current language
98 *
99 * @param LP_User_Items_Filter $filter
100 *
101 * @return LP_User_Items_Filter
102 */
103 public function filter_query_user_courses( LP_User_Items_Filter $filter ): LP_User_Items_Filter {
104 $pll_current_lang = LP_Helper::sanitize_params_submitted( $_REQUEST['pll-current-lang'] ?? '' );
105
106 if ( empty( $pll_current_lang ) ) {
107 return $filter;
108 }
109
110 $lp_db = LP_Database::getInstance();
111
112 $filter->join[] = "INNER JOIN $lp_db->tb_term_relationships AS r_term ON ui.item_id = r_term.object_id";
113 $filter->join[] = "INNER JOIN $lp_db->tb_terms AS term ON r_term.term_taxonomy_id = term.term_id";
114 $filter->where[] = $lp_db->wpdb->prepare( 'AND term.slug = %s', $pll_current_lang );
115
116 return $filter;
117 }
118
119 /**
120 * Profile filter query get course by current language
121 *
122 * @param LP_Course_Filter $filter
123 * @param array $args
124 *
125 * @return LP_Course_Filter
126 */
127 /*public function profile_filter_query_courses( LP_Course_Filter $filter, array $args ): LP_Course_Filter {
128 $pll_current_lang = $args['pll-current-lang'] ?? '';
129
130 if ( empty( $pll_current_lang ) ) {
131 return $filter;
132 }
133
134 $lp_db = LP_Database::getInstance();
135
136 $filter->join[] = "INNER JOIN $lp_db->tb_term_relationships AS r_term ON p.ID = r_term.object_id";
137 $filter->join[] = "INNER JOIN $lp_db->tb_terms AS term ON r_term.term_taxonomy_id = term.term_id";
138 $filter->where[] = $lp_db->wpdb->prepare( 'AND term.slug = %s', $pll_current_lang );
139
140 return $filter;
141 }*/
142
143 /**
144 * Args get course by current language
145 *
146 * @param array $args
147 * @param WP_REST_Request $request
148 *
149 * @return array
150 */
151 public function args_query_user_courses( array $args, WP_REST_Request $request ): array {
152 $pll_current_lang = LP_Helper::sanitize_params_submitted( $request['pll-current-lang'] ?? '' );
153
154 if ( empty( $pll_current_lang ) ) {
155 return $args;
156 }
157
158 $args['pll-current-lang'] = $pll_current_lang;
159
160 return $args;
161 }
162
163 /**
164 * Create new fields of languages not default
165 */
166 public function general_settings_fields( array $fields ): array {
167 $default_lang = pll_default_language();
168 $current_lang = pll_current_language();
169
170 $field_arr = [ 'courses_page_id', 'profile_page_id', 'checkout_page_id', 'become_a_teacher_page_id', 'term_conditions_page_id' ];
171 $field_arr = apply_filters( 'lp_pll/settings/name-fields', $field_arr );
172
173 if ( $default_lang != $current_lang ) {
174 // Set name field with lang
175 foreach ( $fields as $k => $field ) {
176 if ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {
177 $fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;
178 }
179 }
180 }
181
182 return $fields;
183 }
184
185 public function get_link_switcher( $url, $slug, $locale ) {
186 $slug_lang = '';
187
188 if ( $slug !== pll_default_language() ) {
189 $slug_lang = '_' . $slug;
190 }
191
192 $arr_page = array( LP_PAGE_COURSES, LP_PAGE_PROFILE );
193
194 if ( in_array( LP_Page_Controller::page_current(), $arr_page ) ) {
195 $name_page = str_replace( 'lp_page_', '', LP_Page_Controller::page_current() );
196 $url = get_permalink( LP_Settings::get_option( $name_page . '_page_id' . $slug_lang ) );
197 }
198
199 return $url;
200 }
201
202 /**
203 * @return LP_Polylang
204 */
205 public static function instance(): LP_Polylang {
206 if ( is_null( self::$instance ) ) {
207 self::$instance = new self();
208 }
209
210 return self::$instance;
211 }
212 }
213