3 class WPML_URL_Converter_Domain_Strategy extends WPML_URL_Converter_Abstract_Strategy {
5 /** @var string[] $domains */
6 private $domains = array();
9 * @param array $domains
10 * @param string $default_language
11 * @param array $active_languages
13 public function __construct(
18 parent::__construct( $default_language, $active_languages );
20 $this->domains = $this->strip_protocol( array_map( 'trailingslashit', $domains ) );
21 if ( isset( $this->domains[ $default_language ] ) ) {
22 unset( $this->domains[ $default_language ] );
26 public function get_lang_from_url_string( $url ) {
27 $url = $this->strip_protocol( $url );
29 if ( strpos( $url, '?' ) ) {
30 $parts = explode( '?', $url );
34 foreach ( $this->domains as $code => $domain ) {
35 if ( strpos( trailingslashit( $url ), $domain ) === 0 ) {
43 public function convert_url_string( $source_url, $lang ) {
44 $original_source_url = untrailingslashit( $source_url );
45 if ( is_admin() && $this->get_url_helper()->is_url_admin( $original_source_url ) ) {
46 return $original_source_url;
49 $base_url = isset( $this->domains[ $lang ] ) ? $this->domains[ $lang ] : $this->get_url_helper()->get_abs_home();
50 $base_url = trailingslashit( $base_url );
51 $base_url = preg_replace(
52 array( '#^(http(?:s?))://#', '#(\w/).+$#' ),
57 $original_source_url = strpos( $original_source_url, '?' ) !== false
58 ? $original_source_url
59 : trailingslashit( $original_source_url );
61 $converted_url = preg_replace(
62 '#^(https?://)?([^?\/]*)\/?#',
67 return $this->slash_helper->maybe_user_trailingslashit( $converted_url, 'untrailingslashit' );
72 * @param string $langauge
76 public function get_home_url_relative( $url, $language ) {
81 * @param array|string $url
83 * @return array|string
85 private function strip_protocol( $url ) {
86 return preg_replace( '#^(http(?:s?))://#', '', $url );