Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/user-language/class-wpml-user-language-switcher.php
2023-09-12 21:41:04 +02:00

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,
);
}
}