class-wpml-user-language-switcher-hooks.php
2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
use WPML\API\Sanitize;
/**
* @package wpml-core
* @subpackage wpml-user-language
*/
class WPML_User_Language_Switcher_Hooks {
private $nonce_name = 'wpml_user_language_switcher';
/**
* @var WPML_User_Language_Switcher_UI
*/
private $user_language_switcher_ui;
/**
* @var WPML_User_Language_Switcher
*/
private $user_language_switcher;
/**
* @param WPML_User_Language_Switcher $WPML_User_Language_Switcher
* @param WPML_User_Language_Switcher_UI $WPML_User_Language_Switcher_UI
*/
public function __construct( &$WPML_User_Language_Switcher, &$WPML_User_Language_Switcher_UI ) {
$this->user_language_switcher = &$WPML_User_Language_Switcher;
$this->user_language_switcher_ui = &$WPML_User_Language_Switcher_UI;
add_action( 'wpml_user_language_switcher', array( $this, 'language_switcher_action' ), 10, 1 );
add_action( 'wp_ajax_wpml_user_language_switcher_form_ajax', array( $this, 'language_switcher_form_ajax_callback' ) );
add_action( 'wp_ajax_nopriv_wpml_user_language_switcher_form_ajax', array( $this, 'language_switcher_form_ajax_callback' ) );
}
public function language_switcher_action( $args ) {
$defaults = array(
'mail' => null,
'auto_refresh_page' => 0,
);
$args = array_merge( $defaults, $args );
$model = $this->user_language_switcher->get_model( $args['mail'] );
echo $this->user_language_switcher_ui->language_switcher( $args, $model );
}
public function language_switcher_form_ajax_callback() {
$this->language_switcher_form_ajax();
}
public function language_switcher_form_ajax() {
$language = Sanitize::stringProp( 'language', $_POST );
$language = $this->user_language_switcher->sanitize( $language );
$email = filter_input( INPUT_POST, 'mail', FILTER_SANITIZE_EMAIL );
$valid = $this->is_valid_data( $_POST['nonce'], $email );
if ( ! $valid || ! $language ) {
wp_send_json_error();
}
$saved_by_third_party = $updated = apply_filters( 'wpml_user_language_switcher_save', false, $email, $language );
if ( ! $saved_by_third_party ) {
$updated = $this->user_language_switcher->save_language_user_meta( $email, $language );
}
wp_send_json_success( $updated );
}
private function is_valid_data( $nonce, $email ) {
return ( wp_verify_nonce( $nonce, $this->nonce_name ) && is_email( $email ) );
}
}