3 class WPML_URL_Converter_Factory {
12 private $default_lang_code;
17 private $active_language_codes;
20 * @var WPML_Resolve_Object_Url_Helper_Factory
22 private $object_url_helper_factory;
28 * @param array $settings
29 * @param string $default_lang_code
30 * @param array $active_language_codes
32 public function __construct( $settings, $default_lang_code, $active_language_codes ) {
33 $this->settings = $settings;
34 $this->default_lang_code = $default_lang_code;
35 $this->active_language_codes = $active_language_codes;
39 * @return WPML_Resolve_Object_Url_Helper_Factory
41 public function get_object_url_helper_factory() {
42 if ( ! $this->object_url_helper_factory ) {
43 $this->object_url_helper_factory = new WPML_Resolve_Object_Url_Helper_Factory();
46 return $this->object_url_helper_factory;
50 * @param WPML_Resolve_Object_Url_Helper_Factory $factory
52 public function set_object_url_helper_factory( WPML_Resolve_Object_Url_Helper_Factory $factory ) {
53 $this->object_url_helper_factory = $factory;
57 * @param int $url_type
59 * @return WPML_URL_Converter
61 public function create( $url_type ) {
62 switch ( $url_type ) {
64 $wpml_url_converter = $this->create_subdir_converter();
67 $wpml_url_converter = $this->create_domain_converter();
70 $wpml_url_converter = $this->create_parameter_converter();
73 $home_url = new WPML_URL_Converter_Url_Helper();
74 $wpml_url_converter->set_url_helper( $home_url );
76 return $wpml_url_converter;
80 * @return WPML_URL_Cached_Converter
82 private function create_subdir_converter() {
84 if ( ! isset( $this->settings['urls'] ) ) {
85 $this->settings['urls'] = array();
87 if ( isset( $this->settings['urls']['directory_for_default_language'] ) ) {
88 $dir_default = $this->settings['urls']['directory_for_default_language'];
92 $strategy = new WPML_URL_Converter_Subdir_Strategy( $dir_default, $this->default_lang_code, $this->active_language_codes, $this->settings['urls'] );
94 return new WPML_URL_Cached_Converter(
96 $this->get_object_url_helper_factory()->create(),
97 $this->default_lang_code,
98 $this->active_language_codes
103 * @return WPML_URL_Cached_Converter
105 private function create_domain_converter() {
106 $domains = isset( $this->settings['language_domains'] ) ? $this->settings['language_domains'] : array();
107 $wpml_wp_api = new WPML_WP_API();
108 $strategy = new WPML_URL_Converter_Domain_Strategy( $domains, $this->default_lang_code, $this->active_language_codes );
109 $wpml_url_converter = new WPML_URL_Cached_Converter(
111 $this->get_object_url_helper_factory()->create(),
112 $this->default_lang_code,
113 $this->active_language_codes
116 $wpml_fix_url_domain = new WPML_Lang_Domain_Filters(
119 new WPML_Debug_BackTrace( null, 10 )
121 $wpml_fix_url_domain->add_hooks();
123 $xdomain_data_parser = new WPML_XDomain_Data_Parser( $this->settings, new WPML_Data_Encryptor() );
124 $xdomain_data_parser->init_hooks();
126 return $wpml_url_converter;
130 * @return WPML_URL_Cached_Converter
132 private function create_parameter_converter() {
133 $strategy = new WPML_URL_Converter_Parameter_Strategy( $this->default_lang_code, $this->active_language_codes );
134 $wpml_url_converter = new WPML_URL_Cached_Converter(
136 $this->get_object_url_helper_factory()->create(),
137 $this->default_lang_code,
138 $this->active_language_codes
141 $filters = new WPML_Lang_Parameter_Filters();
142 $filters->add_hooks();
144 return $wpml_url_converter;