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
← All changes | inc/ExternalPlugin/Polylang/class-lp-polylang.php +435 -435 4.3.84.4.8 View file →
@@ -1,435 +1,435 @@
1 -<?php
2 -
3 -/**
4 - * @class LP_Polylang
5 - *
6 - * @since 4.1.5
7 - * @version 1.0.1
8 - * @author tungnx
9 - */
10 -
11 -use LearnPress\Filters\UserItemsFilter;
12 -use LearnPress\Helpers\Singleton;
13 -
14 -if ( ! defined( 'ABSPATH' ) ) {
15 - exit; // Exit if accesDsed directly
16 -}
17 -
18 -class LP_Polylang {
19 - use Singleton;
20 -
21 - public function init() {
22 - $this->hooks();
23 - }
24 -
25 - public function hooks() {
26 - add_filter( 'learn-press/general-settings-fields', [ $this, 'general_settings_fields' ], 10, 2 );
27 - add_filter( 'lp/settings/permalinks', [ $this, 'permalink_settings_fields' ], 10, 2 );
28 - add_filter( 'learn_press_get_page_id', [ $this, 'get_page_id' ], 10, 2 );
29 - add_filter( 'lp/template/archive-course/skeleton/args', [ $this, 'lang_arg_query_course' ] );
30 - add_filter( 'lp/profile/args/user_courses_attend', [ $this, 'lang_arg_query_course' ] );
31 - add_filter( 'lp/profile/args/user_courses_created', [ $this, 'lang_arg_query_course' ] );
32 - add_filter( 'lp/profile/args/user_courses_statistic', [ $this, 'lang_arg_query_course' ] );
33 - add_filter( 'learnpress/rest/frontend/profile/course_tab/query', [ $this, 'args_query_user_courses' ], 10, 2 );
34 - add_action( 'learn-press/courses/handle_params_for_query_courses', [ $this, 'filter_query_courses' ], 10, 2 );
35 - add_filter( 'lp/user/course/query/filter', [ $this, 'filter_query_user_courses' ], 10 );
36 - add_filter( 'pll_the_language_link', [ $this, 'get_link_switcher' ], 10, 3 );
37 - add_filter( 'learn-press/rewrite/rules', [ $this, 'pll_rewrite_rules' ] );
38 - }
39 -
40 - /**
41 - * Get page_id config on LP Settings
42 - *
43 - * @param int $page_id
44 - * @param string $name
45 - *
46 - * @return int
47 - */
48 - public function get_page_id( int $page_id = 0, string $name = '' ): int {
49 - if ( ! is_callable( 'pll_default_language' ) ) {
50 - return $page_id;
51 - }
52 -
53 - $lang_default = pll_default_language();
54 - $lang_current = pll_current_language();
55 - if ( ! $lang_current ) {
56 - $lang_current = LP_Request::get_param( 'pll-current-lang' ); // Param this send via lp_archive_skeleton_get_args
57 - }
58 -
59 - if ( $lang_current && $lang_current != $lang_default ) {
60 - $page_id_trans = absint( LP_Settings::get_option( "{$name}_page_id_{$lang_current}" ) );
61 - if ( $page_id_trans ) {
62 - $page_id = $page_id_trans;
63 - }
64 - }
65 -
66 - return $page_id;
67 - }
68 -
69 - /**
70 - * @param array $args
71 - *
72 - * @return array
73 - */
74 - public function lang_arg_query_course( array $args ): array {
75 - if ( ! function_exists( 'pll_current_language' ) ) {
76 - return $args;
77 - }
78 -
79 - $args['pll-current-lang'] = pll_current_language();
80 -
81 - return $args;
82 - }
83 -
84 - /**
85 - * Query get course by current language
86 - *
87 - * @param LP_Course_Filter $filter
88 - * @param array $param
89 - *
90 - * @return LP_Course_Filter
91 - * @since 4.1.4
92 - * @version 1.0.2
93 - */
94 - public function filter_query_courses( LP_Course_Filter $filter, array $param ): LP_Course_Filter {
95 - $pll_current_lang = $param['pll-current-lang'] ?? '';
96 - if ( empty( $pll_current_lang ) ) {
97 - $pll_current_lang = LP_Request::get_param( 'pll-current-lang' );
98 -
99 - if ( empty( $pll_current_lang ) ) {
100 - return $filter;
101 - }
102 - }
103 -
104 - $lp_db = LP_Database::getInstance();
105 - $filter->join[] = "INNER JOIN $lp_db->tb_term_relationships AS r_term_pll ON p.ID = r_term_pll.object_id";
106 - $filter->join[] = "INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id";
107 - $filter->join[] = "INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id";
108 - $filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );
109 -
110 - return $filter;
111 - }
112 -
113 - /**
114 - * Profile filter query get user course by current language
115 - *
116 - * @param LP_User_Items_Filter|UserItemsFilter $filter
117 - *
118 - * @return LP_User_Items_Filter
119 - */
120 - public function filter_query_user_courses( $filter ): LP_User_Items_Filter {
121 - $pll_current_lang = pll_current_language(); // For query load page
122 - if ( ! $pll_current_lang ) { // For query call API
123 - $pll_current_lang = LP_Request::get_param( 'pll-current-lang' );
124 - }
125 -
126 - if ( empty( $pll_current_lang ) ) {
127 - return $filter;
128 - }
129 -
130 - if ( $pll_current_lang == pll_default_language() ) {
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_pll ON ui.item_id = r_term_pll.object_id";
137 - $filter->join[] = "INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id";
138 - $filter->join[] = "INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id";
139 - $filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );
140 -
141 - return $filter;
142 - }
143 -
144 - /**
145 - * Profile filter query get course by current language
146 - *
147 - * @param LP_Course_Filter $filter
148 - * @param array $args
149 - *
150 - * @return LP_Course_Filter
151 - */
152 - /*public function profile_filter_query_courses( LP_Course_Filter $filter, array $args ): LP_Course_Filter {
153 - $pll_current_lang = $args['pll-current-lang'] ?? '';
154 -
155 - if ( empty( $pll_current_lang ) ) {
156 - return $filter;
157 - }
158 -
159 - $lp_db = LP_Database::getInstance();
160 -
161 - $filter->join[] = "INNER JOIN $lp_db->tb_term_relationships AS r_term ON p.ID = r_term.object_id";
162 - $filter->join[] = "INNER JOIN $lp_db->tb_terms AS term ON r_term.term_taxonomy_id = term.term_id";
163 - $filter->where[] = $lp_db->wpdb->prepare( 'AND term.slug = %s', $pll_current_lang );
164 -
165 - return $filter;
166 - }*/
167 -
168 - /**
169 - * Args get course by current language
170 - *
171 - * @param array $args
172 - * @param WP_REST_Request $request
173 - *
174 - * @return array
175 - */
176 - public function args_query_user_courses( array $args, WP_REST_Request $request ): array {
177 - $pll_current_lang = LP_Helper::sanitize_params_submitted( $request['pll-current-lang'] ?? '' );
178 -
179 - if ( empty( $pll_current_lang ) ) {
180 - return $args;
181 - }
182 -
183 - $args['pll-current-lang'] = $pll_current_lang;
184 -
185 - return $args;
186 - }
187 -
188 - /**
189 - * Create new fields of languages not default
190 - */
191 - public function general_settings_fields( array $fields ): array {
192 - $default_lang = pll_default_language();
193 - $current_lang = pll_current_language();
194 -
195 - $field_arr = [
196 - 'courses_page_id',
197 - 'profile_page_id',
198 - 'checkout_page_id',
199 - 'become_a_teacher_page_id',
200 - 'term_conditions_page_id',
201 - 'instructors_page_id',
202 - 'single_instructor_page_id',
203 - ];
204 - $field_arr = apply_filters( 'lp_pll/settings/name-fields', $field_arr );
205 -
206 - if ( $default_lang != $current_lang ) {
207 - // Set name field with lang
208 - foreach ( $fields as $k => $field ) {
209 - if ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {
210 - $fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;
211 - }
212 - }
213 - }
214 -
215 - return $fields;
216 - }
217 -
218 - /**
219 - * Create new fields of languages not default
220 - *
221 - * @param array $fields
222 - *
223 - * @return array
224 - * @version 1.0.0
225 - * @since 4.2.3.3
226 - */
227 - public function permalink_settings_fields( array $fields ): array {
228 - $default_lang = pll_default_language();
229 - $current_lang = pll_current_language();
230 -
231 - $field_arr = [
232 - //'lesson_slug',
233 - ];
234 - $field_arr = apply_filters( 'lp_pll/settings/permalink/name-fields', $field_arr );
235 -
236 - if ( $default_lang != $current_lang ) {
237 - // Set name field with lang
238 - foreach ( $fields as $k => $field ) {
239 - if ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {
240 - $fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;
241 - }
242 - }
243 - }
244 -
245 - return $fields;
246 - }
247 -
248 - /**
249 - * Handle link swither
250 - *
251 - * @param $url
252 - * @param $slug
253 - * @param $locale
254 - *
255 - * @return false|mixed|string
256 - * @version 1.0.1
257 - * @since 4.1.5
258 - */
259 - public function get_link_switcher( $url, $slug, $locale ) {
260 - $slug_lang = '';
261 - if ( $slug !== pll_default_language() ) {
262 - $slug_lang = '_' . $slug;
263 - }
264 -
265 - $arr_page = array( LP_PAGE_COURSES, LP_PAGE_PROFILE );
266 - if ( in_array( LP_Page_Controller::page_current(), $arr_page )
267 - && ! learn_press_is_course_tax()
268 - && ! learn_press_is_course_tag() ) {
269 - $name_page = str_replace( 'lp_page_', '', LP_Page_Controller::page_current() );
270 - $url = get_permalink( LP_Settings::get_option( $name_page . '_page_id' . $slug_lang ) );
271 - }
272 -
273 - return $url;
274 - }
275 -
276 - /**
277 - * Rewrite url with polylang
278 - *
279 - * @param array $rules
280 - *
281 - * @return array
282 - * @since 4.2.3.3
283 - * @version 1.0.1
284 - * @uses LP_Query::add_rewrite_rules
285 - */
286 - public function pll_rewrite_rules( array $rules ): array {
287 - if ( ! is_callable( 'pll_default_language' ) || ! is_callable( 'pll_current_language' ) ) {
288 - return $rules;
289 - }
290 -
291 - $rules_old = $rules;
292 -
293 - $lang_default = pll_default_language();
294 - $lang_current = pll_current_language();
295 - $pll_options = $this->get_pll_options();
296 - $all_lang = pll_languages_list();
297 - $hide_default = $pll_options['hide_default'] ?? 1;
298 - $force_lang = $pll_options['force_lang'] ?? 1;
299 - $force_rewrite = $pll_options['rewrite'] ?? 1;
300 -
301 - $lang_slug = '';
302 - $lang = $lang_current;
303 - if ( 1 == $force_lang ) { // Pll add slug language to link
304 - if ( $force_rewrite == 0 ) {
305 - $lang_slug .= 'language/';
306 - }
307 -
308 - $lang_slug .= $lang . '/';
309 - } else { // Pll add slug language to link
310 - $lang_slug .= $lang . '/';
311 - }
312 -
313 - $lang_get_option = '';
314 - if ( $lang != $lang_default ) {
315 - $lang_get_option = '_' . $lang;
316 - }
317 - if ( $hide_default && $lang_current == $lang_default ) {
318 - return $rules;
319 - }
320 -
321 - // Add language to rewrite url exits
322 - foreach ( $rules_old as $key_group => $group_rule ) {
323 - foreach ( $group_rule as $key => $rule ) {
324 - $new_key = array_key_first( $rule );
325 - $value = $rule[ $new_key ];
326 - $new_key = substr_replace( $new_key, '', 0, 1 );
327 - $new_key = '^' . $lang_slug . $new_key;
328 - $rules[ $key_group ][ $key ] = [ $new_key => $value ];
329 - }
330 - }
331 -
332 - // Rewrite url for courses
333 - // Not use learn_press_get_page_id( 'courses' ) because it $lang_current = false with $pll_options['force_lang'] = 0
334 - /*$courses_page_id_lang = LP_Settings::get_option( 'courses_page_id' . $lang_get_option, false );
335 - if ( $courses_page_id_lang ) {
336 - $courses_slug = get_post_field( 'post_name', $courses_page_id_lang );
337 -
338 - $rules['courses'][ 'pll-archive-' . $lang ] = [
339 - "^{$lang_slug}{$courses_slug}/?(?:page/)?([^/][0-9]*)?/?$" =>
340 - 'index.php?paged=$matches[1]&post_type=' . LP_COURSE_CPT,
341 - ];
342 - }*/
343 -
344 - // Rewrite url for instructors
345 - /*$instructors_page_id_lang = LP_Settings::get_option( 'instructors_page_id' . $lang_get_option, false );
346 - if ( $instructors_page_id_lang ) {
347 - $instructors_slug = get_post_field( 'post_name', $instructors_page_id_lang );
348 -
349 - $rules['instructors'][ 'pll-archive-' . $lang ] = [
350 - "^{$lang_slug}{$instructors_slug}/?(?:page/)?([^/][0-9]*)?/?$" =>
351 - 'index.php?page_id=' . $instructors_page_id_lang,
352 - ];
353 - }*/
354 -
355 - // Rewrite url for instructor
356 - /*$single_instructor_page_id = LP_Settings::get_option( 'single_instructor_page_id' . $lang_get_option, false );
357 - if ( $single_instructor_page_id ) {
358 - $instructor_slug = get_post_field( 'post_name', $single_instructor_page_id );
359 -
360 - $rules['instructor'][ 'has_name_' . $lang ] = [
361 - "^{$lang_slug}{$instructor_slug}/([^/]+)/?(?:page/)?([^/][0-9]*)?/?$" =>
362 - 'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&instructor_name=$matches[1]&paged=$matches[2]',
363 - ];
364 - $rules['instructor'][ 'no_name_' . $lang ] = [
365 - "^{$lang_slug}{$instructor_slug}/?$" =>
366 - 'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&paged=$matches[2]',
367 - ];
368 - }*/
369 -
370 - //$this->add_rewrite_rules_profile( $rules, $lang_slug, $lang_get_option, $lang );
371 -
372 - return apply_filters( 'learn-press/polylang-rewrite-url', $rules );
373 - }
374 -
375 - /**
376 - * Add rewrite rules for profile page.
377 - *
378 - * @param $rules
379 - * @param $lang_slug
380 - * @param $lang_get_option
381 - * @param $lang
382 - *
383 - * @return void
384 - */
385 - public function add_rewrite_rules_profile( &$rules, $lang_slug, $lang_get_option, $lang ) {
386 - $profile_page_id_lang = LP_Settings::get_option( 'profile_page_id' . $lang_get_option, false );
387 - if ( $profile_page_id_lang ) {
388 - // Rule view profile of user (self or another)
389 - $page_profile_slug = get_post_field( 'post_name', $profile_page_id_lang );
390 - $rules['profile'][ 'user_' . $lang ] = [
391 - "^{$lang_slug}{$page_profile_slug}/([^/]*)/?$" =>
392 - "index.php?page_id={$profile_page_id_lang}&user=" . '$matches[1]',
393 - ];
394 -
395 - // Rule view profile of user (self or another) with tab
396 - $tabs = LP_Profile::get_tabs_arr();
397 - if ( $tabs ) {
398 - /**
399 - * @var LP_Profile_Tab $args
400 - */
401 - foreach ( $tabs as $tab_key => $args ) {
402 - $tab_slug = $args['slug'] ?? $tab_key;
403 - $rules['profile'][ $tab_key . '_' . $lang ] = [
404 - "^{$lang_slug}{$page_profile_slug}/([^/]*)/({$tab_slug})/?([0-9]*)/?$" =>
405 - 'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',
406 - ];
407 -
408 - if ( ! empty( $args['sections'] ) ) {
409 - foreach ( $args['sections'] as $section_key => $section ) {
410 - $section_slug = $section['slug'] ?? $section_key;
411 - $rules['profile'][ $section_key . '_' . $lang ] = [
412 - "^{$lang_slug}{$page_profile_slug}/([^/]*)/({$tab_slug})/({$section_slug})/?([0-9]*)?$" =>
413 - 'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',
414 - ];
415 - }
416 - }
417 - }
418 - }
419 - }
420 -
421 - //apply_filters( 'learn-press/rewrite-rules/profile', $rules['profile'], $profile_id );
422 - }
423 -
424 - /**
425 - * Get polylang settings
426 - *
427 - * @return array
428 - * @version 1.0.1
429 - * @since 4.2.3.3
430 - */
431 - public function get_pll_options(): array {
432 - // Not use PLL()->options because it is incorrect.
433 - return maybe_unserialize( get_option( 'polylang' ) );
434 - }
435 -}
1 +<?php
2 +
3 +/**
4 + * @class LP_Polylang
5 + *
6 + * @since 4.1.5
7 + * @version 1.0.1
8 + * @author tungnx
9 + */
10 +
11 +use LearnPress\Filters\UserItemsFilter;
12 +use LearnPress\Helpers\Singleton;
13 +
14 +if ( ! defined( 'ABSPATH' ) ) {
15 + exit; // Exit if accesDsed directly
16 +}
17 +
18 +class LP_Polylang {
19 + use Singleton;
20 +
21 + public function init() {
22 + $this->hooks();
23 + }
24 +
25 + public function hooks() {
26 + add_filter( 'learn-press/general-settings-fields', [ $this, 'general_settings_fields' ], 10, 2 );
27 + add_filter( 'lp/settings/permalinks', [ $this, 'permalink_settings_fields' ], 10, 2 );
28 + add_filter( 'learn_press_get_page_id', [ $this, 'get_page_id' ], 10, 2 );
29 + add_filter( 'lp/template/archive-course/skeleton/args', [ $this, 'lang_arg_query_course' ] );
30 + add_filter( 'lp/profile/args/user_courses_attend', [ $this, 'lang_arg_query_course' ] );
31 + add_filter( 'lp/profile/args/user_courses_created', [ $this, 'lang_arg_query_course' ] );
32 + add_filter( 'lp/profile/args/user_courses_statistic', [ $this, 'lang_arg_query_course' ] );
33 + add_filter( 'learnpress/rest/frontend/profile/course_tab/query', [ $this, 'args_query_user_courses' ], 10, 2 );
34 + add_action( 'learn-press/courses/handle_params_for_query_courses', [ $this, 'filter_query_courses' ], 10, 2 );
35 + add_filter( 'lp/user/course/query/filter', [ $this, 'filter_query_user_courses' ], 10 );
36 + add_filter( 'pll_the_language_link', [ $this, 'get_link_switcher' ], 10, 3 );
37 + add_filter( 'learn-press/rewrite/rules', [ $this, 'pll_rewrite_rules' ] );
38 + }
39 +
40 + /**
41 + * Get page_id config on LP Settings
42 + *
43 + * @param int $page_id
44 + * @param string $name
45 + *
46 + * @return int
47 + */
48 + public function get_page_id( int $page_id = 0, string $name = '' ): int {
49 + if ( ! is_callable( 'pll_default_language' ) ) {
50 + return $page_id;
51 + }
52 +
53 + $lang_default = pll_default_language();
54 + $lang_current = pll_current_language();
55 + if ( ! $lang_current ) {
56 + $lang_current = LP_Request::get_param( 'pll-current-lang' ); // Param this send via lp_archive_skeleton_get_args
57 + }
58 +
59 + if ( $lang_current && $lang_current != $lang_default ) {
60 + $page_id_trans = absint( LP_Settings::get_option( "{$name}_page_id_{$lang_current}" ) );
61 + if ( $page_id_trans ) {
62 + $page_id = $page_id_trans;
63 + }
64 + }
65 +
66 + return $page_id;
67 + }
68 +
69 + /**
70 + * @param array $args
71 + *
72 + * @return array
73 + */
74 + public function lang_arg_query_course( array $args ): array {
75 + if ( ! function_exists( 'pll_current_language' ) ) {
76 + return $args;
77 + }
78 +
79 + $args['pll-current-lang'] = pll_current_language();
80 +
81 + return $args;
82 + }
83 +
84 + /**
85 + * Query get course by current language
86 + *
87 + * @param LP_Course_Filter $filter
88 + * @param array $param
89 + *
90 + * @return LP_Course_Filter
91 + * @since 4.1.4
92 + * @version 1.0.2
93 + */
94 + public function filter_query_courses( LP_Course_Filter $filter, array $param ): LP_Course_Filter {
95 + $pll_current_lang = $param['pll-current-lang'] ?? '';
96 + if ( empty( $pll_current_lang ) ) {
97 + $pll_current_lang = LP_Request::get_param( 'pll-current-lang' );
98 +
99 + if ( empty( $pll_current_lang ) ) {
100 + return $filter;
101 + }
102 + }
103 +
104 + $lp_db = LP_Database::getInstance();
105 + $filter->join[] = "INNER JOIN $lp_db->tb_term_relationships AS r_term_pll ON p.ID = r_term_pll.object_id";
106 + $filter->join[] = "INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id";
107 + $filter->join[] = "INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id";
108 + $filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );
109 +
110 + return $filter;
111 + }
112 +
113 + /**
114 + * Profile filter query get user course by current language
115 + *
116 + * @param LP_User_Items_Filter|UserItemsFilter $filter
117 + *
118 + * @return LP_User_Items_Filter
119 + */
120 + public function filter_query_user_courses( $filter ): LP_User_Items_Filter {
121 + $pll_current_lang = pll_current_language(); // For query load page
122 + if ( ! $pll_current_lang ) { // For query call API
123 + $pll_current_lang = LP_Request::get_param( 'pll-current-lang' );
124 + }
125 +
126 + if ( empty( $pll_current_lang ) ) {
127 + return $filter;
128 + }
129 +
130 + if ( $pll_current_lang == pll_default_language() ) {
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_pll ON ui.item_id = r_term_pll.object_id";
137 + $filter->join[] = "INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id";
138 + $filter->join[] = "INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id";
139 + $filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );
140 +
141 + return $filter;
142 + }
143 +
144 + /**
145 + * Profile filter query get course by current language
146 + *
147 + * @param LP_Course_Filter $filter
148 + * @param array $args
149 + *
150 + * @return LP_Course_Filter
151 + */
152 + /*public function profile_filter_query_courses( LP_Course_Filter $filter, array $args ): LP_Course_Filter {
153 + $pll_current_lang = $args['pll-current-lang'] ?? '';
154 +
155 + if ( empty( $pll_current_lang ) ) {
156 + return $filter;
157 + }
158 +
159 + $lp_db = LP_Database::getInstance();
160 +
161 + $filter->join[] = "INNER JOIN $lp_db->tb_term_relationships AS r_term ON p.ID = r_term.object_id";
162 + $filter->join[] = "INNER JOIN $lp_db->tb_terms AS term ON r_term.term_taxonomy_id = term.term_id";
163 + $filter->where[] = $lp_db->wpdb->prepare( 'AND term.slug = %s', $pll_current_lang );
164 +
165 + return $filter;
166 + }*/
167 +
168 + /**
169 + * Args get course by current language
170 + *
171 + * @param array $args
172 + * @param WP_REST_Request $request
173 + *
174 + * @return array
175 + */
176 + public function args_query_user_courses( array $args, WP_REST_Request $request ): array {
177 + $pll_current_lang = LP_Helper::sanitize_params_submitted( $request['pll-current-lang'] ?? '' );
178 +
179 + if ( empty( $pll_current_lang ) ) {
180 + return $args;
181 + }
182 +
183 + $args['pll-current-lang'] = $pll_current_lang;
184 +
185 + return $args;
186 + }
187 +
188 + /**
189 + * Create new fields of languages not default
190 + */
191 + public function general_settings_fields( array $fields ): array {
192 + $default_lang = pll_default_language();
193 + $current_lang = pll_current_language();
194 +
195 + $field_arr = [
196 + 'courses_page_id',
197 + 'profile_page_id',
198 + 'checkout_page_id',
199 + 'become_a_teacher_page_id',
200 + 'term_conditions_page_id',
201 + 'instructors_page_id',
202 + 'single_instructor_page_id',
203 + ];
204 + $field_arr = apply_filters( 'lp_pll/settings/name-fields', $field_arr );
205 +
206 + if ( $default_lang != $current_lang ) {
207 + // Set name field with lang
208 + foreach ( $fields as $k => $field ) {
209 + if ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {
210 + $fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;
211 + }
212 + }
213 + }
214 +
215 + return $fields;
216 + }
217 +
218 + /**
219 + * Create new fields of languages not default
220 + *
221 + * @param array $fields
222 + *
223 + * @return array
224 + * @version 1.0.0
225 + * @since 4.2.3.3
226 + */
227 + public function permalink_settings_fields( array $fields ): array {
228 + $default_lang = pll_default_language();
229 + $current_lang = pll_current_language();
230 +
231 + $field_arr = [
232 + //'lesson_slug',
233 + ];
234 + $field_arr = apply_filters( 'lp_pll/settings/permalink/name-fields', $field_arr );
235 +
236 + if ( $default_lang != $current_lang ) {
237 + // Set name field with lang
238 + foreach ( $fields as $k => $field ) {
239 + if ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {
240 + $fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;
241 + }
242 + }
243 + }
244 +
245 + return $fields;
246 + }
247 +
248 + /**
249 + * Handle link swither
250 + *
251 + * @param $url
252 + * @param $slug
253 + * @param $locale
254 + *
255 + * @return false|mixed|string
256 + * @version 1.0.1
257 + * @since 4.1.5
258 + */
259 + public function get_link_switcher( $url, $slug, $locale ) {
260 + $slug_lang = '';
261 + if ( $slug !== pll_default_language() ) {
262 + $slug_lang = '_' . $slug;
263 + }
264 +
265 + $arr_page = array( LP_PAGE_COURSES, LP_PAGE_PROFILE );
266 + if ( in_array( LP_Page_Controller::page_current(), $arr_page )
267 + && ! learn_press_is_course_tax()
268 + && ! learn_press_is_course_tag() ) {
269 + $name_page = str_replace( 'lp_page_', '', LP_Page_Controller::page_current() );
270 + $url = get_permalink( LP_Settings::get_option( $name_page . '_page_id' . $slug_lang ) );
271 + }
272 +
273 + return $url;
274 + }
275 +
276 + /**
277 + * Rewrite url with polylang
278 + *
279 + * @param array $rules
280 + *
281 + * @return array
282 + * @since 4.2.3.3
283 + * @version 1.0.1
284 + * @uses LP_Query::add_rewrite_rules
285 + */
286 + public function pll_rewrite_rules( array $rules ): array {
287 + if ( ! is_callable( 'pll_default_language' ) || ! is_callable( 'pll_current_language' ) ) {
288 + return $rules;
289 + }
290 +
291 + $rules_old = $rules;
292 +
293 + $lang_default = pll_default_language();
294 + $lang_current = pll_current_language();
295 + $pll_options = $this->get_pll_options();
296 + $all_lang = pll_languages_list();
297 + $hide_default = $pll_options['hide_default'] ?? 1;
298 + $force_lang = $pll_options['force_lang'] ?? 1;
299 + $force_rewrite = $pll_options['rewrite'] ?? 1;
300 +
301 + $lang_slug = '';
302 + $lang = $lang_current;
303 + if ( 1 == $force_lang ) { // Pll add slug language to link
304 + if ( $force_rewrite == 0 ) {
305 + $lang_slug .= 'language/';
306 + }
307 +
308 + $lang_slug .= $lang . '/';
309 + } else { // Pll add slug language to link
310 + $lang_slug .= $lang . '/';
311 + }
312 +
313 + $lang_get_option = '';
314 + if ( $lang != $lang_default ) {
315 + $lang_get_option = '_' . $lang;
316 + }
317 + if ( $hide_default && $lang_current == $lang_default ) {
318 + return $rules;
319 + }
320 +
321 + // Add language to rewrite url exits
322 + foreach ( $rules_old as $key_group => $group_rule ) {
323 + foreach ( $group_rule as $key => $rule ) {
324 + $new_key = array_key_first( $rule );
325 + $value = $rule[ $new_key ];
326 + $new_key = substr_replace( $new_key, '', 0, 1 );
327 + $new_key = '^' . $lang_slug . $new_key;
328 + $rules[ $key_group ][ $key ] = [ $new_key => $value ];
329 + }
330 + }
331 +
332 + // Rewrite url for courses
333 + // Not use learn_press_get_page_id( 'courses' ) because it $lang_current = false with $pll_options['force_lang'] = 0
334 + /*$courses_page_id_lang = LP_Settings::get_option( 'courses_page_id' . $lang_get_option, false );
335 + if ( $courses_page_id_lang ) {
336 + $courses_slug = get_post_field( 'post_name', $courses_page_id_lang );
337 +
338 + $rules['courses'][ 'pll-archive-' . $lang ] = [
339 + "^{$lang_slug}{$courses_slug}/?(?:page/)?([^/][0-9]*)?/?$" =>
340 + 'index.php?paged=$matches[1]&post_type=' . LP_COURSE_CPT,
341 + ];
342 + }*/
343 +
344 + // Rewrite url for instructors
345 + /*$instructors_page_id_lang = LP_Settings::get_option( 'instructors_page_id' . $lang_get_option, false );
346 + if ( $instructors_page_id_lang ) {
347 + $instructors_slug = get_post_field( 'post_name', $instructors_page_id_lang );
348 +
349 + $rules['instructors'][ 'pll-archive-' . $lang ] = [
350 + "^{$lang_slug}{$instructors_slug}/?(?:page/)?([^/][0-9]*)?/?$" =>
351 + 'index.php?page_id=' . $instructors_page_id_lang,
352 + ];
353 + }*/
354 +
355 + // Rewrite url for instructor
356 + /*$single_instructor_page_id = LP_Settings::get_option( 'single_instructor_page_id' . $lang_get_option, false );
357 + if ( $single_instructor_page_id ) {
358 + $instructor_slug = get_post_field( 'post_name', $single_instructor_page_id );
359 +
360 + $rules['instructor'][ 'has_name_' . $lang ] = [
361 + "^{$lang_slug}{$instructor_slug}/([^/]+)/?(?:page/)?([^/][0-9]*)?/?$" =>
362 + 'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&instructor_name=$matches[1]&paged=$matches[2]',
363 + ];
364 + $rules['instructor'][ 'no_name_' . $lang ] = [
365 + "^{$lang_slug}{$instructor_slug}/?$" =>
366 + 'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&paged=$matches[2]',
367 + ];
368 + }*/
369 +
370 + //$this->add_rewrite_rules_profile( $rules, $lang_slug, $lang_get_option, $lang );
371 +
372 + return apply_filters( 'learn-press/polylang-rewrite-url', $rules );
373 + }
374 +
375 + /**
376 + * Add rewrite rules for profile page.
377 + *
378 + * @param $rules
379 + * @param $lang_slug
380 + * @param $lang_get_option
381 + * @param $lang
382 + *
383 + * @return void
384 + */
385 + public function add_rewrite_rules_profile( &$rules, $lang_slug, $lang_get_option, $lang ) {
386 + $profile_page_id_lang = LP_Settings::get_option( 'profile_page_id' . $lang_get_option, false );
387 + if ( $profile_page_id_lang ) {
388 + // Rule view profile of user (self or another)
389 + $page_profile_slug = get_post_field( 'post_name', $profile_page_id_lang );
390 + $rules['profile'][ 'user_' . $lang ] = [
391 + "^{$lang_slug}{$page_profile_slug}/([^/]*)/?$" =>
392 + "index.php?page_id={$profile_page_id_lang}&user=" . '$matches[1]',
393 + ];
394 +
395 + // Rule view profile of user (self or another) with tab
396 + $tabs = LP_Profile::get_tabs_arr();
397 + if ( $tabs ) {
398 + /**
399 + * @var LP_Profile_Tab $args
400 + */
401 + foreach ( $tabs as $tab_key => $args ) {
402 + $tab_slug = $args['slug'] ?? $tab_key;
403 + $rules['profile'][ $tab_key . '_' . $lang ] = [
404 + "^{$lang_slug}{$page_profile_slug}/([^/]*)/({$tab_slug})/?([0-9]*)/?$" =>
405 + 'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',
406 + ];
407 +
408 + if ( ! empty( $args['sections'] ) ) {
409 + foreach ( $args['sections'] as $section_key => $section ) {
410 + $section_slug = $section['slug'] ?? $section_key;
411 + $rules['profile'][ $section_key . '_' . $lang ] = [
412 + "^{$lang_slug}{$page_profile_slug}/([^/]*)/({$tab_slug})/({$section_slug})/?([0-9]*)?$" =>
413 + 'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',
414 + ];
415 + }
416 + }
417 + }
418 + }
419 + }
420 +
421 + //apply_filters( 'learn-press/rewrite-rules/profile', $rules['profile'], $profile_id );
422 + }
423 +
424 + /**
425 + * Get polylang settings
426 + *
427 + * @return array
428 + * @version 1.0.1
429 + * @since 4.2.3.3
430 + */
431 + public function get_pll_options(): array {
432 + // Not use PLL()->options because it is incorrect.
433 + return maybe_unserialize( get_option( 'polylang' ) );
434 + }
435 +}