106 lines
2.2 KiB
PHP
106 lines
2.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @package wpml-core
|
|
* @subpackage wpml-user-language
|
|
*/
|
|
class WPML_User_Language_Switcher {
|
|
/**
|
|
* @var WPML_Language_Code
|
|
*/
|
|
private $WPML_Language_Code;
|
|
|
|
/**
|
|
* WPML_User_Language_Switcher constructor.
|
|
*
|
|
* @param WPML_Language_Code $WPML_Language_Code
|
|
*/
|
|
public function __construct( &$WPML_Language_Code ) {
|
|
$this->WPML_Language_Code = &$WPML_Language_Code;
|
|
}
|
|
|
|
/**
|
|
* @param string $email
|
|
*
|
|
* @return false|mixed|string|null
|
|
*/
|
|
private function to_be_selected( $email ) {
|
|
$language = $this->WPML_Language_Code->get_from_user_meta( $email );
|
|
if ( ! $language ) {
|
|
$language = isset( $_POST['language'] ) ? $_POST['language'] : null;
|
|
}
|
|
|
|
return $language;
|
|
}
|
|
|
|
/**
|
|
* @param string $email
|
|
* @param string $language
|
|
*
|
|
* @return bool|int
|
|
*/
|
|
public function save_language_user_meta( $email, $language ) {
|
|
$user = get_user_by( 'email', $email );
|
|
$updated = false;
|
|
if ( $user && isset( $user->ID ) ) {
|
|
$language = $this->WPML_Language_Code->sanitize( $language );
|
|
$updated = update_user_meta( $user->ID, 'icl_admin_language', $language );
|
|
}
|
|
|
|
return $updated;
|
|
}
|
|
|
|
/**
|
|
* @param string $language
|
|
*
|
|
* @return false|string|null
|
|
*/
|
|
public function sanitize( $language ) {
|
|
return $this->WPML_Language_Code->sanitize( $language );
|
|
}
|
|
|
|
/**
|
|
* @param string $email
|
|
*
|
|
* @return array[]
|
|
*/
|
|
public function get_model( $email ) {
|
|
|
|
$active_languages = apply_filters( 'wpml_active_languages', null, null );
|
|
|
|
$to_be_selected = $this->to_be_selected( $email );
|
|
|
|
$options = array();
|
|
|
|
$options[] = array(
|
|
'label' => __( 'Choose language:', 'sitepress' ),
|
|
'value' => 0,
|
|
'selected' => false,
|
|
|
|
);
|
|
|
|
foreach ( $active_languages as $code => $lang ) {
|
|
$selected = ( $to_be_selected === $code );
|
|
|
|
if ( array_key_exists( 'translated_name', $lang ) ) {
|
|
$name = $lang['translated_name'];
|
|
} elseif ( array_key_exists( 'native_name', $lang ) ) {
|
|
$name = $lang['native_name'];
|
|
} else {
|
|
$name = $lang['display_name'];
|
|
}
|
|
|
|
$options[] = array(
|
|
'label' => $name,
|
|
'value' => $code,
|
|
'selected' => $selected,
|
|
|
|
);
|
|
}
|
|
|
|
return array(
|
|
'options' => $options,
|
|
);
|
|
}
|
|
}
|