69 lines
2.1 KiB
PHP
69 lines
2.1 KiB
PHP
<?php
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
class HTBD_Settings {
|
|
public static function get() {
|
|
$defaults = array(
|
|
'source_language' => 'zh',
|
|
'target_languages' => array( 'en' ),
|
|
'routing_mode' => array( 'subdirectory' ),
|
|
'domain_bindings' => array(),
|
|
'fallback_language' => 'zh',
|
|
'baidu_app_id' => '',
|
|
'baidu_secret_key' => '',
|
|
'log_requests' => false,
|
|
);
|
|
|
|
$stored_settings = get_option( 'htbd_settings', false );
|
|
if ( false === $stored_settings ) {
|
|
$legacy_settings = get_option( 'btranslate_settings', false );
|
|
if ( false !== $legacy_settings ) {
|
|
$stored_settings = $legacy_settings;
|
|
add_option( 'htbd_settings', $legacy_settings, '', false );
|
|
}
|
|
}
|
|
|
|
$settings = wp_parse_args( (array) $stored_settings, $defaults );
|
|
$settings['routing_mode'] = self::routing_modes( $settings['routing_mode'] );
|
|
|
|
return $settings;
|
|
}
|
|
|
|
public static function routing_modes( $routing_mode = null ) {
|
|
if ( null === $routing_mode ) {
|
|
$routing_mode = self::get()['routing_mode'];
|
|
}
|
|
|
|
return array_values( array_intersect( (array) $routing_mode, array( 'subdirectory', 'domain' ) ) );
|
|
}
|
|
|
|
public static function is_routing_mode_enabled( $mode ) {
|
|
return in_array( $mode, self::routing_modes(), true );
|
|
}
|
|
|
|
public static function target_languages() {
|
|
return array_values( array_filter( array_map( 'sanitize_key', (array) self::get()['target_languages'] ) ) );
|
|
}
|
|
|
|
public static function subdirectory_languages() {
|
|
return self::target_languages();
|
|
}
|
|
|
|
public static function is_supported_language( $language ) {
|
|
$settings = self::get();
|
|
$languages = array_merge( array( sanitize_key( $settings['source_language'] ) ), self::target_languages() );
|
|
|
|
return in_array( sanitize_key( $language ), $languages, true );
|
|
}
|
|
|
|
public static function normalize_domain( $domain ) {
|
|
$domain = strtolower( trim( (string) $domain ) );
|
|
$domain = preg_replace( '#^https?://#', '', $domain );
|
|
$domain = explode( '/', $domain, 2 )[0];
|
|
$domain = preg_replace( '/:\d+$/', '', $domain );
|
|
|
|
return preg_match( '/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/', $domain ) ? $domain : '';
|
|
}
|
|
}
|